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.