本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建 Step Functions 状态机器这使用 Lambda
在本教程中,您将创建一个使用 Amazon Lambda 函数实现 Task
状态的 Amazon Step Functions 状态机。一个 Task
状态执行的一个工作单元。
Lambda 非常适合实施Task
状态,因为 Lambda 函数无国籍(它们具有可预知的输入/输出关系),可轻松编写,并且不需要将代码部署到服务器实例。您可以在Amazon Web Services Management Console或者你最喜欢的编辑器。Amazon处理为您的函数提供计算环境并运行函数这些细节。
第 1 步:创建 IAM 角色
Amazon Lambda 和 Amazon Step Functions 均可执行代码和访问 Amazon 资源 (例如,存储在 Amazon S3 存储桶中的数据)。为了保持安全性,您必须授予 Lambda 和 Step Functions 对这些资源的访问权。
Lambda 要求您分配Amazon Identity and Access Management创建 Lambda 函数时 (IAM) 角色,与 Step Functions 要求您在创建状态机时指定 IAM 角色相同。
您可以使用 IAM 控制台创建服务相关角色。
创建角色(控制台)
登录 Amazon Web Services Management Console,打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 -
在 IAM 控制台的导航窗格中,选择角色。然后选择 Create role (创建角色)。
-
选择Amazon服务然后选择角色类型,然后选择Lambda.
-
选择Lambda使用案例。使用案例由服务定义以包含服务所需的信任策略。接下来,选择 Next (下一步):Permissions (下一步:权限)。
-
选择一个或多个要附加到角色的权限策略(例如,
AWSLambdaBasicExecutionRole
)。请参阅 Amazon Lambda 权限模型。选中用于分配您希望角色拥有的权限的策略旁的框,然后选择后续:审核。
-
输入 Role name。
-
(可选) 对于 Role description,编辑新服务相关角色的描述。
-
检查该角色,然后选择创建角色。
第 2 步:创建 Lambda 函数
您的 Lambda 函数接收输入(一个名称)并返回包含输入值的问候语。
确保您的 Lambda 函数处于相同之下Amazon账户和Amazon区域作为您的状态机。
-
打开Lambda 控制台
然后选择创建函数. -
在创建函数部分中,选择从头开始创作。
-
在基本信息部分中,配置 Lambda 函数:
-
对于 Function name (函数名称),请输入
HelloFunction
。 -
适用于运行时,选择Node.js 12.x.
-
对于 Role (角色),选择 Choose an existing role (选择现有角色)。
-
适用于现有角色,选择您之前创建的 Lambda 角色.
注意 如果您创建的 IAM 角色未显示在列表中,该角色可能仍需要几分钟才能传播到 Lambda。
-
选择 Create function(创建函数)。
创建 Lambda 函数后,记下其亚马逊资源名称 (ARN) 位于页面右上角,如示例所示。
arn:aws:lambda:us-east-1:123456789012:function:HelloFunction
-
-
将以下 Lambda 函数的代码复制到函数代码的 部分
HelloFunction
页.exports.handler = (event, context, callback) => { callback(null, "Hello, " + event.who + "!"); };
此代码将使用输入数据的
who
字段组装问候语,该输入数据是由传送到您的函数的event
对象提供的。在以后当您时,您将为此函数添加输入数据。启动新的执行.callback
方法将从您的函数返回组装的问候语。 -
选择 Save (保存)。
第 3 步:测试 Lambda 函数
测试 Lambda 函数以查看其运行情况。
-
适用于选择测试事件,选择配置测试事件. 对于事件名称,输入
HelloFunction
。 -
使用以下内容替换示例数据。
{ "who": "Amazon Step Functions" }
这些区域有:
"who"
条目对应于event.who
在 Lambda 函数中填写问候语。在作为 Step Functions 任务运行函数时,您将使用同一输入数据。 -
选择 Create (创建)。
-
在存储库的
HelloFunction
页面,测试使用新数据您的 Lambda 函数。测试结果将显示在页面顶部。展开 Details (详细信息) 以查看输出。
第 4 步:创建状态机
使用Step Functions 控制Task
状态。LambdaTask
状态。Lambda 状态机的执行到达Task
状态。
-
打开Step Functions 控制
然后选择创建状态机. -
在 Define state machine (定义状态机) 页面上,选择 Author with code snippets (使用代码段创作)。对于 Type(类型),选择 Standard(标准)。为状态机输入一个 Name (名称),例如
。LambdaStateMachine
注意 状态机、执行和活动名称的长度必须为 1-80 个字符,对于您的账户必须是唯一的,Amazon区域,并且不得包含以下任何内容:
-
空格
-
通配符 (
? *
) -
括号字符 (
< > { } [ ]
) -
特殊字符 (
: ; , \ | ^ ~ $ # % & ` "
) -
控制字符 (
\\u0000
-\\u001f
要么\\u007f
-\\u009f
)。
Step Functions 允许您创建包含非 ASCII 字符的状态机、执行和活动名称。这些非 ASCII 名称不适用于 Amazon CloudWatch。为确保您可以跟踪 CloudWatch 指标,请选择仅使用 ASCII 字符的名称。
-
-
在状态机定义窗格中,使用的 ARN 添加以下状态机定义您之前创建的 Lambda 函数,如以下示例所示。
{ "Comment": "A Hello World example of the Amazon States Language using an Amazon Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "
arn:aws:lambda:us-east-1:123456789012:function:HelloFunction
", "End": true } } }这是使用亚马逊状态语言的状态机的说明。它定义了名为
HelloWorld
的单个Task
状态。有关更多信息,请参阅状态机结构。注意 您也可以设置
Retry
为了Task
状态。作为最佳实践,确保生产代码可以处理 Lambda 服务异常 (Lambda.ServiceException
和Lambda.SdkClientException
)。有关更多信息,请参阅下列内容:选择下一步。
-
创建或输入 IAM 角色:
-
要为 Step Functions 创建 IAM 角色,请选择为我创建 IAM 角色,然后输入名称为您的角色。
-
如果您之前创建了 IAM 角色选择您的状态机的正确权限,选择选择现有 IAM 角色. 从列表中选择一个角色,或者为该角色提供 ARN。
注意 如果您删除 Step Functions 创建的 IAM 角色,Step Functions 在以后无法重新创建它。同样,如果您修改角色 (例如,通过在 IAM 策略中从委托人删除 Step Functions),Step Functions 在以后无法还原其原始设置。
-
-
选择下一步。
第 5 步:启动新的执行
在创建您的 状态机后,可以开始执行。
-
在
LambdaStateMachine
页面上,选择 Start execution (开始执行)。此时将显示 New execution 页面。
(可选)为了帮助识别您的执行,您可以在输入执行名称。如果未输入 ID,Step Functions 将自动生成一个唯一 ID。
注意 Step Functions 允许您创建包含非 ASCII 字符的状态机、执行和活动名称。这些非 ASCII 名称不适用于 Amazon CloudWatch。为确保您可以跟踪 CloudWatch 指标,请选择仅使用 ASCII 字符的名称。
-
在执行输入区域中,将示例数据替换为以下内容。
{ "who" : "Amazon Step Functions" }
"who"
是键名称,您的 Lambda 函数将使用它来获取所问候人员的姓名。 -
选择 Start Execution (开始执行)。
此时将启动新的状态机执行,并显示一个说明正在运行的执行的新页面。
-
要查看执行结果,请展开 Output (输出) 部分的 Execution details (执行详细信息)。