2013-09-05 2 views
11

Возможно ли создать ресурс «Подписка» в шаблоне JSON CloudSormation AWS без создания нового AWS::SNS::Topic?Возможно ли создать подписку SNS с CloudFormation без создания темы?

В моем случае тема создается за пределами сценария CloudFormation, и я хотел бы создать некоторые подписи к ней, используя ресурсы, созданные в скрипте.

I.E.

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

    "EtlSubscription": { 
     "Type": "AWS::SNS::Subscription", 
     "Properties": { 
      "Endpoint": { "Fn::GetAtt": ["DbfExtractQueue", "Arn"] }, 
      "Protocol": "sqs", 
      "TopicArn": { "Ref": "EtlNotificationTopicARN" } 
     } 
    }, 

EtlNotificationTopicARN передается в скрипт и представляет собой тему SNN для ARN.

+0

Это шаблон Observer 101: Субъект не должен ничего об наблюдателях знает. Тот факт, что CloudFormation не поддерживает его, заставляет меня бросить мне глаза. – giorgiosironi

ответ

1

Как вы уже обнаружили, AWS CloudFormation не предоставляет ожидаемый ресурс AWS::SNS::Subscription (пока), и я не знаю, что это возможно с помощью любых других средств, к сожалению - угадайте, что логическое обоснование заключается в том, что оба они управляются в шаблоне или извне, но ваш случай использования звучит, и я не вижу основополагающей причины, почему это не должно быть доступно (возможно, они добавят его в какой-то момент, AWS обычно расширяет свои API со временем, чтобы устранить такие несоответствия/пропуски).

+0

Хорошо, спасибо за подтверждение. Я закончил тем, что использовал некоторые вызовы API ruby ​​для подключения очереди к теме, но, как вы сказали, было бы неплохо увидеть там в какой-то момент. ура! – stefanlz

3

Теперь это возможно, так как CloudFormation поддерживает пользовательские типы ресурсов с помощью функций лямбда.

Я создал суть здесь с CloudFormation tamplate: https://gist.github.com/martinssipenko/4d7b48a3d6a6751e7464.js

+2

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. –

+0

Я считаю, что ссылка должна быть https://gist.github.com/martinssipenko/4d7b48a3d6a6751e7464 – giorgiosironi

8

Теперь можно сделать это прямо в родном 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"} 
    } 
} 
+2

Если вы хотите установить rawMessageDelivery на подписку, вам не повезло, я думаю, так как нет способа указать ее при создании подписки и ресурс не возвращает свой arn, чтобы иметь возможность установить его впоследствии. Кажется, единственный способ - использовать пользовательскую функцию лямбда для нее, если вы хотите использовать rawMessageDelivery. Знаете ли вы о любом способе без использования пользовательской лямбда-функции? – luk2302

Смежные вопросы