Ok, pelo que vale a pena, aqui está o que eu fiz. Espero que meus scripts fracos incentivem as pessoas a postar melhores soluções!
Eu escrevi dois scripts bash simples e os automatizei usando cron . (Por enquanto eu executo estes em um servidor local, como eu acho (?) Não é recomendado colocar os certificados da AWS nas próprias instâncias / AMIs / EBSs.)
Para criar um novo instantâneo :
# ESB volume associated with the instance we want to back up:
EBS_VOL_ID=vol-xxxxyyyy
ec2-create-snapshot --region eu-west-1 -K pk.pem -C cert.pem -d "Automated backup" $EBS_VOL_ID
Para remover todos, exceto o instantâneo mais recente :
EBS_VOL_ID=vol-xxxxyyyy
ec2-describe-snapshots --region eu-west-1 -K pk.pem -C cert.pem | grep "Automated backup" | grep "$EBS_VOL_ID" | awk '{ print $5 "\t" $2 }' | sort > .snapshots
latest_id=$(tail -n1 .snapshots | awk '{ print $2 }')
cat .snapshots | awk '{ print $2 }' > .snapshot_ids
for i in $(cat .snapshot_ids)
do
if [ "$i" != "$latest_id" ]
then
echo "Deleting snapshot $i"
ec2-delete-snapshot --region eu-west-1 -K pk.pem -C cert.pem $i
fi
done
(Isso analisa as informações apropriadas de captura instantânea de ec2-describe-snapshots
output e cria um arquivo temporário com entradas [timestamp snapshot-id] (por exemplo,
2011-06-01T10:24:36+0000 snap-60507609
) onde o instantâneo mais recente está na última linha.)
Notas :
- Coloque seu certificado X509 e chave privada em algum lugar onde os scripts possam encontrá-los.
- Você deve especificar explicitamente
--region
com todos os comandos. Caso contrário, por exemplo,ec2-create-snapshot
falharia com o ID do volume sendo desconhecido. (YMMV se você usar a região padrão "us-east-1".) - Usei uma descrição de snapshot ("Backup automatizado") como marcador para evitar que o script de remoção exclua outros snapshots do volume em questão (por exemplo, snapshots relacionados a AMIs).
Disclaimer: Isso se tornou em parte um exercício de programação Bash / Unix para mim, especialmente o script de poda. Admito prontamente que você provavelmente obteria um resultado muito mais claro com, por exemplo, Python, quando você precisa de lógica como "faça algo para todos, mas o último item de uma lista". E mesmo com Bash você provavelmente poderia fazer isso com mais elegância (por exemplo, você realmente não precisa de arquivos temporários). Então, sinta-se à vontade para postar outras soluções !