Encerramento automático da instância do EC2 quando a imagem é criada

5

Eu quero começar um processo automatizado para a criação de AMI, e uma parte restante está limpando automaticamente a instância após a criação da imagem.

A instância é inicializada com um script de dados do usuário que faz a configuração necessária. inicia a criação de imagens de si mesmo usando AWS CLI . Então ele desliga. Eu poderia ir com --no-reboot opção e esperar lá até que a imagem está pronta, em seguida, encerrar, mas os documentos afirmam que "a integridade do sistema de arquivos na imagem criada não pode ser garantida", então eu quero evitar usá-lo. p>

Qual é a melhor maneira de eliminar a instância de si mesmo após a conclusão da criação da imagem?

    
por Alex B 26.04.2014 / 17:47

2 respostas

6

Existem algumas abordagens a serem consideradas para encerrar uma instância de si mesma:

  1. Inicie a instância do EC2 com o comportamento iniciado pela instância de desligamento definido como "terminate" e, em seguida, "sudo halt" ou equivalente de dentro da instância.

  2. Inicie a instância do EC2 com uma função do IAM que permita que ela seja encerrada e invoque a API ec2 terminate-instances da instância (por exemplo, usando o aws-cli). Obtenha o ID da instância dos metadados da instância.

O primeiro método é um pouco mais fácil e tem menos risco de a instância ser capaz de encerrar outras instâncias, mas você já está chamando a API da AWS a partir da instância, então está na metade do caminho para rm /etc/rc2.d / S90halt-after-create-image  o segundo método também.

Agora, para saber como acionar o encerramento após a reinicialização da criação de imagem.

Você poderia simplesmente soltar o comando halt / terminate desejado em um script de inicialização como /etc/rc.local e ele seria executado quando o sistema voltasse a funcionar. Como o @AlexB aponta nos comentários, você precisa ter certeza de que isso não faz com que novas instâncias com a imagem parem, então talvez teste o instance_id.

Não há necessidade de esperar pela conclusão da nova criação da AMI. Ele terminará bem, mesmo que sua instância não esteja mais em execução.

Aqui está um hack rápido que tem muito espaço para melhorias:

# This would be dangerous in a non-EC2 environment or on an instance that
# does not fit the criteria in the original question.
original_instance_id=$(curl -s http://instance-data/latest/meta-data/instance-id)
cat >/etc/rc2.d/S90halt-after-create-image <<EOF
#!/bin/sh
rm \
# This would be dangerous in a non-EC2 environment or on an instance that
# does not fit the criteria in the original question.
original_instance_id=$(curl -s http://instance-data/latest/meta-data/instance-id)
cat >/etc/rc2.d/S90halt-after-create-image <<EOF
#!/bin/sh
rm \%pre%
instance_id=\$(curl -s http://instance-data/latest/meta-data/instance-id)
test "\$instance_id" = "$original_instance_id" && sudo halt
EOF
chmod +x /etc/rc2.d/S90halt-after-create-image
instance_id=\$(curl -s http://instance-data/latest/meta-data/instance-id) test "\$instance_id" = "$original_instance_id" && sudo halt EOF chmod +x /etc/rc2.d/S90halt-after-create-image

Este código cria um script de inicialização que se remove e interrompe o sistema se determinadas condições forem verdadeiras. Poderia causar confusão geral se as coisas derem errado. Testado no Ubuntu 12.04. Pode não funcionar em outro lugar.

    
por 26.04.2014 / 21:54
3

Confira packer.io uma ferramenta de construção de imagens de código aberto da HashiCorp.

Você deve usá-lo porque é uma ferramenta padrão utilizada por empresas como Google, Netflix, Target e outras. Também é incorporado em uma ferramenta de código aberto de CD de código aberto chamada Spinnaker .

Você pode usar o AMAZON AMI BUILDER.

    
por 02.05.2014 / 05:50

Tags