将未知大小的实例类型和权重容量列表添加到 AWS CF 模板 (YAML) 中的 Auto Scaling 组

问题描述

我们有一个 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 中没有可用于动态创建实例类型的循环。

您基本上有三种选择

  1. 开发并使用 custom resource 来创建您的 AutoScalingGroup。

  2. 开发并使用 macro 动态生成具有正确实例类型数量的模板。

  3. 不要使用 CFN。还有其他 IaC 工具有循环,可以做你想做的事,例如地形。