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.
Temas
Estructura de configuración raíz
La configuración raíz define la estructura general del canario de esquema avanzado de la API.
| 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 | Sí | 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,variablesysteps.
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
| 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 | Sí | Identificador único del paso |
checkerType |
cadena | Sí | 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 | Sí | Debe ser "BASIC" |
username |
cadena | Sí | Nombre de usuario para la autenticación |
password |
cadena | Sí | 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 | Sí | - | Debe ser "API_KEY" |
apiKey |
cadena | Sí | - | 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 | Sí | - | Debe ser "OAUTH_CLIENT_CREDENTIALS" |
tokenUrl |
cadena | Sí | - | URL del punto de conexión del token de OAuth |
clientId |
cadena | Sí | - | ID de cliente de OAuth |
clientSecret |
cadena | Sí | - | 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 | Sí | Debe ser "SIGV4" |
service |
cadena | Sí | Nombre del servicio de AWS (por ejemplo, “execute-api”») |
region |
cadena | Sí | AWS región |
roleArn |
cadena | Sí | 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 | Sí | Debe ser "STATUS_CODE" |
operator |
cadena | Sí | 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 | Sí | - | Debe ser "RESPONSE_TIME" |
operator |
cadena | Sí | - | LESS_THAN, GREATER_THAN, EQUALS |
value |
número | Sí | - | 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 | Sí | Debe ser "HEADER" |
headerName |
cadena | Sí | Nombre del encabezado que se validará |
operator |
cadena | Sí | 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 | Sí | - | Debe ser "BODY" |
target |
cadena | No | “JSON” | JSON o TEXT |
path |
cadena | Condicional | - | JSONPath (obligatorio para el destino JSON) |
operator |
cadena | Sí | - | CONTAINS, NOT_CONTAINS, EQUALS, NOT_EQUALS, EXISTS |
value |
Cadena o booleano | Sí | - | 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 | Sí | - | Debe ser "RECORD_VALUE" |
operator |
cadena | Sí | - | EQUALS, NOT_EQUALS, CONTAINS, NOT_CONTAINS, REGEX_MATCH |
value |
cadena | Sí | - | Valor de registro esperado |
Aserciones de recuento de registros
| Propiedad | Tipo | Obligatorio/a | Range | Descripción |
|---|---|---|---|---|
type |
string | Sí | - | Debe ser "RECORD_COUNT" |
operator |
cadena | Sí | - | EQUALS, GREATER_THAN, LESS_THAN |
value |
entero | Sí | ≥ 0 | Recuento esperado (mínimo 0) |
Aserciones autoritarias
| Propiedad | Tipo | Obligatorio/a | Range | Descripción |
|---|---|---|---|---|
type |
string | Sí | - | Debe ser "AUTHORITATIVE" |
value |
booleano | Sí | - | Estado autoritario esperado |
Aserciones TTL
| Propiedad | Tipo | Obligatorio/a | Range | Descripción |
|---|---|---|---|---|
type |
string | Sí | - | Debe ser "TTL" |
operator |
cadena | Sí | - | EQUALS, GREATER_THAN, LESS_THAN |
value |
entero | Sí | ≥ 0 | TTL esperado (mínimo 0) |
Aserciones SSL
Aserciones de expiración de certificados
| Propiedad | Tipo | Obligatorio/a | Predeterminado | Descripción |
|---|---|---|---|---|
type |
string | Sí | - | Debe ser "CERTIFICATE_EXPIRY" |
operator |
cadena | Sí | - | GREATER_THAN, LESS_THAN |
value |
entero | Sí | - | 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 | Sí | - | Debe ser "CERTIFICATE_SUBJECT" |
field |
cadena | Sí | - | Campo de asunto: CN, O, OU, C, ST, L |
operator |
cadena | Sí | - | CONTAINS, EQUALS, REGEX_MATCH |
value |
cadena | Sí | - | Valor de campo esperado |
Aserciones de emisor de certificado
| Propiedad | Tipo | Obligatorio/a | Predeterminado | Descripción |
|---|---|---|---|---|
type |
string | Sí | - | Debe ser "CERTIFICATE_ISSUER" |
field |
cadena | Sí | - | Campo emisor: CN, O |
operator |
cadena | Sí | - | CONTAINS, EQUALS |
value |
cadena | Sí | - | Valor de campo esperado |
Aserciones TCP
Aserciones de éxito de conexión
| Propiedad | Tipo | Obligatorio/a | Predeterminado | Descripción |
|---|---|---|---|---|
type |
string | Sí | - | Debe ser "CONNECTION_SUCCESSFUL" |
value |
booleano | Sí | - | Estado de conexión esperado |
Aserciones de datos de respuesta
| Propiedad | Tipo | Obligatorio/a | Predeterminado | Descripción |
|---|---|---|---|---|
type |
string | Sí | - | Debe ser "RESPONSE_DATA" |
operator |
cadena | Sí | - | CONTAINS, EQUALS, NOT_CONTAINS, REGEX_MATCH, STARTS_WITH, ENDS_WITH |
value |
cadena | Sí | - | 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 | Sí | - | Nombre de variable para datos extraídos |
type |
cadena | Sí | - | 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}" } ] }