2016-11-13 50 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/)您的组件单独堆叠中的特定需求