Escrever uma configuração JSON para o esquema de múltiplas verificações do Node.js - Amazon CloudWatch

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.

Estrutura da configuração primária

A configuração primária define a estrutura geral do canário do esquema de API avançado.

Propriedades do esquema
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, variables e steps

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

Propriedades das configurações globais
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}" } ] }