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

Posted

技术标签:

【中文标题】在 cloudformation 中将标签作为参数传递【英文标题】:Pass tags as parameters in clouldformation 【发布时间】:2022-01-22 05:27:51 【问题描述】:

我创建了一个简单的模板,我将用它来创建 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 个标签。

【问题讨论】:

【参考方案1】:

我最多有5个标签

那么你需要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"

【讨论】:

以上是关于在 cloudformation 中将标签作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CloudFormation 中将字符串列表作为参数传递?

如何在我的自定义 JSP 标记中将整数值作为参数传递?

在 CloudFormation 中将 Cognito 验证类型设置为链接

如何在 AWS Cloudformation 资源部分的 Fn:Join 中使用用户输入的参数作为参考

如何在 CloudFormation 模板中将预上传的 SSL 证书附加到 ELB?

如何在 Cloudformation 模板中将 EIP 分配给 VPC 的 Autoscaling Group