在 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 中将字符串列表作为参数传递?
在 CloudFormation 中将 Cognito 验证类型设置为链接
如何在 AWS Cloudformation 资源部分的 Fn:Join 中使用用户输入的参数作为参考