跳至内容

如何设置 Lambda 函数以在 AWS Step Functions 中的状态发生变化时进行调用?

2 分钟阅读
0

我想在 AWS Step Functions 中的状态发生变化时调用 AWS Lambda 函数。我该如何操作?

解决方法

注意: 这些说明描述了如何在 Step Functions 中的状态发生变化时使用 Amazon EventBridge 事件规则调用 Lambda 函数。在按照步骤操作时,请确保执行以下操作:

  • 确认您用于调用 Lambda 函数的事件更改是受支持的 API 操作
  • 在同一 AWS 区域中创建 Step Functions 状态机、Lambda 函数和 EventBridge 事件规则。

为 Step Functions 和 Lambda 创建 IAM 角色

1.    为 Step Functions 创建 AWS Identity and Access Management (IAM) 角色。创建 IAM 角色时,请执行以下操作:
授予 IAM 角色执行您的使用案例所需的任何操作的权限。
允许 lambda:InvokeFunction 操作,让您的状态机能够调用 Lambda 函数。
**注意:**托管策略 AWSLambdaRole 包含调用 Lambda 函数所需的权限。

2.    创建一个 Lambda 执行角色,向您的函数授予将日志上传到 Amazon CloudWatch 的权限。
**注意:**托管策略 AWSLambdaBasicExecutionRole 授予您的函数将日志上传到 CloudWatch 的基本权限。

创建 Step Functions 状态机

在 Step Functions 控制台中创建状态机。对于 IAM role for executions(执行所用的 IAM 角色),请选择您为 Step Functions 创建的现有角色。

有关更多信息,请参阅什么是 AWS Step Functions?

创建一个配置为打印其接收事件的 Lambda 函数

1.    在 Lambda 控制台中创建一个函数。对于 Execution role(执行角色),请选择您为 Lambda 创建的现有角色。

2.    在 Lambda 控制台中,使用代码编辑器更新函数代码,以便该函数在运行时打印其接收到的事件。

指示 Lambda 函数打印其接收事件的 Python 代码示例

import json

def lambda_handler(event, context):
print("Received event: " + json.dumps(event)) return {
'statusCode': 200,
'body': json.dumps("Hello")
}

有关详细信息,请参阅使用 Python 构建 Lambda 函数

创建 EventBridge 事件规则以便在 Step Functions 中的状态发生变化时调用 Lambda 函数

1.    打开 EventBridge 控制台

2.    在左侧导航窗格的 Events(事件)下,选择 Rules(规则)。

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 的所有事件触发此规则。或者,您可以选择 AWS API Call through CloudTrail(通过 CloudTrail 进行的 AWS API 调用),为特定的 Step Functions API 调用事件(如 StartExecution)触发此规则。有关更多信息,请参阅来自 AWS 服务的事件

10.    选择要启动事件的状态、状态机 Amazon 资源名称 (ARN) 和执行 ARN。您可以为每种触发器选择 Any(任意),也可以为每个触发器确定 Specific(特定)状态或 ARN。

11.    在 Select targets(选择目标)下,确认目标类型为 Lambda function(Lambda 函数)。

12.    对于 Function(函数),选择您创建的 Lambda 函数

13.    选择 Create rule(创建规则)。

有关更多信息,请参阅 Amazon EventBridge 事件适用于 Step Functions 执行状态变更的 EventBridge

测试您的设置

1.    在 Step Functions 控制台中,启动新的状态机执行

2.    在 CloudWatch 控制台的左侧导航窗格中,在 Logs(日志)下,选择 Log groups(日志组)。

3.    选择由您的 Lambda 函数创建的日志流。

4.    验证日志流中的事件详细信息。

**注意:**新的执行启动后,可能需要几分钟时间才能显示日志流。


相关信息

使用 CloudWatch 监控 Step Functions

创建使用 Lambda 的 Step Functions 状态机

AWS 官方已更新 4 年前