13

是否可以在 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" }
        }
    },

EtlNotificationTopicARN 被传递到脚本中并表示一个 SNS 主题 ARN。

4

3 回答 3

14

自 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'

JSON:

"MySubscription" : {
  "Type" : "AWS::SNS::Subscription",
  "Properties" : {
    "Endpoint" : "test@email.com",
    "Protocol" : "email",
    "TopicArn" : {"Ref" : "MySNSTopic"}
  }
}
于 2016-11-22T22:45:23.043 回答
3

由于 CloudFormation 支持带有 Lambda 函数的自定义资源类型,因此现在可以实现了。

我在这里用 CloudFormation 模板创建了一个要点:https ://gist.github.com/martinssipenko/4d7b48a3d6a6751e7464.js

于 2015-11-06T14:18:21.727 回答
0

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

于 2013-09-05T20:46:48.297 回答