Crie uma nova instância do EC2 com o volume do EBS existente como dispositivo raiz usando o CloudFormation

1

Estou tentando montar um volume existente em uma nova instância do EC2 Windows usando o CloudFormation. Isso parece algo que deveria ser possível.

Imagem grande

Eu tenho um fornecedor fornecido AMI que instala alguns softwares pré-configurados. Queremos criar uma única instância e, ocasionalmente, alteraremos o tamanho da instância do EC2 para testes de desempenho. Não queremos perder os dados no único disco do EBS que criaremos a partir da AMI.

Como estamos usando o CloudFormation, se simplesmente alterarmos a propriedade AWS :: EC2 :: Instance.InstanceType e fizer o upload da pilha modificada, o CloudFormation exibirá uma nova instância e um novo volume da AMI. Isso não é útil, pois perderemos os dados que carregamos do disco existente.

Método dos volumes

Eu tentei este script primeiro.

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

Recebi a mensagem de erro

Invalid value '/dev/sda1' for unixDevice. Attachment point /dev/sda1 is already in use

Método BlockDeviceMappings

Em seguida, tentei usar o BlockDeviceMappings

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

A mensagem de erro desta vez foi

Value of property Ebs must be an object

Método de VolumeAttachment

Eu também tentei usar um VolumeAttachment em vez da propriedade Volumes ou um BlockDeviceMapping.

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

Isso me deu a mesma mensagem acima

Invalid value '/dev/sda1' for unixDevice. Attachment point /dev/sda1 is already in use

Pergunta-chave

Alguém instalou com sucesso um volume raiz existente ou um instantâneo em uma nova instância do EC2? Se é possível qual é o método adequado?

Abordagens alternativas

Feliz por ouvir abordagens alternativas. Por exemplo, as opções que considerei são:

  • Criando o VPC e os recursos relacionados usando o CloudFormation, crie a instância manualmente usando o console.
  • Criando o VPC, recursos relacionados e instância do EC2 usando o CloudFormation. A partir desse ponto, pare de usar o CloudFormation e simplesmente use o console da Web para alterar o tamanho da instância.
por Tim 05.10.2017 / 02:30

1 resposta

3

Não é possível montar um volume do EBS existente ao iniciar uma instância do EC2.

Quando uma instância do EC2 é lançada, os volumes do EBS sempre serão criados a partir dos instantâneos do EBS associados da AMI.

Existem algumas soluções alternativas:

  1. Após a publicação, pare sua instância do EC2, desconecte o volume padrão do EBS, anexe o volume desejado e reinicie a instância.
  2. Armazene seus dados necessários em um volume secundário do EBS. Em seguida, como parte da sua inicialização do Cloud Init, anexe esse volume à sua instância do EC2.
  3. Ajuste o tamanho da instância fora do CloudFormation.
por 05.10.2017 / 03:50