Escritura de una configuración JSON para un esquema de comprobaciones múltiples de Node.js - Amazon CloudWatch

Escritura de una configuración JSON para un esquema de comprobaciones múltiples de Node.js

El esquema de comprobaciones múltiples de Node.js le permite crear canarios que lleven a cabo múltiples comprobaciones de validación en una sola ejecución de canario. Este esquema resulta útil cuando se desean probar varios puntos de conexión, validar diferentes aspectos de la aplicación o llevar a cabo una serie de comprobaciones relacionadas de forma secuencial.

Estructura de configuración raíz

La configuración raíz define la estructura general del canario de esquema avanzado de la API.

Propiedades del esquema
Propiedad Tipo Obligatorio Descripción
globalSettings Objeto No Configuraciones predeterminadas aplicadas a todos los pasos
variables Objeto No Valores reutilizables en todos los pasos (máximo 10)
steps Objeto Recopilación de pasos de supervisión (de 1 a 10 pasos)

Ejemplo

{ "globalSettings": { "stepTimeout": 30000, "userAgent": "CloudWatch-Synthetics-Advanced/1.0" }, "variables": { "baseUrl": "https://api.example.com", "apiVersion": "v1" }, "steps": { "1": { "stepName": "healthCheck", "checkerType": "HTTP", "url": "${baseUrl}/health", "httpMethod": "GET" } } }

Reglas de validación

  • Debe contener un paso como mínimo.

  • Se permiten 10 pasos como máximo.

  • No se permiten propiedades adicionales que no sean globalSettings, variables y steps.

Configuración global

La configuración global proporciona configuraciones predeterminadas que se aplican a todos los pasos, a menos que se anulen por paso.

Propiedades de

Propiedades de la configuración global
Propiedad Tipo Predeterminado Range Descripción
stepTimeout entero 30000 5000-300000 Tiempo de espera predeterminado para todos los pasos (milisegundos)

Ejemplo

{ "globalSettings": { "stepTimeout": 60000, } }

Administración de datos y variables

Las variables le permiten definir valores reutilizables a los que se puede hacer referencia en toda la configuración mediante la sintaxis ${variableName}.

Propiedades de variables

Propiedad Tipo Descripción
Nombres de variable cadena Debe coincidir con el patrón ^[a-zA-Z][a-zA-Z0-9_]*$
Valores de variable cadena Cualquier valor de cadena

Limitaciones

  • Se permiten 10 variables por configuración como máximo.

  • Los nombres de variable deben comenzar por una letra.

  • Los nombres de variable solo pueden contener letras, números y guiones bajos.

  • La longitud máxima no se especifica en el esquema.

Ejemplo

{ "variables": { "baseUrl": "https://api.example.com", "apiKey": "${AWS_SECRET:my-api-key}", "timeout": "30000", "userEmail": "test@example.com" } }

Uso de la configuración

{ "steps": { "1": { "url": "${baseUrl}/users", "timeout": "${timeout}", "headers": { "Authorization": "Bearer ${apiKey}" } } } }

Definiciones de pasos

Los pasos definen las operaciones de supervisión individuales. Cada paso está numerado del 1 al 10 y contiene un tipo específico de comprobación.

Propiedades comunes de los pasos

Propiedad Tipo Obligatorio Descripción
stepName string Identificador único del paso
checkerType cadena Tipo de comprobación: HTTP, DNS, SSL, TCP
extractors matriz No Configuración de la extracción de datos

Validación del nombre del paso

  • Patrón: ^[a-zA-Z][a-zA-Z0-9_-]*$

  • Longitud máxima: 64 caracteres

  • Letra como carácter inicial

Numeración de los pasos

  • Los pasos se numeran como claves de cadena: “1”, “2”,..., “10”

  • Patrón: ^([1-9]|10)$

  • Se requiere 1 paso como mínimo.

  • Se permiten 10 pasos como máximo.

Ejemplo

{ "steps": { "1": { "stepName": "loginAPI", "checkerType": "HTTP", "url": "https://api.example.com/login", "httpMethod": "POST" }, "2": { "stepName": "dnsCheck", "checkerType": "DNS", "domain": "example.com" } } }

Tipos de comprobación

Comprobaciones HTTP

Supervise los puntos de conexión y las API web con una validación exhaustiva de las solicitudes y las respuestas.

Propiedades necesarias

