Concrete Logo
Hamburger button

Gerenciando Snapshots com AWS Lambda

  • Blog
  • 11 de Abril de 2016
Share

*Post publicado originalmente no Medium pessoal do autor. Confira aqui.

Parte do trabalho para garantir boas práticas do seu ambiente em Cloud é ter certeza de que é possível reverter ou recuperar dados em um determinado RPO. Vou demonstrar nesse post como você pode fazer isso de forma automatizada e agendada com o AWS Lambda.

Criando Snapshots com o AWS Lambda

Partiremos do princípio que você já está autenticado no Console da AWS.

A abordagem que vamos seguir aqui é identificar os volumes das Instâncias a partir de Tags. Então, vamos para os passos:

Vá até a instância que deseja monitorar e gerar Snapshot e adicione a Tag Identification com o valor MySnap (esse é só um identificador que será usado na hora de buscar pelos volumes)

Screenshot 2016-03-22 16.39.13

Acesse o serviço do Lambda e clique em Create a Lambda function. Nesse passo você pode ver vários exemplos de funções já feitas pela AWS, mas no nosso caso vamos pular esse passo. Portanto, clique em Skip. No passo seguinte preencha Name com ebs-snapshot e selecione em Runtime Python 2.7

Screenshot 2016-03-22 16.59.15

Agora vamos adicionar o nosso código para listar os volumes pelo Tag e criar o Snapshot. Copie o código neste link no meu GitHub e cole no campo Lambda function code. Em Role selecione * Basic execution role. Quando fizer isso vai aparecer uma nova tela. Simplesmente crie a Role clicando em Allow. Os outros campos podem ficar com os valores padrões por enquanto. Clique em Next e depois Create function.

ATENÇÃO: esse script está configurado para procurar instância em Virgínia, se você utiliza outra região substitua o valor us-east-1 pela região que deseja na linha:

Para testarmos a função antes de habilitar o agendamento, clique em Test e depois Save and test. Se o output for algo parecido com as imagens abaixo, provavelmente a função rodou com sucesso.

Screenshot 2016-03-22 16.52.12 Screenshot 2016-03-22 16.52.02

Você também pode acessar a lista de Snapshots em EC2 e verificar se apareceu um novo Snapshot do seu volume. Dependendo do tamanho do volume e de alterações que ocorreram desde o último snapshot, a conclusão pode demorar vários minutos.

Screenshot 2016-03-22 16.55.37

Pronto, nossa função de geração de snapshots está pronta.

Configurando agendamento de execução de função no Lambda

Para conseguirmos seguir a nossa ideia inicial de RPO precisamos agendar a execução da função criada anteriormente.

Acesse novamente o Lambda, clique no nome da sua função (no nosso caso ebs-snapshot), acesse a aba Event sources, clique em Add event source. Na nova janela selecione CloudWatch Events – Schedule no campo Event source type, preencha o campo Rule name com um nome que desejar e Rule description com a descrição que desejar. Em Schedule expression vamos selecionar rate (1 hour) (que vai gerar um snapshot a cada 1 hora, você pode selecionar outro intervalo se quiser) e clique em Submit.

Screenshot 2016-03-22 17.07.25

Se você aguardar algumas horas, perceberá que um novo snapshot do volume aparecerá na sua lista de snapshots a cada 1h.

Configurando um período de retenção e excluindo os Snapshots mais antigos

Esse passo extra é interessante para garantir que não vamos ficar pagando por snapshots mais antigos que não tenham utilidade. É importante pensar em um período de retenção adequado para cada perfil de instância que está sendo utilizado. Vamos fazer um exemplo com retenção de 30 dias:

Vá novamente até sua instância e adicione um novo Tag com a Key Retention e o Value 30 (30 dias)

Screenshot 2016-03-22 17.15.55

Acesse sua Function do Lambda e troque o código que existe lá hoje pelo deste link.

OBS: perceba que no código existe uma retenção padrão de 7 dias se não for encontrado o Tag Retention.

Clique em Save and test e verifique novamente nos Snapshots se foi gerado um novo. Preste atenção no Tag adicionado ao snapshot criado, nele você poderá ver a data em que será excluído.

Screenshot 2016-03-22 17.25.09

Para excluirmos os snapshots vamos precisar de uma segunda function no Lambda. Por isso, execute novamente os passos de criação como foi ensinado anteriormente, mas utilize o código deste link aqui.

No nosso caso vamos utilizar o nome de delete-ebs-snapshot para essa nova function. No Event sources selecione a opção para executar 1 vez por dia rate(1 day). Nessa nova function precisaremos mudar o Timeout para 1 minuto. Pronto! Agora vai existir um snapshot onde o valor do Tag DeleteOn for igual ao dia de execução.

Para validar se a function está realmente funcionando edite o valor do Tag no snapshot para o dia de hoje e execute o Test na function do Lambda. Acesse os Snapshots em EC2 e verifique que o snapshot sumiu.

Pronto, agora você tem uma garantia de geração de backups a cada 1h e eliminação dos snapshots com mais de 30 dias de existência com um custo baixo e de fácil manutenção.

Se você quiser saber mais sobre o assunto, fale com a gente! Se tiver alguma dúvida, deixe nos comentários abaixo.