AWS::SQS::Queue - AWS CloudFormation
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS::SQS::Queue

AWS::SQS::Queue 资源创建 Amazon Simple Queue Service (Amazon SQS) 标准或 FIFO 队列。

请记住以下注意事项:

  • 如果未指定 FifoQueue 属性,Amazon SQS 将创建标准队列。

    注意

    不能在创建队列类型后更改它,也不能将现有标准队列转换为 FIFO 队列。您必须为应用程序创建新的 FIFO 队列,或者删除现有标准队列并重新将其创建为 FIFO 队列。有关更多信息,请参阅 Amazon Simple Queue Service 开发人员指南中的从标准队列移至 FIFO 队列

  • 如果没有为属性提供值,则使用属性的默认值创建队列。

  • 如果您删除队列,则必须至少等待 60 秒才能创建具有相同名称的队列。

  • 要成功创建新的队列,您必须提供符合队列相关限制且在队列范围内唯一的队列名称。

有关创建 FIFO(先进先出)队列的更多信息,请参阅 Amazon Simple Queue Service 开发人员指南中的使用 AWS CloudFormation 创建队列

语法

要在 AWS CloudFormation 模板中声明此实体,请使用以下语法:

JSON

{ "Type" : "AWS::SQS::Queue", "Properties" : { "ContentBasedDeduplication" : Boolean, "DelaySeconds" : Integer, "FifoQueue" : Boolean, "KmsDataKeyReusePeriodSeconds" : Integer, "KmsMasterKeyId" : String, "MaximumMessageSize" : Integer, "MessageRetentionPeriod" : Integer, "QueueName" : String, "ReceiveMessageWaitTimeSeconds" : Integer, "RedrivePolicy" : Json, "Tags" : [ Tag, ... ], "VisibilityTimeout" : Integer } }

YAML

Type: AWS::SQS::Queue Properties: ContentBasedDeduplication: Boolean DelaySeconds: Integer FifoQueue: Boolean KmsDataKeyReusePeriodSeconds: Integer KmsMasterKeyId: String MaximumMessageSize: Integer MessageRetentionPeriod: Integer QueueName: String ReceiveMessageWaitTimeSeconds: Integer RedrivePolicy: Json Tags: - Tag VisibilityTimeout: Integer

属性

ContentBasedDeduplication

对于先进先出 (FIFO) 队列,指定是否启用基于内容的重复数据删除。在重复数据删除间隔期间,Amazon SQS 会将发送的具有相同内容的消息视为重复条目,并只传输该消息的一个副本。有关更多信息,请参阅 Amazon Simple Queue Service API 参考中的 CreateQueue 操作的 ContentBasedDeduplication 属性。

必需:否

类型:布尔值

Update requires: No interruption

DelaySeconds

队列中所有消息的传输延迟时间(以秒为单位)。您可以指定 0900 (15 分钟) 之间的整数值。默认值为 0

必需:否

类型:整数

Update requires: No interruption

FifoQueue

如果设置为 true,则创建一个 FIFO 队列。如果未指定该属性,则 Amazon SQS 会创建标准队列。有关更多信息,请参阅 Amazon Simple Queue Service 开发人员指南中的 FIFO(先进先出)队列

必需:否

类型:布尔值

Update requires: Replacement

KmsDataKeyReusePeriodSeconds

在再次调用 AWS KMS 之前,Amazon SQS 可以重用数据密钥来对消息进行加密或者解密的时间长度(以秒为单位)。值必须为介于 60 (1 分钟) 到 86,400 (24 小时) 之间的整数。默认值为 300 (5 分钟)。

注意

较短的时间段可提供更高的安全性,但会增加调用 AWS KMS 的次数,从而产生超出免费套餐的费用。有关更多信息,请参阅 Amazon Simple Queue Service 开发人员指南中的数据密钥重用周期的工作方式

必需:否

类型:整数

Update requires: No interruption

KmsMasterKeyId

Amazon SQS 的 AWS 托管客户主密钥 (CMK) 或自定义 CMK 的 ID。要使用 Amazon SQS 的 AWS 托管 CMK,请指定(默认值)别名 alias/aws/sqs。有关更多信息,请参阅下列内容:

必需:否

类型:字符串

Update requires: No interruption

MaximumMessageSize

一条消息可以包含的字节数的限制,超出此限的消息会被 Amazon SQS 拒绝。您可以指定 1,024 字节 (1 KiB) 到 262,144 字节 (256 KiB) 之间的整数值。默认值是 262,144 (256 KiB)。

必需:否

类型:整数

Update requires: No interruption

MessageRetentionPeriod

Amazon SQS 保留消息的秒数。您可以指定 60 秒 (1 分钟) 到 1,209,600 秒 (14 天) 之间的整数值。默认值是 345,600 秒 (4 天)。

