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