当 Step Functions 中发生状态(执行事件)变化时如何调用 Lambda?

上次更新时间:2019 年 8 月 30 日

我想要在每次 AWS Step Functions 中发生状态(执行事件)变化时调用 AWS Lambda 函数。该如何操作?

简短描述

使用 Amazon CloudWatch Events 规则触发响应来自 Step Functions 状态机的 API 调用事件变化的 Lambda 函数。

解决方法

在此设置期间,请确保:

  • 您用来触发该函数的事件变化是支持的 API 操作
  • 您可在相同的 AWS 区域中创建 Step Functions 状态机、Lambda 函数和 CloudWatch Events 规则。

为 Step Functions 和 Lambda 创建 IAM 角色

1.    为 Step Functions 创建 AWS Identity and Access Management (IAM) 角色。授予 IAM 角色权限以执行您的使用案例要求的任何操作。为了使您的状态机调用您的 Lambda 函数,允许操作 lambda:InvokeFunction

注意:托管策略 AWSLambdaRole 授予调用 Lambda 函数所需的权限。

2.    创建 Lambda 执行角色。托管策略 AWSLambdaBasicExecutionRole 授予您的函数将日志上传到 CloudWatch 的基本权限。

创建 Step Functions 状态机

在 Step Functions 控制台中创建状态机。在执行所需的 IAM 角色中,选择您为 Step Functions 创建的现有角色 。

创建和更新 Lambda 函数

1.    在 Lambda 控制台中创建函数。在执行角色中,选择您为 Lambda 创建的现有角色。

2.    在 Lambda 控制台中,使用代码编辑 器更新函数代码,以便在执行时,该函数仅打印其收到的事件。例如,如果您的 Lambda 函数使用 Python,则您可以使用以下代码:

import json
def lambda_handler(event, context):
    print("Received event: " + json.dumps(event))

创建 CloudWatch Events 规则

您创建的规则监视 Step Functions 事件模式并调用 Lambda 函数。

1.    打开 CloudWatch 控制台

2.    在左侧导航窗格的事件下,选择规则

3.    选择创建规则

4.    在事件源下,选择事件模式

5.    在服务名称中,选择 Step Functions

6.    在事件类型中,选择 Step Functions 执行状态更改

注意:您也可以选择让所有事件都使 Step Functions 触发规则。或者,您可以选择通过 CloudTrail 进行的 AWS API 调用触发某些 Step Functions API 调用事件的规则,例如 StartExecution。有关更多信息,请参阅创建在遇到使用 AWS CloudTrail 进行的 AWS API 调用时触发的 CloudWatch Events 规则

7.    选择状态、状态机 Amazon 资源名称 (ARN) 以及您希望触发该事件的执行 ARN。您可以为每个触发器类型选择任何,或确定每个类型的特定状态或 ARN。

8.    在目标下,选择添加目标。确认 Lambda 函数是目标类型。

9.    在函数中,选择您创建的 Lambda 函数。

10.    选择配置详细信息

11.    在名称中,输入该规则的名称。

12.    在状态中,请确保选择了已启用

13.    选择创建规则

有关更多信息,请参阅创建对事件触发的 CloudWatch Events 规则

测试您的设置

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

2.    在 CloudWatch 控制台的左侧导航窗格中,选择日志

3.    选择您的 Lambda 函数生成的日志流。

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

注意:启动执行后可能需要过几分钟日志流才会出现。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?