必需:否

类型:整数

Update requires: No interruption

QueueName

队列的名称。要创建 FIFO 队列,FIFO 队列的名称必须以 .fifo 后缀结尾。有关更多信息,请参阅 Amazon Simple Queue Service 开发人员指南中的 FIFO(先进先出)队列

如果不指定名称,则 AWS CloudFormation 会生成一个唯一的物理 ID 并将该 ID 用于队列名称。有关更多信息,请参阅 AWS CloudFormation 用户指南中的名称类型

重要

如果您指定一个名称,则无法执行需要替换此资源的更新。您可以执行不需要或者只需要部分中断的更新。如果必须替换资源,请指定新名称。

必需:否

类型:字符串

Update requires: Replacement

ReceiveMessageWaitTimeSeconds

指定 ReceiveMessage 操作调用等待消息进入队列以包括在响应中的持续时间(以秒为单位),而不是在尚无可用消息时返回空响应。您可以指定 1 到 20 之间的整数。短轮询用作默认值或在您为该属性指定 0 时使用。有关更多新信息,请参阅 Amazon SQS 长轮询

必需:否

类型:整数

Update requires: No interruption

RedrivePolicy

一个字符串,其中包含源队列的死信队列功能(重新驱动策略)的参数。有关重新驱动策略和死信队列的更多信息,请参阅 Amazon Simple Queue Service 开发人员指南中的使用 Amazon SQS 死信队列

注意

FIFO 队列的死信队列也必须是 FIFO 队列。同样,标准队列的死信队列也必须是标准队列。

JSON

{ "deadLetterTargetArn" : String, "maxReceiveCount" : Integer }

YAML

deadLetterTargetArn : String

maxReceiveCount : Integer

  • deadLetterTargetArn - 在超出 maxReceiveCount 值后,Amazon SQS 将消息移动到的死信队列的 Amazon 资源名称 (ARN)。

  • maxReceiveCount - 消息在发送到死信队列之前移动到源队列的次数。

必需:否

类型:Json

Update requires: No interruption

Tags

附加到此队列的标签。有关更多信息,请参阅 AWS CloudFormation 用户指南中的资源标签

必需:否

类型Tag 的列表

Update requires: No interruption

VisibilityTimeout

在从队列传送消息后,消息将不可用的时间长度。这样可以阻止其他组件收到相同的信息,并为初始组件预留足够的时间来处理并删除队列上的信息。

值必须在 0 到 43200 秒(12 小时)之间。如果未指定值,则 AWS CloudFormation 将使用默认值 30 秒。

有关 Amazon SQS 队列可见性超时的更多信息,请参阅 Amazon Simple Queue Service 开发人员指南中的可见性超时

必需:否

类型:整数

Update requires: No interruption

返回值

Ref

在将此资源的逻辑 ID 传递给内部 Ref 函数时,Ref 返回 队列 URL。例如:

{ "Ref": "https://sqs.us-east-2.amazonaws.com/123456789012/ab1-MyQueue-A2BCDEF3GHI4" }

For more information about using the Ref function, see Ref.

Fn::GetAtt

Fn::GetAtt 内部函数返回此类型的一个指定属性的值。以下为可用属性和示例返回值。

有关使用 Fn::GetAtt 内部函数的更多信息,请参阅 Fn::GetAtt

Arn

返回队列的 Amazon 资源名称 (ARN)。例如:arn:aws:sqs:us-east-2:123456789012:mystack-myqueue-15PG5C2FC1CW8

QueueName

返回队列名称。例如:mystack-myqueue-1VF9BKQH5BJVI

示例

带有 Cloudwatch 警报的 Amazon SQS 队列

JSON

{ "AWSTemplateFormatVersion" : "2010-09-09", "Description" : "This example template shows how to create an Amazon SQS queue with CloudWatch alarms on queue depth. This template creates an Amazon SQS queue and one or more CloudWatch alarms. You will be billed for the AWS resources used if you create a stack using this template.", "Parameters" : { "AlarmEmail": { "Default": "jane.doe@example.com", "Description": "Email address to notify of operational issues", "Type": "String" } }, "Resources" : { "MyQueue" : { "Type" : "AWS::SQS::Queue", "Properties" : { "QueueName" : "SampleQueue" } }, "AlarmTopic": { "Type": "AWS::SNS::Topic", "Properties": { "Subscription": [{ "Endpoint": { "Ref": "AlarmEmail" }, "Protocol": "email" }] } }, "QueueDepthAlarm": { "Type": "AWS::CloudWatch::Alarm", "Properties": { "AlarmDescription": "Alarm if queue depth increases to more than 10 messages", "Namespace": "AWS/SQS", "MetricName": "ApproximateNumberOfMessagesVisible", "Dimensions": [{ "Name": "QueueName", "Value" : { "Fn::GetAtt" : ["MyQueue", "QueueName"] } }], "Statistic": "Sum", "Period": "300", "EvaluationPeriods": "1", "Threshold": "10", "ComparisonOperator": "GreaterThanThreshold", "AlarmActions": [{ "Ref": "AlarmTopic" }], "InsufficientDataActions": [{ "Ref": "AlarmTopic" }] } } }, "Outputs" : { "QueueURL" : { "Description" : "URL of new Amazon SQS Queue", "Value" : { "Ref" : "MyQueue" } }, "QueueARN" : { "Description" : "ARN of new Amazon SQS Queue", "Value" : { "Fn::GetAtt" : ["MyQueue", "Arn"]} }, "QueueName" : { "Description" : "Name new Amazon SQS Queue", "Value" : { "Fn::GetAtt" : ["MyQueue", "QueueName"]} } } }

