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}" } ] }