Neste post, apresento um solução simples para monitorar a disponibilidade de um ou mais sites utilizando uma função lambda com código em Python na AWS. Além de monitorar a disponibilidade, é possível configurar notificações de disponibilidade via E-mail e/ou SMS.
O lambda é uma opção fantástica para necessidades como estas, uma vez que trabalha com serverless, sendo assim, é muito mais eficiente que deixar um servidor/container ligado apenas para executar este tipo de ação.
Minha necessidade aqui é basicamente executar validações de 5 em 5 minutos em um ou mais sites, confirmando que o site retorna um status ok “200”, caso não retorne isso, me encaminhe uma notificação via e-mail e/ou SMS.
Na seguinte imagem apresento a arquitetura deste monitoramento, seu funcionamento se dará desta forma:
- A Lambda valida se o site este no ar, se sim, retorna os códigos 200/304 e registra no CloudWatch, se o retorno for negativo com um código menor que 200, se registra no CloudWatch e efetua o disparo do alerta.

Vamos à mão na massa:
Primeiro, crie uma role no IAM do tipo para Lambda e atribua a seguinte policy no formato JSON
Após criar a role, vá até a console do Lamda e crie uma nova função (Linguagem Python 2.7 e permissões básicas do Lambda):

Após criar a função, na área de código, adicione o seguinte código Python

Atente-se para inserir as suas URLs válidas neste local no código

Em “Função de execução”, aponte para a role que você criou anteriormente e deixa a configuração de rede igual a imagem

Agora que você já criou sua função, será necessário criar uma trigger para chamar esta função de validação do(s) site(s) a cada 5 minutos, utilizaremos o CloudWatch Events como trigger, para isto, clique em “+ Adicionar gatilho” na área de Designer, após isso, selecione “Eventos do CloudWatch” e preencha conforme a imagem:

Sua configuração da Lambda deverá ficar como na imagem, após isso, clique em Salvar.

Com isto, a parte referente ao Lambda estará pronta. Seguiremos agora para a configuração do CloudWatch e SNS para notificações.
Na console do SNS, crie um tópico com ao menos um “subscriber”, seja e-mail ou SMS, conforme a sequência de imagens:

Após criar o tópico, clique em Criar assinatura:

Preencha com um e-mail ou telefone válido e clique em Criar Assinatura:

Criado o tópico no SNS, abra a console do CloudWatch e em Métricas, procure pela métrica WebsiteStatusCode, ela só vai aparecer depois que a Lambda rodar a primeira vez:

Após validar que a métrica existe, no mesmo menu da esquerda, clique em Alarmes e em Criar Alarme, selecione o métrica “WebsiteStatusCode”, a tela ficará da seguinte forma:

Mais abaixo em Condições, deixe conforme a imagem:

Após configurar, clique em Próximo e configure conforme a imagem:

Clique em Próximo, defina um nome único para o alarme e clique em Criar Alarme.
Pronto, a configuração esta pronta e a cada 5 minutos, a Lambda irá “pingar” sua lista de sites e caso o retorno seja <200, o SNS irá lhe notificar.
Gostou do post, ficou com dúvidas, aguardo seus comentários!
Grande abraço e até a próxima.
0 comentário