У меня есть рабочий шаблон CloudFormation, который создает кластер AWS Elastic Container Service.Вот очищенная версия одного из TaskDefinitions:
Resources:
MyTaskDefinition:
Properties:
ContainerDefinitions:
- Environment:
- Name: ENV_VAR_1
Value: !Ref EnvVar1
- Name: ENV_VAR_2
Value: !Ref EnvVar2
Image: !Ref Image1
LogConfiguration: !Ref MyLogConfiguration
Memory: 2048
Name: my-container-1
- Environment:
- Name: ENV_VAR_1
Value: !Ref EnvVar1
- Name: ENV_VAR_2
Value: !Ref EnvVar2
Image: !Ref Image2
LogConfiguration: !Ref MyLogConfiguration
Memory: 2048
Name: my-container-2
Type: AWS::ECS::TaskDefinition
По мере того, как это TaskDefinition увеличивается, чтобы определить несколько контейнеров, каждый из которых имеет несколько переменных среды, становится трудно читать.Вместо этого я хотел бы сделать следующее:
Resources:
ContainerDefinition1:
Properties:
Environment:
- Name: ENV_VAR_1
Value: !Ref EnvVar1
- Name: ENV_VAR_2
Value: !Ref EnvVar2
Image: !Ref Image1
LogConfiguration: !Ref MyLogConfiguration
Memory: 2048
Name: my-container-1
Type: AWS::ECS::TaskDefinition::ContainerDefinition
ContainerDefinition2:
Properties:
Environment:
- Name: ENV_VAR_1
Value: !Ref EnvVar1
- Name: ENV_VAR_2
Value: !Ref EnvVar2
Image: !Ref Image2
LogConfiguration: !Ref MyLogConfiguration
Memory: 2048
Name: my-container-2
Type: AWS::ECS::TaskDefinition::ContainerDefinition
MyTaskDefinition:
Properties:
ContainerDefinitions:
- !Ref ContainerDefinition1
- !Ref ContainerDefinition2
Type: AWS::ECS::TaskDefinition
Это не работает, потому что Type: AWS::ECS::TaskDefinition::ContainerDefinition
не является допустимым типом ресурса в CloudFormation.
Есть ли другой способ модуляции теларесурса в CloudFormation?Если нет, то как вы порекомендуете, чтобы шаблоны CF читались по мере их роста для определения больших систем?
Я знаком с AWS::Include
Transform, но я бы хотел держать весь шаблон под контролем версий, а неотправка фрагментов на S3, где они не будут отслежены.