如何确认使用CloudFormation创建的订阅?

时间:2018-02-08 12:22:50

标签: amazon-web-services amazon-cloudformation amazon-sns

我创建了一个CF脚本,用于创建包含Web服务的EC2实例。它还创建了一个SNS主题和一个使用此Web服务作为其http端点的订阅。

脚本成功创建堆栈;主题和订阅存在。但是,订阅仍处于PendingConfirmation状态。

我必须做些什么才能让我的脚本在创建时确认此订阅?

2 个答案:

答案 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"
    }