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.
Visão geral
Eu tenho uma AMI fornecida pelo fornecedor que instala alguns softwares pré-configurados. Queremos criar uma única instância e alteraremos o tamanho da instância do EC2 ocasionalmente 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 fizermos upload da pilha modificada, o CloudFormation criará uma nova instância e volume da AMI. Isso não é útil, pois perderemos os dados carregados do disco existente.
Método de 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
Valor inválido '/dev/sda1' para unixDevice. O ponto de anexo /dev/sda1 já está em uso
Método BlockDeviceMappings
Em seguida, tentei usar BlockDeviceMappings
BlockDeviceMappings:
- DeviceName: "/dev/sda1"
Ebs:
Ref: WindowsVolume
A mensagem de erro desta vez foi
Valor da propriedade Ebs deve ser um objeto
Método de anexo de volume
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
Valor inválido '/dev/sda1' para unixDevice. O ponto de anexo /dev/sda1 já está em uso
Pergunta-chave
Alguém montou com sucesso um volume raiz existente ou um instantâneo em uma nova instância do EC2? Se for possível qual o método adequado?
Abordagens alternativas
Feliz em ouvir abordagens alternativas. Por exemplo, as opções que considerei são:
- Criando a VPC e os recursos relacionados usando o CloudFormation e, em seguida, crie a instância manualmente usando o console.
- Criando a 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.
Não é possível montar um volume EBS existente ao iniciar uma instância do EC2.
Quando uma instância do EC2 é iniciada, os volumes do EBS sempre serão criados a partir dos snapshots do EBS associados à AMI.
Existem algumas soluções alternativas: