2016-11-13 51 views
2

我使用AWS CloudFormation搭建一個微服務堆棧。我的AWS CloudFormation模板創建資源,如:Lambda函數,SNS主題和API網關。SNS + CloudFormation

此微服務做了一些工作,併發布消息到SNS話題。其他微服務訂閱此主題。

我面臨的問題是,當我升級我的微服務的CloudFormation模板(有時我需要重新部署,並重新創建所有資源),SNS的主題改變其ARN。因此,所有使用這個主題的微服務都需要改變。

我想我可以創建一個單獨的CloudFormation模板的SNS主題(我有多個微服務)。

  • 這會不會是一個好方法?
  • 如果不是,推薦的方法是什麼?
+0

你可以分享你的模板?或者在發生這種情況時分享您正在改變的內容 –

+0

在這種情況下,我升級了無服務器的框架版本。所以我知道它會刪除並重新創建堆棧。 –

+0

如何在發佈者和訂閱者堆棧之間共享SNS主題? – rbarni

回答

0

按照AWS CloudFormation文檔,有可供3個屬性的SNS話題,只有換到第三個屬性(即TopicName)將導致更換的SNS資源(並導致一代一個新的ARN)。

由於您在CloudFormation堆棧中加入資源然後重新創建它們(您提到這就是您使用的無服務器框架的工作方式),您可以通過指定TopicName屬性來保留SNS主題ARN在你的模板SNS主題(只有當一個未指定TopicName是當CloudFormation出現,並分配一個隨機的名字,否則,使用用戶指定的名稱)。

話雖這麼說,你的情況似乎有點不自然給我。如果您尚未通過CloudFormation管理該主題的訂閱,那麼我建議您這麼做,並且如果所有SNS主題ARN發生更改,它都會自動爲替換的SNS主題創建SNS訂閱。

編號: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html

0

@ p.magalhaes - 在理想情況下,你不應該刪除堆棧和再創造它,而你應該更新cloudformation堆棧。如果你更新你的堆棧,它不會刪除SNS主題,因爲在那裏不會有任何改變。但是,如果你有刪除和創建堆棧,你可以爲所有使用嵌套堆棧(參見 - https://aws.amazon.com/blogs/devops/use-nested-stacks-to-create-reusable-templates-and-support-role-specialization/)您的組件單獨堆疊中的特定需求