本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
传输数据记录(Lambda、DynamoDB、Amazon SQS)
此示例项目演示了如何使用 Amazon DynamoDB 表读取值并将它们发送到 Amazon SQS。Amazon Step Functions. 部署此示例项目将创建 Step Functions 状态机、DynamoDB 表、Amazon Lambda函数和 Amazon SQS 主题。
在本项目中,Step Functions 使用 Lambda 函数填充 DynamoDB 表,使用for
循环读取每个条目,然后将每个条目发送到 Amazon SQS。
创建状态机并预置资源
-
打开Step Functions 控制台
然后选择创建状态机. -
选择 Sample Projects (示例项目),然后选择 Transfer Data Records (传输数据记录)。
此时将显示状态机 Code (代码) 和 Visual Workflow (可视工作流程)。
注意 此状态机中的 Code (代码) 部分引用将为此示例项目创建的 Amazon 资源。
-
选择下一步。
此时将显示 Deploy resources (部署资源) 页面,其中列出了将创建的资源。对于本示例项目,资源包括:
-
一个 Lambda 函数,用于为 DynamoDB 表制作种子
-
Amazon SQS 队列
-
DynamoDB 表
-
-
选择 Deploy Resources (部署资源)。
注意 创建这些资源和相关 IAM 权限可能需要长达 10 分钟的时间。当显示 Deploy resources (部署资源) 页面时,您可打开 Stack ID (堆栈 ID) 链接以查看正在预置的资源。
启动新的执行
-
在 New execution 页面上,输入执行名称 (可选),然后选择 Start Execution (开始执行)。
(可选)为了帮助识别您的执行,您可以在输入执行名称。如果未输入 ID,Step Functions 将自动生成一个唯一 ID。
注意 Step Functions 允许您创建包含非 ASCII 字符的状态机、执行和活动名称。这些非 ASCII 名称不适用于 Amazon CloudWatch。为确保您可以跟踪 CloudWatch 指标,请选择仅使用 ASCII 字符的名称。
-
(可选)您可以转到 Step Functions(Step Functions)上新创建的状态机控制面板选择,然后选择新的执行.
-
执行完成后,您可以在 Visual workflow (可视工作流) 上选择状态,并浏览 Step details (步骤详细信息) 下的 Input (输入) 和 Output (输出)
示例状态机代码
此示例项目中的状态机通过将参数直接传递给这些资源来与 DynamoDB 和 Amazon SQS 集成。
浏览此示例状 DynamoDB 机,查看 Step Functions 如何通过连接到Resource
字段,然后通过Parameters
转到服务 API。
有关 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 与其他一起使用时如何配置 IAM 的信息。Amazon服务,请参阅针对集成服务的 IAM 策略.