Возможно ли создать SNS-подписку с CloudFormation без создания темы?
Возможно ли создать ресурс "Subscription" в шаблоне JSON CloudSormation AWS без создания нового AWS::SNS::Topic
?
В моем случае тема создается за пределами CloudFormation script, и я хотел бы создать некоторые подписи к ней, используя ресурсы, созданные в script.
т.е.
"DbfExtractQueue": {
"Type": "AWS::SQS::Queue"
},
"EtlSubscription": {
"Type": "AWS::SNS::Subscription",
"Properties": {
"Endpoint": { "Fn::GetAtt": ["DbfExtractQueue", "Arn"] },
"Protocol": "sqs",
"TopicArn": { "Ref": "EtlNotificationTopicARN" }
}
},
EtlNotificationTopicARN передается в script и представляет собой SNN-тему ARN.
Ответы
Ответ 1
Как вы уже обнаружили, AWS CloudFormation не предоставляет ожидаемый ресурс AWS::SNS::Subscription
(пока), и я не знаю об этом возможно, любыми другими способами, к сожалению - угадайте, что оба они управляются внутри шаблона или извне, но ваш случай использования звучит, и я не вижу фундаментальной причины, почему это не должно быть доступно (возможно, они добавят это в какой-то момент, AWS обычно расширяет свои API со временем, чтобы устранить такие несоответствия/пропуски).
Ответ 2
Теперь можно сделать это непосредственно в native CloudFormation по состоянию на ноябрь 2016 года:
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html
Образцы из приведенной выше документации.
YAML:
MySubscription:
Type: AWS::SNS::Subscription
Properties:
Endpoint: [email protected]
Protocol: email
TopicArn: !Ref 'MySNSTopic'
JSON:
"MySubscription" : {
"Type" : "AWS::SNS::Subscription",
"Properties" : {
"Endpoint" : "[email protected]",
"Protocol" : "email",
"TopicArn" : {"Ref" : "MySNSTopic"}
}
}
Ответ 3
Теперь это возможно, так как CloudFormation поддерживает пользовательские типы ресурсов с функциями Lambda.
Я создал суть здесь с помощью шаблона CloudFormation: https://gist.github.com/martinssipenko/4d7b48a3d6a6751e7464.js