在DataWorks中通过函数计算节点实现动态为PDF添加水印

本文为您介绍如何在DataWorks中通过函数计算节点调用函数计算服务,实现周期性对OSS中的增量PDF文件添加水印。

背景介绍

DataWorks当前已经支持通过函数计算节点调用函数计算服务,在函数计算服务中可以自定义各种功能,最终可通过DataWorks进行调用。

前提条件

  • 已开通DataWorks服务,详情请参见开通DataWorks服务

  • 已开通函数计算服务,详情请参见快速创建函数

  • 已开通OSS,详情请参见开通OSS服务。创建Bucket并已向其上传需要添加水印的pdf文件。本文示例:在Bucketbucket-test222下新建目录2023-08-15,并上传example.pdf到此目录下。

使用限制

  • 功能限制

    DataWorks目前仅支持调用事件函数,不支持调用HTTP函数。因此,若要在DataWorks周期性调度处理事件函数,则在创建函数时,需要创建用于处理事件请求的事件函数。更多函数类型介绍,详情请参见函数类型

  • 地域限制

    DataWorks目前仅支持华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华南1(深圳)、西南1(成都)、中国香港、新加坡、马来西亚(吉隆坡)、印度尼西亚(雅加达)、德国(法兰克福)、英国(伦敦)、美国(硅谷)、美国(弗吉尼亚)地域的工作空间使用函数计算功能。

步骤一:创建函数计算应用

  1. 登录函数计算控制台,在左侧导航栏,单击应用

  2. 在应用页面,单击创建应用,然后选择通过模板创建应用,在“搜索应用模板”输入框中搜索“pdf文件加水印”,在下方模板区域,找到pdf文件加水印模板,移动光标到该卡片中,然后单击立即创建

    image

    说明

    “pdf文件加水印”应用的源代码可参见GitHub。此应用实现的逻辑为:将OSS中的PDF文件按照指定的内容添加水印并写回相同的OSS路径下。

  3. 设置创建应用的参数。

    参数

    描述

    部署类型

    本文选择直接部署

    应用名称

    默认已自动生成一个符合要求的名称,可根据实际情况修改。

    角色名称

    默认已选择AliyunFCServerlessDevsRole,其对应的策略可根据实际情况进行设置。

    • 通过Serverless应用中心部署应用时,可能会访问其他云服务,例如,部署函数计算的服务和函数资源,创建或更新VPC、NAS、SLS相关资源等,此时需要授予函数计算相应的访问权限。首先为应用或环境关联一个RAM服务角色,然后将目标授信服务设置为函数计算,应用中心使用AssumeRole - 获取扮演角色的临时身份凭证方式访问用户的云服务。

    • 为了简化授权操作步骤,Serverless应用中心提供了系统默认角色,即AliyunFCServerlessDevsRole。该角色包含了应用中心需要访问的部分云资源权限。您可以登录RAM角色管理控制台,查看AliyunFCServerlessDevsRole角色的权限内容。

    地域

    创建应用所在的地域,后面选择OSS 存储桶名时仅可选择此地域下的OSS Bucket。

    函数名

    默认已自动生成一个符合要求的名称,可根据实际情况修改。

    时区

    默认已自动选择当前地域下所属时区,可根据实际情况修改。

    OSS 存储桶名

    仅可选择和“创建应用所在的地域”同地域下的Bucket。

    RAM角色ARN

    默认已自动选择AliyunFcDefaultRole,可根据实际情况修改。

    为了简化您的授权操作,函数计算为您提供了一个系统默认的服务角色,即AliyunFcDefaultRole。该角色内包含了函数计算需要访问的部分云资源权限。关于如何创建默认角色AliyunFcDefaultRole和绑定该角色的操作步骤,请参见步骤一:开通函数计算服务

    说明

    如果您在创建应用的过程中,提示您当前选择的应用还需要一些额外的权限,请单击前往授权

  4. 单击创建并部署默认环境。详情页上显示部署成功时,表示部署完成。

    image.png

  5. 单击应用页面的应用名称,进入应用详情。

    image

  6. 找到默认环境单击环境详情下的函数名称,进入函数详情。

    image

  7. 单击测试后,输入参数,进行函数测试。

    图片编辑

    • 事件名称:输入事件名称。

    • 事件内容:输入JSON格式内容。本文示例如下:

      重要

      如果直接复制以下JSON示例内容,请务必将//及其后面的注释内容删除,否则它无法通过JSON格式校验。

      // 以下配置为对pdf文件(2023-08-15/example.pdf)添加水印文字(DataWorks),使用30号字体Helvetica,具体参数含义参见各个参数后面的注释
      {
          "pdf_file": "2023-08-15/example.pdf",  // PDF文件在OSS Bucket中的路径
          "mark_text": "DataWorks",    // 水印文字,如果给PDF加水印,该参数必填
          "pagesize": [595.275590551181, 841.8897637795275], // 可选参数,默认是A4大小,(21*cm, 29.7*cm), 其中1cm=28.346456692913385
          "font": "Helvetica",     // 字体,可选参数,默认为Helvetica, 中文字体可选择为zenhei或microhei
          "font_size": 20,         // 字体大小,可选参数,默认为30
          "font_color": [0, 0, 0], // 字体颜色,格式为 RGB,默认为黑色
          "rotate": 30,            // 旋转角度, 可选参数,默认为0
          "opacity": 0.1,          // 透明度, 可选参数,默认为 0.1,1表示不透明
          "density": [198.4251968503937, 283.46456692913387] // 水印密度,水印文字间隔,默认是[141.73228346456693, 141.73228346456693],即(7*cm, 10*cm), 表示每个水印文字在横坐标和纵坐标的间隔分别是7cm和10cm
      }
  • 单击测试函数按钮,显示执行成功后,可在OSS中对应的源文件路径下查看添加过水印的pdf文件。本文示例会生成example-out.pdf文件。

    image.png

    查看OSS中的文件,如下:

    image.png

