将未知大小的实例类型和权重容量列表添加到 AWS CF 模板 (YAML) 中的 Auto Scaling 组
Posted
技术标签:
【中文标题】将未知大小的实例类型和权重容量列表添加到 AWS CF 模板 (YAML) 中的 Auto Scaling 组【英文标题】:Add unknown sized list of instance types and weight capacities to Auto Scaling group in AWS CF template(YAML) 【发布时间】:2021-04-17 23:37:25 【问题描述】:我们有一个 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 ]
【问题讨论】:
【参考方案1】:在普通的 CFN 中你不能这样做。 CFN 中没有可用于动态创建实例类型的循环。
你基本上有三个选择:
开发并使用 custom resource 创建您的 AutoScalingGroup。
开发并使用macro 动态生成具有正确数量的实例类型的模板。
不要使用 CFN。还有其他 IaC 工具有循环,可以做你想做的事,例如地形。
【讨论】:
以上是关于将未知大小的实例类型和权重容量列表添加到 AWS CF 模板 (YAML) 中的 Auto Scaling 组的主要内容,如果未能解决你的问题,请参考以下文章
Terraform 0.11:无法将动态安全组添加到 aws 实例
使用 Psycopg2 和 unnest 时的“未知”数据类型
如何使用 iText 列表将具有不同权重的文本添加到单个 ListItem