Posso reutilizar um volume do EBS com o AWS ASG?

4

Eu quero criar um ASG de tal forma que eu possa reutilizar volumes existentes do EBS (porque tenho dados persistentes nesses volumes) para novas instâncias do EC2 que são instanciadas via ASG. Isso é possível?

Atualização copiada do comentário

Para esclarecer minha pergunta original, não estou tentando anexar um volume do EBS a duas instâncias do EC2 ao mesmo tempo. Em vez disso, quando uma instância do EC2 é finalizada, quero iniciar uma nova instância do EC2 com o volume do EBS anterior, em vez de criar um novo volume do EBS

    
por steve landiss 11.02.2017 / 07:25

2 respostas

3

Não.

Grupos de escalonamento automático iniciam várias instâncias do EC2. Cada volume do EBS só pode ser anexado a uma única instância do EC2. Portanto, você não deve fazer isso e provavelmente não é possível. Se você tem vários volumes e várias instâncias, provavelmente você pode implementar alguma lógica complexa para fazê-la funcionar, mas você não deve - arquiteturas simples tendem a ser as melhores.

O que você pode fazer é executar uma instância do EC2 compartilhando dados via NFS que o ASG acessa, ou você pode usar o AWS Elastic File System , mas cuidado, a latência é relativamente alta.

Se você expandir seus requisitos e caso de uso, poderá obter respostas mais úteis.

Atualizar

Com base nos requisitos adicionais, provavelmente é possível. Não é um requisito padrão, então não acho que haja algum suporte explícito para isso.

Eu provavelmente procuraria escrever algum tipo de script de inicialização que associasse o volume com a instância do EC2 e montasse-o. Há uma resposta aqui que poderia ser de alguma utilidade. Provavelmente é possível com algum tipo de configuração com o SNS e o Lambda, mas a instância do EC2 provavelmente ainda precisa de algo para executar para mapear o volume.

Alguém pode fornecer mais informações, nunca precisei fazer nada assim.

    
por 11.02.2017 / 08:26
5

IMO, você pode tentar fazer assim (eu faço algo parecido, mas com Elastic Network Interfaces). Isso pressupõe um conhecimento do AWS CloudFormation service ou AWS CLI :

  1. Crie um volume do EBS
  2. Crie um AutoScaling group do tamanho min / max nulo definido como 1. Isso garantirá que a única instância quando ficar insalubre será substituída por uma nova e saudável.
  3. Anexe o volume à instância da seção UserData do recurso AutoScaling LaunchConfiguration .
  4. Agora, o que acontece com o volume quando a instância é encerrada? Um novo é lançado pelo grupo AutoScaling. O volume permanecerá conectado / em uso até que o antigo seja terminado. Em seguida, o volume estará disponível novamente e poderá ser anexado a uma nova instância.
  5. Anexar / reconectar um volume é mais para sincronizar essa ação. Você pode assumir cegamente que UserData será executado depois que o volume estiver disponível novamente (a instância será finalizada "rapidamente"?). Ou você pode fazer algumas verificações de status, como descrever os metadados do volume, verificar seu estado e, quando não estiver em uso, reconectá-lo.

Um exemplo rápido no bash shell do Linux:

INST_ID='i-xyzxyzxyz' 
VOL_ID='vol-xyzxyzxyz'
VOL_STATUS=''
until [ "x$VOLUME_STATUS" == "xattached" ]; do
    VOL_STATUS=$(aws ec2 describe-volumes --volume-ids $VOL_ID --query 'Volumes[0].State')
    sleep 5
done

aws ec2 attach-volume --volume-id $VOL_ID --instance-id $INST_ID --device /dev/sdh
  1. Se você quiser mais resistência, tente usar ganchos do ciclo de vida do AutoScaling . Antes que a instância seja colocada no estado InService , você pode anexar o volume. Ele permanecerá nesse estado até que você avise ao grupo para continuar (caso contrário, ele tem 1h tempo limite por padrão). Isso é para eventos de scale-out ou quando uma nova instância é iniciada. Quando é terminado ou dimensionado, também pode esperar por um sinal. Você iria separar o volume e sinalizá-lo para continuar a terminá-lo.
  2. Todos os comandos AWS CLI presumem que sua instância anexou um perfil de instância do IAM adequado que permite anexar / detectar volumes do EBS ou descrevê-los.
por 24.02.2017 / 12:17