使用 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 FunctionsAmazon CloudWatch。两种服务都在 AWS 免费套餐内。

使用此教程需要拥有 AWS 账户

Step Functions 或 CloudWatch 不收取任何额外费用。您在本教程中创建的资源符合免费套餐条件。 

详细了解免费套餐 >>


第 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 以便打开服务控制台。

01a
01a

(单击可放大)


b.  单击角色,然后选择创建角色

01b
01b

(单击可放大)


c.在选择受信任实体的类型页面上,在“AWS 服务”下,从列表中选择 Step Functions,然后选择下一步: 权限

01c
01c

(单击可放大)


d.在附加权限策略页面上,选择下一步: 查看

01d
01d

(单击可放大)


e.在查看页面上,键入 step_functions_basic_execution 作为角色名称,然后单击创建角色

01e
01e

(单击可放大)


f.您的新 IAM 角色已创建。

01f
01f

(单击可放大)


第 2 步:创建 AWS Step Functions 状态机

在此步骤中,您将创建一个简单的、独立运行的状态机,并为其使用“传递”状态。“传递”状态就是将其输入传递到输出,而并未实际执行任何工作。

在真实场景中,无服务器工作流可以完成您需要做的任何事情。您可以编排多个 Lambda 函数来执行任务、制定决策等等。不过,出于本教程的考虑,我们会将此工作流保持简单。


a.打开 AWS Step Functions 控制台。Step Functions 提供了各种预定义的状态机作为模板。在本教程中,您将使用 Hello World 模板创建状态机。在创建状态机页面上,选择模板,随后选择 Hello world

02c
02c

(单击可放大)


b.在详细信息部分中,输入 ScheduledWorkflow 作为您的状态机的名称,随后在 IAM 角色下,选择我要使用现有角色。在现有 IAM 角色下,选择您先前创建的 IAM 角色 step_functions_basic_execution

02d
02d

(单击可放大)


c.Step Functions 会自动填写状态机的名称。它还会使用状态机的 Amazon States Language 说明填充状态机定义窗格。有关如何定义状态机的更多信息,请参见状态机结构

让我们对状态机进行一些简单的修改:

在第 2 行和第 5 行,将“HelloWorld”替换为“Do Something”
在第 7 行,将“Hello World!”替换为“Work complete!”

然后,单击可视化工作流旁边的“刷新”按钮,更新状态机图以反映您的更改。

02e
02e

(单击可放大)


d.选择创建状态机。您的状态机现在已经准备就绪,可以执行了。

02f
02f

(单击可放大)


第 3 步:创建 Amazon CloudWatch Events 规则

现在,您已经创建了状态机,接下来可以创建根据计划运行状态机的 Amazon CloudWatch Events 规则。Amazon CloudWatch Events 提供几乎实时的系统事件流,这些事件描述 Amazon Web Services (AWS) 资源中的更改。使用可以快速设置的简单规则,您可以匹配事件并将其路由到一个或多个目标函数或流。


a.打开另一个浏览器选项卡。通过在搜索栏中输入 CloudWatch 导航到 CloudWatch Events 控制台。

03a
03a

(单击可放大)


b.选择事件,然后选择创建规则。 

03b
03b

(单击可放大)


c.此时显示第 1 步:创建规则页面。在事件源部分中,选择计划。在固定比率中,输入 1,保留“分钟”单位处于选中状态。

03c
03c

(单击可放大)


d.在目标部分,选择添加目标。从列表中选择 Step Functions 状态机,选择您的 ScheduledWorkflow 状态机。

选择配置输入,并选择匹配的事件。每次执行状态机实例时,这都会将 CloudWatch Event 的详细信息作为输入传递给 Step Functions。

选择为此特定资源新建角色,再单击配置详情

03d
03d

(单击可放大)


e.此时将显示第 2 步:配置规则详情页面。输入 execute_state_machine 作为规则的名称,将为状态启用保持选中状态,然后选择创建规则

系统将会创建规则并显示规则页面,其中列出了所有 CloudWatch Events 规则。

现在将每分钟进行一次新的状态机执行。

03e
03e

(单击可放大)


第 4 步:自定义状态机如何处理输入和输出