步骤二:在DataWorks中创建并配置函数计算节点

  1. 登录DataWorks控制台

  2. 将页面顶部导航栏的地域列表切换为步骤一:创建函数计算应用中指定的地域。

  3. 单击左侧导航栏中的数据开发与治理下的数据开发,选择工作空间后,进入DataWorks数据开发页面。

  4. 单击目标业务流程名称,在其展开的通用节点上右键单击并选择函数计算。在创建节点弹出框中输入节点名称并单击确定按钮,完成函数计算节点的创建。

  5. 设置函数计算节点参数。

    设置函数计算节点参数

    参数

    描述

    选择函数

    选择步骤设置创建应用的参数中输入的函数名称。如需新建,详情请参见管理函数

    说明

    DataWorks目前仅支持调用事件函数,不支持调用HTTP函数。因此,若要在DataWorks周期性调度处理事件函数,则在创建函数时,需要创建用于处理事件请求的事件函数。更多函数类型介绍,详情请参见函数类型

    选择版本或别名

    选择后续调用函数时所使用的服务版本或别名。默认版本为LATEST。本文选择默认版本

    • 服务版本

      函数计算提供服务级别的版本控制功能,支持您为自己的服务发布一个或多个版本。当发布版本时,函数计算会为服务生成快照,包括服务的配置、服务内的函数代码及函数配置,但不包括触发器,并自动分配一个版本号与其关联,以供后续使用。发布版本,详情请参见发布版本

    • 版本别名

      函数计算支持为服务的版本创建别名。别名用于指向特定版本,您可利用别名轻松实现发布、回滚以及灰度发布等功能。别名无法脱离服务或版本单独存在。使用别名访问服务或函数时,函数计算会将别名解析为其指向的版本,调用方无需了解别名指向的具体版本。创建别名,详情请参见创建别名

    调用方式

    本文选择同步。调用方式详情可参见同步调用异步调用

    • 同步调用:该方式事件将直接触发函数,函数计算会运行该函数并等待响应,当函数调用完成后,函数计算直接返回执行结果。

    • 异步调用:该方式函数计算会将事件请求先持久化后再立即返回响应,而不是等待请求执行完成后才返回响应。

      • 若函数存在耗时较长、资源消耗较大或易错逻辑,可采用异步调用,提升程序响应速度,更加可靠地应对突发流量。

      • 运行时长超过1小时的函数计算任务,请使用异步调用。

    变量

    调用函数的参数。本文使用事件内容中的JSON内容并进行适当修改,以实现每天增量对OSS中的PDF文件添加水印。

    // 以下配置为对pdf文件(${current_date}/example.pdf)添加水印文字
    {
        "pdf_file": "${current_date}/example.pdf",  // PDF文件在OSS Bucket中的路径
        "mark_text": "DataWorks",    // 水印文字,如果给PDF加水印,该参数必填
        "pagesize": [595.275590551181, 841.8897637795275], // 可选参数,默认是A4大小,(21*cm, 29.7*cm), 其中1cm=28.346456692913385
        "font": "Helvetica",     // 字体,可选参数,默认为Helvetica, 中文字体可选择为zenhei或microhei
        "font_size": 20,         // 字体大小,可选参数,默认为30
        "font_color": [0, 0, 0], // 字体颜色,格式为 RGB,默认为黑色
        "rotate": 30,            // 旋转角度, 可选参数,默认为0
        "opacity": 0.1,          // 透明度, 可选参数,默认为 0.1,1表示不透明
        "density": [198.4251968503937, 283.46456692913387] // 水印密度,水印文字间隔,默认是[141.73228346456693, 141.73228346456693],即(7*cm, 10*cm), 表示每个水印文字在横坐标和纵坐标的间隔分别是7cm和10cm
    }
    说明
    • pdf_file的值(${current_date}/example.pdf)中,${current_date}表示使用一个名称为current_date的变量。

    • DataWorks在调度任务时会将${current_date}替换为实际的值,变量可在调度参数中设置。例如:在2023年8月15日执行任务时,pdf_file2023-08-15/example.pdf;在2023年8月16日执行时,pdf_file2023-08-16/example.pdf

    • 业务系统只需每天在当前任务调度前按时间规则生成相应路径的PDF文件,即可每天动态为新增的PDF文件添加水印。

    • 本示例需要在运行任务之前向OSS中上传符合此路径${current_date}/example.pdf的pdf文件。例如:2023-08-15/example.pdf

  6. 可选:调试运行函数计算节点。节点配置完成后,您可单击运行图标,指定任务运行的资源组并为代码变量赋值常量进行调试运行,测试节点代码逻辑是否正确。例如:current_date=2023-08-15,代表函数计算服务会对OSS中的2023-08-15/example.pdf文件添加水印。

  7. 配置节点的周期调度属性。DataWorks提供的调度参数,可实现调度场景下代码动态传参。打开右侧的调度配置,在参数区域设置参数。本文示例添加参数current_date,参数值为$[yyyy-mm-dd],表示运行任务时的当前年月日。更多调度参数的配置,请参见调度参数支持的格式。更多调度属性,请参见任务调度属性配置概述

    image.png

步骤三:提交并发布节点

函数计算节点需要提交发布至生产环境后,才会自动调度运行。

  1. 保存并提交节点。

    单击工具栏中的保存提交图标,保存并提交节点。提交节点时,请根据提示输入变更描述,并根据需要选择是否进行代码评审及冒烟测试。

    说明
    • 您需在调度配置中设置节点的重跑属性依赖的上游节点,才可以提交节点。

    • 开启代码评审后,开发人员提交的节点代码必须通过评审人员的审核才可发布,详情请参见代码评审

    • 为保障调度节点任务执行符合预期,建议您在发布前对任务进行冒烟测试,详情请参见冒烟测试

  2. 可选:发布节点。

    如果您使用的是标准模式的工作空间,提交成功后,需单击右上方的发布,发布节点。相关介绍请参见标准模式的工作空间发布任务

后续步骤

相关文档