本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Step Functions 向 Amazon SQS 队列发送消息
您可以使用以下亚马逊 SQS API 操作和 Step Functions 工作流程的Task
示例状态代码,向亚马逊 SQS 队列发送消息。
要了解如何在 Step Functions 中与 Amazon 服务集成,请参阅集成 服务和在 Step Functions 中将参数传递给服务 API。
要了解有关在 Amazon SQS 中接收消息的更多信息,请参阅《Amazon Simple Queue Service 开发商指南》中的接收和删除消息。
以下示例包括一个Task
状态 (JSONata),该状态用于发送带有可选内容的亚马逊简单队列服务 (Amazon SQS) Amazon SQS Service 消息:MessageAttributes
{
"StartAt": "Send to SQS",
"States": {
"Send to SQS": {
"Type": "Task",
"Resource": "arn:aws:states:::sqs:sendMessage",
"Arguments": {
"QueueUrl": "https://sqs.us-east-1.amazonaws.com/account-id
/myQueue",
"MessageBody": "{% $states.input.message %}",
"MessageAttributes": {
"my_attribute_no_1": {
"DataType": "String",
"StringValue": "attribute1
"
},
"my_attribute_no_2": {
"DataType": "String",
"StringValue": "attribute2
"
}
}
},
"End": true
}
}
}
以下状态机包括发布到 Amazon SQS 队列然后等待任务令牌返回的Task
状态。请参阅等待具有任务令牌的回调。
{
"StartAt":"Send message to SQS",
"States":{
"Send message to SQS":{
"Type":"Task",
"Resource":"arn:aws:states:::sqs:sendMessage.waitForTaskToken",
"Arguments":{
"QueueUrl":"https://sqs.us-east-1.amazonaws.com/account-id
/myQueue",
"MessageBody":{
"Input" : "{% $states.input.message %}",
"MyTaskToken" : "{% $states.context.Task.Token %}"
}
},
"End":true
}
}
}
优化的亚马逊 SQS APIs
中的参数 Step Functions 表示为 PascalCase
即使原生服务 API 在 camelCase 中(例如 API 操作)startSyncExecution
,您也可以在中指定参数 PascalCase,例如:。StateMachineArn
输入或结果数据的配额
在服务之间发送或接收数据时,任务的最大输入或结果为 256 KiB 的数据作为 UTF-8 编码字符串。请参阅与状态机执行相关的配额。
用于调用 Amazon SQS 的 IAM 策略
以下示例模板展示了如何根据状态机定义中的资源 Amazon Step Functions 生成 IAM 策略。有关更多信息,请参阅Step Functions 如何为集成服务生成 IAM 策略和探索 Step Functions 中的服务集成模式。
静态资源
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sqs:SendMessage"
],
"Resource": [
"arn:aws:sqs:region
:account-id
:queueName
"
]
}
]
}
动态资源
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sqs:SendMessage"
],
"Resource": "*"
}
]
}