As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Implante canários CloudWatch Synthetics usando o Terraform
Criado por Dhrubajyoti Mukherjee (AWS) e Jean-Francois Landreau (AWS)
Resumo
É importante validar a integridade de um sistema do ponto de vista do cliente e confirmar se os clientes conseguem se conectar. Isso é mais difícil quando os clientes não chamam constantemente o endpoint. A Amazon CloudWatch Synthetics apoia a criação de canários, que podem testar endpoints públicos e privados. Ao usar canários, você pode saber o status de um sistema mesmo que ele não esteja em uso. Esses canários são scripts Node.js Puppeteer ou scripts Python Selenium.
Esse padrão descreve como usar o HashiCorp Terraform para implantar canários que testam endpoints privados. Incorpora um script do Puppeteer que testa se um URL retorna. 200-OK
O script do Terraform pode então ser integrado ao script que implanta o endpoint privado. Também é possível modificar a solução para monitorar endpoints públicos.
Pré-requisitos e limitações
Pré-requisitos
Uma conta ativa da Amazon Web Services (AWS) com uma nuvem privada virtual (VPC) e sub-redes privadas
O URL do endpoint que pode ser acessado a partir das sub-redes privadas
Terraform instalado no ambiente de implantação
Limitações
A solução atual funciona para as seguintes versões de tempo de execução do CloudWatch Synthetics:
syn-nodejs-puppeteer-3,4
syn-nodejs-puppeteer-3,5
syn-nodejs-puppeteer-3,6
syn-nodejs-puppeteer-3,7
À medida que novas versões de runtime forem lançadas, talvez você precise atualizar a solução atual. Você também precisará modificar a solução para acompanhar as atualizações de segurança.
Versões do produto
Terraform 1.3.0
Arquitetura
O Amazon CloudWatch Synthetics é baseado no CloudWatch Lambda e no Amazon Simple Storage Service (Amazon S3). A Amazon CloudWatch oferece um assistente para criar os canários e um painel que exibe o status das corridas de canários. A função do Lambda executa o script. O Amazon S3 armazena os logs e as capturas de tela das execuções canárias.
Esse padrão simula um endpoint privado por meio de uma instância do Amazon Elastic Compute Cloud (Amazon EC2) implantada nas sub-redes de destino. A função do Lambda requer interfaces de rede elásticas na VPC em que o endpoint privado é implantado.

O diagrama mostra o seguinte:
O canário Synthetics inicializa a função do Lambda do canário.
A função do Lambda canário se conecta à interface de rede elástica.
A função do Lambda canário monitora o status do endpoint.
O canário Synthetics envia os dados de execução para o bucket e as métricas do S3. CloudWatch
Um CloudWatch alarme é iniciado com base nas métricas.
O CloudWatch alarme inicia o tópico Amazon Simple Notification Service (Amazon SNS).
Ferramentas
Serviços da AWS
CloudWatchA Amazon ajuda você a monitorar as métricas dos seus recursos da AWS e dos aplicativos que você executa na AWS em tempo real.
O AWS Lambda é um serviço de computação que ajuda você a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.
O Amazon Simple Notification Service (Amazon SNS) ajuda você a coordenar e gerenciar a troca de mensagens entre publicadores e clientes, incluindo servidores web e endereços de e-mail.
O Amazon Simple Storage Service (Amazon S3) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.
A Amazon Virtual Private Cloud (Amazon VPC) ajuda a iniciar recursos da AWS em uma rede virtual definida por você. Essa rede virtual é semelhante a uma rede tradicional que você operaria no próprio datacenter, com os benefícios de usar a infraestrutura escalável da AWS. Esse padrão usa endpoints da VPC e interfaces de rede elástica.
Outros serviços
HashiCorp O Terraform
é uma ferramenta de infraestrutura como código (IaC) de código aberto que ajuda você a usar o código para provisionar e gerenciar a infraestrutura e os recursos da nuvem. Esse padrão usa o Terraform para implantar a infraestrutura. O Puppeteer
é uma biblioteca Node.js. O tempo de execução do CloudWatch Synthetics usa a estrutura do Puppeteer.
Código
A solução está disponível no watch-synthetics-canary-terraform repositório na GitHub nuvem
Épicos
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Reúna os requisitos para monitorar o URL privado. | Reúna a definição completa do URL: domínio, parâmetros e cabeçalhos. Para se comunicar de forma privada com o Amazon S3 e a CloudWatch Amazon, use endpoints VPC. Observe como a VPC e as sub-redes são acessíveis ao endpoint. Considere a frequência das corridas de canários. | Arquiteto de nuvem, administrador de rede |
Modificar a solução existente para monitorar o URL privado. | Modificar o arquivo
| Arquiteto de nuvem |
Implanta e opera a solução. | Para implantar a solução, faça o seguinte:
| Arquiteto de nuvem, DevOps engenheiro |
Solução de problemas
Problema | Solução |
---|---|
A exclusão dos recursos provisionados é interrompida. | Exclua manualmente a função do Lambda canário, a interface de rede elástica correspondente e o grupo de segurança, nessa ordem. |
Recursos relacionados
Mais informações
Artefatos do repositório
Os artefatos do repositório estão na seguinte estrutura.
.
├── README.md
├── main.tf
├── modules
│ ├── canary
│ └── canary-infra
├── terraform.tfvars
├── tf.plan
└── variable.tf
O arquivo main.tf
contém o módulo principal e implanta dois submódulos:
canary-infra
implanta a infraestrutura necessária para as canárias.canary
implanta os canários.
Os parâmetros de entrada da solução estão localizados no arquivo terraform.tfvars
. Você pode usar o exemplo de código a seguir para criar um canário.
module "canary" {
source = "./modules/canary"
name = var.name
runtime_version = var.runtime_version
take_screenshot = var.take_screenshot
api_hostname = var.api_hostname
api_path = var.api_path
reports-bucket = module.canary_infra.reports-bucket
role = module.canary_infra.role
security_group_id = module.canary_infra.security_group_id
subnet_ids = var.subnet_ids
frequency = var.frequency
alert_sns_topic = var.alert_sns_topic
}
O arquivo .var correspondente segue.
name = "my-canary"
runtime_version = "syn-nodejs-puppeteer-3.7"
take_screenshot = false
api_hostname = "mydomain.internal"
api_path = "/path?param=value"
vpc_id = "vpc_id"
subnet_ids = ["subnet_id1"]
frequency = 5
alert_sns_topic = "arn:aws:sns:eu-central-1:111111111111:yyyyy"
Como limpar a solução
Se você estiver testando em um ambiente de desenvolvimento, poderá limpar a solução para evitar custos acumulados.
No Console de Gerenciamento da AWS, navegue até o console do Amazon S3. Esvazie o bucket do Amazon S3 que a solução criou. Certifique-se de fazer um backup dos dados, se necessário.
No seu ambiente de desenvolvimento, a partir do diretório
cloudwatch-synthetics-canary-terraform
, execute o comandodestroy
.terraform destroy