本文为您介绍如何在DataWorks中通过函数计算节点调用函数计算服务,实现周期性对OSS中的增量PDF文件添加水印。
背景介绍
DataWorks当前已经支持通过函数计算节点调用函数计算服务,在函数计算服务中可以自定义各种功能,最终可通过DataWorks进行调用。
前提条件
已开通DataWorks服务,详情请参见开通DataWorks服务。
已开通函数计算服务,详情请参见快速创建函数。
已开通OSS,详情请参见开通OSS服务。创建Bucket并已向其上传需要添加水印的pdf文件。本文示例:在Bucket
bucket-testxxxx
下新建目录2023-08-15,并上传example.pdf
到此目录下。
使用限制
功能限制
DataWorks目前仅支持调用事件函数,不支持调用HTTP函数。因此,若要在DataWorks周期性调度处理事件函数,则在创建函数时,需要创建用于处理事件请求的事件函数。更多函数类型介绍,详情请参见函数类型。
地域限制
DataWorks目前仅支持华东1(杭州)、华东2(上海)、华北2(北京)、华南1(深圳)、西南1(成都)、中国香港、新加坡、马来西亚(吉隆坡)、印度尼西亚(雅加达)、德国(法兰克福)、英国(伦敦)、美国(硅谷)、美国(弗吉尼亚)地域的工作空间使用函数计算功能。
步骤一:部署pdf文件加水印应用
登录函数计算控制台,在左侧导航栏,单击应用。
在应用页面,点击创建应用,选择通过模板创建应用,在文件处理页签找到pdf文件加水印,光标移至该卡片,然后单击立即创建。
说明“pdf文件加水印”应用的源代码可参见GitHub。此应用实现的逻辑为:将OSS中的PDF文件按照指定的内容添加水印并写回相同的OSS路径下。
在创建应用页面选择直接部署,选择地域和OSS 存储桶名,如果您没有特殊要求,其余配置项保持默认值即可,然后单击创建并部署默认环境。
参数
描述
部署类型
本文选择直接部署。
应用名称
默认已自动生成一个符合要求的名称,可根据实际情况修改。
角色名称
默认已选择AliyunFCServerlessDevsRole,其对应的策略可根据实际情况进行设置。
通过Serverless应用中心部署应用时,可能会访问其他云服务,例如,部署函数计算的服务和函数资源,创建或更新VPC、NAS、SLS相关资源等,此时需要授予函数计算相应的访问权限。首先为应用或环境关联一个RAM服务角色,然后将目标授信服务设置为函数计算,应用中心使用AssumeRole - 获取扮演角色的临时身份凭证方式访问用户的云服务。
为了简化授权操作步骤,Serverless应用中心提供了系统默认角色,即AliyunFCServerlessDevsRole。该角色包含了应用中心需要访问的部分云资源权限。您可以登录RAM角色管理控制台,查看AliyunFCServerlessDevsRole角色的权限内容。
地域
创建应用所在的地域,后面选择OSS 存储桶名时仅可选择此地域下的OSS Bucket。
服务名
默认已自动生成一个符合要求的名称,可根据实际情况修改(该参数仅FC3.0版本无需设置)。
函数名
默认已自动生成一个符合要求的名称,可根据实际情况修改。
时区
默认已自动选择当前地域下所属时区,可根据实际情况修改。
OSS 存储桶名
仅可选择和“创建应用所在的地域”同地域下的Bucket。
RAM角色ARN
默认已自动选择AliyunFcDefaultRole,可根据实际情况修改。
为了简化您的授权操作,函数计算为您提供了一个系统默认的服务角色,即AliyunFcDefaultRole。该角色内包含了函数计算需要访问的部分云资源权限。关于如何创建默认角色AliyunFcDefaultRole和绑定该角色的操作步骤,请参见步骤一:开通函数计算服务。
说明如果您在创建应用的过程中,提示您当前选择的应用还需要一些额外的权限,请单击前往授权。
在应用详情页,部署状态显示部署成功时,表示部署完成。
准备OSS测试数据,进入Bucket列表页面,选择创建应用填写的OSS存储桶名。
在文件列表页面,新建目录
DataworksPDF
,并上传example.pdf
到此目录下。在应用详情页,单击函数资源下的函数名称,进入函数详情页。
在函数详情页面的测试函数页签,选择配置测试事件。
在配置测试参数面板,选择创建新测试事件或编辑已有测试事件,输入参数。
事件名称:输入事件名称。
事件内容:输入JSON格式内容。本文示例如下:
重要如果直接复制以下JSON示例内容,请务必将
//
及其后面的注释内容删除,否则它无法通过JSON格式校验。// 以下配置为对pdf文件(DataworksPDF/example.pdf)添加水印文字(DataWorks),使用30号字体Helvetica,具体参数含义参见各个参数后面的注释 { "pdf_file": "DataworksPDF/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
文件。查看OSS中的文件,如下:
步骤二:在DataWorks中创建并配置函数计算节点
登录DataWorks控制台。
单击左侧导航栏中的工作空间。
将页面顶部导航栏的地域列表切换为步骤一:创建函数计算应用中指定的地域。
在右侧工作空间列表中单击目标工作空间名称,进入工作空间详情页面。若您在当前地域下无工作空间,则需创建一个工作空间,详情可参见创建工作空间。
单击左侧导航栏中的数据建模与开发下的数据开发,进入DataWorks数据开发页面。
单击目标业务流程名称,在其展开的通用节点上右键单击并选择函数计算。在创建节点弹出框中输入节点名称并单击确定按钮,完成函数计算节点的创建。
设置函数计算节点参数。
参数
描述
选择服务
选择版本或别名
选择后续调用函数时所使用的服务版本或别名。默认版本为LATEST。本文选择默认版本。
选择函数
选择步骤设置创建应用的参数中输入的函数名称。本文为:
pdf_add_watermark
。如需新建,详情请参见管理函数。说明DataWorks目前仅支持调用事件函数,不支持调用HTTP函数。因此,若要在DataWorks周期性调度处理事件函数,则在创建函数时,需要创建用于处理事件请求的事件函数。更多函数类型介绍,详情请参见函数类型。
调用方式
变量
调用函数的参数。本文使用事件内容中的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_file
为2023-08-15/example.pdf
;在2023年8月16日执行时,pdf_file
为2023-08-16/example.pdf
。业务系统只需每天在当前任务调度前按时间规则生成相应路径的PDF文件,即可每天动态为新增的PDF文件添加水印。
本示例需要在运行任务之前向OSS中上传符合此路径
${current_date}/example.pdf
的pdf文件。例如:2023-08-15/example.pdf
。
可选:调试运行函数计算节点。节点配置完成后,您可单击图标,指定任务运行的资源组并为代码变量赋值常量进行调试运行,测试节点代码逻辑是否正确。例如:
current_date=2023-08-15
,代表函数计算服务会对OSS中的2023-08-15/example.pdf
文件添加水印。配置节点的周期调度属性。DataWorks提供的调度参数,可实现调度场景下代码动态传参。打开右侧的调度配置,在参数区域设置参数。本文示例添加参数
current_date
,参数值为$[yyyy-mm-dd],表示运行任务时的当前年月日。更多调度参数的配置,请参见调度参数支持的格式。更多调度属性,请参见任务调度属性配置概述。
步骤三:提交并发布节点
函数计算节点需要提交发布至生产环境后,才会自动调度运行。
保存并提交节点。
可选:发布节点。
后续步骤
任务提交发布至生产运维中心调度后,您可通过DataWorks的运维中心进行相关运维操作,详情请参见运维中心。
在掌握如何创建和使用函数计算节点的基本步骤之后,您可通过最佳实践进一步深入了解该节点,详情请参见在DataWorks中通过函数计算节点实现动态为PDF添加水印。