【问题标题】:Upgrading Instances in cloudformation stack with attached volumes使用附加卷升级 cloudformation 堆栈中的实例
【发布时间】:2015-01-31 01:59:05
【问题描述】:

为了便于讨论,我有一个非常简单的 cloudformation 设置,其中包含 1 个附加了卷的 EC2 实例。为了数据的保留,volume 不是栈的一部分,所以即使我销毁并重建完整的栈,数据也不会被销毁。

我的问题是,当我为我的 EC2 实例创建一个新的 ami 作为基础映像并升级我的堆栈以推出新映像时,我遇到了可以理解的冲突。

EC2 升级实例的方式是创建新实例,然后删除旧实例。但由于 cloudformation 脚本声明卷应附加到实例,因此升级过程在创建升级后的实例时失败,因为卷不可用。

在映像升级之间保留数据的最佳方式是什么?几天来我一直在寻找正确的解决方案,但没有运气。似乎有许多狡猾的解决方案,人们对推出/升级过程中的手动任务感到满意。我希望能够使基础架构完全自动化,从而避免所有人为错误。

【问题讨论】:

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


    【解决方案1】:

    您是否考虑过使用集群大小为 1 的 AutoScalingGroup,然后修改 UpdatePolicy?这可以让您更精细地控制在给定时间将有多少实例在运行以及它们如何更新。如果您能够发布模板的关键部分,这也会有所帮助。

    另一种选择是使用 bash 或 Python 进行堆栈创建/更新,您可以在其中以编程方式附加/分离。

    我能想到的唯一其他方法是将 AutoScalingGroup minSize 和 maxSize 设置为零(可以使用 CLI 完成),等待实例减速,然后使用您的新 AMI 运行更新(以及最小值/最大值回到 1),这将使它们重新上线。

    "ServerGroup" : {
      "Type" : "AWS::AutoScaling::AutoScalingGroup",
      "Properties" : {
        "AvailabilityZones" : {
          "Fn::If" : [
            "UseAllAvailabilityZones",
            { "Fn::GetAZs": "" },
            {"Ref" : "AvailabilityZones"}
    
        },
        "LaunchConfigurationName" : { "Ref" : "LaunchConfig" },
        "MinSize" : 1,
        "MaxSize" : 1,
        "DesiredCapacity" : 1,
        "LoadBalancerNames" : [ { "Ref" : "PublicElb" }, { "Ref" : "PrivateElb" } ],
        "VPCZoneIdentifier" : { "Ref" : "Subnets" }
      },
      "UpdatePolicy" : {
        "AutoScalingScheduledAction" : {
          "IgnoreUnmodifiedGroupSizeProperties" : "true"
        },
        "AutoScalingRollingUpdate" : {
          "MinInstancesInService" : "0",
          "MaxBatchSize" : "1"
        }
      }
    }
    

    我还发现这个项目似乎在用卷做一些类似的事情。 https://github.com/thefactory/cloudformation-graphite/blob/master/graphite.json

    【讨论】:

    • 哇,这似乎太过分了,但我想在亚马逊开始支持这种操作之前,没有简单的方法可以绕过它。感谢您的想法和示例!
    • 让我知道你在哪里着陆。这是一个有趣的问题。在研究这一点时,我意识到我忽略了在重新启动时为我的一台服务器重新建立驱动器安装。所以你的问题在某些方面拯救了我的尾巴。
    猜你喜欢
    • 2019-03-02
    • 2017-04-25
    • 2017-12-05
    • 1970-01-01
    • 2016-07-13
    • 2018-10-01
    • 2018-12-21
    • 2018-04-04
    • 1970-01-01
    相关资源
    最近更新 更多