

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
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform"></a>

*Dhrubajyoti Mukherjee e Jean-Francois Landreau, Amazon Web Services*

## Resumo
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-summary"></a>

É 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](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html) 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
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-prereqs"></a>

**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
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-architecture"></a>

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.

![\[A descrição segue o diagrama.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/73ed0103-ec45-4653-bb29-f402a88f0c64/images/39aaed0f-f259-4f2a-98fb-8e3a340d0b02.png)


O diagrama mostra o seguinte:

1. O canário Synthetics inicializa a função do Lambda do canário.

1. A função do Lambda canário se conecta à interface de rede elástica.

1. A função do Lambda canário monitora o status do endpoint.

1. O canário Synthetics envia os dados de execução para o bucket e as métricas do S3. CloudWatch 

1. Um CloudWatch alarme é iniciado com base nas métricas.

1. O CloudWatch alarme inicia o tópico Amazon Simple Notification Service (Amazon SNS).

## Ferramentas
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-tools"></a>

**Serviços da AWS**
+  CloudWatchA [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) 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](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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 Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) 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)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é 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)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) 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](https://www.terraform.io/docs) é 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](https://pptr.dev/) é 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](https://github.com/aws-samples/cloudwatch-synthetics-canary-terraform). Para obter mais informações, consulte a seção *Informações adicionais*.

## Épicos
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-epics"></a>

### Implemente a solução para monitorar um URL privado
<a name="implement-the-solution-for-monitoring-a-private-url"></a>


| Tarefa | Description | 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 `terraform.tfvars`[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-cloudwatch-synthetics-canaries-by-using-terraform.html) | Arquiteto de nuvem | 
| Implanta e opera a solução. | Para implantar a solução, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/deploy-cloudwatch-synthetics-canaries-by-using-terraform.html) | Arquiteto de nuvem, DevOps engenheiro | 

## Solução de problemas
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-troubleshooting"></a>


| 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
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-resources"></a>
+ [Usar monitoramento sintético](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html)
+ [Monitore os endpoints do API Gateway com o Amazon CloudWatch Synthetics](https://aws.amazon.com/blogs/mt/monitor-api-gateway-endpoints-with-amazon-cloudwatch-synthetics/) (publicação no blog)

## Mais informações
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-additional"></a>

**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.

1. 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.

1. No seu ambiente de desenvolvimento, a partir do diretório `cloudwatch-synthetics-canary-terraform`, execute o comando `destroy`.

   ```
   terraform destroy
   ```