【发布时间】:2018-11-21 05:19:18
【问题描述】:
我有一个可以创建 AWS Elastic Container Service 集群的有效 CloudFormation 模板。以下是其中一个 TaskDefinition 的净化版本:
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 转换,但我希望将整个模板置于版本控制之下,而不是将 sn-ps 发布到 S3 以使其不被跟踪。
【问题讨论】:
标签: amazon-web-services amazon-cloudformation amazon-ecs