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
Creado por Dhrubajyoti Mukherjee (AWS) y Jean-Francois Landreau (AWS)
Resumen
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 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
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
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.

En el diagrama se muestra lo siguiente:
El valor controlado de Synthetics inicia la función de Lambda del valor controlado.
La función de Lambda del valor controlado se conecta a la interfaz de red elástica.
La función de Lambda del valor controlado monitorea el estado del punto de conexión.
Synthetics Canary envía los datos de ejecución al bucket y las métricas del S3. CloudWatch
Se inicia una CloudWatch alarma en función de las métricas.
La CloudWatch alarma inicia el tema Amazon Simple Notification Service (Amazon SNS).
Herramientas
Servicios de AWS
Amazon 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 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) 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) es un servicio de almacenamiento de objetos basado en la nube que le ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.
Amazon Virtual Private Cloud (Amazon VPC) 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
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
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
Epics
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
| Arquitecto de la nube |
Implementar y utilizar la solución. | Para implementar la solución, haga lo siguiente:
| Arquitecto de nube, ingeniero DevOps |
Solución de problemas
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
Información adicional
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.
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.
En su entorno de desarrollo, ejecute el comando
destroy
desde el directoriocloudwatch-synthetics-canary-terraform
.terraform destroy