将未知大小的实例类型和权重容量列表添加到 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

Java中的ArrayList的容量

错误 2005 (HY000):aws 中的未知 MySQL 服务器主机

将用户输入添加到未知大小的数组