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.

Top comments (0)