Introdução
O backup é peça chave nas operações de qualquer ambiente e deixar de realizar alguma rotina pode resultar em surpresas desagradáveis em algum procedimento de recuperação.
Existem diversas formas de realizar backups dos seus recursos e serviços na AWS. Quando se trata de Instâncias EC2 e RDS, a AWS oferece ferramentas como o AWS Backup ou serviço de backup integrado no próprio recurso, como é o caso do RDS por exemplo.
Apesar da facilidade em manter seus backups em dia, sabemos que sempre tem aquela exceção(zinha) que foge à regra e com o tempo pode acabar no limbo. Pensando nisso, elaborei este script em Python para poder verificar se os volumes de suas contas estão com o snapshot em dia. 🙂
Vamos aos passos
1 - Criar uma função do IAM para o Lambda
Acesse o console do IAM, no menu lateral esquerdo clique em Roles e depois clique no botão Create role.
Em Select trusted entity selecione AWS service, Lambda e clique em Next.
Clique no botão Create policy. Uma nova guia será aberta para criação da policy. Vá na guia JSON do editor, cole o seguinte código abaixo e depois clique em Next para avançar para a parte de Review policy:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"cloudwatch:PutMetricData",
"ec2:DescribeInstances",
"ec2:DescribeVolumeStatus",
"ec2:DescribeSnapshotAttribute",
"ec2:DescribeRegions",
"ec2:DescribeVolumes",
"ec2:DescribeVolumesModifications",
"ec2:DescribeSnapshots",
"ec2:DescribeVolumeAttribute"
],
"Resource": [
"*"
],
"Effect": "Allow"
},
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
"arn:aws:logs:*:*:*"
],
"Effect": "Allow"
}
]
}
Dê um nome para sua Policy e clique em Create policy.
Volte para a guia da criação da Role em seu navegador e atualize a lista de policies. Pesquise pela policy criada anteriormente, selecione-a e clique em Next.
Dê um nome para sua Role e clique em Create role. Pronto, sua Role está criada.
2 - Criar função Lambda
Abra o console do Lambda, no menu lateral esquerdo clique em Functions e depois no botão Create function.
Selecione Author from scratch, dê um nome para sua função e escolha o Runtime Python 3.9.
Em Permissions, selecione o item Use an existing role e no campo de seleção escolha a Role criada anteriormente. Feito isso clique em Create function.
Com isso sua função está criada. Agora vamos substituir o código de exemplo da função pelo código deste repositório.
Este código seleciona todos os volumes da conta e verifica se cada um deles possui ou não algum snapshot realizado.
Caso NÃO possua algum snapshot realizado, será impresso a seguinte mensagem nos logs de execução:
[ALERT] The Volume-ID: vol-a1b2c3d4e5f6g7 does not have a Snapshot.
Se o volume possuir algum snapshot mas esse for mais antigo do que a quantidade de dias inserida na constante de verificação DAYS = x
será impresso a mensagem:
[ALERT] The last Snapshot of Volume-ID: vol-a1b2c3d4e5f6g7 was in 2022-09-23 01:33:04.596000+00:00.
Se por algum motivo você quiser excluir algum volume da verificação, basta adicionar a tag snapshot:false
no volume desejado. Então verá na saída de logs a mensagem:
[WARNING] Volume-ID: vol-a1b2c3d4e5f6g7 excluded from snapshot routine.
Por padrão, o código verifica se os snapshots mais recentes possuem mais de 3 dias, mas você pode alterar esse valor na constante DAYS = x
no início do código.
Caso a saída do código não retorne nada significa que seus volumes estão com o snapshot em dia.
Após substituir o código, clique em Deploy para salvar.
Após salvar o código, vá até a guia Configuration e clique em Edit.
Altere o Timeout para 1 minuto e 30 segundos (pode ser necessário um tempo maior dependendo da quantidade de volumes na conta) e depois clique em Save.
Volte na guia Code, clique em Test para configurar um novo evento de teste.
Dê um nome ao evento, mantenha o restante das configurações padrão e clique em Save.
Após salvar o Evento, clique no botão Test novamente para executar sua função Lambda.
3 - Analisando os Logs
Após executar a função, você verá uma saída parecida com esta abaixo:
Para uma visualização mais completa, vamos analisar essa saída no Log Groups do CloudWatch. Para isso clique na guia Monitor e depois em View CloudWatch logs.
Com isso você será redirecionado para o Grupo de logs da função Lambda que você criou. Clique no Log stream mais recente para visualizar a saída completa da Função.
Dessa forma você pode ter uma visão completa, o que dependendo do seu ambiente pode ser bem extensa.
Conclusão
A partir dos logs no CloudWatch podemos criar alarmes com base em filtros de métricas e assim termos uma monitoria de backup de todos os volumes da conta, mas isso é um assunto para um próximo post.
Vou ficando por aqui e qualquer feedback só deixar nos comentários.
Top comments (0)