Propiedad Tipo Descripción
url cadena URL de destino (debe tener un formato de URI válido)
httpMethod cadena Método HTTP: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS

Propiedades opcionales

Propiedad Tipo Predeterminado Range Descripción
timeout entero 30000 5000-300000 Tiempo de espera de la solicitud (milisegundos)
waitTime entero 0 0-60 Retraso antes de la solicitud (segundos)
headers objeto - - Encabezados HTTP personalizados
body cadena - - Cuerpo de la solicitud para operaciones POST y PUT
authentication objeto - - Configuración de la autenticación
assertions matriz - - Reglas de validación de respuestas

Ejemplo

{ "stepName": "createUser", "checkerType": "HTTP", "url": "https://api.example.com/users", "httpMethod": "POST", "timeout": 15000, "headers": { "Content-Type": "application/json", "X-API-Version": "v1" }, "body": "{\"name\":\"John Doe\",\"email\":\"john@example.com\"}", "authentication": { "type": "API_KEY", "apiKey": "${AWS_SECRET:api-credentials}", "headerName": "X-API-Key" }, "assertions": [ { "type": "STATUS_CODE", "operator": "EQUALS", "value": 201 } ] }

Comprobaciones de DNS

Valide la resolución de DNS y registre la información.

Propiedades necesarias

Propiedad Tipo Descripción
domain cadena Nombre del dominio que se consultará (formato de nombre de host)

Propiedades opcionales

Propiedad Tipo Predeterminado Descripción
recordType cadena “A” Tipo de registro de DNS: A, CNAME, MX, TXT, NS
nameserver cadena - Servidor de DNS específico que se consultará
timeout entero 30000 Tiempo de espera de la consulta (5000-300000 ms)
port entero 53 Puerto de servidor de DNS (1-65535)
protocol cadena “UDP” Protocolo: UDP o TCP
assertions matriz - Reglas de validación de respuestas de DNS

Ejemplo

{ "stepName": "dnsResolution", "checkerType": "DNS", "domain": "example.com", "recordType": "A", "nameserver": "8.8.8.8", "timeout": 10000, "assertions": [ { "type": "RECORD_VALUE", "operator": "CONTAINS", "value": "192.168" } ] }

Comprobaciones de SSL

Supervise el estado y la configuración de los certificados SSL.

Propiedades necesarias

Propiedad Tipo Descripción
hostname cadena Nombre de host de destino (formato de nombre de host)

Propiedades opcionales

Propiedad Tipo Predeterminado Descripción
port entero 443 Puerto SSL (1-65535)
timeout entero 30000 Tiempo de espera de conexión (5000-300000 ms)
sni booleano TRUE Indicación del nombre del servidor
verifyHostname booleano TRUE Verificación de nombres de host
allowSelfSigned valor booleano FALSO Aceptación de certificados autofirmados
assertions matriz - Reglas de validación de certificados

Ejemplo

{ "stepName": "sslCertCheck", "checkerType": "SSL", "hostname": "secure.example.com", "port": 443, "sni": true, "verifyHostname": true, "assertions": [ { "type": "CERTIFICATE_EXPIRY", "operator": "GREATER_THAN", "value": 30, "unit": "DAYS" } ] }

Comprobaciones de TCP

Pruebe la conectividad de los puertos TCP y la validación de respuestas.

Propiedades necesarias

Propiedad Tipo Descripción
hostname cadena Nombre de host de destino (formato de nombre de host)
port entero Puerto de destino (1-65535)

Propiedades opcionales

Propiedad Tipo Predeterminado Descripción
timeout entero 30000 Tiempo de espera general (5000-300000 ms)
connectionTimeout entero 3 000 Tiempo de espera de conexión (5000-300000 ms)
readTimeout entero 2000 Tiempo de espera de lectura de datos (5000-300000 ms)
sendData cadena - Datos que se enviarán después de la conexión
expectedResponse cadena - Datos de respuesta esperados
encoding cadena “UTF-8” Codificación de datos: UTF-8, ASCII, HEX
assertions matriz - Validación de respuestas y conexiones

Ejemplo

{ "stepName": "databaseConnection", "checkerType": "TCP", "hostname": "db.example.com", "port": 3306, "connectionTimeout": 5000, "sendData": "SELECT 1", "expectedResponse": "1", "assertions": [ { "type": "CONNECTION_SUCCESSFUL", "value": true } ] }

