

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Écrire une configuration JSON pour le plan Node.js Multi Checks
<a name="CloudWatch_Synthetics_WritingCanary_Multichecks"></a>

Le plan multi-contrôles Node.js vous permet de créer des canaris qui effectuent plusieurs contrôles de validation au cours d'une seule exécution Canary. Ce plan est utile lorsque vous souhaitez tester plusieurs points de terminaison, valider différents aspects de votre application ou effectuer une série de vérifications connexes en séquence. 

**Topics**
+ [

## Structure de configuration racine
](#root-configuration-structure)
+ [

## Paramètres globaux
](#global-settings)
+ [

## Gestion des variables et des données
](#variables-data-management)
+ [

## Définitions des étapes
](#step-definitions)
+ [

## Types de chèques
](#check-types)
+ [

## Méthodes d’authentification
](#authentication-methods)
+ [

## Assertions et validation
](#assertions-validation)
+ [

## Extraction de données
](#data-extraction)

## Structure de configuration racine
<a name="root-configuration-structure"></a>

La configuration racine définit la structure globale de votre plan d'API avancé Canary.


**Propriétés du schéma**  

| Propriété | Type | Obligatoire | Description | 
| --- | --- | --- | --- | 
|  globalSettings  | Objet | Non | Configurations par défaut appliquées à toutes les étapes | 
|  variables  | Objet | Non | Valeurs réutilisables d'une étape à l'autre (10 au maximum) | 
|  steps  | Objet |  Oui  | Recueil des étapes de surveillance (1 à 10 étapes) | 

 **Exemple** 

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

 **Règles de validation** 
+ Doit contenir au moins une étape
+ Maximum de 10 étapes autorisées
+ Aucune propriété supplémentaire n'est autorisée au-delà de `globalSettings`` variables`, et `steps`

## Paramètres globaux
<a name="global-settings"></a>

Les paramètres globaux fournissent des configurations par défaut qui s'appliquent à toutes les étapes sauf si elles sont remplacées au niveau de l'étape.

 **Propriétés** 


**Propriétés des paramètres globaux**  

| Propriété | Type | Par défaut | Range | Description | 
| --- | --- | --- | --- | --- | 
|  stepTimeout  | integer | 30 000 | 5000-300000 | Délai d'expiration par défaut pour toutes les étapes (millisecondes) | 

 **Exemple** 

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

## Gestion des variables et des données
<a name="variables-data-management"></a>

Les variables vous permettent de définir des valeurs réutilisables qui peuvent être référencées dans l'ensemble de votre configuration à l'aide de `${variableName}` la syntaxe.

 **Propriétés variables** 


| Propriété | Type | Description | 
| --- | --- | --- | 
| Noms de variables | chaîne | Doit correspondre au modèle ^[a-zA-Z][a-zA-Z0-9\$1]\$1\$1 | 
| Valeurs variables | chaîne | N'importe quelle valeur de chaîne | 

 **Limites** 
+ Maximum de 10 variables par configuration
+ Les noms de variables doivent commencer par une lettre
+ Les noms de variables ne peuvent contenir que des lettres, des chiffres et des traits de soulignement
+ Longueur maximale non spécifiée dans le schéma

 **Exemple** 

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

 **Utilisation de la configuration** 

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

## Définitions des étapes
<a name="step-definitions"></a>

Les étapes définissent les opérations de surveillance individuelles. Chaque étape est numérotée de 1 à 10 et contient un type de contrôle spécifique.

 *Propriétés communes des étapes* 


| Propriété | Type | Obligatoire | Description | 
| --- | --- | --- | --- | 
|  stepName  | chaîne |  Oui  | Identifiant unique pour l'étape | 
|  checkerType  | chaîne |  Oui  | Type de contrôle : HTTPDNS,SSL,  TCP | 
|  extractors  | array | Non | Configuration de l'extraction des données | 

 *Validation du nom des étapes* 
+ Motif - ^ [A-zA-z] [A-zA-Z0-9\$1-] \$1\$1
+ Longueur maximale : 64 caractères
+ Doit commencer par une lettre

 *Numérotation des étapes* 
+ Les étapes sont numérotées sous forme de chaînes de caractères : « 1 », « 2 »,..., « 10 »
+ Motif : ^ ([1-9] \$110) \$1
+ 1 étape minimum requise
+ Maximum de 10 étapes autorisées

 *Exemple* 

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

## Types de chèques
<a name="check-types"></a>

### Contrôles HTTP
<a name="http-types"></a>

Surveillez les points de terminaison Web APIs grâce à une validation complète des demandes et des réponses.

 **Propriétés requises** 


| Propriété | Type | Description | 
| --- | --- | --- | 
|  url  | chaîne | URL cible (le format d'URI doit être valide) | 
|  httpMethod  | chaîne | Méthode HTTP :GET,POST,PUT, PATCH,DELETE,HEAD, OPTIONS | 

 **Propriétés facultatives** 


| Propriété | Type | Par défaut | Range | Description | 
| --- | --- | --- | --- | --- | 
|  timeout  | integer | 30 000 | 5000-300000 | Délai d'expiration de la demande (millisecondes) | 
|  waitTime  | entier | 0 | 0 à 60 | Délai avant la demande (secondes) | 
|  headers  | objet | - | - | En-têtes HTTP personnalisés | 
|  body  | chaîne | - | - | Organisme demandeur pour les POST/PUT opérations | 
|  authentication  | objet | - | - | Configuration de l’authentification | 
|  assertions  | array | - | - | Règles de validation des réponses | 

 **Exemple** 

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

### Contrôles DNS
<a name="dns-types"></a>

Validez la résolution DNS et enregistrez les informations.

 **Propriétés requises** 


| Propriété | Type | Description | 
| --- | --- | --- | 
|  domain  | chaîne | Nom de domaine à interroger (format de nom d'hôte) | 

 **Propriétés facultatives** 


| Propriété | Type | Par défaut | Description | 
| --- | --- | --- | --- | 
|  recordType  | chaîne | « UN » | Type d'enregistrement DNS : ACNAME,MX, TXT, NS | 
|  nameserver  | chaîne | - | Serveur DNS spécifique à interroger | 
|  timeout  | entier | 30 000 | Délai d'expiration de la requête (5000-300000 ms) | 
|  port  | entier | 53 | Port du serveur DNS (1-65535) | 
|  protocol  | chaîne | « UDP » | Protocole : UDP ou TCP | 
|  assertions  | array | - | Règles de validation des réponses DNS | 

 **Exemple** 

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

### Contrôles SSL
<a name="ssl-types"></a>

Surveillez l'état et la configuration des certificats SSL.

 **Propriétés requises** 


| Propriété | Type | Description | 
| --- | --- | --- | 
|  hostname  | chaîne | Nom d'hôte cible (format du nom d'hôte) | 

 **Propriétés facultatives** 


| Propriété | Type | Par défaut | Description | 
| --- | --- | --- | --- | 
|  port  | integer | 443 | Port SSL (1-65535) | 
|  timeout  | entier | 30 000 | Délai d'expiration de la connexion (5000-300000 ms) | 
|  sni  | boolean | TRUE | Indication du nom du serveur | 
|  verifyHostname  | boolean | TRUE | Vérification du nom d'hôte | 
|  allowSelfSigned  | boolean | FALSE | Accepter les certificats auto-signés | 
|  assertions  | array | - | Règles de validation des certificats | 

 **Exemple** 

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

### Contrôles TCP
<a name="tcp-types"></a>

Testez la connectivité du port TCP et la validation des réponses.

 **Propriétés requises** 


| Propriété | Type | Description | 
| --- | --- | --- | 
|  hostname  | chaîne | Nom d'hôte cible (format du nom d'hôte) | 
|  port  | entier | Port cible (1-65535) | 

 **Propriétés facultatives** 


| Propriété | Type | Par défaut | Description | 
| --- | --- | --- | --- | 
|  timeout  | integer | 30 000 | Délai d'attente global (5000-300000 ms) | 
|  connectionTimeout  | entier | 3000 | Délai d'expiration de la connexion (5000-300000 ms) | 
|  readTimeout  | entier | 2000 | Délai de lecture des données (5000-300000 ms) | 
|  sendData  | chaîne | - | Données à envoyer après la connexion | 
|  expectedResponse  | chaîne | - | Données relatives aux réponses attendues | 
|  encoding  | chaîne | « UTF-8 » | Codage des données : UTF-8ASCII, HEX | 
|  assertions  | array | - | Validation de la connexion et des réponses | 

 **Exemple** 

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

## Méthodes d’authentification
<a name="authentication-methods"></a>

 **Aucune authentification** 

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

 **Authentification basique** 


| Propriété | Type | Obligatoire | Description | 
| --- | --- | --- | --- | 
|  type  | chaîne |  Oui  | Doit être "BASIC" | 
|  username  | chaîne |  Oui  | Nom d'utilisateur pour l'authentification | 
|  password  | chaîne |  Oui  | Mot de passe pour l'authentification | 

 **Exemple** 

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

 **Authentification par clé d'API** 


| Propriété | Type | Obligatoire | Par défaut | Description | 
| --- | --- | --- | --- | --- | 
|  type  | chaîne |  Oui  | - | Doit être "API\$1KEY" | 
|  apiKey  | chaîne |  Oui  | - | Valeur de la clé d'API | 
|  headerName  | chaîne | Non | « Clé X-API » | Nom de l'en-tête de la clé API | 

 **Exemple** 

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

 **OAuth informations d'identification du client** 


| Propriété | Type | Obligatoire | Par défaut | Description | 
| --- | --- | --- | --- | --- | 
|  type  | chaîne |  Oui  | - | Doit être "OAUTH\$1CLIENT\$1CREDENTIALS" | 
|  tokenUrl  | chaîne |  Oui  | - | OAuth URL du terminal du jeton | 
|  clientId  | chaîne |  Oui  | - | OAuth identifiant du client | 
|  clientSecret  | chaîne |  Oui  | - | OAuth secret du client | 
|  scope  | chaîne | Non | - | OAuth portée | 
|  audience  | chaîne | Non | - | OAuth public | 
|  resource  | chaîne | Non | - | OAuth ressource | 
|  tokenApiAuth  | array | Non | - | Méthodes d'authentification de l'API Token :BASIC\$1AUTH\$1HEADER, REQUEST\$1BODY | 
|  tokenCacheTtl  | entier | Non | 3600 | Cache de jetons TTL (minimum 60 secondes) | 

 **Exemple** 

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


| Propriété | Type | Obligatoire | Description | 
| --- | --- | --- | --- | 
|  type  | chaîne |  Oui  | Doit être "SIGV4" | 
|  service  | chaîne |  Oui  | Nom du AWS service (par exemple, « execute-api ») | 
|  region  | chaîne |  Oui  | AWS région | 
|  roleArn  | chaîne |  Oui  | ARN du rôle IAM pour la signature | 

 **Exemple** 

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

## Assertions et validation
<a name="assertions-validation"></a>

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

 **Assertions de code d'état** 


| Propriété | Type | Obligatoire | Description | 
| --- | --- | --- | --- | 
|  type  | chaîne |  Oui  | Doit être "STATUS\$1CODE" | 
|  operator  | chaîne |  Oui  | EQUALS, NOT\$1EQUALS, GREATER\$1THAN,  LESS\$1THAN, IN\$1RANGE | 
|  value  | entier | Conditionnel | Code d'état HTTP (100-599) | 
|  rangeMin  | entier | Conditionnel | Valeur de plage minimale (pourIN\$1RANGE) | 
|  rangeMax  | entier | Conditionnel | Valeur de plage maximale (pourIN\$1RANGE) | 

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

 **Assertions relatives au temps de réponse** 


| Propriété | Type | Obligatoire | Par défaut | Description | 
| --- | --- | --- | --- | --- | 
|  type  | chaîne |  Oui  | - | Doit être "RESPONSE\$1TIME" | 
|  operator  | chaîne |  Oui  | - | LESS\$1THAN, GREATER\$1THAN, EQUALS | 
|  value  | number |  Oui  | - | Valeur temporelle (minimum 0) | 
|  unit  | chaîne | Non | « MILLISECONDES » | Doit être "MILLISECONDS" | 

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

 **Affirmations de la tête** 


| Propriété | Type | Obligatoire | Description | 
| --- | --- | --- | --- | 
|  type  | chaîne |  Oui  | Doit être "HEADER" | 
|  headerName  | chaîne |  Oui  | Nom de l'en-tête à valider | 
|  operator  | chaîne |  Oui  | EQUALS, NOT\$1EQUALS, CONTAINS,  NOT\$1CONTAINS, REGEX\$1MATCH, EXIST | 
|  value  | chaîne/booléen | Conditionnel | Valeur attendue (booléen pour EXIST opérateur) | 

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

 **Assertions corporelles** 


| Propriété | Type | Obligatoire | Par défaut | Description | 
| --- | --- | --- | --- | --- | 
|  type  | chaîne |  Oui  | - | Doit être "BODY" | 
|  target  | chaîne | Non | « JSON » | JSON ou TEXT | 
|  path  | chaîne | Conditionnel | - | JSONPath (obligatoire pour la cible JSON) | 
|  operator  | chaîne |  Oui  | - | CONTAINS, NOT\$1CONTAINS, EQUALS,  NOT\$1EQUALS, EXISTS | 
|  value  | chaîne/booléen |  Oui  | - | Valeur attendue (booléen pour EXISTS opérateur) | 

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

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

 **Assertions de valeur d'enregistrement** 


| Propriété | Type | Obligatoire | Range | Description | 
| --- | --- | --- | --- | --- | 
|  type  | chaîne |  Oui  | - | Doit être "RECORD\$1VALUE" | 
|  operator  | chaîne |  Oui  | - | EQUALS, NOT\$1EQUALS, CONTAINS,  NOT\$1CONTAINS, REGEX\$1MATCH | 
|  value  | chaîne |  Oui  | - | Valeur d'enregistrement attendue | 

 **Assertions relatives au nombre record** 


| Propriété | Type | Obligatoire | Range | Description | 
| --- | --- | --- | --- | --- | 
|  type  | chaîne |  Oui  | - | Doit être "RECORD\$1COUNT" | 
|  operator  | chaîne |  Oui  | - | EQUALS, GREATER\$1THAN, LESS\$1THAN | 
|  value  | entier |  Oui  | ≥ 0 | Nombre attendu (minimum 0) | 

 **Assertions faisant autorité** 


| Propriété | Type | Obligatoire | Range | Description | 
| --- | --- | --- | --- | --- | 
|  type  | chaîne |  Oui  | - | Doit être "AUTHORITATIVE" | 
|  value  | boolean |  Oui  | - | Statut d'autorité attendu | 

 **Assertions TTL** 


| Propriété | Type | Obligatoire | Range | Description | 
| --- | --- | --- | --- | --- | 
|  type  | chaîne |  Oui  | - | Doit être "TTL" | 
|  operator  | chaîne |  Oui  | - | EQUALS, GREATER\$1THAN, LESS\$1THAN | 
|  value  | entier |  Oui  | ≥ 0 | TTL attendu (minimum 0) | 

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

 **Assertions relatives à l'expiration des certificats** 


| Propriété | Type | Obligatoire | Par défaut | Description | 
| --- | --- | --- | --- | --- | 
|  type  | chaîne |  Oui  | - | Doit être "CERTIFICATE\$1EXPIRY" | 
|  operator  | chaîne |  Oui  | - | GREATER\$1THAN, LESS\$1THAN | 
|  value  | entier |  Oui  | - | Valeur temporelle (minimum 0) | 
|  unit  | chaîne | Non | « JOURS » | DAYS, HOURS | 

 **Assertions relatives au sujet du certificat** 


| Propriété | Type | Obligatoire | Par défaut | Description | 
| --- | --- | --- | --- | --- | 
|  type  | chaîne |  Oui  | - | Doit être "CERTIFICATE\$1SUBJECT" | 
|  field  | chaîne |  Oui  | - | Domaine :CN,O,OU,C,ST, L | 
|  operator  | chaîne |  Oui  | - | CONTAINS, EQUALS, REGEX\$1MATCH | 
|  value  | chaîne |  Oui  | - | Valeur de champ attendue | 

 **Assertions de l'émetteur du certificat** 


| Propriété | Type | Obligatoire | Par défaut | Description | 
| --- | --- | --- | --- | --- | 
|  type  | chaîne |  Oui  | - | Doit être "CERTIFICATE\$1ISSUER" | 
|  field  | chaîne |  Oui  | - | Champ émetteur :CN, O | 
|  operator  | chaîne |  Oui  | - | CONTAINS, EQUALS | 
|  value  | chaîne |  Oui  | - | Valeur de champ attendue | 

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

 **Assertions de réussite de la connexion** 


| Propriété | Type | Obligatoire | Par défaut | Description | 
| --- | --- | --- | --- | --- | 
|  type  | chaîne |  Oui  | - | Doit être "CONNECTION\$1SUCCESSFUL" | 
|  value  | boolean |  Oui  | - | État de connexion attendu | 

 **Assertions relatives aux données de réponse** 


| Propriété | Type | Obligatoire | Par défaut | Description | 
| --- | --- | --- | --- | --- | 
|  type  | chaîne |  Oui  | - | Doit être "RESPONSE\$1DATA" | 
|  operator  | chaîne |  Oui  | - | CONTAINS, EQUALS, NOT\$1CONTAINS,  REGEX\$1MATCH, STARTS\$1WITH, ENDS\$1WITH | 
|  value  | chaîne |  Oui  | - | Données relatives aux réponses attendues | 
|  encoding  | chaîne | Non | « UTF-8 » | UTF-8, ASCII, HEX | 

## Extraction de données
<a name="data-extraction"></a>

Les extracteurs vous permettent de saisir des données à partir des réponses pour les utiliser dans les étapes suivantes ou à des fins de reporting.

 **Propriétés d'extraction** 


| Propriété | Type | Obligatoire | Par défaut | Description | 
| --- | --- | --- | --- | --- | 
|  name  | chaîne |  Oui  | - | Nom de variable pour les données extraites | 
|  type  | chaîne |  Oui  | - | Type d'extraction : BODY | 
|  path  | chaîne | Non | - | JSONPath pour l'extraction du corps | 
|  regex  | chaîne | Non | - | Modèle d'expression régulière | 
|  regexGroup  | entier | Non | 0 | Groupe de capture Regex (minimum 0) | 

 **Validation du nom d'extraction** 
+ Modèle : `^[a-zA-Z][a-zA-Z0-9_]*$`
+ Doit commencer par une lettre
+ Peut contenir des lettres, des chiffres et des traits de soulignement

**Limitation** — La substitution ne s'applique pas aux champs du schéma qui ont des valeurs ENUM spécifiques

 **Types d'extraction** 

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