AWS Step Functions
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

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

有关 Step Functions 如何与直接来自 Amazon 状态语言的其他 AWS 服务集成的更多信息,请参阅:

步骤 1:生成代码段

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

  1. Open the Step Functions console at https://console.amazonaws.cn/states/.

    选择 Get started (开始使用)Create state machine (创建状态机)

  2. 选择 Author with code snippets (使用代码段创作),然后为状态机输入一个名称。

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

    
            HelloWorld 定义
  3. 对于 Generate Code Snippet (生成代码段),选择 Amazon SNS: Publish a message (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 (在运行时使用状态输入指定消息)。此选项可让您使用参考路径从状态机执行的输入中选择消息。有关更多信息,请参阅:

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

例如,选择以下选项。


        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 选项。请参阅错误处理

步骤 2:更新状态机定义

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

  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. 选择 Visual Workflow (可视工作流) 窗格中的 
       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 角色,请选择 Create an IAM role for me (为我创建 IAM 角色),然后输入角色的 Name (名称)

    • 如果您使用您的状态机的正确权限之前已创建 IAM 角色,请选择 Choose an existing IAM role (选择现有 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 代码段时选择了 Specify message at runtime with state input (在运行时使用状态输入指定消息),我们将在 Input - optional (输入 - 可选) 中包含一条消息。现在,您可以使用默认状态输入。

    选择 Start execution (开始执行)

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