我正在尝试将一组标签应用于SNS主题,并且其中一个标签引用一个参数。下面给出的是我的模板的一部分(我减少了标签以突出我的问题)
AWSTemplateFormatVersion: 2010-09-09
Description: Deploys resources
Parameters:
MyParameter:
Type: String
Default: "testEnvironment"
Mappings:
Mp1:
Mp1-1:
tags:
- Key: key1
Value: !Ref MyParameter
Resources:
snsTopic:
Type: AWS::SNS::Topic
Properties:
DisplayName: snsTopic
TopicName: snsTopic
Tags: !FindInMap [Mp1, Mp1-1, tags]
现在,当我在CloudFormation上运行它时,出现以下错误:
Every entry in list for property Tags must be a map of String
有人知道如何解决此问题,或者我做错了什么?
答案 0 :(得分:1)
您不能以这种方式定义映射。 Docs清楚地说:
您不能在映射部分中包含参数,伪参数或内部函数。
所以您的映射应该是
Mappings:
Mp1:
Mp1-1:
tags:
- Key: key1
Value: MyValue # <-- No !Ref here, just fixed string
如果要使用!Ref
MyParameter,则应将其放在AWS::SNS::Topic
资源中。
Resources:
snsTopic:
Type: AWS::SNS::Topic
Properties:
DisplayName: snsTopic
TopicName: snsTopic
Tags:
- Key: key1
Value: !Ref MyParameter