Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Problemas com Script AWS CLI

Pessoal criei um script para realizar diariamente um snapshot de meus volumes, sendo que preciso agora deletar os snapshot's mais antigos.

Como eu faço:

export VOL70=ID do volume (Aqui digo que o volume X vai ser declarado como VOL70)

export dsc70=$vol70 (aqui digo que vou exportar o VOL70 como DSC70)

ec2-create-snapshot --region xxxx $vol70 -d $dsc70 (Aqui digo que estou criando um snapshot do volume70 e que estou declarando ele com o descrição dsc70)

Agora minha duvida seria como eu posso agendar para que os snapshots com mais de 5 dias sejam excluídos ? Acredito que tenha que criar alguma coisa que delete do DSC70 porém mantenha os 5 ultimos.

Conseguem me ajudar ?

12 respostas

Rafael, na verdade a descrição do seu snapshot está vazia:

export VOL70='i-123456'
# VOL70 recebe o valor 'i-123456' sem aspas
export dsc70=$vol70
# dsc70 recebe o valor da variável vol70 que não está declarada (VOL70, em maiúsculas, está)
# como a variável não existe, o valor recebido é vazio

echo $VOL70
>> i-123456
echo $dsc70
>>

Sobre o caso dos 5 dias, não tenho certeza de como proceder, mas tenho uma idéia: busque por um comando do ec2 que descreva os volumes (talvez ec2-describe-snapshots?) e veja se ele recebe algum parâmetro de filtro. Aí bastaria utilizar esse filtro pra selecionar os volumes mais antigos e pegar os id deles. Aí então você poderia destruí-los.

Estou fazendo da seguinte forma:

#Maquina de teste 
export VOL70=vol-12345
export DSC70=$VOL70-$TESTE

#Deleting Volumes
export SNAP="$(/opt/aws/bin/ec2-describe-snapshots --region $REGION |grep $DSC70)"
export SNAP="${SNAP:09:13}"
/opt/aws/bin/ec2-delete-snapshot --region $REGION $SNAP


#Waiting for AWS delete volumes
sleep 1200

#Creating Volumes
/opt/aws/bin/ec2-create-snapshot --region $REGION $VOL70 -d $DSC70

Ele consegue criar os snapshots, porém não deleta os mais antigos.

Consegue me ajudar a montar esse script de uma forma mais adequada e simple. para que eu possa criar os snapshots dos volumes mas também exclua os antigos ?

Faz o seguinte: digita ec2-describe-snapshots --help e posta aqui o resultado. Se lembre de usar o botão de <> inserir código pra facilitar a leitura. Eu estou com a versão atualizada da CLI da aws e portando não tenho esse comando disponível.

o que acontece no meu cenário. Tenho uma máquina rodando um linux, e nele tenho o script que passei para você acima.

Quando tento digitar o comando que voce pediu me volta esse erro:

<c2-describe-snapshot --help>
<bash: ec2-describe-snapshot: command not found>

O estranho é que eu também instalei na minha maquina Windows o CLI TOOL e não consigo rodar esse comando também. segue o erro abaixo.

PS C:\WINDOWS\system32> aws ec2 describe-snapshots

Could not connect to the endpoint URL: "https://ec2.us-west-2a.amazonaws.com/" PS C:\WINDOWS\system32>

Aparentemente é ec2-describe-snapshots. Com um s no final. Tente rodar ec2-describe-snapshots --help com e sem os traços no help e poste aqui o resultado que a gente consegue resolver seu problema sim!

E por favor use o botão de <> inserir código pra permitir a legibilidade? Eu precisei editar sua postagem pra que o primeiro erro aparecesse.

Como o comando é muito grande estou enviando assim:

https://gist.github.com/anonymous/b52f7e56279b028f64f5fdb48bd1f09b

Outra coisa que acontece é que quando eu tento fazer o seguinte comando:

Me volta o seguinte erro:

Será que falta configurar alguma coisa ?

Não sei. Não vejo o comando nem o erro.

solução

Você pode utilizar um filtro por start-time:

  1. Remova todos os snapshots criados antes de 5 dias atrás
  2. Identifique todos os IDs ddos snapshots retornados pelo seguinte comando: ec2-describe-snapshots --filters '[{"Name":"start-time","Values":["'$cincoDiasAtras'"]},{"Name":"volume-id","Values":["'$VOL70'"]}] lembrando que a variável $cincoDiasAtras deve ser criada por você.
  3. Pra cada um dos ids, execute o comando de remoção.

Como posso declarar nessa variável $cincoDiasAtras esse espaço de tempo, digo como consigo dizer para ela que tudo que for "antes de 5 dias" ela pode me trazer ?

Desculpe o nivel da pergunta é que realmente não entendo muito de programação

Eu estou tetando listar os snapshots a partir do CMD Windows.

Quando eu lanço o comando: ec2-describe-snapshots eu vejo todos os snapshots que tenho criado hoje.

Porém quando eu tento listar um snapshot especifico, não consigo. Estou tentando com o seguinte comando: ec2-describe-snapshots -F "name":"description", "value":"volXXXXX. No meu entendimento, esse comando esta dizendo para listar os snapshots, filtrando, quando a descrição for igual ao valor inserido.

Estou tendo o entendimento correto ?

É isso mesmo. Talvez a sintaxe esteja incorreta. Como é tudo String, tente copiar inclusive as letras maiúsculas como Name ao invés de name, etc.

Sobre a data, dê uma googlada pois não manjo da linha de comando do windows.