传输数据记录(Lambda、DynamoDB、Amazon SQS) - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

传输数据记录(Lambda、DynamoDB、Amazon SQS)

此示例项目演示了如何以迭代方式从 Amazon DynamoDB 表中读取项目并使用 Step Functions 状态机将这些项目发送到 Amazon SQS 队列。部署此示例项目将创建一个 Step Functions 状态机、一个 DynamoDB 表、一个 Amazon Lambda 函数和一个 Amazon SQS 队列。

在此项目中,Step Functions 使用 Lambda 函数填充 DynamoDB 表格。状态机还使用 for 循环读取每个条目,然后将每个条目发送到 Amazon SQS 队列。

第 1 步:创建状态机并预置资源

  1. 打开 Step Functions 控制台,然后选择创建状态机

  2. 在搜索框中键入 Transfer data records,然后从返回的搜索结果中选择传输数据记录

  3. 选择下一步以继续。

  4. Step Functions 列出了您选择的示例项目中 Amazon Web Services 使用的。它还显示了示例项目的工作流图。将此项目部署到您的, Amazon Web Services 账户 或者将其用作构建您自己的项目的起点。根据您想继续的方式,选择运行演示构建依据

    该示例项目部署了以下资源:

    • 一个 Lambda 函数,用于为 DynamoDB 表制作种子

    • 一个 Amazon SQS 队列

    • 一个 DynamoDB 表

    • 一台 Amazon Step Functions 状态机

    • 相关 Amazon Identity and Access Management (IAM) 角色

    下图显示了传输数据记录示例项目的工作流图:

    
            传输数据记录示例项目的工作流图。
  5. 选择使用模板继续进行选择。

  6. 请执行以下操作之一:

    • 如果您选择构建依据,Step Functions 将为您选择的示例项目创建工作流原型。Step Functions 不会部署工作流定义中列出的资源。

      在 Workflow Studio 的设计模式下,从状态浏览器中拖放状态,继续构建工作流原型。或者切换到代码模式,该模式提供了一个类似于 VS Code 的集成代码编辑器,用于在 Step Functions 控制台中更新状态机的 Amazon States Language (ASL) 定义。有关使用 Workflow Studio 构建状态机的更多信息,请参阅使用 Workflow Studio

      重要

      请记住,在运行工作流之前,为示例项目中使用的资源更新占位符 Amazon 资源名称 (ARN)。

    • 如果您选择了 “运行演示”,Step Functions 将创建一个只读示例项目,该项目使用 Amazon CloudFormation 模板将该模板中列出的 Amazon 资源部署到您的 Amazon Web Services 账户。

      提示

      要查看示例项目的状态机定义,请选择代码

      准备就绪后,选择部署并运行以部署示例项目并创建资源。

      创建这些资源和相关 IAM 权限可能需要长达 10 分钟的时间。在部署资源时,您可以打开 CloudFormation 堆栈 ID 链接以查看正在配置哪些资源。

      创建示例项目中的所有资源后,您可以在状态机页面上看到新的示例项目。

      重要

      CloudFormation 模板中使用的每项服务都可能收取标准费用。

第 2 步:运行状态机

  1. 状态机页面上,选择您的示例项目。

  2. 在示例项目页面上,选择启动执行

  3. 启动执行对话框中,执行以下操作:

    1. (可选)要识别您的执行,您可以在名称框中为其指定一个名称。默认情况下,Step Functions 会自动生成一个唯一的执行名称。

      注意

      Step Functions 允许您为状态机、执行、活动、速率控制和包含非 ASCII 字符的标签创建名称。这些非 ASCII 名称不适用于亚马逊。 CloudWatch为确保您可以跟踪 CloudWatch 指标,请选择仅使用 ASCII 字符的名称。

    2. (可选)在输入框中,以 JSON 格式输入输入值以便运行工作流。

      如果您选择运行演示,则无需提供任何执行输入。

      注意

      如果您部署的演示项目包含预先填充的执行输入数据,请使用该输入来运行状态机。

    3. 选择启动执行

    4. Step Functions 控制台会将您引导到一个以您的执行 ID 为标题的页面。该页面被称为执行详细信息页面。在此页面上,您可以随着执行的进展或者在执行完成后查看执行结果。

      要查看执行结果,请在图表视图上选择各个状态,然后在步骤详细信息窗格中选择各个选项卡,分别查看每个状态的详细信息,包括输入、输出和定义。有关可在执行详细信息页面上查看的执行信息的详细信息,请参阅“执行详细信息”页面 – 界面概述

示例状态机代码

此示例项目中的状态机通过将参数直接传递给这些资源来与 DynamoDB 和 Amazon SQS 集成。

浏览此示例状态机,了解 Step Functions 如何通过连接到 Resource 字段中的 Amazon 资源名称 (ARN),以及向服务 API 传递 Parameters 来控制 DynamoDB 和 Amazon SQS。

有关 Amazon Step Functions 如何控制其他 Amazon 服务的更多信息,请参阅与其他服务 Amazon Step Functions 一起使用

{ "Comment" : "An example of the Amazon States Language for reading messages from a DynamoDB table and sending them to SQS", "StartAt": "Seed the DynamoDB Table", "TimeoutSeconds": 3600, "States": { "Seed the DynamoDB Table": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:sqsconnector-SeedingFunction-T3U43VYDU5OQ", "ResultPath": "$.List", "Next": "For Loop Condition" }, "For Loop Condition": { "Type": "Choice", "Choices": [ { "Not": { "Variable": "$.List[0]", "StringEquals": "DONE" }, "Next": "Read Next Message from DynamoDB" } ], "Default": "Succeed" }, "Read Next Message from DynamoDB": { "Type": "Task", "Resource": "arn:aws:states:::dynamodb:getItem", "Parameters": { "TableName": "sqsconnector-DDBTable-1CAFOJWP8QD6I", "Key": { "MessageId": {"S.$": "$.List[0]"} } }, "ResultPath": "$.DynamoDB", "Next": "Send Message to SQS" }, "Send Message to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage", "Parameters": { "MessageBody.$": "$.DynamoDB.Item.Message.S", "QueueUrl": "https://sqs.us-east-1.amazonaws.com/123456789012/sqsconnector-SQSQueue-QVGQBW134PWK" }, "ResultPath": "$.SQS", "Next": "Pop Element from List" }, "Pop Element from List": { "Type": "Pass", "Parameters": { "List.$": "$.List[1:]" }, "Next": "For Loop Condition" }, "Succeed": { "Type": "Succeed" } } }

有关传递参数和管理结果的更多信息,请参阅以下内容:

IAM 示例

示例项目生成的此示例 Amazon Identity and Access Management (IAM) 策略包括执行状态机和相关资源所需的最低权限。最佳实操是在您的 IAM 策略仅包含这些必需的权限。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dynamodb:GetItem" ], "Resource": [ "arn:aws:dynamodb:ap-northeast-1:123456789012:table/TransferDataRecords-DDBTable-3I41R5L5EAGT" ], "Effect": "Allow" }, { "Action": [ "sqs:SendMessage" ], "Resource": [ "arn:aws:sqs:ap-northeast-1:123456789012:TransferDataRecords-SQSQueue-BKWXTS09LIW1" ], "Effect": "Allow" }, { "Action": [ "lambda:invokeFunction" ], "Resource": [ "arn:aws:lambda:ap-northeast-1:123456789012:function:TransferDataRecords-SeedingFunction-VN4KY2TPAZSR" ], "Effect": "Allow" } ] }

有关在将 Step Functions 与其他 Amazon 服务一起使用时如何配置 IAM 的信息,请参阅集成服务的 IAM 策略