DEV Community

Cover image for Verificar rotinas de Snapshots via Lambda
Isaque Alcantara
Isaque Alcantara

Posted on

Verificar rotinas de Snapshots via Lambda

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"
        }
    ]
}
Enter fullscreen mode Exit fullscreen mode

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.

AWS GenAI LIVE image

How is generative AI increasing efficiency?

Join AWS GenAI LIVE! to find out how gen AI is reshaping productivity, streamlining processes, and driving innovation.

Learn more

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay