我创建了一个CF脚本,用于创建包含Web服务的EC2实例。它还创建了一个SNS主题和一个使用此Web服务作为其http端点的订阅。
脚本成功创建堆栈;主题和订阅存在。但是,订阅仍处于PendingConfirmation状态。
我必须做些什么才能让我的脚本在创建时确认此订阅?
答案 0 :(得分:0)
您需要Subscribe
到端点才能使其正常工作。
阅读SubscribeURL
的值并访问该网址。要确认订阅并开始在端点接收通知,您必须访问SubscribeURLURL
(例如,通过向URL发送HTTP GET请求)
当您访问该URL时,您将收到类似于以下XML文档的响应。该文档返回ConfirmSubscriptionResult元素中端点的订阅ARN。
<ConfirmSubscriptionResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/">
<ConfirmSubscriptionResult>
<SubscriptionArn>arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55</SubscriptionArn>
</ConfirmSubscriptionResult>
<ResponseMetadata>
<RequestId>075ecce8-8dac-11e1-bf80-f781d96e9307</RequestId>
</ResponseMetadata>
</ConfirmSubscriptionResponse>
作为访问SubscribeURL
的替代方法,您可以使用ConfirmSubscription操作确认订阅,并将令牌设置为SubscriptionConfirmation
消息中的相应值。如果您只想允许主题所有者和订阅所有者能够取消订阅端点,则使用AWS签名调用ConfirmSubscription操作。
您可以参考此AWS Documentation
希望这有帮助!
答案 1 :(得分:0)
我遇到了类似的问题,但我的问题最终是配置错误的CloudFomation模板。必须授予AWS::SQS::QueuePolicy
才能授予SNS主题将消息发送到队列的权限。
"SQSQueuePolicy": {
"Properties": {
"PolicyDocument": {
"Id": "usecase1",
"Statement": [
{
"Action": "SQS:SendMessage",
"Condition": {
"ArnEquals": {
"aws:SourceArn": {
"Ref": "SnsTopic"
}
}
},
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Resource": {
"Fn::GetAtt": [
"SqsQueue",
"Arn"
]
},
"Sid": "1"
}
],
"Version": "2012-10-17"
},
"Queues": [
{
"Ref": "SqsQueue"
}
]
},
"Type": "AWS::SQS::QueuePolicy"
}