AWS::SNS::Subscription
AWS::SNS::Subscription
资源将终端节点订阅到 Amazon Simple Notification Service (Amazon SNS) 主题。对于要创建的订阅,终端节点的拥有者必须确认订阅。
语法
要在 AWS CloudFormation 模板中声明此实体,请使用以下语法:
JSON
{ "Type" : "AWS::SNS::Subscription", "Properties" : { "DeliveryPolicy" :
Json
, "Endpoint" :String
, "FilterPolicy" :Json
, "Protocol" :String
, "RawMessageDelivery" :Boolean
, "RedrivePolicy" :Json
, "Region" :String
, "TopicArn" :String
} }
YAML
Type: AWS::SNS::Subscription Properties: DeliveryPolicy:
Json
Endpoint:String
FilterPolicy:Json
Protocol:String
RawMessageDelivery:Boolean
RedrivePolicy:Json
Region:String
TopicArn:String
属性
DeliveryPolicy
-
分配给订阅的传输策略 JSON。在 HTTP/S 终端节点订阅了主题的情况下,允许订阅者定义消息传输重试策略。有关更多信息,请参阅 Amazon Simple Notification Service API 参考 中的
GetSubscriptionAttributes
以及 Amazon SNS 开发人员指南 中的消息传输重试。必需:否
类型:Json
Update requires: No interruption
Endpoint
-
订阅的终端节点。终端节点值取决于您指定的协议。有关更多信息,请参阅 Amazon Simple Notification Service API 参考 中的
Subscribe
操作的Endpoint
参数。必需:否
类型:字符串
Update requires: Replacement
FilterPolicy
-
分配给订阅的筛选策略 JSON。允许订阅者筛选出不需要的消息。有关更多信息,请参阅 Amazon Simple Notification Service API 参考 中的
GetSubscriptionAttributes
以及 Amazon SNS 开发人员指南 中的消息筛选。必需:否
类型:Json
Update requires: No interruption
Protocol
-
订阅的协议。有关更多信息,请参阅 Amazon Simple Notification Service API 参考 中的
Subscribe
操作的Protocol
参数。必需:是
类型:字符串
Update requires: Replacement
RawMessageDelivery
-
在设置为
true
时,启用原始消息传输。原始消息不包含任何 JSON 格式,并且可发送到 Amazon SQS 和 HTTP/S 终端节点。有关更多信息,请参阅 Amazon Simple Notification Service API 参考 中的GetSubscriptionAttributes
。必需:否
类型:布尔值
Update requires: No interruption
RedrivePolicy
-
指定后,将无法传输的消息发送到指定的 Amazon SQS 死信队列。由于客户端错误(例如,在无法访问订阅的终端节点时)或服务器错误(例如,在支持订阅的终端节点的服务变得不可用时)而无法传输的消息将保留在死信队列中,以进行进一步分析或重新处理。
必需:否
类型:Json
Update requires: No interruption
Region
-
对于跨区域订阅,为主题所在的区域。
如果没有指定区域,CloudFormation 将使用发起人的区域作为默认区域。
如果您执行只更新
AWS::SNS::Subscription
资源的Region
属性的更新操作,则该操作将失败,除非您执行下列操作之一:-
将
Region
从NULL
更新为发起人区域。 -
将
Region
从发起人区域更新为NULL
。
必需:否
类型:字符串
Update requires: No interruption
-
TopicArn
-
要订阅的主题的 ARN。
必需:是
类型:字符串
Update requires: Replacement
示例
创建具有必需属性的订阅
以下示例创建仅具有终端节点、协议和主题 ARN 的订阅。
JSON
"MySubscription" : { "Type" : "AWS::SNS::Subscription", "Properties" : { "Endpoint" : "test@example.com", "Protocol" : "email", "TopicArn" : { "Ref" : "MySNSTopic" } } }
YAML
MySubscription: Type: AWS::SNS::Subscription Properties: Endpoint: test@example.com Protocol: email TopicArn: !Ref 'MySNSTopic'
创建具有可选属性的订阅
以下示例使用筛选策略、传输策略和启用的原始邮件传输来创建订阅。
您只能在独立的 Amazon SNS 订阅上设置订阅属性(而不是在主题中嵌套的订阅上)。
YAML
AWSTemplateFormatVersion: 2010-09-09 Resources: CarSalesTopic: Type: 'AWS::SNS::Topic' ERPSubscription: Type: 'AWS::SNS::Subscription' Properties: TopicArn: !Ref CarSalesTopic Endpoint: !GetAtt - ERPIntegrationQueue - Arn Protocol: sqs RawMessageDelivery: 'true' CRMSubscription: Type: 'AWS::SNS::Subscription' Properties: TopicArn: !Ref CarSalesTopic Endpoint: !GetAtt - CRMIntegrationQueue - Arn Protocol: sqs RawMessageDelivery: 'true' FilterPolicy: buyer-class: - vip SCMSubscription: Type: 'AWS::SNS::Subscription' Properties: TopicArn: !Ref CarSalesTopic Endpoint: !Ref myHttpEndpoint Protocol: https DeliveryPolicy: healthyRetryPolicy: numRetries: 20 minDelayTarget: 10 maxDelayTarget: 30 numMinDelayRetries: 3 numMaxDelayRetries: 17 numNoDelayRetries: 0 backoffFunction: exponential ERPIntegrationQueue: Type: 'AWS::SQS::Queue' Properties: {} CRMIntegrationQueue: Type: 'AWS::SQS::Queue' Properties: {} Parameters: myHttpEndpoint: Type: String
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "CarSalesTopic": { "Type": "AWS::SNS::Topic" }, "ERPSubscription": { "Type": "AWS::SNS::Subscription", "Properties": { "TopicArn": { "Ref": "CarSalesTopic" }, "Endpoint": { "Fn::GetAtt": ["ERPIntegrationQueue", "Arn"] }, "Protocol": "sqs", "RawMessageDelivery": "true" } }, "CRMSubscription": { "Type": "AWS::SNS::Subscription", "Properties": { "TopicArn": { "Ref": "CarSalesTopic" }, "Endpoint": { "Fn::GetAtt": ["CRMIntegrationQueue", "Arn"] }, "Protocol": "sqs", "RawMessageDelivery": "true", "FilterPolicy": { "buyer-class": [ "vip" ] } } }, "SCMSubscription": { "Type": "AWS::SNS::Subscription", "Properties": { "TopicArn": { "Ref": "CarSalesTopic" }, "Endpoint": { "Ref": "myHttpEndpoint" }, "Protocol": "https", "DeliveryPolicy": { "healthyRetryPolicy": { "numRetries": 20, "minDelayTarget": 10, "maxDelayTarget": 30, "numMinDelayRetries": 3, "numMaxDelayRetries": 17, "numNoDelayRetries": 0, "backoffFunction": "exponential" } } } }, "ERPIntegrationQueue": { "Type": "AWS::SQS::Queue", "Properties": {} }, "CRMIntegrationQueue": { "Type": "AWS::SQS::Queue", "Properties": {} } }, "Parameters": { "myHttpEndpoint": { "Type": "String" } } }