使用代码段创建状态来发送 Amazon SNS 消息 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用代码段创建状态来发送 Amazon SNS 消息

Amazon Step Functions已与某些集成Amazon服务,例如 Amazon Simple Notification Service (Amazon SNS)。在本教程中,您将生成一个使用 Amazon SNS 发送文本消息的代码段。您从状态机定义将参数直接传递给 Amazon SNS。

有关 Step Functions 如何与其他Amazon服务,请参阅:

(可选) 先决条件

如果您使用的是Amazon Identity and Access Management(IAM),您需要将SNS:Publish权限。您可以将AmazonSNSFullAccess Amazon管理策略,以附加 Amazon SNS 的完全权限。

将权限附加到角色

  1. 打开“角色” 页面

  2. 选择一个角色。

  3. 选择附加策略。​

  4. 类型AmazonSNSFullAccess中的筛选策略文本字段。

  5. 选择AmazonSNSFullAccess角色。

  6. 选择附加策略

第 1 步:生成代码段

要生成代码段,您必须先编辑状态机定义。

  1. 登录到Amazon Web Services Management Console,然后打开 Step Functions 控制台https://console.aws.amazon.com/states/home?#/statemachines/create

  2. 选择 Author with code snippets (使用代码段创作)。对于 Type (类型),选择 Standard (标准),然后为状态机输入一个名称。

    默认 HelloWorld 状态机将显示在 State machine definition (状态机定义) 中。

    
                        HelloWorld 定义
  3. 适用于生成代码段中,选择Amazon SNS:发布消息

    此时将显示 Generate SNS Publish task state (生成 SNS 发布任务状态) 窗口。

  4. Generate SNS Publish task state (生成 SNS 发布任务状态) 页面的 Destination (定义) 下,选择 Enter phone number (输入电话号码),然后输入您的手机号码。

    采用格式 [+][country code][subscriber number including area code]。例如:+12065550123

  5. Message (消息) 下,选择 Enter message (输入消息),然后输入一些要作为 SMS 消息发送的文本。

    注意

    您还可以选择 Specify message at runtime with state input (在运行时使用状态输入指定消息)。此选项可让您使用参考路径从状态机执行的输入中选择消息。有关更多信息,请参阅:

当您在生成 SNS 发布任务状态页面上,预览部分将针对带必要选项的任务状态的 Amazon State (Amazon State) 语言代码进行更新。

例如,选择以下选项。


                SNS 状态选项

选择这些选项后,Preview (预览) 区域中显示的生成的代码段为:

"Amazon SNS: Publish a message": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "Message": "Hello from Step Functions!", "PhoneNumber": "+12065550123" }, "Next": "NEXT_STATE" }
注意

Task state options (任务状态选项) 部分下,您还可以配置 RetryCatchTimeoutSeconds 选项。请参阅 Step Functions 中的错误处理

第 2 步:更新状态机定义

现在您已配置 Amazon SNS 选项,请将生成的代码段粘贴到状态机定义中并更新现有 Amazon SNS 代码。

  1. 在查看 Preview (预览) 部分中的代码后,选择 Copy to clipboard (复制到剪贴板)

  2. 将光标置于状态机定义中的 HelloWorld 状态的右括号的后面。

    
                        将光标置于HelloWorld状态。

    输入逗号,按 Enter 开始新行,然后将代码段粘贴到状态机定义中。

  3. Amazon SNS: Publish a message 状态的最后一行从 "Next": "NEXT_STATE" 更改为 "End": true

  4. HelloWorld 状态的最后一行从 "End": true 更改为 "Next": "Amazon SNS: Publish a message"

  5. 选择 
       refresh
    中的可视工作流程窗格中。检查可视工作流以确保包含新状态。

    
                        查看可视工作流。
  6. (可选)缩进 JSON 以使代码更易于阅读。您的状态机定义应如下所示。

    { "StartAt":"HelloWorld", "States":{ "HelloWorld":{ "Type":"Pass", "Result":"Hello World!", "Next":"Amazon SNS: Publish a message" }, "Amazon SNS: Publish a message":{ "Type":"Task", "Resource":"arn:aws:states:::sns:publish", "Parameters":{ "Message":"Hello from Step Functions!", "PhoneNumber":"+12065550123" }, "End":true } } }
  7. 选择 Next

  8. 创建或输入 IAM 角色:

    • 要为 Step Functions 创建 IAM 角色,请选择为我创建 IAM 角色,然后输入名称为您的角色。

    • 如果您有之前创建的 IAM 角色使用您的状态机的正确权限,请选择选择现有 IAM 角色。从列表中选择角色,或为该角色提供 ARN。

    注意

    如果您删除了 Step Functions 创建的 IAM 角色,则 Step Functions 在以后无法重新创建它。同样,如果您修改角色 (例如,通过在 IAM 策略中从委托人删除 Step Functions),Step Functions 在以后无法还原其原始设置。

  9. 选择 Create state machine (创建状态机)

第 3 步:开始执行

创建新的状态机后,将显示其中的页面。

  1. 请查看您的状态机的详细信息,包括 Amazon 资源名称 (ARN)、相关 IAM ARN 和状态机定义。

  2. Executions (执行) 选项卡上,选择 Start execution (开始执行)

  3. (可选)输入执行的名称。

    注意

    如果我们选择了在运行时使用状态输入指定消息创建 Amazon SNS 代码片段时,我们会在输入-可选。现在,您可以使用默认状态输入。

    选择 Start execution (开始执行)

如果您在代码段中配置了有效的手机号码,则应已收到 Amazon SNS 发送的文本消息,该消息是由状态机执行直接触发的。