

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Despliega canarios de CloudWatch Synthetics con Terraform
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform"></a>

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

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

Es importante validar el estado de un sistema desde la perspectiva del cliente y confirmar que los clientes pueden conectarse. Esto resulta más difícil cuando los clientes no llaman constantemente al punto de conexión. [Amazon CloudWatch Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html) admite la creación de canarios, que pueden probar puntos de conexión públicos y privados. Al usar valores controlados, puede conocer el estado de un sistema incluso si no está en uso. Estos valores controlados son scripts de Node.js Puppeteer o scripts de Python Selenium.

Este patrón describe cómo usar HashiCorp Terraform para implementar canarios que prueben puntos de enlace privados. Incorpora un script de Puppeteer que comprueba si una URL devuelve `200-OK`. A continuación, el script de Terraform se puede integrar con el script que implementa el punto de conexión privado. También puede modificar la solución para monitorear puntos de conexión públicos.

## Requisitos previos y limitaciones
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-prereqs"></a>

**Requisitos previos**
+ Una cuenta de Amazon Web Services (AWS) activa con una nube privada virtual (VPC) y subredes privadas
+ La URL del punto de conexión al que se puede acceder desde las subredes privadas
+ Terraform instalado en el entorno de implementación

**Limitaciones**

La solución actual funciona para las siguientes versiones de tiempo de ejecución de CloudWatch Synthetics:
+ syn-nodejs-puppeteer-3.4
+ syn-nodejs-puppeteer-3,5
+ syn-nodejs-puppeteer-3,6
+ syn-nodejs-puppeteer-3,7

Cuando se publiquen nuevas versiones de tiempo de ejecución, podría tener que actualizar la solución actual. También tendrá que modificar la solución para mantenerse al día con las actualizaciones de seguridad.

**Versiones de producto**
+ Terraform 1.3.0

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

Amazon CloudWatch Synthetics se basa en CloudWatch Lambda y Amazon Simple Storage Service (Amazon S3). Amazon CloudWatch ofrece un asistente para crear los canarios y un panel de control que muestra el estado de los canarios. La función de Lambda ejecuta el script. Amazon S3 almacena los registros y las capturas de pantalla de las ejecuciones de valores controlados.

Este patrón simula un punto final privado a través de una instancia de Amazon Elastic Compute Cloud (Amazon EC2) implementada en las subredes de destino. La función de Lambda requiere interfaces de red elásticas en la VPC en la que se implementa el punto de conexión privado.

![\[La descripción sigue el diagrama.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/73ed0103-ec45-4653-bb29-f402a88f0c64/images/39aaed0f-f259-4f2a-98fb-8e3a340d0b02.png)


En el diagrama se muestra lo siguiente:

1. El valor controlado de Synthetics inicia la función de Lambda del valor controlado.

1. La función de Lambda del valor controlado se conecta a la interfaz de red elástica.

1. La función de Lambda del valor controlado monitorea el estado del punto de conexión.

1. Synthetics Canary envía los datos de ejecución al bucket y las métricas del S3. CloudWatch 

1. Se inicia una CloudWatch alarma en función de las métricas.

1. La CloudWatch alarma inicia el tema Amazon Simple Notification Service (Amazon SNS).

## Tools (Herramientas)
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-tools"></a>

**Servicios de AWS**
+ [Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) le CloudWatch ayuda a monitorizar las métricas de sus recursos de AWS y las aplicaciones que ejecuta en AWS en tiempo real.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
+ [Amazon Simple Notification Service (Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)) le permite coordinar y administrar el intercambio de mensajes entre publicadores y clientes, incluidos los servidores web y las direcciones de correo electrónico.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) le permite lanzar recursos de AWS en una red virtual que haya definido. Esta red virtual es similar a la red tradicional que utiliza en su propio centro de datos, con los beneficios de usar la infraestructura escalable de AWS. Este patrón utiliza puntos de conexión de VPC e interfaces de red elásticas.

**Otros servicios**
+ [HashiCorp Terraform](https://www.terraform.io/docs) es una herramienta de código abierto de infraestructura como código (IaC) que le ayuda a usar el código para aprovisionar y administrar la infraestructura y los recursos de la nube. Este patrón utiliza Terraform para implementar la infraestructura.
+ [Puppeteer](https://pptr.dev/) es una biblioteca de Node.js. El motor de ejecución CloudWatch Synthetics utiliza el marco Puppeteer.

**Código**

[La solución está disponible en el repositorio en la nube. GitHub watch-synthetics-canary-terraform](https://github.com/aws-samples/cloudwatch-synthetics-canary-terraform) Para obtener más información, consulte la sección *Información adicional*.

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

### Implementar la solución para monitorear una URL privada
<a name="implement-the-solution-for-monitoring-a-private-url"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Reunir los requisitos para monitorear la URL privada. | Reúna la definición completa de la URL: dominio, parámetros y encabezados. Para comunicarse de forma privada con Amazon S3 y Amazon CloudWatch, utilice puntos de enlace de VPC. Observe cómo se puede acceder a la VPC y a las subredes desde el punto de conexión. Tenga en cuenta la frecuencia de las ejecuciones de valores controlados. | Arquitecto de la nube, administrador de redes | 
| Modifique la solución existente para monitorear la URL privada. | Modifique el archivo `terraform.tfvars`:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-cloudwatch-synthetics-canaries-by-using-terraform.html) | Arquitecto de la nube | 
| Implementar y utilizar la solución. | Para implementar la solución, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/deploy-cloudwatch-synthetics-canaries-by-using-terraform.html) | Arquitecto de nube, ingeniero DevOps  | 

## Resolución de problemas
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| La eliminación de los recursos aprovisionados se bloquea. | Elimine manualmente la función de Lambda del valor controlado, la interfaz de red elástica correspondiente y el grupo de seguridad, en ese orden. | 

## Recursos relacionados
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-resources"></a>
+ [Uso del monitoreo sintético](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html)
+ [Supervise los puntos de enlace de API Gateway con Amazon CloudWatch Synthetics](https://aws.amazon.com/blogs/mt/monitor-api-gateway-endpoints-with-amazon-cloudwatch-synthetics/) (entrada del blog)

## Información adicional
<a name="deploy-cloudwatch-synthetics-canaries-by-using-terraform-additional"></a>

**Artefactos del repositorio**

Los artefactos del repositorio tienen la siguiente estructura.

```
.
├── README.md
├── main.tf
├── modules
│   ├── canary
│   └── canary-infra
├── terraform.tfvars
├── tf.plan
└── variable.tf
```

El archivo `main.tf` contiene el módulo principal e implementa dos módulos secundarios:
+ `canary-infra` implementa la infraestructura necesaria para los valores controlados.
+ `canary` implementa los valores controlados.

Los parámetros de entrada de la solución se encuentran en el archivo `terraform.tfvars`. Puede utilizar el siguiente código de ejemplo para crear un valor controlado.

```
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
}
```

A continuación, se muestra el archivo .var correspondiente.

```
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"
```

**Limpieza de la solución**

Si está haciendo las pruebas en un entorno de desarrollo, puede limpiar la solución para evitar acumular costos.

1. En la consola de administración de AWS, vaya a la consola de Amazon S3. Vacíe el bucket de Amazon S3 creado por la solución. Asegúrese de realizar una copia de seguridad de los datos en caso necesario.

1. En su entorno de desarrollo, ejecute el comando `destroy` desde el directorio `cloudwatch-synthetics-canary-terraform`.

   ```
   terraform destroy
   ```