

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Scrittura di una configurazione JSON per il blueprint Node.js multi Checks
<a name="CloudWatch_Synthetics_WritingCanary_Multichecks"></a>

Il blueprint Node.js multi check consente di creare canarini che eseguono più controlli di convalida all'interno di un'unica esecuzione. Questo modello è utile quando si desidera testare più endpoint, convalidare diversi aspetti dell'applicazione o eseguire una serie di controlli correlati in sequenza. 

**Topics**
+ [Struttura di configurazione principale](#root-configuration-structure)
+ [Impostazioni globali](#global-settings)
+ [Gestione delle variabili e dei dati](#variables-data-management)
+ [Definizioni dei passaggi](#step-definitions)
+ [Tipi di controllo](#check-types)
+ [Metodi di autenticazione](#authentication-methods)
+ [Asserzioni e convalida](#assertions-validation)
+ [Estrazione dei dati](#data-extraction)

## Struttura di configurazione principale
<a name="root-configuration-structure"></a>

La configurazione root definisce la struttura generale del tuo blueprint API avanzato Canary.


**Proprietà dello schema**  

| Proprietà | Tipo | Campo obbligatorio | Description | 
| --- | --- | --- | --- | 
|  globalSettings  | Oggetto | No | Configurazioni predefinite applicate a tutti i passaggi | 
|  variables  | Oggetto | No | Valori riutilizzabili tra i passaggi (max 10) | 
|  steps  | Oggetto |  Sì  | Raccolta di fasi di monitoraggio (1-10 fasi) | 

 **Esempio** 

```
{
  "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"
    }
  }
}
```

 **Regole di convalida** 
+ Deve contenere almeno un passaggio
+ Sono consentiti al massimo 10 passaggi
+ Non sono consentite proprietà aggiuntive oltre a `globalSettings`` variables`, e `steps`

## Impostazioni globali
<a name="global-settings"></a>

Le impostazioni globali forniscono configurazioni predefinite che si applicano a tutti i passaggi a meno che non vengano sovrascritte a livello di passaggio.

 **Proprietà** 


**Proprietà di impostazione globali**  

| Proprietà | Tipo | Predefinita | Intervallo | Description | 
| --- | --- | --- | --- | --- | 
|  stepTimeout  | intero | 30000 | 5000-300000 | Timeout predefinito per tutti i passaggi (millisecondi) | 

 **Esempio** 

```
{
  "globalSettings": {
    "stepTimeout": 60000,
            
  }
}
```

## Gestione delle variabili e dei dati
<a name="variables-data-management"></a>

Le variabili consentono di definire valori riutilizzabili a cui è possibile fare riferimento in tutta la configurazione utilizzando `${variableName}` la sintassi.

 **Proprietà delle variabili** 


| Proprietà | Tipo | Description | 
| --- | --- | --- | 
| Nomi delle variabili | stringa | Deve corrispondere al modello ^[a-zA-Z][a-zA-Z0-9\$1]\$1\$1 | 
| Valori variabili | stringa | Qualsiasi valore di stringa | 

 **Limitazioni** 
+ Massimo 10 variabili per configurazione
+ I nomi delle variabili devono iniziare con una lettera
+ I nomi delle variabili possono contenere solo lettere, numeri e caratteri di sottolineatura
+ Lunghezza massima non specificata nello schema

 **Esempio** 

```
{
  "variables": {
    "baseUrl": "https://api.example.com",
    "apiKey": "${AWS_SECRET:my-api-key}",
    "timeout": "30000",
    "userEmail": "test@example.com"
  }
}
```

 **Utilizzo della configurazione** 

```
{
  "steps": {
    "1": {
      "url": "${baseUrl}/users",
      "timeout": "${timeout}",
      "headers": {
        "Authorization": "Bearer ${apiKey}"
      }
    }
  }
}
```

## Definizioni dei passaggi
<a name="step-definitions"></a>

Le fasi definiscono le singole operazioni di monitoraggio. Ogni fase è numerata da 1 a 10 e contiene un tipo specifico di controllo.

 *Proprietà comuni dei passaggi* 


| Proprietà | Tipo | Campo obbligatorio | Descrizione | 
| --- | --- | --- | --- | 
|  stepName  | stringa |  Sì  | Identificatore univoco per la fase | 
|  checkerType  | stringa |  Sì  | Tipo di controllo:HTTP,DNS, SSL  TCP | 
|  extractors  | array | No | Configurazione dell'estrazione dei dati | 

 *Convalida del nome della fase* 
+ Schema - ^ [a-zA-Z] [a-zA-Z0-9\$1-] \$1\$1
+ Lunghezza massima: 64 caratteri
+ Deve iniziare con una lettera

 *Numerazione dei passaggi* 
+ I passaggi sono numerati come chiavi di stringa: «1", «2",..., «10"
+ Modello: ^ ([1-9] \$110) \$1
+ È richiesto almeno 1 passaggio
+ Sono consentiti al massimo 10 passaggi

 *Esempio* 

```
{
  "steps": {
    "1": {
      "stepName": "loginAPI",
      "checkerType": "HTTP",
      "url": "https://api.example.com/login",
      "httpMethod": "POST"
    },
    "2": {
      "stepName": "dnsCheck",
      "checkerType": "DNS",
      "domain": "example.com"
    }
  }
}
```

## Tipi di controllo
<a name="check-types"></a>

### Controlli HTTP
<a name="http-types"></a>

Monitora gli endpoint web e APIs con una convalida completa delle richieste e delle risposte.

 **Proprietà richieste** 


| Proprietà | Tipo | Description | 
| --- | --- | --- | 
|  url  | stringa | URL di destinazione (deve essere un formato URI valido) | 
|  httpMethod  | stringa | Metodo HTTP: GETPOST,PUT, PATCH,DELETE,HEAD, OPTIONS | 

 **Proprietà opzionali** 


| Proprietà | Tipo | Predefinita | Intervallo | Description | 
| --- | --- | --- | --- | --- | 
|  timeout  | intero | 30000 | 5000-300000 | Timeout della richiesta (millisecondi) | 
|  waitTime  | intero | 0 | 0-60 | Ritardo prima della richiesta (secondi) | 
|  headers  | oggetto | - | - | Intestazioni HTTP personalizzate | 
|  body  | stringa | - | - | Corpo della richiesta per POST/PUT le operazioni | 
|  authentication  | oggetto | - | - | Configurazione di autenticazione | 
|  assertions  | array | - | - | Regole di convalida delle risposte | 

 **Esempio** 

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

### Controlli DNS
<a name="dns-types"></a>

Convalida la risoluzione DNS e registra le informazioni.

 **Proprietà richieste** 


| Proprietà | Tipo | Description | 
| --- | --- | --- | 
|  domain  | stringa | Nome di dominio da interrogare (formato hostname) | 

 **Proprietà opzionali** 


| Proprietà | Tipo | Predefinita | Description | 
| --- | --- | --- | --- | 
|  recordType  | stringa | «A» | Tipo di record DNS:A,CNAME,MX,  TXT NS | 
|  nameserver  | stringa | - | Server DNS specifico da interrogare | 
|  timeout  | intero | 30000 | Timeout della query (5000-300000 ms) | 
|  port  | intero | 53 | Porta server DNS (1-65535) | 
|  protocol  | stringa | «UDP» | Protocollo: UDP o TCP | 
|  assertions  | array | - | regole di convalida della risposta DNS | 

 **Esempio** 

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

### Controlli SSL
<a name="ssl-types"></a>

Monitora lo stato e la configurazione dei certificati SSL.

 **Proprietà richieste** 


| Proprietà | Tipo | Description | 
| --- | --- | --- | 
|  hostname  | stringa | Nome host di destinazione (formato hostname) | 

 **Proprietà opzionali** 


| Proprietà | Tipo | Predefinita | Descrizione | 
| --- | --- | --- | --- | 
|  port  | intero | 443 | Porta SSL (1-65535) | 
|  timeout  | intero | 30000 | Timeout di connessione (5000-300000 ms) | 
|  sni  | booleano | TRUE | Indicazione del nome del server | 
|  verifyHostname  | booleano | TRUE | Verifica del nome host | 
|  allowSelfSigned  | booleano | FALSE | Accetta certificati autofirmati | 
|  assertions  | array | - | Regole di convalida dei certificati | 

 **Esempio** 

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

### Controlli TCP
<a name="tcp-types"></a>

Verifica la connettività della porta TCP e la convalida della risposta.

 **Proprietà richieste** 


| Proprietà | Tipo | Description | 
| --- | --- | --- | 
|  hostname  | stringa | Nome host di destinazione (formato hostname) | 
|  port  | intero | Porta di destinazione (1-65535) | 

 **Proprietà opzionali** 


| Proprietà | Tipo | Predefinita | Descrizione | 
| --- | --- | --- | --- | 
|  timeout  | intero | 30000 | Timeout complessivo (5000-300000ms) | 
|  connectionTimeout  | intero | 3000 | Timeout di connessione (5000-300000ms) | 
|  readTimeout  | intero | 2000 | Timeout di lettura dei dati (5000-300000ms) | 
|  sendData  | stringa | - | Dati da inviare dopo la connessione | 
|  expectedResponse  | stringa | - | Dati di risposta previsti | 
|  encoding  | stringa | «UTF-8" | Codifica dei dati:,, UTF-8 ASCII HEX | 
|  assertions  | array | - | Convalida della connessione e della risposta | 

 **Esempio** 

```
{
  "stepName": "databaseConnection",
  "checkerType": "TCP",
  "hostname": "db.example.com",
  "port": 3306,
  "connectionTimeout": 5000,
  "sendData": "SELECT 1",
  "expectedResponse": "1",
  "assertions": [
    {
      "type": "CONNECTION_SUCCESSFUL",
      "value": true
    }
  ]
}
```

## Metodi di autenticazione
<a name="authentication-methods"></a>

 **Nessuna autenticazione** 

```
{
  "type": "NONE"
}
```

 **Autenticazione Base** 


| Proprietà | Tipo | Campo obbligatorio | Descrizione | 
| --- | --- | --- | --- | 
|  type  | stringa |  Sì  | Deve essere "BASIC" | 
|  username  | stringa |  Sì  | Nome utente per l'autenticazione | 
|  password  | stringa |  Sì  | Password per l'autenticazione | 

 **Esempio** 

```
{
  "type": "BASIC",
  "username": "admin",
  "password": "${AWS_SECRET:basic-auth:password}"
}
```

 **Autenticazione con chiave API** 


| Proprietà | Tipo | Obbligatorio | Predefinita | Description | 
| --- | --- | --- | --- | --- | 
|  type  | stringa |  Sì  | - | Deve essere "API\$1KEY" | 
|  apiKey  | stringa |  Sì  | - | Valore della chiave API | 
|  headerName  | stringa | No | «Chiave X-API» | Nome dell'intestazione per la chiave API | 

 **Esempio** 

```
{
  "type": "API_KEY",
  "apiKey": "${AWS_SECRET:api-credentials}",
  "headerName": "Authorization"
}
```

 **OAuth credenziali del client** 


| Proprietà | Tipo | Obbligatorio | Predefinita | Description | 
| --- | --- | --- | --- | --- | 
|  type  | stringa |  Sì  | - | Deve essere "OAUTH\$1CLIENT\$1CREDENTIALS" | 
|  tokenUrl  | stringa |  Sì  | - | OAuth URL dell'endpoint del token | 
|  clientId  | stringa |  Sì  | - | OAuth ID cliente | 
|  clientSecret  | stringa |  Sì  | - | OAuth segreto del cliente | 
|  scope  | stringa | No | - | OAuth ambito | 
|  audience  | stringa | No | - | OAuth pubblico | 
|  resource  | stringa | No | - | OAuth risorsa | 
|  tokenApiAuth  | array | No | - | Metodi di autenticazione dell'API token:BASIC\$1AUTH\$1HEADER, REQUEST\$1BODY | 
|  tokenCacheTtl  | numero intero | No | 3600 | Token cache TTL (minimo 60 secondi) | 

 **Esempio** 

```
{
  "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 Firma (versione 4)** 


| Proprietà | Tipo | Campo obbligatorio | Descrizione | 
| --- | --- | --- | --- | 
|  type  | stringa |  Sì  | Deve essere "SIGV4" | 
|  service  | stringa |  Sì  | Nome del AWS servizio (ad esempio, «execute-api») | 
|  region  | stringa |  Sì  | AWS regione | 
|  roleArn  | stringa |  Sì  | ARN del ruolo IAM per la firma | 

 **Esempio** 

```
{
  "type": "SIGV4",
  "service": "execute-api",
  "region": "us-east-1",
  "roleArn": "arn:aws:iam::123456789012:role/SyntheticsRole"
}
```

## Asserzioni e convalida
<a name="assertions-validation"></a>

### Asserzioni HTTP
<a name="http-assertions"></a>

 **asserzioni del codice di stato** 


| Proprietà | Tipo | Campo obbligatorio | Descrizione | 
| --- | --- | --- | --- | 
|  type  | stringa |  Sì  | Deve essere "STATUS\$1CODE" | 
|  operator  | stringa |  Sì  | EQUALS, NOT\$1EQUALS, GREATER\$1THAN,  LESS\$1THAN, IN\$1RANGE | 
|  value  | intero | Condizionale | Codice di stato HTTP (100-599) | 
|  rangeMin  | intero | Condizionale | Valore minimo dell'intervallo (per) IN\$1RANGE | 
|  rangeMax  | intero | Condizionale | Valore dell'intervallo massimo (perIN\$1RANGE) | 

```
{
  "type": "STATUS_CODE",
  "operator": "EQUALS",
  "value": 200
}
```

 **Asserzioni sul tempo di risposta** 


| Proprietà | Tipo | Obbligatorio | Predefinita | Description | 
| --- | --- | --- | --- | --- | 
|  type  | stringa |  Sì  | - | Deve essere "RESPONSE\$1TIME" | 
|  operator  | stringa |  Sì  | - | LESS\$1THAN, GREATER\$1THAN, EQUALS | 
|  value  | numero |  Sì  | - | Valore temporale (minimo 0) | 
|  unit  | stringa | No | «MILLISECONDI» | Deve essere "MILLISECONDS" | 

```
{
  "type": "RESPONSE_TIME",
  "operator": "LESS_THAN",
  "value": 500,
  "unit": "MILLISECONDS"
}
```

 **Asserzioni della testa** 


| Proprietà | Tipo | Campo obbligatorio | Descrizione | 
| --- | --- | --- | --- | 
|  type  | stringa |  Sì  | Deve essere "HEADER" | 
|  headerName  | stringa |  Sì  | Nome dell'intestazione da convalidare | 
|  operator  | stringa |  Sì  | EQUALS, NOT\$1EQUALS, CONTAINS,  NOT\$1CONTAINS, REGEX\$1MATCH, EXIST | 
|  value  | stringa/booleano | Condizionale | Valore previsto (booleano per operatore) EXIST | 

```
{
  "type": "HEADER",
  "headerName": "Content-Type",
  "operator": "CONTAINS",
  "value": "application/json"
}
```

 **Asserzioni corporee** 


| Proprietà | Tipo | Obbligatorio | Predefinita | Description | 
| --- | --- | --- | --- | --- | 
|  type  | stringa |  Sì  | - | Deve essere "BODY" | 
|  target  | stringa | No | «JSON» | JSON o TEXT | 
|  path  | stringa | Condizionale | - | JSONPath (richiesto per il target JSON) | 
|  operator  | stringa |  Sì  | - | CONTAINS, NOT\$1CONTAINS, EQUALS,  NOT\$1EQUALS, EXISTS | 
|  value  | stringa/booleano |  Sì  | - | Valore previsto (booleano per operatore) EXISTS | 

```
{
  "type": "BODY",
  "target": "JSON",
  "path": "$.users[0].name",
  "operator": "EQUALS",
  "value": "John Doe"
}
```

### Asserzioni DNS
<a name="dns-assertions"></a>

 **Registra asserzioni di valore** 


| Proprietà | Tipo | Richiesto | Intervallo | Description | 
| --- | --- | --- | --- | --- | 
|  type  | stringa |  Sì  | - | Deve essere "RECORD\$1VALUE" | 
|  operator  | stringa |  Sì  | - | EQUALS, NOT\$1EQUALS, CONTAINS,  NOT\$1CONTAINS, REGEX\$1MATCH | 
|  value  | stringa |  Sì  | - | Valore record previsto | 

 **Registra le asserzioni relative al conteggio** 


| Proprietà | Tipo | Richiesto | Intervallo | Description | 
| --- | --- | --- | --- | --- | 
|  type  | stringa |  Sì  | - | Deve essere "RECORD\$1COUNT" | 
|  operator  | stringa |  Sì  | - | EQUALS, GREATER\$1THAN, LESS\$1THAN | 
|  value  | intero |  Sì  | ≥ 0 | Conteggio previsto (minimo 0) | 

 **Affermazioni autorevoli** 


| Proprietà | Tipo | Richiesto | Intervallo | Description | 
| --- | --- | --- | --- | --- | 
|  type  | stringa |  Sì  | - | Deve essere "AUTHORITATIVE" | 
|  value  | booleano |  Sì  | - | Status autorevole previsto | 

 **Asserzioni TTL** 


| Proprietà | Tipo | Richiesto | Intervallo | Description | 
| --- | --- | --- | --- | --- | 
|  type  | stringa |  Sì  | - | Deve essere "TTL" | 
|  operator  | stringa |  Sì  | - | EQUALS, GREATER\$1THAN, LESS\$1THAN | 
|  value  | intero |  Sì  | ≥ 0 | TTL previsto (minimo 0) | 

### Asserzioni SSL
<a name="ssl-assertions"></a>

 **Affermazioni sulla scadenza dei certificati** 


| Proprietà | Tipo | Obbligatorio | Predefinita | Description | 
| --- | --- | --- | --- | --- | 
|  type  | stringa |  Sì  | - | Deve essere "CERTIFICATE\$1EXPIRY" | 
|  operator  | stringa |  Sì  | - | GREATER\$1THAN, LESS\$1THAN | 
|  value  | intero |  Sì  | - | Valore temporale (minimo 0) | 
|  unit  | stringa | No | «GIORNI» | DAYS, HOURS | 

 **Affermazioni relative all'oggetto del certificato** 


| Proprietà | Tipo | Obbligatorio | Predefinita | Description | 
| --- | --- | --- | --- | --- | 
|  type  | stringa |  Sì  | - | Deve essere "CERTIFICATE\$1SUBJECT" | 
|  field  | stringa |  Sì  | - | Campo oggetto:CN,,O,OU,C, ST L | 
|  operator  | stringa |  Sì  | - | CONTAINS, EQUALS, REGEX\$1MATCH | 
|  value  | stringa |  Sì  | - | Valore del campo previsto | 

 **Dichiarazioni dell'emittente del certificato** 


| Proprietà | Tipo | Obbligatorio | Predefinita | Description | 
| --- | --- | --- | --- | --- | 
|  type  | stringa |  Sì  | - | Deve essere "CERTIFICATE\$1ISSUER" | 
|  field  | stringa |  Sì  | - | Campo emittente:, CN O | 
|  operator  | stringa |  Sì  | - | CONTAINS, EQUALS | 
|  value  | stringa |  Sì  | - | Valore del campo previsto | 

### asserzioni TCP
<a name="tcp-assertions"></a>

 **Asserzioni di successo della connessione** 


| Proprietà | Tipo | Obbligatorio | Predefinita | Description | 
| --- | --- | --- | --- | --- | 
|  type  | stringa |  Sì  | - | Deve essere "CONNECTION\$1SUCCESSFUL" | 
|  value  | booleano |  Sì  | - | Stato della connessione previsto | 

 **Asserzioni di dati di risposta** 


| Proprietà | Tipo | Obbligatorio | Predefinita | Description | 
| --- | --- | --- | --- | --- | 
|  type  | stringa |  Sì  | - | Deve essere "RESPONSE\$1DATA" | 
|  operator  | stringa |  Sì  | - | CONTAINS, EQUALS, NOT\$1CONTAINS,  REGEX\$1MATCH, STARTS\$1WITH, ENDS\$1WITH | 
|  value  | stringa |  Sì  | - | Dati di risposta previsti | 
|  encoding  | stringa | No | «UTF-8" | UTF-8, ASCII, HEX | 

## Estrazione dei dati
<a name="data-extraction"></a>

Extractors consente di acquisire dati dalle risposte per utilizzarli nei passaggi successivi o per scopi di reporting.

 **Proprietà di estrazione** 


| Proprietà | Tipo | Obbligatorio | Predefinita | Description | 
| --- | --- | --- | --- | --- | 
|  name  | stringa |  Sì  | - | Nome variabile per i dati estratti | 
|  type  | stringa |  Sì  | - | Tipo di estrazione: BODY | 
|  path  | stringa | No | - | JSONPath per l'estrazione del corpo | 
|  regex  | stringa | No | - | modello di espressione regolare | 
|  regexGroup  | numero intero | No | 0 | Gruppo di acquisizione Regex (minimo 0) | 

 **Convalida del nome di estrazione** 
+ Modello: `^[a-zA-Z][a-zA-Z0-9_]*$`
+ Deve iniziare con una lettera
+ Può contenere lettere, numeri e caratteri di sottolineatura

**Limitazione**: la sostituzione non si applica ai campi dello schema che hanno valori ENUM specifici

 **Tipi di estrazione** 

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