Acabamos com uma quantidade razoável de instantâneos do AWS EC2 em que a AMI foi excluída, mas o instantâneo é deixado para trás para apodrecer. Eu gostaria de uma maneira não manual de identificar e excluir esses órfãos para economizar dinheiro e espaço.
Idealmente, estou pensando em um script bash aproveitando a CLI , mas meu AWS-fu é fraco. Suponho que alguém tenha feito isso antes, mas não consigo encontrar um script que realmente funcione.
Na melhor das hipóteses, isso também verificará os volumes e os limpará, mas isso pode ser mais adequado para uma segunda pergunta.
Respostas:
Em grande parte inspirado pelas postagens do blog e pela essência já vinculada nas outras respostas, aqui está minha opinião sobre o problema.
Eu usei algumas funções complicadas do JMESpath para obter uma lista de instantâneos e não exigir
tr
.Isenção de responsabilidade : use por sua conta e risco , fiz o possível para evitar qualquer problema e manter os padrões saudáveis, mas não assumirei nenhuma culpa se isso lhe causar problemas.
Espero que o script em si seja comentado o suficiente.
O uso padrão (sem parâmetros) listará comandos de exclusão de instantâneos órfãos para a conta atual e a região eu-west-1, extrair:
Você pode redirecionar essa saída para um arquivo para revisão antes de fornecê-lo para executar todos os comandos.
Se você deseja que o script execute o comando em vez de imprimi-lo, substitua
print(cmd)
porsystem(cmd)
.O uso é o seguinte com um script chamado
snap_cleaner
:para comandos de execução a seco na região us-west-1
para comandos utilizáveis na eu-central-1
Um terceiro parâmetro pode ser usado para acessar outra conta (eu prefiro mudar de função para outra conta antes).
Versão simplificada do script com o script awk como oneliner:
fonte
Eu usei o seguinte script no GitHub de Rodrigue Koffi (bonclay7) e funciona muito bem.
https://github.com/bonclay7/aws-amicleaner
Comando:
Na publicação do blog de documentação, ele faz mais algumas coisas:
fonte
Aqui está um script que pode ajudá-lo a encontrar instantâneos órfãos
( daqui )
Além disso, você pode verificar este artigo em serverfault
PS Claro que você pode mudar a região para refletir sua
PPS Aqui está o código atualizado:
A amostra de exemplos do que o código faz é:
envie para STDOUT a lista de instantâneos. esta construção:
crie manipulador de
comm
arquivos temporário virtual para fazer com que o comando seja lido de dois "arquivos" e compare-osfonte
Aqui está um trecho de código GitHub Gist exatamente do que você está pedindo por Daniil Yaroslavtsev.
Ele usa a lista de todas as imagens e seus snapshots e compara os IDs com a lista de todos os IDs de snapshots. O que resta são os órfãos. O código funciona com o mesmo princípio da resposta acima, mas é melhor formatado e um pouco mais legível.
O código tira proveito do JMESPath com a
--query Snapshots[*].SnapshotId
opção (você também pode usar o utilitário de linha de comando jp para isso, se já estiver em sua distribuição. Formata a saída como texto com--output text
. Aqui está um link para a referência da API e alguns exemplos. É um pouco mais elegante que uma longa cadeia de tubos grep / awk / sort / uniq / tr.Aviso de Todd Walton : Não confunda com o utilitário 'jq', que usa uma linguagem de consulta diferente para analisar documentos json.
fonte
Eu escrevi o script snapshots.py que itera sobre todos os instantâneos (na lista definida de regiões) e gera
report.csv
. Este arquivo contém informações sobre instância, AMI e volume referenciados por todos os instantâneos.Também existe um comando para remover interativamente os instantâneos pendentes.
fonte