【问题标题】:CloudFormation / CDK: how to replace an EC2 instance and keep EBS storage?CloudFormation / CDK:如何更换 EC2 实例并保留 EBS 存储?
【发布时间】:2020-10-02 05:42:45
【问题描述】:

使用 AWS CDK,可以像这样创建带有附加 EBS 的 EC2 实例:

BlockDevice durableStorage = BlockDevice.builder()
                                        .deviceName("/dev/sdf")
                                        .volume(BlockDeviceVolume.ebs(
                                                DURABLE_STORAGE_GB,
                                                EbsDeviceOptions.builder()
                                                                .deleteOnTermination(false)
                                                                .encrypted(true)
                                                                .volumeType(EbsDeviceVolumeType.GP2)
                                                                .build()))
                                        .build();

Instance instance = new Instance(
        this,
        "MyInstance",
        InstanceProps.builder()
                     .blockDevices(List.of(durableStorage))
                     // more config here
                     .build());

如果堆栈更新涉及替换 EC2 实例,如何管理 EBS 附件?旧实例会一直保留到新实例创建完成,然后才会销毁,那么如何管理 EBS 卷到新服务器的传输呢?这会在 CloudFormation 中进行管理吗?

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-cloudformation aws-cdk


    【解决方案1】:

    那么应该如何管理 EBS 卷到新服务器的传输呢?这会在 CloudFormation 中进行管理吗?

    它不受管理。需要替换实例(例如 AMI id 更改)的 更新失败并显示以下错误消息:

    不支持更新资源类型 AWS::EC2::VolumeAttachment。

    解决此问题的一种方法是分阶段更新。首先,您删除模板中的附件(只需将其注释掉)并更新堆栈以将实例与卷分离。然后你对你的实例进行替换更新。最后,您取消注释附件并再次更新。这会导致将卷重新附加到新实例。

    附言

    我根据我在 CloudFormation 中针对此问题所做的特定场景的快速实验编写了此答案。也许有更好的方法,我目前不知道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-05
      • 2019-11-04
      • 2022-11-01
      • 2011-01-06
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      相关资源
      最近更新 更多