Métodos de autenticación

Sin autenticación

{ "type": "NONE" }

Autenticación básica

Propiedad Tipo Obligatorio Descripción
type string Debe ser "BASIC"
username cadena Nombre de usuario para la autenticación
password cadena Contraseña para la autenticación

Ejemplo

{ "type": "BASIC", "username": "admin", "password": "${AWS_SECRET:basic-auth:password}" }

Autenticación de la clave de API

Propiedad Tipo Obligatorio/a Predeterminado Descripción
type string - Debe ser "API_KEY"
apiKey cadena - Valor de la clave de API
headerName cadena No “X-API-Key” Nombre del encabezado para la clave de API

Ejemplo

{ "type": "API_KEY", "apiKey": "${AWS_SECRET:api-credentials}", "headerName": "Authorization" }

Credenciales del cliente OAuth

Propiedad Tipo Obligatorio/a Predeterminado Descripción
type string - Debe ser "OAUTH_CLIENT_CREDENTIALS"
tokenUrl cadena - URL del punto de conexión del token de OAuth
clientId cadena - ID de cliente de OAuth
clientSecret cadena - Secreto de cliente de OAuth
scope cadena No - Ámbito de OAuth
audience cadena No - Audiencia de OAuth
resource cadena No - Recurso de OAuth
tokenApiAuth matriz No - Métodos de autenticación de la API del token: BASIC_AUTH_HEADER, REQUEST_BODY
tokenCacheTtl entero No 3600 TTL de caché de token (mínimo 60 segundos)

Ejemplo

{ "type": "OAUTH_CLIENT_CREDENTIALS", "tokenUrl": "https://auth.example.com/oauth/token", "clientId": "${AWS_SECRET:oauth-creds:client_id}", "clientSecret": "${AWS_SECRET:oauth-creds:client_secret}", "scope": "read write", "tokenCacheTtl": 7200 }

AWS Signature (Versión 4)

Propiedad Tipo Obligatorio Descripción
type string Debe ser "SIGV4"
service cadena Nombre del servicio de AWS (por ejemplo, “execute-api”»)
region cadena AWS región
roleArn cadena ARN del rol de IAM para la firma

Ejemplo

{ "type": "SIGV4", "service": "execute-api", "region": "us-east-1", "roleArn": "arn:aws:iam::123456789012:role/SyntheticsRole" }

Aserciones y validación

Aserciones HTTP

Aserciones de código de estado

Propiedad Tipo Obligatorio Descripción
type string Debe ser "STATUS_CODE"
operator cadena EQUALS, NOT_EQUALS, GREATER_THAN, LESS_THAN, IN_RANGE
value entero Condicional Código de estado HTTP (100-599)
rangeMin entero Condicional Valor de intervalo mínimo (para IN_RANGE)
rangeMax entero Condicional Valor de intervalo máximo (para IN_RANGE)
{ "type": "STATUS_CODE", "operator": "EQUALS", "value": 200 }

Aserciones de tiempo de respuesta

Propiedad Tipo Obligatorio/a Predeterminado Descripción
type string - Debe ser "RESPONSE_TIME"
operator cadena - LESS_THAN, GREATER_THAN, EQUALS
value número - Valor de tiempo (mínimo 0)
unit cadena No “MILLISECONDS” Debe ser "MILLISECONDS"
{ "type": "RESPONSE_TIME", "operator": "LESS_THAN", "value": 500, "unit": "MILLISECONDS" }

Aserciones de encabezado

Propiedad Tipo Obligatorio Descripción
type string Debe ser "HEADER"
headerName cadena Nombre del encabezado que se validará
operator cadena EQUALS, NOT_EQUALS, CONTAINS, NOT_CONTAINS, REGEX_MATCH, EXIST
value Cadena o booleano Condicional Valor esperado (booleano para el operador EXIST)
{ "type": "HEADER", "headerName": "Content-Type", "operator": "CONTAINS", "value": "application/json" }

Aserciones de cuerpo

Propiedad Tipo Obligatorio/a Predeterminado Descripción
type string - Debe ser "BODY"
target cadena No “JSON” JSON o TEXT
path cadena Condicional - JSONPath (obligatorio para el destino JSON)
operator cadena - CONTAINS, NOT_CONTAINS, EQUALS, NOT_EQUALS, EXISTS
value Cadena o booleano - Valor esperado (booleano para el operador EXISTS)
{ "type": "BODY", "target": "JSON", "path": "$.users[0].name", "operator": "EQUALS", "value": "John Doe" }

