在 cloudformation 中将标签作为参数传递

Pass tags as parameters in clouldformation

我已经创建了一个简单的模板,我将使用它来创建 s3 存储桶。我的模板是这样的。

Parameters:
  Environment:
    Type: String
    Default: prod
    AllowedPattern: '[a-z\-]+'
  BucketName:
    Type: String
    AllowedPattern: '[a-z\-]+'

Resources:
  Bucket:
    Type: AWS::S3::Bucket
    Properties: 
      BucketName: !Sub foo-${Environment}-${BucketName}
      Tags: 
        - Key: key_1
          Value: foo
        - Key: key_2
          Value: foo
    DeletionPolicy: Retain

我想制作一个通用模板,而不是每次创建 s3 存储桶时都创建不同的模板。我的 s3 存储桶之间唯一不同的是我添加到其中的标签数量。某些 S3 存储桶可能有 2 个标签,而其他存储桶可能有更多。我的 s3 存储桶最多有 5 个标签。所以我想知道是否有一种方法可以通过参数传递标签,这样如果我传递 3 个标签,就会创建 3 个标签,如果我传递 2 个标签,就会创建 2 个标签。

At the most i will have 5 tags

那么你需要5个参数:

  Tag1:
    Type: CommaDelimitedList
    Default: ""
  # ....
  Tag5:
    Type: CommaDelimitedList
    Default: ""

和 5 个条件:

Conditions:
  HasTag1:
   !Not [!Equals [!Ref Tag1, ""] ]
  # ...
  HasTag5:
   !Not [!Equals [!Ref Tag5, ""] ]

结束,然后您使用条件填充您的标签:

      Tags: 
        - !If 
          - HasTag1
          - Key: !Select [0, !Ref Tag1]
            Value: !Select [1, !Ref Tag1]
          - !Ref "AWS::NoValue"
        # ...  
        - !If 
          - HasTag5
          - Key: !Select [0, !Ref Tag5]
            Value: !Select [1, !Ref Tag5]
          - !Ref "AWS::NoValue"