我想要在每次 AWS Step Functions 中发生状态变化时调用 AWS Lambda 函数。该如何操作?
注意:这些说明描述了如何在 Step Functions 中发生状态变化时使用 Amazon EventBridge 事件规则调用 Lambda 函数。按照步骤操作时,请确保执行以下操作:
1. 为 Step Functions 创建 AWS Identity and Access Management (IAM) 角色。创建 IAM 角色时,请执行以下操作: 授予 IAM 角色权限以执行您的使用案例要求的任何操作。 允许操作 lambda:InvokeFunction,以使您的状态机调用您的 Lambda 函数。 **注意:**托管策略 AWSLambdaRole 包括调用 Lambda 函数所需的权限。
2. 创建一个 Lambda 执行角色,以向您的函数授予权限以将日志上传到 Amazon CloudWatch。 **注意:**托管策略 AWSLambdaBasicExecutionRole 授予您的函数将日志上传到 CloudWatch 的基本权限。
在 Step Functions 控制台中创建状态机。在执行所需的 IAM 角色中,选择您为 Step Functions 创建的现有角色 。
有关更多信息,请参阅什么是 AWS Step Functions?
1. 在 Lambda 控制台中创建函数。在执行角色中,选择您为 Lambda 创建的现有角色。
2. 在 Lambda 控制台中,使用代码编辑器更新函数代码,以便在运行时,该函数会打印其收到的事件。
示例 Python 代码,该代码告诉 Lambda 函数打印其收到的事件
import json def lambda_handler(event, context): print("Received event: " + json.dumps(event)) return { 'statusCode': 200, 'body': json.dumps("Hello") }
有关更多信息,请参阅使用 Python 构建 Lambda 函数。
1. 打开 EventBridge 控制台。
2. 在左侧导航窗格的事件下,选择规则。
3. 选择 Create rule(创建规则)。
4. 对于 Name(名称),输入该规则的名称。
5. 对于 Define pattern(定义模式),选择 Event Pattern(事件模式)。
6. 对于 Event matching pattern(事件匹配模式),选择 Pre-defined pattern by service(按服务分类的预定义模式)。
7. 对于 Service provider(服务提供商),选择 AWS。
8. 对于 Service Name(服务名称),选择 Step Functions。
9. 对于 Event Type(事件类型),选择 Step Functions Execution Status Change(Step Functions 执行状态更改)。
注意:您也可以选择让所有事件都使 Step Functions 启动规则。或者,您可以选择通过 CloudTrail 进行的 AWS API 调用启动某些 Step Functions API 调用事件的规则,例如 StartExecution。有关更多信息,请参阅来自 AWS 服务的事件。
10. 选择状态、状态机 Amazon Resource Names (ARN) 以及您希望启动该事件的执行 ARN。您可以为每个触发器类型选择 Any(任何),或确定每个触发器的特定状态或 ARN。
11. 在 Select targets(选择目标)下,确认 Lambda 函数是目标类型。
12. 对于 Function(函数),选择创建的 Lambda 函数
13. 选择 Create rule(创建规则)。
有关更多信息,请参阅 Amazon EventBridge 事件和适用于 Step Functions 的 EventBridge 的执行状态更改。
1. 在 Step Functions 控制台中,启动状态机的新执行。
2. 在 CloudWatch 控制台左侧导航窗格中的日志下,选择日志组。
3. 选择您的 Lambda 函数创建的日志流。
4. 验证日志流中的事件详细信息。
**注意:**在新执行开始后,日志流可能需要几分钟的时间才能显示。
使用 CloudWatch 监控 Step Functions
创建使用 Lambda 的 Step Functions 状态机