Aserciones de DNS

Aserciones de valor de registro

Propiedad Tipo Obligatorio/a Range Descripción
type string - Debe ser "RECORD_VALUE"
operator cadena - EQUALS, NOT_EQUALS, CONTAINS, NOT_CONTAINS, REGEX_MATCH
value cadena - Valor de registro esperado

Aserciones de recuento de registros

Propiedad Tipo Obligatorio/a Range Descripción
type string - Debe ser "RECORD_COUNT"
operator cadena - EQUALS, GREATER_THAN, LESS_THAN
value entero ≥ 0 Recuento esperado (mínimo 0)

Aserciones autoritarias

Propiedad Tipo Obligatorio/a Range Descripción
type string - Debe ser "AUTHORITATIVE"
value booleano - Estado autoritario esperado

Aserciones TTL

Propiedad Tipo Obligatorio/a Range Descripción
type string - Debe ser "TTL"
operator cadena - EQUALS, GREATER_THAN, LESS_THAN
value entero ≥ 0 TTL esperado (mínimo 0)

Aserciones SSL

Aserciones de expiración de certificados

Propiedad Tipo Obligatorio/a Predeterminado Descripción
type string - Debe ser "CERTIFICATE_EXPIRY"
operator cadena - GREATER_THAN, LESS_THAN
value entero - Valor de tiempo (mínimo 0)
unit cadena No “DAYS” DAYS, HOURS

Aserciones de asunto de certificado

Propiedad Tipo Obligatorio/a Predeterminado Descripción
type string - Debe ser "CERTIFICATE_SUBJECT"
field cadena - Campo de asunto: CN, O, OU, C, ST, L
operator cadena - CONTAINS, EQUALS, REGEX_MATCH
value cadena - Valor de campo esperado

Aserciones de emisor de certificado

Propiedad Tipo Obligatorio/a Predeterminado Descripción
type string - Debe ser "CERTIFICATE_ISSUER"
field cadena - Campo emisor: CN, O
operator cadena - CONTAINS, EQUALS
value cadena - Valor de campo esperado

Aserciones TCP

Aserciones de éxito de conexión

Propiedad Tipo Obligatorio/a Predeterminado Descripción
type string - Debe ser "CONNECTION_SUCCESSFUL"
value booleano - Estado de conexión esperado

Aserciones de datos de respuesta

Propiedad Tipo Obligatorio/a Predeterminado Descripción
type string - Debe ser "RESPONSE_DATA"
operator cadena - CONTAINS, EQUALS, NOT_CONTAINS, REGEX_MATCH, STARTS_WITH, ENDS_WITH
value cadena - Datos de respuesta esperados
encoding cadena No “UTF-8” UTF-8, ASCII, HEX

Extracción de datos

Los extractores permiten capturar datos de las respuestas para usarlos en pasos posteriores o con fines de elaboración de informes.

Propiedades de extracción

Propiedad Tipo Obligatorio/a Predeterminado Descripción
name string - Nombre de variable para datos extraídos
type cadena - Tipo de extracción: BODY
path cadena No - JSONPath para la extracción de cuerpo
regex cadena No - Patrón de expresión regular
regexGroup entero No 0 Grupo de captura de expresión regular (mínimo 0)

Validación de nombre de extracción

  • Patrón: ^[a-zA-Z][a-zA-Z0-9_]*$

  • Letra como carácter inicial

  • Pueden contener letras, números y guiones bajos.

Limitación: la sustitución no se aplica a los campos del esquema que tengan valores ENUM específicos.

Tipos de extracción

{ "name": "userId", "type": "BODY", "path": "$.user.id" }
{ "stepName": "loginAndExtract", "checkerType": "HTTP", "url": "https://api.example.com/login", "httpMethod": "POST", "body": "{\"username\":\"test\",\"password\":\"pass\"}", "extractors": [ { "name": "textVariable", "type": "BODY", "path": "$.myvalue" } ] }, { "stepName": "substituteVariable", "checkerType": "HTTP", "url": "https://api.example.com/get/${textVariable}", "httpMethod": "GET", "assertions": [ { "type": "BODY", "target": "JSON", "path": "$.users[0].name", "operator": "EQUALS", "value": "${textVariable}" } ] }