【问题标题】:Is it possible to get "instancecount" from user and create ec2 instance accordingly by using Cloud formation template.?是否可以通过使用云形成模板从用户那里获取“instancecount”并相应地创建 ec2 实例。?
【发布时间】:2017-04-29 18:47:12
【问题描述】:

我了解在 Cloudformation 中无法使用 NumberofInstance 属性,我在 AWS::AutoScaling::AutoScalingGroup 中使用了“DesiredCapacity”,但我想知道是否有任何替代方法,例如在内部使用迭代模板

或使用用户数据下的客户脚本来创建相同的实例

【问题讨论】:

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


    【解决方案1】:

    不幸的是,虽然EC2 RunInstances API 支持启动多个 EC2 实例(通过 MaxCount/MinCount 参数),AWS::EC2::Instance CloudFormation 资源只允许您一次创建一个 EC2 实例(请参阅也 this forum post 来自 ChrisW@AWS 对此限制的确认)。

    此外,使用 CloudFormation 的Intrinsic Functions 无法在模板内进行迭代,因此这也不是一个选项。

    作为替代方案,我建议使用中间模板格式,然后在需要更大的表达能力时使用预处理器编译成 CloudFormation 模板(JSON 或 YML)。您可以使用功能齐全的库,例如 troposphere,但也很容易编写自己的基本预处理层以适应您的用例和编程语言/库偏好。

    我目前的选择是嵌入式 Ruby (ERB),主要是因为我已经熟悉它。这是一个使用迭代生成 CloudFormation YAML 的示例 template.yml.erb 文件:

    Resources:
    <% (1..5).each do |i| -%>
      Instance<%=i%>:
        Type: AWS::EC2::Instance
        # ...etc etc...
    <% end -%>
    

    要处理,请运行cat template.yml.erb | | ruby -rerb -e "puts ERB.new(ARGF.read, nil, '-').result" &gt; template.yml,它将以下 CloudFormation-ready 模板写入template.yml

    Resources:
      Instance1:
        Type: AWS::EC2::Instance
        # ...etc etc...
      Instance2:
        Type: AWS::EC2::Instance
        # ...etc etc...
      Instance3:
        Type: AWS::EC2::Instance
        # ...etc etc...
      Instance4:
        Type: AWS::EC2::Instance
        # ...etc etc...
      Instance5:
        Type: AWS::EC2::Instance
        # ...etc etc...
    

    我已使用此技术帮助管理复杂 CloudFormation 堆栈中的大量资源,并取得了良好的效果。

    【讨论】:

    猜你喜欢
    • 2016-12-02
    • 2023-04-10
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 2015-08-15
    • 1970-01-01
    相关资源
    最近更新 更多