是否可以在不创建主题的情况下使用CloudFormation创建SNS订阅?

ste*_*nlz 12 amazon-web-services aws-cloudformation

是否可以在AWS CloudFormation JSON模板中创建"订阅"资源而无需创建新的AWS::SNS::Topic

在我的例子中,主题是在CloudFormation脚本之外创建的,我想创建一些订阅,涉及在脚本中创建的资源.

IE

   "DbfExtractQueue": {
        "Type": "AWS::SQS::Queue"
    },

    "EtlSubscription": {
        "Type": "AWS::SNS::Subscription",
        "Properties": {
            "Endpoint": { "Fn::GetAtt": ["DbfExtractQueue", "Arn"] },
            "Protocol": "sqs",
            "TopicArn": { "Ref": "EtlNotificationTopicARN" }
        }
    },
Run Code Online (Sandbox Code Playgroud)

EtlNotificationTopicARN被传递到脚本中并表示SNS主题ARN.

Eri*_*ond 12

现在可以在2016年11月直接在原生CloudFormation中执行此操作:

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html

以上文档中的示例.

YAML:

MySubscription:
  Type: AWS::SNS::Subscription
  Properties:
    Endpoint: test@email.com
    Protocol: email
    TopicArn: !Ref 'MySNSTopic'
Run Code Online (Sandbox Code Playgroud)

JSON:

"MySubscription" : {
  "Type" : "AWS::SNS::Subscription",
  "Properties" : {
    "Endpoint" : "test@email.com",
    "Protocol" : "email",
    "TopicArn" : {"Ref" : "MySNSTopic"}
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你想在订阅上设置rawMessageDelivery,那你就不幸了,因为在创建订阅时没有办法指定它,并且资源没有返回它的arn以便能够在之后设置它.似乎唯一的方法是使用自定义lambda函数,如果你想使用rawMessageDelivery.如果不使用自定义lambda函数,您是否知道任何方法? (2认同)

Ste*_*pel 0

正如您已经发现的那样,AWS CloudFormation尚未提供预期的AWS::SNS::Subscription资源,不幸的是,我不知道可以通过任何其他方式实现这一点 - 猜测理由是两者要么在模板内管理,要么在外部管理,但是你的用例是合理的,我看不出为什么它不可用的根本原因(也许他们会在某个时候添加它,AWS通常会随着时间的推移扩展他们的API以解决此类不一致/缺失)。