是否可以在AWS CloudFormation JSON模板中创建“订阅”资源而无需创建新的AWS::SNS::Topic
?
在我的情况下,主题是在CloudFormation脚本之外创建的,我想创建一些订阅,涉及在脚本中创建的资源。
即
"DbfExtractQueue": {
"Type": "AWS::SQS::Queue"
},
"EtlSubscription": {
"Type": "AWS::SNS::Subscription",
"Properties": {
"Endpoint": { "Fn::GetAtt": ["DbfExtractQueue", "Arn"] },
"Protocol": "sqs",
"TopicArn": { "Ref": "EtlNotificationTopicARN" }
}
},
EtlNotificationTopicARN被传递到脚本中并代表一个SNS主题ARN。
答案 0 :(得分:11)
现在可以在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"}
}
}
答案 1 :(得分:3)
现在可以使用CloudFormation支持具有Lambda函数的自定义资源类型。
我在这里使用CloudFormation模板创建了一个要点:Build 3083
答案 2 :(得分:0)
正如您已经发现的那样,AWS CloudFormation没有提供预期的AWS::SNS::Subscription
资源(但是)我不知道这可能通过任何其他方式,不幸的是 - 猜测的理由是两者都要么在模板内管理,要么在外部管理,但是你的用例是合理的,我看不出为什么不能提供它的根本原因(也许他们会在某些时候添加它,AWS通常会随着时间的推移扩展他们的API解决这种不一致/缺失的问题。)