AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 876942
Accepted
Tim
Tim
Asked: 2017-10-05 16:30:46 +0800 CST2017-10-05 16:30:46 +0800 CST 2017-10-05 16:30:46 +0800 CST

使用 CloudFormation 以现有 EBS 卷作为根设备创建新的 EC2 实例

  • 772

我正在尝试使用 CloudFormation 将现有卷安装到新的 EC2 Windows 实例。这似乎应该是可能的。

大图

我有一个供应商提供的 AMI,它安装了一些预配置的软件。我们想要创建一个实例,并且我们会偶尔更改 EC2 实例大小以进行性能测试。我们不想丢失我们将从 AMI 创建的单个 EBS 磁盘上的数据。

由于我们使用的是 CloudFormation,如果我们简单地更改 AWS::EC2::Instance.InstanceType 属性并上传修改后的堆栈 CloudFormation 将从 AMI 中获得一个新实例和卷。这没有帮助,因为我们会丢失从现有磁盘上传的数据。

体积法

我首先尝试了这个脚本。

WindowsVolume:
  Type: AWS::EC2::Volume
  Properties:
    AutoEnableIO: true
    AvailabilityZone: "ap-southeast-2b"
    Encrypted: true
    Size: 30
    SnapshotId: snap-0008f111111111
    Tags:
      - Key: Name
        Value:
          Ref: AWS::StackName
    VolumeType: gp2

EC2Instance:
  Type: AWS::EC2::Instance
  InstanceType: t2.micro
  ImageId: ami-663bdc04 # Windows Server stock image
  KeyName: removed
  IamInstanceProfile: removed
  InstanceInitiatedShutdownBehavior: stop
  SecurityGroupIds:
    Fn::Split: [",", "Fn::ImportValue": StackName-ServerSecurityGroup]
  SubnetId:
    !ImportValue StackName-Subnet1
  Volumes:
    - Device: "/dev/sda1"
      VolumeId:
        Ref: WindowsVolume

我收到错误消息

unixDevice 的值“/dev/sda1”无效。连接点 /dev/sda1 已在使用中

BlockDeviceMappings 方法

接下来我尝试使用 BlockDeviceMappings

BlockDeviceMappings:
  - DeviceName: "/dev/sda1"
    Ebs:
      Ref: WindowsVolume

这次的错误信息是

属性 Ebs 的值必须是一个对象

卷附方法

我也尝试过使用 VolumeAttachment 而不是 Volumes 属性或 BlockDeviceMapping。

VolAttach:
  Type: AWS::EC2::VolumeAttachment
  Properties:
    Device: "/dev/sda1"
    InstanceId: !Ref EC2Instance
    VolumeId: !Ref WindowsVolume

这给了我与上面相同的信息

unixDevice 的值“/dev/sda1”无效。连接点 /dev/sda1 已在使用中

关键问题

有没有人成功地将现有的根卷或快照挂载到新的 EC2 实例?如果可能的话,正确的方法是什么?

替代方法

很高兴听到其他方法。例如,我考虑过的选项是:

  • 使用 CloudFormation 创建 VPC 和相关资源,然后使用控制台手动创建实例。
  • 使用 CloudFormation 创建 VPC、相关资源和 EC2 实例。从那时起停止使用 CloudFormation,只需使用 Web 控制台更改实例大小。
amazon-web-services
  • 1 1 个回答
  • 4826 Views

1 个回答

  • Voted
  1. Best Answer
    Matt Houser
    2017-10-05T17:50:21+08:002017-10-05T17:50:21+08:00

    启动 EC2 实例时无法挂载现有的 EBS 卷。

    启动 EC2 实例时,将始终从 AMI 的关联 EBS 快照中重新创建 EBS 卷。

    有一些解决方法:

    1. 启动后,停止您的 EC2 实例,分离默认 EBS 卷,附加所需的卷,然后重新启动实例。
    2. 将所需数据存储在辅助 EBS 卷上。然后作为 Cloud Init 启动的一部分,将该卷附加到您的 EC2 实例。
    3. 在 CloudFormation 之外调整实例大小。
    • 3

相关问题

  • 与 AWS 中的其他系统相比,CentOS 报告的总内存较低

  • 如何在 Amazon Linux 服务器上升级到 Java 1.8?

  • 了解 Amazon AWS 使用数据

  • 亚马逊提供的负载均衡服务体验如何?

  • ELB 中现有节点的 AWS 自动缩放问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve