
O objetivo desse post é demonstrar a criação de um synthetic canary na AWS. É um recurso que está dentro do serviços oferecidos dentro do Cloudwatch e tem a principal função de testar se uma URL ou uma API está retornando status de sucesso (HTTP 200) durante uma checagem a cada um minuto por exemplo. Esse recurso existe em outras ferramentas de Observabilidade que já trabalhei por exemplo Dynatrace e Datadog.
Para mais informações sobre esse serviço consulte esse link.
Pré-Requisitos
Para testar esse serviço da AWS foi criar uma API em Python usando o FastAPI. Para saber mais informações sobre o que é o FastAPI e como criar uma API usando FastAPI pode consultar esse link. E também o link da documentação oficial.
Para a instalação do FastAPI utilizarei uma EC2 com as seguintes configurações abaixo:

Lembrando que essa EC2 deve possuir um IP Publico.
Instalação FastAPI
Após a criação da EC2 na AWS deverá ser executado os seguintes comandos abaixo para a instalação do FastAPI:
sudo apt update
sudo apt install python3-pip -y
pip install fastapi
pip install uvicorn
Para validar a instalação execute o comando abaixo:
pip show fastapi
Deverá retornar algo conforme imagem abaixo:

Após a instalação do FastAPI devemos criar o arquivo main.py conforme abaixo:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def index():
return "Hello World"
Após salvar o arquivo acima e executar o seguinte comando abaixo para iniciar a execução do FastAPI:
uvicorn main:app --host 0.0.0.0 --port 8080
No meu caso estou usando a porta 8080. Será necessário a liberação dessa no security group da EC2 conforme imagem abaixo:

Utilizando o dns público ou ip público da sua EC2 na porta 8080 devemos ter um resultado similar conforme imagem abaixo:

Configuração Synthetics Canaries
Para continuar a configuração do recurso Synthetic Canaries do Cloudwatch é necessário já ter criado a API conforme seção acima.
Para iniciar a configuração você deve ir na opção Application Monitoring >> Synthetics Canaries no serviço do Cloudwatch conforme imagem abaixo:

Será mostrado uma tela conforme abaixo:

Para efetuar a criação basta clicar na opção Create Canary e será apresentado a tela abaixo:

Nesta primeira seção temos a opção de usar padrões já criados pela AWS, usar nossos próprios scripts e importar de um bucket S3. No meu caso vou usar a primeira opção.

Nesta segunda seção você irá definir o nome do Canary e o endpoint URL que será checado.

Nesta terceira seção será escolhido o runtime que será executado. No meu caso eu optei pelo runtime que utiliza o python3.8 + selenium + chromium mas existem outras opções. Também é possível configurar variáveis de ambiente para a execução do script.

Nesta quarta seção você irá configurar de quanto em quanto tempo será executado a checagem do endpoint URL.
Outras opções que podem ser configuradas nessa mesma tela:
- Tempo de retenção dos resultados;
- Bucket onde será salvo os resultados;
- Criação de uma IAM Role;
- Criação de um alarme no Cloudwatch;
- Permite que a checagem só execute dentro de uma determinada VPC;
- Configuração de Tags;
Após a criação será apresentado esse dashboard conforme imagens abaixo:


Simulei parar a execução da API para verificar se o mesmo é alertado conforme imagem abaixo:

Também é possível criar o Synthetics Canaries através do Terraform conforme informado nesse link.
Conclusão
O intuito desse post foi demonstrar a criação de uma simples API e a checagem dela utilizando o recurso Synthetics Canaries do Cloudwatch.