接下来,您将自定义状态机如何处理输入和输出。了解信息如何在状态之间流动,并学习如何筛选和操控此数据,这将帮助您有效地设计和实施 AWS Step Functions 中的工作流。


a.返回到 Step Function s控制台,您的 ScheduledWorkflow 状态机仍应显示。单击编辑

04a
04a

(单击可放大)


b.在状态机定义窗口中,查看状态机的第 7 行。“传递”状态的“结果”字段指定了应传递给下一状态的输出。由于您的状态机只有一种状态,因此消息“Work complete!”将传递到工作流的结束状态。

您可能还记得,Step Functions 的“传递”状态只是将其输入传递到其输出。您可以使用“ResultPath”字段来修改状态的输出。例如,您可以将状态输入替换为其产生的结果(例如,任务状态的 Lambda 函数的输出)。

要将状态的输入及其结果结合起来,请在第 7 行之后添加新行,然后输入:

"ResultPath": "$.taskresult",

这会将调用状态机执行的 CloudWatch Event 的详细信息与“传递”状态的输出(在本例中为“Work complete!”)结合起来。如需了解详情,请参阅 Step Functions 中的输入和输出处理

04b
04b

(单击可放大)


c.单击保存

04c
04c

(单击可放大)


第 5 步:确认您的工作流按预期工作

现在,您已启用 CloudWatch Events 规则,因此 CloudWatch 每分钟触发一次状态机工作流的执行。在此步骤中,您将观察这些执行情况,并验证 Step Functions 是否已捕获 CloudWatch 事件的详细信息。


a.返回 Step Functions 控制台,在页面顶部的面包屑导航中单击 ScheduledWorkflow

05a
05a

(单击可放大)


b.在执行下,您可以观察 CloudWatch Events 所触发的执行。您可以单击“刷新”按钮以更新窗口,观察状态机的新执行。等待几分钟,以至少触发两个工作流实例。

05b
05b

(单击可放大)


c.右键单击其中一个执行,然后在新的浏览器选项卡中打开链接。为状态机的其他执行重复此操作。

在各选项卡上,单击“可视化工作流”窗格中的“Do Something”状态,填充右侧的“步骤详情”窗格

通过单击输入,您可以查看来自 CloudWatch 的匹配事件的详细信息。注意事件之间的差异,例如“id”和“时间”字段。

05c
05c

(单击可放大)


d.在每个选项卡上,展开“步骤详情”窗格下的输出。您可以看到输入与“Do Something”状态的输出组合在一起。

05d
05d

(单击可放大)


第 6 步:终止资源

在此步骤中,您将终止 AWS Step Functions 和 Amazon CloudWatch 资源。

重要说明:终止当前未在使用的资源可降低成本,是最佳实践。不终止资源可能会产生费用。


a.关闭对应于个别状态机执行的选项卡。在 Step Functions 窗口顶部,单击状态机

06a
06a

(单击可放大)


b.在状态机窗口中,单击您为此教程创建的状态机,并选择删除。在对话框中选择删除状态机以确认操作。Step Functions 确认任何正在进行的执行均已完成后,您的状态机将在一两分钟内被删除。

06b
06b

(单击可放大)


c.接下来,您将删除您的 Amazon CloudWatch Events 规则。在 CloudWatch 控制台中,单击操作,再单击删除。再次单击删除确认删除。

06c
06c

(单击可放大)


d.单击服务,然后在搜索栏中输入 IAM 以导航到 IAM 控制台。

06d

(单击可放大)


e.单击角色

06e
06e

(单击可放大)


f.选择您为本教程创建的两个 IAM 角色,然后单击删除角色。在对话框中单击是,删除以确认删除。

现在,您可以退出 AWS 管理控制台了。

06f
06f

(单击可放大)


恭喜!

您已经成功安排了每分钟运行一次的无服务器工作流。
AWS Step Functions 允许您检查和审核重复执行的任务,以确认它们是否一致执行。通过将 AWS Step Functions 与 Amazon CloudWatch Events 结合使用,您可以使每日、每周和每月的任务自动化,或者在满足某些条件时触发 Step Functions 工作流的执行。


本教程对您是否有帮助?