YAML

AWSTemplateFormatVersion: "2010-09-09" Description: "This example template shows how to create an Amazon SQS queue with CloudWatch alarms on queue depth. This template creates an Amazon SQS queue and one or more CloudWatch alarms. You will be billed for the AWS resources used if you create a stack using this template." Parameters: AlarmEmail: Default: "jane.doe@example.com" Description: "Email address to notify of operational issues" Type: "String" Resources: MyQueue: Type: AWS::SQS::Queue Properties: QueueName: "SampleQueue" AlarmTopic: Type: AWS::SNS::Topic Properties: Subscription: - Endpoint: Ref: "AlarmEmail" Protocol: "email" QueueDepthAlarm: Type: AWS::CloudWatch::Alarm Properties: AlarmDescription: "Alarm if queue depth increases to more than 10 messages" Namespace: "AWS/SQS" MetricName: "ApproximateNumberOfMessagesVisible" Dimensions: - Name: "QueueName" Value: Fn::GetAtt: - "MyQueue" - "QueueName" Statistic: "Sum" Period: "300" EvaluationPeriods: "1" Threshold: "10" ComparisonOperator: "GreaterThanThreshold" AlarmActions: - Ref: "AlarmTopic" InsufficientDataActions: - Ref: "AlarmTopic" Outputs: QueueURL: Description: "URL of new Amazon SQS Queue" Value: Ref: "MyQueue" QueueARN: Description: "ARN of new AmazonSQS Queue" Value: Fn::GetAtt: - "MyQueue" - "Arn" QueueName: Description: "Name of new Amazon SQS Queue" Value: Fn::GetAtt: - "MyQueue" - "QueueName"

具有死信队列的 Amazon SQS 队列

以下示例模板创建一个源队列和一个死信队列。

注意

因为源队列在其重新驱动策略中指定死信队列,所有源队列依赖于死信队列的创建。

JSON

{ "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "MySourceQueue" : { "Type" : "AWS::SQS::Queue", "Properties" : { "RedrivePolicy": { "deadLetterTargetArn" : {"Fn::GetAtt" : [ "MyDeadLetterQueue" , "Arn" ]}, "maxReceiveCount" : 5 } } }, "MyDeadLetterQueue" : { "Type" : "AWS::SQS::Queue" } }, "Outputs" : { "SourceQueueURL" : { "Description" : "URL of the source queue", "Value" : { "Ref" : "MySourceQueue" } }, "SourceQueueARN" : { "Description" : "ARN of source queue", "Value" : { "Fn::GetAtt" : ["MySourceQueue", "Arn"]} }, "DeadLetterQueueURL" : { "Description" : "URL of dead-letter queue", "Value" : { "Ref" : "MyDeadLetterQueue" } }, "DeadLetterQueueARN" : { "Description" : "ARN of dead-letter queue", "Value" : { "Fn::GetAtt" : ["MyDeadLetterQueue", "Arn"]} } } }

YAML

AWSTemplateFormatVersion: "2010-09-09" Resources: MySourceQueue: Type: AWS::SQS::Queue Properties: RedrivePolicy: deadLetterTargetArn: Fn::GetAtt: - "MyDeadLetterQueue" - "Arn" maxReceiveCount: 5 MyDeadLetterQueue: Type: AWS::SQS::Queue Outputs: SourceQueueURL: Description: "URL of source queue" Value: Ref: "MySourceQueue" SourceQueueARN: Description: "ARN of source queue" Value: Fn::GetAtt: - "MySourceQueue" - "Arn" DeadLetterQueueURL: Description: "URL of dead-letter queue" Value: Ref: "MyDeadLetterQueue" DeadLetterQueueARN: Description: "ARN of dead-letter queue" Value: Fn::GetAtt: - "MyDeadLetterQueue" - "Arn"

另请参阅