DataWorks为您提供函数计算节点,允许您通过自定义代码实现不同业务需求。函数计算节点支持周期性调度,便于执行定时任务。同时,该节点能够与DataWorks其他类型节点配合使用,帮助您构建完整的数据处理流程。本文将为您介绍如何创建并使用函数计算节点。
前提条件
-
RAM账号添加至对应空间(可选)。
进行任务开发的RAM账号已被添加至对应工作空间中,并具有开发或空间管理员(权限较大,谨慎添加)角色权限。添加成员并授权,详情请参见为工作空间添加空间成员。
-
对应空间已绑定Serverless资源组。详情请参见:使用Serverless资源组。
-
进行函数计算节点开发前,需创建对应的函数计算节点,详情请参见:创建调度工作流的节点。
使用限制
-
功能限制:DataWorks目前仅支持调用事件函数,不支持调用HTTP函数。因此,若要在DataWorks周期性调度处理事件函数,则在创建函数时,需要创建用于处理事件请求的事件函数。更多函数类型介绍,详情请参见函数类型选型。
-
地域限制:DataWorks目前仅支持华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华南1(深圳)、中国香港、新加坡、英国(伦敦)、美国(硅谷)、美国(弗吉尼亚)、德国(法兰克福)和澳大利亚(悉尼)地域的工作空间使用函数计算功能。
注意事项
-
使用函数计算节点时,需基于已创建的服务调用待执行事件函数。选择服务时,若无法获取已创建的服务列表,则可能原因如下:
-
当前账号欠费:请充值后刷新节点配置页面重新尝试。
-
当前登录用户没有获取服务列表的权限:请联系阿里云主账号为您添加fc:ListServices权限,或直接赋予您AliyunFCFullAccess权限,授权后请刷新节点配置页面重新尝试。授权操作,请参见产品及控制台权限控制详情:RAM Policy。
-
-
使用DataWorks的函数计算节点运行函数时,若运行时长超过1小时,请将DataWorks函数计算节点的调用方式配置为异步调用。关于函数计算异步调用的介绍,请参考功能概览。
-
若使用RAM用户(即子账号)进行函数计算节点开发,则需为该用户添加如下系统策略或自定义策略权限。
策略类型
策略描述
系统策略
使用系统策略时,需授权用户
AliyunFCFullAccess、AliyunFCReadOnlyAccess及AliyunFCInvocationAccess权限策略。自定义策略
使用函数计算,自定义策略常见授权如下:
-
fc:GetAsyncTask -
fc:StopAsyncTask -
fc:GetService -
fc:ListServices -
fc:GetFunction -
fc:InvokeFunction -
fc:ListFunctions -
fc:GetFunctionAsyncInvokeConfig -
fc:ListServiceVersions -
fc:ListAliases -
fc:GetAlias -
fc:ListFunctionAsyncInvokeConfigs -
fc:GetStatefulAsyncInvocation -
fc:StopStatefulAsyncInvocation
说明更多函数计算权限策略可参考以下文档:
-
一、开发函数计算节点
-
函数计算节点开发,在进入已创建好的节点后,根据业务需求,选择执行本次任务调用的函数并配置其运行方式及变量详情,可参考以下表格:
参数
描述
选择版本或别名
选择后续调用函数时所使用的服务版本或别名。默认版本为LATEST。
选择函数
选择此次任务执行所需调用的函数。如果没有可用函数,则需新建,详情请参见管理函数。
说明DataWorks目前仅支持调用事件函数,不支持调用HTTP函数。因此,若要在DataWorks周期性调度处理事件函数,则在创建函数时,需要创建用于处理事件请求的事件函数。更多函数类型介绍,详情请参见函数类型选型。
示例选择
para_service_01_by_time_triggers函数。创建该函数时,选择平台提供的定时触发函数的示例代码。代码逻辑如下。import json import logging logger = logging.getLogger() def handler(event, context): logger.info('event: %s', event) # Parse the json evt = json.loads(event) triggerName = evt["triggerName"] triggerTime = evt["triggerTime"] payload = evt["payload"] logger.info('triggerName: %s', triggerName) logger.info("triggerTime: %s", triggerTime) logger.info("payload: %s", payload) return 'Timer Payload: ' + payload更多函数的示例代码,请参见示例代码。
调用方式
支持使用如下方式调用函数:
变量
基于实际应用,对函数中的变量进行赋值。该变量与函数计算产品中,目标函数详情页的内容对应。
示例对
para_service_01_by_time_triggers函数的相关变量传入如下参数。参数中,使用${}格式定义了名为bizdate的变量,该变量需进行赋值。{ "payload": "payload1", "triggerTime": "${bizdate}", "triggerName": "triggerName1" } -
完成函数计算节点脚本开发后,需对函数计算节点进行调度配置,以实现函数计算任务的周期调度,详情请参见节点调度配置。