是否可以在不创建新AWS::SNS::Topic
的情况下在 AWS CloudFormation JSON 模板中创建"订阅"资源?
就我而言,该主题是在 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。
自 2016 年 11 月起,现在可以直接在原生 CloudFormation 中执行此操作:
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html
上述文档中的示例。
亚姆:
MySubscription:
Type: AWS::SNS::Subscription
Properties:
Endpoint: test@email.com
Protocol: email
TopicArn: !Ref 'MySNSTopic'
杰森:
"MySubscription" : {
"Type" : "AWS::SNS::Subscription",
"Properties" : {
"Endpoint" : "test@email.com",
"Protocol" : "email",
"TopicArn" : {"Ref" : "MySNSTopic"}
}
}
现在有可能,因为CloudFormation支持带有Lambda函数的自定义资源类型。
正如您已经发现的那样,AWS CloudFormation (尚)不提供预期的AWS::SNS::Subscription
资源,不幸的是,我不知道这可以通过任何其他方式实现 - 猜测基本原理是两者都在模板内或外部管理,但您的用例是合理的,我看不出为什么这不应该可用的根本原因(也许他们会在某个时候添加它, AWS 通常会随着时间的推移扩展其 API,以解决此类不一致/缺失问题)。