Amazon Lambda 任务 - Amazon Simple Workflow Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon Lambda 任务

关于 Amazon Lambda

Amazon Lambda是完全托管的计算服务,可运行您的代码以响应由自定义代码生成的事件,或来自各种Amazon服务,例如 Amazon S3、DynamoDB、Amazon Kinesis、Amazon Cognito。有关 Lambda 的更多信息,请参阅Amazon Lambda开发人员指南

Amazon Simple Workflow Service 提供一项 Lambda 任务,以便您可以运行 Lambda 函数来代替传统 Amazon SWF 活动,或与此类活动一起运行。

重要

您的Amazon账户将向 Amazon SWF 代表您执行的 Lambda 执行(请求)收取费用。有关 Lambda 定价的详细信息,请参阅https://aws.amazon.com/lambda/pricing/

使用 Lambda 任务的优势和限制

使用 Lambda 任务代替传统 Amazon SWF 活动具有许多优势:

  • 无需像 Amazon SWF 活动类型那样注册 Lambda 任务或版本化。

  • 可以使用已在工作流中定义的任何现有 Lambda 函数。

  • Amazon SWF 直接调用 Lambda 函数;无需像传统活动那样,需要实现工作线程编程才能执行。

  • Lambda 为您提供用于跟踪和分析函数执行的指标和日志。

您还应了解 Lambda 任务有很多限制:

  • Lambda 任务只能在Amazon为 Lambda 提供支持的区域。请参阅Lambda 区域和终端节点中的Amazon Web Services 一般参考,了解有关 Lambda 当前支持的区域的详细信息。

  • 目前,只有基础 SWF HTTP API 和在适用于 Java 的 Amazon Flow Framework 中才支持 Lambda 任务。适用于 Ruby 的 Amazon Flow Framework 中当前不支持 Lambda 任务。

在工作流中使用 Lambda 任务

要在 Amazon SWF 工作流中使用 Lambda 任务,您需要:

  1. 设置 IAM 角色,为 Amazon SWF 提供调用 Lambda 函数的权限。

  2. 将 IAM 角色附加到工作流。

  3. 在工作流执行期间调用 Lambda 函数。

设置 IAM 角色

您必须先提供从 Amazon SWF 访问 Lambda 函数的 IAM 角色,然后才能从 Amazon SWF 访问 Lambda 函数。您可以:

  • 选择一个预定义的角色,奥斯兰布达罗尔,为工作流程提供调用与您的账户关联的任何 Lambda 函数的权限。

  • 定义您自己的策略和关联角色,为工作流程提供调用由其 Amazon 资源名称 (ARN) 指定的特定 Lambda 函数的权限。

为 Amazon SWF 提供调用任何 Lambda 角色的访问权限

可以使用预定义的角色奥斯兰布达罗尔,为 Amazon SWF 工作流程提供调用与您的账户关联的任何 Lambda 函数的能力。

使用 AWSLambda 向 Amazon SWF 提供调用 Lambda 函数的访问权限

  1. 打开 Amazon IAM 控制台

  2. 选择 Roles,然后选择 Create New Role

  3. 提供角色名称 (如 swf-lambda),然后选择 Next Step

  4. UNDERAmazon服务角色中,选择Amazon SWF,然后选择下一步

  5. Attach Policy 屏幕上,从列表中选择 AWSLambdaRole

  6. 检查角色之后,选择 Next Step,然后选择 Create Role

定义 IAM 角色以提供调用特定 Lambda 函数的访问权限

如果您要提供从工作流程调用特定 Lambda 函数的访问权限,则需要定义自己的 IAM 策略。

创建 IAM 策略以提供对特定 Lambda 函数的访问权限

  1. 打开 Amazon IAM 控制台

  2. 选择 Policies,然后选择 Create Policy

  3. 选择复制Amazon托管策略,然后选择奥斯兰布达罗尔从列表中选择。随即将生成策略。根据需要编辑策略的名称和描述。

  4. 资源字段策略文档,添加您的 Lambda 函数的 ARN。例如:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:us-east-1:111111000000:function:hello_lambda_function" ] } ] }
    注意

    有关如何在 IAM 角色中指定资源的完整说明,请参阅IAM 策略概述使用 IAM

  5. 选择 Create Policy 完成策略创建。

您随后可以在创建新 IAM 角色时选择此策略,并使用该角色提供调用 Amazon SWF 工作流程的访问权限。此过程与使用 AWSLambdaRole 策略创建角色非常相似。不同之处是在创建角色时选择自己的策略。

使用您的 Lambda 策略创建 Amazon SWF 角色

  1. 打开 Amazon IAM 控制台

  2. 选择 Roles,然后选择 Create New Role

  3. 提供角色名称 (如 swf-lambda-function),然后选择 Next Step

  4. UNDERAmazon服务角色中,选择Amazon SWF,然后选择下一步

  5. 在存储库的附加策略窗口中,从列表中选择 Lambda 函数特定策略。

  6. 检查角色之后,选择 Next Step,然后选择 Create Role

将 IAM 角色附加到工作流

一旦定义了 IAM 角色,您需要将它附加到工作流,用于调用允许 Amazon SWF 访问的 Lambda 函数。

可以将角色附加到工作流的位置有两个:

  • 在工作流类型注册时。随后,在每次执行该工作流类型时,可以将此角色用作默认 Lambda 角色。

  • 在启动工作流执行时。此角色将仅在此工作流执行期间(且在整个执行过程中)使用。

为工作流类型提供默认 Lambda 角色

  • 在调用 RegisterWorkflowType 时,将 defaultLambdaRole 字段设为已定义角色的 ARN。

提供工作流执行期间使用的 Lambda 角色

  • 在调用 StartWorkflowExecution 时,将 lambdaRole 字段设为已定义角色的 ARN。

注意

如果调用 RegisterWorkflowType 或 StartWorkflowExecution 的账户无权使用给定角色,则调用将失败并返回 OperationNotPermittedFault。

从 Amazon SWF 工作流调用 Lambda 函数

可以使用 ScheduleLambdaFunctionDecisionAttributes 数据类型识别要在工作流执行期间调用的 Lambda 函数。

在调用 RespondDecisionTaskCompleted 时,请向决策列表提供 ScheduleLambdaFunctionDecisionAttributes。例如:

{ "decisions": [{ "ScheduleLambdaFunctionDecisionAttributes": { "id": "lambdaTaskId", "name": "myLambdaFunctionName", "input": "inputToLambdaFunction", "startToCloseTimeout": "30" }, }], }

设置以下参数:

  • ID 是 Lambda 任务的标识符。此值必须为 1-256 个字符的字符串,且不能包含 :(冒号)、/(斜杠)、|(竖线)等字符,也不能保护任何控制字符(\u0000 - \u001f 和 \u007f - \u009f)及文字字符串 arn

  • name 是 Lambda 函数的名称。必须为 Amazon SWF 工作流提供一个允许其调用 Lambda 函数的 IAM 角色。像 Lambda 调用操作一样,提供的名称必须遵循对 FunctionName 参数的约束。

  • input 是函数的可选输入数据。像 Lambda 调用操作一样,如果设置,则它必须遵循 ClientContext 参数的约束。

  • startToCloseTimeout 是在任务失败并返回超时异常之前,函数可以花费的可选最长时间(以秒为单位)。可以使用 NONE 值指定无期限。

有关更多信息,请参阅 。实现Amazon Lambda任务