Escrever uma configuração JSON para o esquema de múltiplas verificações do Node.js
O esquema de múltiplas verificações do Node.js permite criar canários que realizam múltiplas verificações de validação em uma única execução de canário. Esse esquema é útil quando você deseja testar vários endpoints, validar diferentes aspectos da aplicação ou realizar uma série de verificações relacionadas em sequência.
Tópicos
Estrutura da configuração primária
A configuração primária define a estrutura geral do canário do esquema de API avançado.
| Propriedade | Tipo | Obrigatório | Descrição |
|---|---|---|---|
globalSettings
|
Objeto | Não | Configurações padrão aplicadas a todas as etapas |
variables
|
Objeto | Não | Valores reutilizáveis em todas as etapas (máx. 10) |
steps
|
Objeto | Sim | Conjunto de etapas de monitoramento (1 a 10 etapas) |
Exemplo
{ "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" } } }
Regras de validação
-
Deve conter pelo menos uma etapa
-
Máximo permitido de 10 etapas
-
Não são permitidas outras propriedades além de
globalSettings,variablesesteps
Configurações globais
As definições globais fornecem configurações padrão que se aplicam a todas as etapas, a menos que sejam substituídas no nível da etapa.
Propriedades
| Propriedade | Tipo | Padrão | Intervalo | Descrição |
|---|---|---|---|---|
stepTimeout
|
integer | 30000 | 5.000 a 300.000 | Tempo limite padrão para todas as etapas (milissegundos) |
Exemplo
{ "globalSettings": { "stepTimeout": 60000, } }
Gerenciamento de variáveis e dados
As variáveis permitem definir valores reutilizáveis que podem ser referenciados em toda a configuração usando a sintaxe ${variableName}.
Propriedades variáveis
| Propriedade | Tipo | Descrição |
|---|---|---|
| Nomes das variáveis | string | Deve corresponder ao padrão: . ^[a-zA-Z][a-zA-Z0-9_]*$ |
| Valores das variáveis | string | Qualquer valor de string |
Limitações
-
Máximo de 10 variáveis por configuração
-
Os nomes das variáveis devem começar com uma letra
-
Os nomes das variáveis podem apenas conter letras, números e sublinhados
-
Tamanho máximo não especificado no esquema
Exemplo
{ "variables": { "baseUrl": "https://api.example.com", "apiKey": "${AWS_SECRET:my-api-key}", "timeout": "30000", "userEmail": "test@example.com" } }
Uso da configuração
{ "steps": { "1": { "url": "${baseUrl}/users", "timeout": "${timeout}", "headers": { "Authorization": "Bearer ${apiKey}" } } } }
Definições de etapas
As etapas definem operações de monitoramento individuais. Cada etapa é numerada de 1 a 10 e contém um tipo específico de verificação.
Propriedades das etapas comuns
| Propriedade | Tipo | Obrigatório | Descrição |
|---|---|---|---|
stepName
|
string | Sim | Identificador exclusivo da etapa |
checkerType
|
string | Sim | Tipo de verificação: HTTP, DNS, SSL,
TCP |
extractors
|
array | Não | Configuração de extração de dados |
Validação de nome de etapa
-
Padrão: ^[a-zA-Z][a-zA-Z0-9_-]*$
-
Tamanho máximo: 64 caracteres
-
Deve começar com uma letra
Numeração das etapas
-
As etapas são numeradas como chaves de string: “1”, “2”,..., “10”
-
Padrão: ^([1-9]|10)$
-
Mínimo obrigatório de 1 etapa
-
Máximo permitido de 10 etapas
Exemplo
{ "steps": { "1": { "stepName": "loginAPI", "checkerType": "HTTP", "url": "https://api.example.com/login", "httpMethod": "POST" }, "2": { "stepName": "dnsCheck", "checkerType": "DNS", "domain": "example.com" } } }
Tipos de verificação
Verificações HTTP
Monitore endpoints e APIs Web com validação abrangente de solicitações e respostas.
Propriedades necessárias
| Propriedade | Tipo | Descrição |
|---|---|---|
url
|
string | URL de destino (deve ser um formato de URI válido) |
httpMethod
|
string | Método HTTP: GET, POST, PUT,
PATCH, DELETE, HEAD, OPTIONS |
Propriedades opcionais
| Propriedade | Tipo | Padrão | Intervalo | Descrição |
|---|---|---|---|---|
timeout
|
integer | 30000 | 5.000 a 300.000 | Tempo limite (milissegundos) |
waitTime
|
integer | 0 | 0-60 | Demora antes da solicitação (segundos) |
headers
|
objeto | - | - | Cabeçalhos HTTP personalizados |
body
|
string | - | - | Corpo da solicitação para operações POST/PUT |
authentication
|
objeto | - | - | Configuração da autenticação |
assertions
|
array | - | - | Regras de validação de resposta |
Exemplo
{ "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 } ] }
Verificações do DNS
Valide a resolução do DNS e registre as informações.
Propriedades necessárias
| Propriedade | Tipo | Descrição |
|---|---|---|
domain
|
string | Nome de domínio a ser consultado (formato de nome de host) |
Propriedades opcionais
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
recordType
|
string | “A” | Tipo de registro do DNS: A, CNAME, MX,
TXT, NS |
nameserver
|
string | - | Servidor do DNS específico a ser consultado |
timeout
|
integer | 30000 | Tempo limite de consulta (5.000 a 300.000 ms) |
port
|
integer | 53 | Porta do servidor DNS (1 a 65535) |
protocol
|
string | “UDP” | Protocolo: UDP ou TCP |
assertions
|
array | - | Regras de validação de resposta do DNS |
Exemplo
{ "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" } ] }
Verificações SSL
Monitore a integridade e a configuração dos certificados SSL.
Propriedades necessárias
| Propriedade | Tipo | Descrição |
|---|---|---|
hostname
|
string | Nome do host de destino (formato do nome do host) |
Propriedades opcionais
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
port
|
integer | 443 | Porta SSL (1 a 65.535) |
timeout
|
integer | 30000 | Tempo limite de conexão (5.000 a 300.000 ms) |
sni
|
booliano | TRUE | Indicação de nome do servidor |
verifyHostname
|
booliano | TRUE | Verificação de nome do servidor |
allowSelfSigned
|
booleano | FALSE | Aceitar certificados autoassinados |
assertions
|
array | - | Regras de validação de certificados |
Exemplo
{ "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" } ] }
Verificações TCP
Teste a conectividade e a validação de resposta da porta TCP.
Propriedades necessárias
| Propriedade | Tipo | Descrição |
|---|---|---|
hostname
|
string | Nome do host de destino (formato do nome do host) |
port
|
integer | Porta de destino (1 a 65.535) |
Propriedades opcionais
| Propriedade | Tipo | Padrão | Descrição |
|---|---|---|---|
timeout
|
integer | 30000 | Tempo limite em geral (5.000 a 300.000 ms) |
connectionTimeout
|
integer | 3000 | Tempo limite de conexão (5.000 a 300.000 ms) |
readTimeout
|
integer | 2000 | Tempo limite de leitura de dados (5.000 a 300.000 ms) |
sendData
|
string | - | Dados a serem enviados após a conexão |
expectedResponse
|
string | - | Dados de resposta esperados |
encoding
|
string | “UTF-8” | Codificação de dados: UTF-8, ASCII, HEX |
assertions
|
array | - | validação de conexão e resposta |
Exemplo
{ "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 autenticação
Sem autenticação
{ "type": "NONE" }
Autenticação básica
| Propriedade | Tipo | Obrigatório | Descrição |
|---|---|---|---|
type
|
string | Sim | Deve ser "BASIC" |
username
|
string | Sim | Nome de usuário para autenticação |
password
|
string | Sim | Senha para autenticação |
Exemplo
{ "type": "BASIC", "username": "admin", "password": "${AWS_SECRET:basic-auth:password}" }
Autenticação de chave de API
| Propriedade | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
type
|
string | Sim | - | Deve ser "API_KEY" |
apiKey
|
string | Sim | - | Valor da chave de API |
headerName
|
string | Não | “X-API-Key” | Nome de cabeçalho para chave de API |
Exemplo
{ "type": "API_KEY", "apiKey": "${AWS_SECRET:api-credentials}", "headerName": "Authorization" }
Credenciais de cliente OAuth
| Propriedade | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
type
|
string | Sim | - | Deve ser "OAUTH_CLIENT_CREDENTIALS" |
tokenUrl
|
string | Sim | - | URL do endpoint do token OAuth |
clientId
|
string | Sim | - | ID do cliente OAuth |
clientSecret
|
string | Sim | - | Segredo do cliente OAuth |
scope
|
string | Não | - | Escopo do OAuth |
audience
|
string | Não | - | Público do OAuth |
resource
|
string | Não | - | Recurso do OAuth |
tokenApiAuth
|
array | Não | - | Métodos de autenticação de API de token: BASIC_AUTH_HEADER, REQUEST_BODY |
tokenCacheTtl
|
integer | Não | 3600 | TTL do cache de tokens (mínimo de 60 segundos) |
Exemplo
{ "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 (versão 4)
| Propriedade | Tipo | Obrigatório | Descrição |
|---|---|---|---|
type
|
string | Sim | Deve ser "SIGV4" |
service
|
string | Sim | Nome do serviço da AWS (por exemplo, “execute-api”) |
region
|
string | Sim | AWS region |
roleArn
|
string | Sim | ARN do perfil do IAM para assinatura |
Exemplo
{ "type": "SIGV4", "service": "execute-api", "region": "us-east-1", "roleArn": "arn:aws:iam::123456789012:role/SyntheticsRole" }
Asserções e validação
Asserções HTTP
Asserções de código de status
| Propriedade | Tipo | Obrigatório | Descrição |
|---|---|---|---|
type
|
string | Sim | Deve ser "STATUS_CODE" |
operator
|
string | Sim | EQUALS, NOT_EQUALS, GREATER_THAN,
LESS_THAN, IN_RANGE |
value
|
integer | Condicional | Código de status HTTP (100 a 599) |
rangeMin
|
integer | Condicional | Valor mínimo do intervalo (para IN_RANGE) |
rangeMax
|
integer | Condicional | Valor máximo do intervalo (para IN_RANGE) |
{ "type": "STATUS_CODE", "operator": "EQUALS", "value": 200 }
Asserções de tempo de resposta
| Propriedade | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
type
|
string | Sim | - | Deve ser "RESPONSE_TIME" |
operator
|
string | Sim | - | LESS_THAN, GREATER_THAN, EQUALS |
value
|
número | Sim | - | Valor de tempo (mínimo 0) |
unit
|
string | Não | "MILLISSEGUNDOS" | Deve ser "MILLISECONDS" |
{ "type": "RESPONSE_TIME", "operator": "LESS_THAN", "value": 500, "unit": "MILLISECONDS" }
Asserções de cabeçalho
| Propriedade | Tipo | Obrigatório | Descrição |
|---|---|---|---|
type
|
string | Sim | Deve ser "HEADER" |
headerName
|
string | Sim | Nome do cabeçalho a ser validado |
operator
|
string | Sim | EQUALS, NOT_EQUALS, CONTAINS,
NOT_CONTAINS, REGEX_MATCH, EXIST |
value
|
String/booleano | Condicional | Valor esperado (booleano para o operador EXIST) |
{ "type": "HEADER", "headerName": "Content-Type", "operator": "CONTAINS", "value": "application/json" }
Asserções de corpo
| Propriedade | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
type
|
string | Sim | - | Deve ser "BODY" |
target
|
string | Não | “JSON” | JSON ou TEXT |
path
|
string | Condicional | - | JSONPath (obrigatório para destino JSON) |
operator
|
string | Sim | - | CONTAINS, NOT_CONTAINS, EQUALS,
NOT_EQUALS, EXISTS |
value
|
String/booleano | Sim | - | Valor esperado (booleano para o operador EXISTS) |
{ "type": "BODY", "target": "JSON", "path": "$.users[0].name", "operator": "EQUALS", "value": "John Doe" }
Asserções DNS
Registrar asserções de valor
| Propriedade | Tipo | Obrigatório | Intervalo | Descrição |
|---|---|---|---|---|
type
|
string | Sim | - | Deve ser "RECORD_VALUE" |
operator
|
string | Sim | - | EQUALS, NOT_EQUALS, CONTAINS,
NOT_CONTAINS, REGEX_MATCH |
value
|
string | Sim | - | Valor do registro esperado |
Asserções de contagem de registros
| Propriedade | Tipo | Obrigatório | Intervalo | Descrição |
|---|---|---|---|---|
type
|
string | Sim | - | Deve ser "RECORD_COUNT" |
operator
|
string | Sim | - | EQUALS, GREATER_THAN, LESS_THAN |
value
|
integer | Sim | ≥ 0 | Contagem esperada (mínimo 0) |
Asserções autoritativas
| Propriedade | Tipo | Obrigatório | Intervalo | Descrição |
|---|---|---|---|---|
type
|
string | Sim | - | Deve ser "AUTHORITATIVE" |
value
|
booleano | Sim | - | Status autoritativo esperado |
Asserções TTL
| Propriedade | Tipo | Obrigatório | Intervalo | Descrição |
|---|---|---|---|---|
type
|
string | Sim | - | Deve ser "TTL" |
operator
|
string | Sim | - | EQUALS, GREATER_THAN, LESS_THAN |
value
|
integer | Sim | ≥ 0 | TTL esperada (mínimo 0) |
Asserções SSL
Asserções de expiração do certificado
| Propriedade | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
type
|
string | Sim | - | Deve ser "CERTIFICATE_EXPIRY" |
operator
|
string | Sim | - | GREATER_THAN, LESS_THAN |
value
|
integer | Sim | - | Valor de tempo (mínimo 0) |
unit
|
string | Não | “DIAS” | DAYS, HOURS |
Asserções de assunto do certificado
| Propriedade | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
type
|
string | Sim | - | Deve ser "CERTIFICATE_SUBJECT" |
field
|
string | Sim | - | Campo de assunto: CN, O, OU, C, ST, L |
operator
|
string | Sim | - | CONTAINS, EQUALS, REGEX_MATCH |
value
|
string | Sim | - | Valores de campo esperados |
Asserções de emissor de certificado
| Propriedade | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
type
|
string | Sim | - | Deve ser "CERTIFICATE_ISSUER" |
field
|
string | Sim | - | Campo do emissor: CN, O |
operator
|
string | Sim | - | CONTAINS, EQUALS |
value
|
string | Sim | - | Valores de campo esperados |
Asserções TCP
Asserções de sucesso de conexão
| Propriedade | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
type
|
string | Sim | - | Deve ser "CONNECTION_SUCCESSFUL" |
value
|
booleano | Sim | - | Status de conexão esperado |
Asserções de dados de resposta
| Propriedade | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
type
|
string | Sim | - | Deve ser "RESPONSE_DATA" |
operator
|
string | Sim | - | CONTAINS, EQUALS, NOT_CONTAINS,
REGEX_MATCH, STARTS_WITH, ENDS_WITH |
value
|
string | Sim | - | Dados de resposta esperados |
encoding
|
string | Não | “UTF-8” | UTF-8, ASCII, HEX |
Extração de dados
Os extratores permitem que você capture dados das respostas para uso em etapas subsequentes ou para relatórios.
Propriedades de extração
| Propriedade | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
name
|
string | Sim | - | Nome da variável para dados extraídos |
type
|
string | Sim | - | Tipo de extração: BODY |
path
|
string | Não | - | JSONPath para extração de corpo |
regex
|
string | Não | - | Padrão de expressão regular |
regexGroup
|
integer | Não | 0 | Grupo de captura de expressão regular (mínimo 0) |
Validação de nome de extração
-
Número do padrão:
^[a-zA-Z][a-zA-Z0-9_]*$ -
Deve começar com uma letra
-
Podem conter apenas letras, números e sublinhados
Limitação: a substituição não se aplica aos campos do esquema com valores ENUM específicos
Tipos de extração
{ "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}" } ] }