【问题标题】:Cloudformation yaml- generate a list of instances in AutoScalingGroup resourceCloudformation yaml - 在 AutoScalingGroup 资源中生成实例列表
【发布时间】:2021-05-22 07:56:42
【问题描述】:

我正在努力弄清楚如何为 AutoScalingGroup 资源编写 yaml 模板的覆盖部分。目前,我所拥有的仅适用于固定长度的字符串。在这种情况下,传入模板的字符串称为InstanceTypesOverride

下面可以看到代码的sn-p:

InstanceTypesOverride = "m5.large,m5d.large,m5a.large"

Type: AWS::AutoScaling::AutoScalingGroup
  Properties:
    AutoScalingGroupName: !Ref NodeGroupName
    DesiredCapacity: !Ref NodeAutoScalingGroupDesiredCapacity
    MixedInstancesPolicy:
      InstancesDistribution:
        OnDemandAllocationStrategy: prioritized
        OnDemandBaseCapacity: !Ref OnDemandBaseCapacity
        OnDemandPercentageAboveBaseCapacity: !Ref OnDemandPercentageAboveBaseCapacity
        SpotAllocationStrategy: !Ref SpotAllocStrategy
      LaunchTemplate:
        LaunchTemplateSpecification:
          LaunchTemplateId: !Ref SpotLaunchTemplate
          Version: !GetAtt SpotLaunchTemplate.LatestVersionNumber
        Overrides:
          - InstanceType: !Select [0, !Split [ ",", !Ref InstanceTypesOverride ] ]
          - InstanceType: !Select [1, !Split [ ",", !Ref InstanceTypesOverride ] ]
          - InstanceType: !Select [2, !Split [ ",", !Ref InstanceTypesOverride ] ]

我想知道是否可以编写模板的覆盖部分,以便InstanceTypesOverride 可以处理更多或更少的实例类型。如您所知,不同的区域可以处理不同的实例类型,因此对我来说,让 cloudformation 能够处理不同的字符串长度是必不可少的。有人可以建议一些可行的方法吗?

理想情况下,我想要一个 cfm 模板,它同时适用于 InstanceTypesOverride = "m5.large,m5d.large,m5a.large"InstanceTypesOverride = "m5.large,m5d.large,m5a.large,m5ad.large,m5n.large,m5dn.large"

【问题讨论】:

    标签: amazon-web-services amazon-ec2 yaml amazon-cloudformation


    【解决方案1】:

    遗憾的是,您不能使用普通的 CloudFormation (CFN) 来做到这一点。这将需要 CFN 不支持的循环机制。

    唯一的方法是通过 CFN custom resources 或 CFN macro

    在第一种情况下,您必须开发一个 自定义 lambda 函数,它会创建整个 AutoScalingGroup 使用 AWS 开发工具包(例如 python)。在第二种情况下,也需要创建 lambda,但它会解析原始模板,扩展 Overrides,并将修改后的模板返回给 CFN 执行。

    替代方案是不使用 CFN,而是使用 terraform (TF)。 TF 对循环有非常广泛的影响力和广泛的支持,可以让你轻松地做你想做的事。

    【讨论】:

    • 不幸的是,TF 不是一个选项,因为我正在使用仅在 Cloudformation 中可用的 AutoScalingRollingUpdate 功能。
    • @marcincuber 所以你在 CFN 中留下了自定义资源或宏。否则,您必须像现在一样对值进行硬编码。如果您想在 CFN 之外使用,您可以使用例如 python 来处理您的模板,以根据InstanceTypesOverride 的要求生成不同版本的模板。
    • @marcincuber 进展如何?你设法解决了这个问题吗?
    • 还没有,但我可能会在某个时候尝试使用 micro 来自动化我的脚本。
    • @marcincuber 好的。如果有什么问题,请告诉我或提出新问题。稍后,如果您觉得我的回答有帮助,我们将不胜感激。
    猜你喜欢
    • 2020-12-27
    • 1970-01-01
    • 2020-03-24
    • 2018-09-21
    • 1970-01-01
    • 2015-07-06
    • 2014-01-07
    • 2017-08-11
    • 2021-11-26
    相关资源
    最近更新 更多