Назад | Перейти на главную страницу

Создайте новый экземпляр EC2 с существующим томом EBS в качестве корневого устройства с помощью CloudFormation

Я пытаюсь подключить существующий том к новому экземпляру EC2 Windows с помощью CloudFormation. Это похоже на то, что должно быть возможным.

Большая фотография

У меня есть предоставленный поставщиком AMI, который устанавливает некоторое предварительно настроенное программное обеспечение. Мы хотим создать один экземпляр, и мы будем время от времени изменять размер экземпляра EC2 для тестирования производительности. Мы не хотим потерять данные на единственном диске EBS, который мы создадим из AMI.

Поскольку мы используем 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

Я получил сообщение об ошибке

Недопустимое значение '/ dev / sda1' для unixDevice. Точка подключения / dev / sda1 уже используется

BlockDeviceMappings Метод

Затем я попытался использовать BlockDeviceMappings

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

На этот раз сообщение об ошибке было

Значение свойства Ebs должно быть объектом

VolumeAttachment Method

Я также пробовал использовать VolumeAttachment вместо свойства Volumes или BlockDeviceMapping.

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

Это дало мне то же сообщение, что и выше

Недопустимое значение '/ dev / sda1' для unixDevice. Точка подключения / dev / sda1 уже используется

Ключевой вопрос

Кто-нибудь успешно подключил существующий корневой том или моментальный снимок к новому экземпляру EC2? Если возможно, какой правильный метод?

Альтернативные подходы

Рад слышать альтернативные подходы. Например, я рассмотрел следующие варианты:

При запуске инстанса EC2 невозможно смонтировать существующий том EBS.

При запуске экземпляра EC2 тома EBS всегда будут создаваться только что из снимков состояния EBS, связанных с AMI.

Есть несколько обходных путей:

  1. После запуска остановите экземпляр EC2, отсоедините том EBS по умолчанию, подключите желаемый том и перезапустите экземпляр.
  2. Сохраните необходимые данные на дополнительном томе EBS. Затем в рамках запуска Cloud Init подключите этот том к своему экземпляру EC2.
  3. Отрегулируйте размер экземпляра за пределами CloudFormation.