Como excluir a AMI do EC2

43

Eu sei que o comando ec2-create-image instance-idestará criando uma imagem da instância ec2, criando um arquivo de instantâneos e registrando-se como uma AMI. Mas qual é o comando equivalente para excluir a imagem que excluirá os arquivos de instantâneo associados e cancelará o registro da AMI?

James W.
fonte
Confira Como excluir a EC2 AMI privada da AWS
Aniket Thakur

Respostas:

56

Resposta atualizada dos documentos do aws:

  1. Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/ .
  2. Na barra de navegação, verifique sua região.
  3. No painel de navegação, clique em AMIs.
  4. Selecione a AMI, clique em Ações e, em seguida, clique em Cancelar registro. Quando a confirmação for solicitada, clique em Continuar.
  5. No painel de navegação, clique em Instantâneos.
  6. Selecione o instantâneo, clique em Ações e, em seguida, clique em Excluir. Quando a confirmação for solicitada, clique em Sim, Excluir.

Espero que isso ajude alguém como eu! : D

Benjamin Smith Max
fonte
2
Apenas para adicionar alguns centavos à resposta de Benjamin Smith Max para excluir instantâneos. É necessário primeiro cancelar o registro da AMI no console antes que o instantâneo possa ser excluído.
tarvinder91
3
Se o seu registro AMI ainda paira em torno, basta fazer uma recarga com ignorando o cache: Windows: Ctrl + Shift + R ou no MacOS: ⌘ + ⌥ + R.
André Hauptfleisch
NOTA: Pode demorar alguns minutos para o console remover a AMI da lista. Escolha Atualizar para atualizar o status.
Aniket Thakur
7

Normalmente, existem 4 etapas para o que você está procurando:

  1. Finalize instâncias usando a AMI (recomende a prática especialmente para AMIs suportadas pelo S3) [Não é necessário antes de excluir uma AMI de qualquer tipo]
  2. Cancele o registro de AMIs usando ec2-deregister
  3. Exclua os pacotes configuráveis ​​/ instantâneos que fazem backup da AMI usando ec2-delete-bundle(para S3) ou ec2-delete-snapshot(para EBS).
  4. Exclua os volumes EBS (a menos que estejam definidos para serem excluídos na finalização, nesse caso, eles seriam removidos na etapa 1). Isso não é necessário para instâncias suportadas pelo S3. [Novamente, não é necessário encerrar instâncias ou excluir volumes se você quiser excluir uma AMI.]

Lembre-se de que instantâneos e imagens são independentes. Você pode criar um volume EBS a partir de um instantâneo e usá-lo como uma unidade secundária em vez de uma unidade de inicialização. Além disso (no caso de instâncias do Linux), é possível criar uma nova imagem a partir de um instantâneo existente - o que justifica a idéia de que nem todo mundo que deseja excluir uma imagem também deseja excluir o (s) instantâneo (s) associado (s). (Embora você possa registrar um instantâneo para criar uma AMI do Windows, a AMI não pode ser iniciada.)

É importante observar que a AWS não permitirá que você exclua um instantâneo associado a uma AMI antes de cancelar o registro da AMI.

Focando nas etapas 2 e 3 acima, primeiro você precisa encontrar os IDs de snapshots associados a uma AMI. Isso deve ser listado como parte dos mapeamentos do dispositivo de bloco. Normalmente, o volume EBS raiz tem o ponto de montagem / dev / sda1. Você pode cancelar o registro da AMI na linha de comando (ou usar o console da AWS) e excluir o instantâneo (novamente, da linha de comando ou do console da AWS).

Se você precisou executar essa tarefa com mais frequência, desejaria criar um script do processo. Algumas bibliotecas como o Python Boto incluem uma função para fazer exatamente isso:

deregister_image(image_id, delete_snapshot=False)
    Unregister an AMI.

    Parameters: 
        image_id (string) – the ID of the Image to unregister
        delete_snapshot (bool) – Set to True if we should delete the snapshot associated with an EBS volume mounted at /dev/sda1

Por exemplo, um script de amostra (completamente não testado e apenas remendado - use por seu próprio risco!) Com base no exposto acima:

#!/usr/bin/env python

import os
import sys

def ec2delete(imageid=None):
    conn = boto.ec2.connect_to_region('your_region', aws_access_key_id='your_key', aws_secret_access_key='your_secret') 
    conn.deregister_image(imageid, delete_snapshot=True)

if __name__ == '__main__':
    from optparse import OptionParser
    parser = OptionParser()

    options, args = parser.parse_args()
    sys.stderr.write("Deleting %s and snapshots\n" %  str(args))
    ec2delete(args)
cyberx86
fonte
1
Não há necessidade de encerrar instâncias de uma AMI antes de excluir a AMI. A AMI é usada apenas para iniciar as instâncias e elas podem continuar funcionando perfeitamente sem ela. No entanto, se você excluir a AMI e as instâncias falharem, pode ser difícil iniciar instâncias de substituição sem a AMI, portanto, tenha cuidado.
11138 Eric Hammond
1
A AWS costumava recomendar o encerramento de instâncias para uma 'limpeza completa', no entanto, em princípio, não deve ser necessário para excluir uma AMI. Eu me pergunto se isso pode ser importante em alguns casos extremos, já que os volumes do EBS carregam 'preguiçosamente', se um instantâneo é excluído logo após o lançamento de uma instância, mas antes que o volume do EBS seja totalmente carregado, isso pode ser problemático.
cyberx86
@ cyberx86: Se a exclusão de um instantâneo afetasse uma nova criação de volume, seria um problema maior do que apenas a exclusão de AMIs. Dado o tempo que leva para preencher um volume totalmente de um instantâneo, deve ser fácil testar com um instantâneo cheio de dados.
11138 Eric Hammond
2
@EricHammond: uma pesquisa rápida mostra que a AWS aparentemente não excluirá o instantâneo até que os dados sejam carregados, mas ainda permitirá que você execute a exclusão (presumivelmente, simplesmente segure-o até que não seja necessário).
113312 cyberx86
@ cyberx86: Como eu suspeitava, mas é bom saber com certeza. Obrigado por procurar.
11138 Eric Hammond
1

O awscli também pode fazer isso.

Primeiro obtenha o ID do shapshot usando describe-images:

aws ec2 describe-images --image-ids ami-0123456789

Cancele o registro da imagem e exclua o instantâneo:

aws ec2 deregister-image --image-id ami-0123456789
aws ec2 delete-snapshot --snapshot-id snap-9876543210
Kristi
fonte