Amazon Simple Workflow Service
开发人员指南 (API 版本 2012-01-25)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

AWS Lambda 任务

关于 AWS Lambda

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

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

使用 Lambda 任务的优势和限制

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

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

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

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

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

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

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

  • 目前,仅基础 SWF HTTP API 和适用于 Java 的 AWS Flow Framework 中支持 Lambda 任务。适用于 Ruby 的 AWS Flow Framework 中当前不支持 Lambda 任务。

在工作流程中使用 Lambda 任务

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

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

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

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

设置 IAM 角色

在从 Amazon SWF 调用 Lambda 函数之前,您必须提供一个允许从 Amazon SWF 访问 Lambda 的 IAM 角色。您可以:

  • 选择预定义的角色 AWSLambdaRole,为工作流程提供调用与您的账户相关联的任意 Lambda 函数的权限。

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

向 Amazon SWF 提供调用任意 Lambda 角色的访问权限

可以使用预定义的角色 AWSLambdaRole 向 Amazon SWF 工作流程提供调用与您的账户相关联的任意 Lambda 函数的能力。

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

  1. 打开 Amazon IAM 控制台

  2. 单击 Roles,然后单击 Create New Role

  3. 给角色命名,例如 swf-lambda,然后单击 Next Step

  4. AWS Service Roles 下,选择 Amazon SWF,然后单击 Next Step

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

  6. 在检查角色之后,单击 Next Step,然后单击 Create Role

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

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

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

  1. 打开 Amazon IAM 控制台

  2. 单击 Policies,然后单击 Create Policy

  3. 选择 Copy an AWS Managed Policy,然后从列表中选择 AWSLambdaRole。随即将生成策略。根据需要编辑策略的名称和描述。

  4. Policy DocumentResource 字段中,添加 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. AWS Service Roles 下,选择 Amazon SWF,然后单击 Next Step

  5. Attach Policy 屏幕上,从列表中选择 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 函数

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

从 Amazon SWF 工作流程调用 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+ 角色。提供的名称必须遵循对 FunctionName 参数的约束,如 Lambda 调用操作中所述。

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

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