如何导出 SNS 主题以在 Cloudformation 中的不同堆栈中使用
Posted
技术标签:
【中文标题】如何导出 SNS 主题以在 Cloudformation 中的不同堆栈中使用【英文标题】:How to export SNS topic to be used in different stacks in Cloudformation 【发布时间】:2018-08-06 03:51:44 【问题描述】:在一个 Cloudformation 模板中,我创建了一个 SNS 主题并将其导出。请注意,您无法导出 SNS 主题的 Arn
,因为该属性不适用于 docs 上的 GetAtt
。
BaseStack
Outputs:
AlarmSNSTopic:
Description: Arn for SNS topic related to alarms
Export:
Name: AlarmSNSTopic
Value: "Fn::GetAtt": ["MyAlarmSNSTopic", "TopicName"]
然后在另一个模板中,我尝试使用以下内容引用该导出:
功能栈 1
InputQueueNoMessages:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmDescription: Some Alarm
...
AlarmActions:
Fn::ImportValue: AlarmSNSTopic
当我这样做时,Cloudformation 告诉我它需要一个 ARN,而不是主题名称。
Invalid arn syntax: Blah-AlarmSNSTopic-random
这可能吗?我错过了什么吗?
【问题讨论】:
【参考方案1】:AWS::CloudWatch::Alarm
需要 AlarmActions
的 ARN,但您导出了主题名称。您的输出值应该是 ARN。
Outputs:
AlarmSNSTopic:
Description: Arn for SNS topic related to alarms
Export:
Name: AlarmSNSTopic
Value: !Ref MyAlarmSNSTopic
【讨论】:
【参考方案2】:只需做一个参考,它会返回主题 ARN。
Value: !Ref MyAlarmSNSTopic
参考
对于 AWS::SNS::Topic 资源,Ref 内部函数 返回主题 ARN,例如: arn:aws:sns:us-east-1:123456789012:mystack-mytopic-NZJ5JSMVGFIE。
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-topic.html#w2ab2c21c10d983c11
【讨论】:
你不能ref
erence 在不同的堆栈中创建资源而不导出它们,除非我弄错了?例如aws.amazon.com/blogs/aws/…
你可以在导出时做一个 ref 而不是 getatt以上是关于如何导出 SNS 主题以在 Cloudformation 中的不同堆栈中使用的主要内容,如果未能解决你的问题,请参考以下文章
如何通过电子邮件订阅带有电子邮件端点的 Amazon SNS 主题?