如何在AWS CloudFormation模板中暴露SNS Topic的TopicArn输出值
问题根因
你之前的Outputs配置引用失败是两个错误导致的:
- 资源逻辑ID不匹配:Resources块中定义的Service Catalog预配置产品逻辑ID是
LabTrainingSnsTopic,但Outputs里写的是LabTrainingHigSnsTopic,ID拼写错误自然无法定位资源 - GetAtt属性路径错误:
AWS::ServiceCatalog::CloudFormationProvisionedProduct资源不支持直接通过.Resources.xxx的路径取底层创建的资源属性,正确的取值路径是先取该资源的Outputs属性,再匹配底层SNS产品模板暴露的输出键名。
正确配置方案
你使用的SNS预配置产品(prod-4iafsjovqrsrm)默认已经在自身模板的Outputs中暴露了TopicArn,直接按如下写法修改Outputs块即可:
Outputs: AccountID: Description: 堆栈部署所在的账号ID Value: !Ref 'AWS::AccountId' TopicArn: Description: 自动创建的SNS主题ARN Value: !GetAtt LabTrainingSnsTopic.Outputs.TopicArn
如果你部署时提示Outputs中不存在TopicArn键,可以先随意填一个不存在的键名触发部署报错,报错事件中会列出该预配置产品所有可用的输出键名,替换成实际对应的SNS ARN键名即可。
配置完成后重新更新堆栈,就能直接在CloudFormation控制台的Outputs选项卡看到完整的SNS Topic ARN,不需要跳转至Service Catalog或SNS控制台查找,复制后即可直接用于订阅配置。
内容的提问来源于stack exchange,提问作者johnnybgood97
相关产品推荐
相关产品推荐

