Я искал способ динамически применять теги к ресурсу AWS CloudFormation Stack. Я не мог найти правильный ответ. Ниже приведен мой ресурс стека CloudFormation.
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
ami:
Type: String
instanceType:
Type: String
blockdevice:
Type: String
Resources:
ec2Stack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: !Sub "${s3ArtifactPath}/ec2/ec2-base-app.yml"
Parameters:
ami: !Ref ami
instanceType: !Ref instanceType
blockdevice: !Ref blockdevice
Tags:
- Key: sampleKey
Value: sampleValue
Я пытался найти способ, где я передаю только список или просто указываю, что параметр - это раздел Теги . Вот что я сделал
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
ami:
Type: String
instanceType:
Type: String
Default: nbs
MinLength: 3
MaxLength: 5
blockdevice:
Type: String
tagsJsonList:
Type: String
Default: '[{"key1":"value1"}, {"key2":"value2"}]'
Resources:
ec2Stack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: !Sub "${s3ArtifactPath}/ec2/ec2-base-app.yml"
Parameters:
ami: !Ref ami
instanceType: !Ref instanceType
blockdevice: !Ref blockdevice
Tags: !Ref tagsJsonList
Я ожидал, что CloudFormation сформулирует список тегов из переменной. Цель этого заключается в том, чтобы мы могли масштабировать список, и новые пары ключ-значение тегов будут добавляться автоматически. Этот подход не сработал.
Я также попробовал следующий способ
AWSTemplateFormatVersion: '2010-09-09'
Parameters:
ami:
Type: String
instanceType:
Type: String
Default: nbs
MinLength: 3
MaxLength: 5
blockdevice:
Type: String
Resources:
ec2Stack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: !Sub "${s3ArtifactPath}/ec2/ec2-base-app.yml"
Parameters:
ami: !Ref ami
instanceType: !Ref instanceType
blockdevice: !Ref blockdevice
Tags:
- Key: !Select [0, !Split ["=", !Select [0, !Split [",", !ImportValue someExport] ] ] ]
Value: !Select [1, !Split ["=", !Select [0, !Split [",", !ImportValue someExport] ] ] ]
# someExport --> k1=v1,k2=v2,k3=v3
- Одна из проблем этого подхода заключается в том, что я не могу использовать встроенную функцию Sub, чтобы сделать переменную someExportдинамический.
- Другая проблема заключается в том, что мне придется написать несколько операторов для операторов Key, Value для применения нескольких тегов