使用 AWS Step Functions 和 Amazon CloudWatch
计划无服务器工作流
对 AWS 账户中资源的操作事件做出自动响应可以帮助减少 AWS 云基础设施的操作开销。举一个实际示例说明,如果您是开发运维工程师或 IT 经理,则可能要自动执行 ETL 作业、数据同步或安全性。
为解决这个难题,您可以按时间安排运行无服务器工作流。Amazon CloudWatch Events 提供了几乎实时的系统事件流,这些事件描述了您的 AWS 资源的更改和通知。从此流中,您可以创建规则以将特定事件路由到 AWS Step Functions 并调用状态机以执行进一步处理。通过 AWS Step Functions,您可以将多个服务协调到无服务器工作流中,从而可以快速构建和更新自动化流程。
在本教程中,您将使用 Step Functions 来协调无服务器工作流,以响应 CloudWatch 事件。首先,您将使用 AWS Step Functions 创建一个非常简单的状态机。然后,您将使用 Amazon CloudWatch Events 设置一个规则,每分钟运行一次状态机。虽然本教程按时间安排工作流,但可以将其推而广之,以集成其他生成事件的 AWS 服务。
在本教程中,您将使用 AWS Step Functions 和 Amazon CloudWatch。两种服务都在 AWS 免费套餐内。
第 1 步:创建 AWS Identity and Access Management (IAM) 角色
AWS Step Functions 可以执行代码并访问其他 AWS 资源(例如,存储在 Amazon S3 存储桶中的数据)。为了维护安全,您必须使用 AWS Identity and Access Management (IAM) 向 Step Functions 授予对这些资源的访问权限。
a.在另一个浏览器窗口中打开 AWS 管理控制台,因此您可以将此分步指南保持打开状态。此屏幕加载后,请输入您的用户名和密码以便开始操作。在搜索栏中输入 IAM,然后选择 IAM 以便打开服务控制台。
第 2 步:创建 AWS Step Functions 状态机
在此步骤中,您将创建一个简单的、独立运行的状态机,并为其使用“传递”状态。“传递”状态就是将其输入传递到输出,而并未实际执行任何工作。
在真实场景中,无服务器工作流可以完成您需要做的任何事情。您可以编排多个 Lambda 函数来执行任务、制定决策等等。不过,出于本教程的考虑,我们会将此工作流保持简单。
a.打开 AWS Step Functions 控制台。Step Functions 提供了各种预定义的状态机作为模板。在本教程中,您将使用 Hello World 模板创建状态机。在创建状态机页面上,选择模板,随后选择 Hello world。
c.Step Functions 会自动填写状态机的名称。它还会使用状态机的 Amazon States Language 说明填充状态机定义窗格。有关如何定义状态机的更多信息,请参见状态机结构。
让我们对状态机进行一些简单的修改:
在第 2 行和第 5 行,将“HelloWorld”替换为“Do Something”
在第 7 行,将“Hello World!”替换为“Work complete!”
然后,单击可视化工作流旁边的“刷新”按钮,更新状态机图以反映您的更改。
第 3 步:创建 Amazon CloudWatch Events 规则
现在,您已经创建了状态机,接下来可以创建根据计划运行状态机的 Amazon CloudWatch Events 规则。Amazon CloudWatch Events 提供几乎实时的系统事件流,这些事件描述 Amazon Web Services (AWS) 资源中的更改。使用可以快速设置的简单规则,您可以匹配事件并将其路由到一个或多个目标函数或流。
第 4 步:自定义状态机如何处理输入和输出
接下来,您将自定义状态机如何处理输入和输出。了解信息如何在状态之间流动,并学习如何筛选和操控此数据,这将帮助您有效地设计和实施 AWS Step Functions 中的工作流。
b.在状态机定义窗口中,查看状态机的第 7 行。“传递”状态的“结果”字段指定了应传递给下一状态的输出。由于您的状态机只有一种状态,因此消息“Work complete!”将传递到工作流的结束状态。
您可能还记得,Step Functions 的“传递”状态只是将其输入传递到其输出。您可以使用“ResultPath”字段来修改状态的输出。例如,您可以将状态输入替换为其产生的结果(例如,任务状态的 Lambda 函数的输出)。
要将状态的输入及其结果结合起来,请在第 7 行之后添加新行,然后输入:
"ResultPath": "$.taskresult",
这会将调用状态机执行的 CloudWatch Event 的详细信息与“传递”状态的输出(在本例中为“Work complete!”)结合起来。如需了解详情,请参阅 Step Functions 中的输入和输出处理。
第 5 步:确认您的工作流按预期工作
现在,您已启用 CloudWatch Events 规则,因此 CloudWatch 每分钟触发一次状态机工作流的执行。在此步骤中,您将观察这些执行情况,并验证 Step Functions 是否已捕获 CloudWatch 事件的详细信息。
第 6 步:终止资源
在此步骤中,您将终止 AWS Step Functions 和 Amazon CloudWatch 资源。
重要说明:终止当前未在使用的资源可降低成本,是最佳实践。不终止资源可能会产生费用。
恭喜!
您已经成功安排了每分钟运行一次的无服务器工作流。
AWS Step Functions 允许您检查和审核重复执行的任务,以确认它们是否一致执行。通过将 AWS Step Functions 与 Amazon CloudWatch Events 结合使用,您可以使每日、每周和每月的任务自动化,或者在满足某些条件时触发 Step Functions 工作流的执行。