【问题标题】:AWS CloudFormation, refer parameters in tagsAWS CloudFormation,在标签中引用参数
【发布时间】:2020-03-12 09:17:40
【问题描述】:

我正在尝试将一组标签应用于 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

有人知道如何解决这个问题或我做错了什么吗?

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation


    【解决方案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   
    

    【讨论】:

    • 这对我没有帮助,MyValue 作为 cloudformation cli 命令的一部分来自外部,所以如果我想包含基于命令行参数的标记值,我该怎么做?
    • 您必须更改模板并将标签放入资源中,而不是映射。在那里你可以参考参数。
    • 好的,但是我的一些标签对其他资源也是通用的,所以如果我遵循这个我将不得不复制它们,无论如何要在映射和然后使用内在函数或其他东西将它们与资源下的附加标签合并
    • CloudFormation 不是一种编程语言,所以它有很多限制。如果您真的想在不复制和粘贴的情况下执行此操作,那么可能值得考虑创建基本的查找和替换macro
    猜你喜欢
    • 2015-03-04
    • 1970-01-01
    • 2020-01-15
    • 2018-08-15
    • 2022-01-22
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    相关资源
    最近更新 更多