问题描述
我们有一个 AWS Cloud Formation 堆栈模板,它根据输入中收到的实例类型和权重容量创建一个 AutoScaling 组。对于不同类型的堆栈配置文件,输入中的实例类型数量不同,如果输入列表小于或大于 CF 模板中的映射,则返回错误。 如何将未知大小的以逗号分隔的实例类型列表映射到 AutoScaling 实例类型参数(类型:字符串)
Type: 'AWS::AutoScaling::AutoScalingGroup'
DependsOn:
- SharedInfraStack
- NodeManagerSnsTopic
Properties:
MixedInstancesPolicy:
Instancesdistribution:
ondemandAllocationStrategy: prioritized
ondemandBaseCapacity: !Ref NodesPerZone
LaunchTemplate:
LaunchTemplateSpecification:
LaunchTemplateId: !Ref MyTemplate
Version: !GetAtt MyTemplate.LatestVersionNumber
Overrides:
- InstanceType: !Select [ 0,!Ref StaticDnodeVmType ]
WeightedCapacity: !Select [ 0,!Ref StaticDnodeWeightedCapacity ]
- InstanceType: !Select [ 1,!Ref StaticDnodeVmType ]
WeightedCapacity: !Select [ 1,!Ref StaticDnodeWeightedCapacity ]
解决方法
在普通 CFN 中您不能这样做。 CFN 中没有可用于动态创建实例类型的循环。
您基本上有三种选择:
-
开发并使用 custom resource 来创建您的 AutoScalingGroup。
-
开发并使用 macro 动态生成具有正确实例类型数量的模板。
-
不要使用 CFN。还有其他 IaC 工具有循环,可以做你想做的事,例如地形。