

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.

# Surveillance Synthetics (scripts Canary)
<a name="CloudWatch_Synthetics_Canaries"></a>

Vous pouvez utiliser Amazon CloudWatch Synthetics pour *créer* des canaries, des scripts configurables qui s'exécutent selon un calendrier, afin de surveiller vos points de terminaison et. APIs Les scripts Canary suivent les mêmes chemins et effectuent les mêmes actions qu'un client, ce qui vous permet de vérifier continuellement l'expérience de votre client, y compris en l'absence de trafic de clients sur vos applications. En utilisant les scripts Canary, vous pouvez découvrir les problèmes avant vos clients.

Les scripts Canary écrits en Node.js, Python ou Java. Ils créent des fonctions Lambda dans votre compte, utilisant Node.js, Python, ou Java comme environnements d’exécution. Les scripts Canary fonctionnent sur les protocoles HTTP et HTTPS. Les canaris utilisent des couches Lambda qui contiennent la bibliothèque CloudWatch Synthetics. La bibliothèque inclut des implémentations de CloudWatch Synthetics pour NodeJS, Python et Java.

Les scripts Canary en Node.js et Python offrent un accès programmatique à des navigateurs sans périphériques via Playwright, Puppeteer ou Selenium WebDriver. Plusieurs navigateurs sont pris en charge, dont Google Chrome sans périphériques et Mozilla Firefox. Pour plus d’informations sur Playwright, consultez [Playwright](https://playwright.dev/). Pour de plus amples informations sur Puppeteer, consultez [Puppeteer](https://developer.chrome.com/docs/puppeteer/). Pour plus d’informations sur Selenium, consultez [Selenium](https://www.selenium.dev/). Les scripts Canary basés sur Selenium ne prennent en charge que le navigateur Chrome. Les scripts Canary en Java sont conçus pour être flexibles et peuvent surveiller tout type de service ou d’application ; ils ne prennent pas en charge les navigateurs ni les cadriciels.

Les scripts Canary vérifient la disponibilité et la latence de vos points de terminaison, et peuvent stocker des données de temps de chargement et des captures d'écran de l'interface utilisateur. Ils surveillent votre REST APIs et le contenu de votre site Web, et ils peuvent détecter les modifications non autorisées dues au phishing, à l'injection de code et aux scripts intersites. URLs

 CloudWatch Synthetics est intégré à [Application Signals, qui permet de](CloudWatch-Application-Monitoring-Sections.md) découvrir et de surveiller les services de votre application, vos clients, les canaries de Synthetics et les dépendances des services. Utilisez Application Signals pour consulter une liste ou une carte visuelle de vos services, consulter les indicateurs de santé en fonction de vos objectifs de niveau de service (SLOs) et effectuer une analyse descendante pour voir les traces de X-Ray corrélées afin de résoudre les problèmes de manière plus détaillée. Pour voir vos scripts canary dans Application Signals, [activez le suivi actif X-Ray](CloudWatch_Synthetics_Canaries_tracing.md). Vos scripts Canary sont affichés sur la [Carte des applications](ServiceMap.md) associée à vos services et sur la page [Détails du service](ServiceDetail.md) qu’ils appellent. 

Pour une démonstration vidéo des scripts canary, consultez les liens suivants :
+  [Présentation d'Amazon CloudWatch Synthetics](https://www.youtube.com/watch?v=MItluIsvfTo) 
+  [Démo d'Amazon CloudWatch Synthetics](https://www.youtube.com/watch?v=hF3NM9j-u7I) 
+  [Créez des canaris à l'aide d'Amazon Synthetics CloudWatch](https://www.youtube.com/watch?v=DSx65wW7lr0) 
+  [Surveillance visuelle avec Amazon CloudWatch Synthetics](https://www.youtube.com/watch?v=_PCs-ucZz7E) 



Vous pouvez exécuter un script Canary une fois ou selon un horaire régulier. Les scripts Canary peuvent être exécutés aussi souvent qu'une fois par minute. Vous pouvez utiliser à la fois les expressions cron et rate pour planifier les scripts Canary.

Pour de plus amples informations sur les problèmes de sécurité à prendre en compte avant de créer et d'exécuter des scripts Canary, veuillez consulter [Considérations de sécurité pour les scripts Canary Synthetics](servicelens_canaries_security.md). 

Par défaut, les canaris créent plusieurs CloudWatch métriques dans l'espace de `CloudWatchSynthetics` noms. Ces métriques ont `CanaryName` comme dimension. Les scripts Canary qui utilisent la fonction `executeStep()` ou `executeHttpStep()` de la bibliothèque de fonctions ont également `StepName` comme dimension. Pour de plus amples informations sur la bibliothèque de fonctions des scripts Canary, veuillez consulter [Fonctions de bibliothèque disponibles pour les scripts Canary](CloudWatch_Synthetics_Canaries_Function_Library.md).

CloudWatch Synthetics s'intègre parfaitement à la X-Ray Trace Map, qui fournit end-to-end une vue d' CloudWatch ensemble AWS X-Ray de vos services afin de vous aider à identifier plus efficacement les problèmes de performance et à identifier les utilisateurs concernés. Les canaris que vous créez avec CloudWatch Synthetics apparaissent sur la carte de traçage. Pour plus d’informations, veuillez consulter la rubrique [Carte de suivi X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-console-servicemap.html). 

CloudWatch Synthetics est actuellement disponible dans toutes les régions AWS commerciales et les régions. GovCloud

**Note**  
En Asie-Pacifique (Osaka), AWS PrivateLink il n'est pas pris en charge. En Asie-Pacifique (Jakarta), AWS PrivateLink et X-Ray ne sont pas pris en charge.

**Topics**
+ [Rôles et autorisations requis pour les CloudWatch canaris](CloudWatch_Synthetics_Canaries_Roles.md)
+ [Création d'un Canary](CloudWatch_Synthetics_Canaries_Create.md)
+ [Groupes](CloudWatch_Synthetics_Groups.md)
+ [Tester un script Canary localement](CloudWatch_Synthetics_Debug_Locally.md)
+ [Dépannage d'un script Canary ayant échoué](CloudWatch_Synthetics_Canaries_Troubleshoot.md)
+ [Exemple de code pour les scripts Canary](CloudWatch_Synthetics_Canaries_Samples.md)
+ [Scripts Canary et suivi X-Ray](CloudWatch_Synthetics_Canaries_tracing.md)
+ [Exécution d'un script Canary sur un VPC](CloudWatch_Synthetics_Canaries_VPC.md)
+ [Chiffrement des artefacts de script Canary](CloudWatch_Synthetics_artifact_encryption.md)
+ [Affichage des politiques et détails sur les scripts Canary](CloudWatch_Synthetics_Canaries_Details.md)
+ [CloudWatch statistiques publiées par canaries](CloudWatch_Synthetics_Canaries_metrics.md)
+ [Modification ou suppression d'un canary](synthetics_canaries_deletion.md)
+ [Démarrage, arrêt, suppression ou mise à jour de l'exécution de plusieurs canaris](synthetics_canaries_multi-action.md)
+ [Surveiller les événements liés aux canaris avec Amazon EventBridge](monitoring-events-eventbridge.md)
+ [Effectuer des mises à jour sécurisées des scripts Canary](performing-safe-canary-upgrades.md)

# Rôles et autorisations requis pour les CloudWatch canaris
<a name="CloudWatch_Synthetics_Canaries_Roles"></a>

Les utilisateurs qui créent et gèrent les scripts canary, ainsi que les scripts canary eux-mêmes, doivent disposer de certaines autorisations.

# Rôles et autorisations requis pour les utilisateurs qui gèrent les CloudWatch canaris
<a name="CloudWatch_Synthetics_Canaries_UserPermissions"></a>

Pour afficher les détails d'un script canary et les résultats des exécutions de scripts canary, vous devez être connecté en tant qu'utilisateur disposant des politiques `CloudWatchSyntheticsFullAccess` ou ` CloudWatchSyntheticsReadOnlyAccess` attachées. Pour lire toutes les données Synthetics dans la console, vous avez également besoin des stratégies ` CloudWatchReadOnlyAccess` et `AmazonS3ReadOnlyAccess`. Pour afficher le code source utilisé par les scripts Canary, vous avez également besoin de la stratégie `AWSLambda_ReadOnlyAccess`.

Pour créer des scripts canary, vous devez être connecté en tant qu'utilisateur disposant de la politique ` CloudWatchSyntheticsFullAccess` ou d'un ensemble similaire d'autorisations. Pour créer des rôles IAM pour les scripts Canary, vous avez également besoin de la déclaration de stratégie en ligne suivante :

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:CreateRole",
                "iam:CreatePolicy",
                "iam:AttachRolePolicy"
            ],
            "Resource": [
                "arn:aws:iam::*:role/service-role/CloudWatchSyntheticsRole*",
                "arn:aws:iam::*:policy/service-role/CloudWatchSyntheticsPolicy*"
            ]
        }
    ]
}
```

------

**Important**  
L'octroi à un utilisateur des autorisations `iam:CreateRole`, `iam:CreatePolicy` et ` iam:AttachRolePolicy` lui permet de bénéficier d'un accès administratif complet à votre compte AWS . Par exemple, un utilisateur disposant de ces autorisations peut créer une stratégie disposant d'autorisations complètes pour toutes les ressources et peut attacher cette stratégie à n'importe quel rôle. Sélectionnez attentivement les personnes auxquelles vous accordez ces autorisations.

Pour plus d'informations sur l'association des politiques et l'octroi d'autorisations aux utilisateurs, consultez [Modification des autorisations pour un utilisateur IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) et [Pour intégrer une politique en ligne pour un utilisateur ou un rôle](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#embed-inline-policy-console).

# Rôles et autorisations requis pour les scripts Canary
<a name="CloudWatch_Synthetics_Canaries_CanaryPermissions"></a>

Chaque script canary doit être associé à un rôle IAM auquel certaines autorisations sont attachées. Lorsque vous créez un canari à l'aide de la CloudWatch console, vous pouvez choisir que CloudWatch Synthetics crée un rôle IAM pour le canari. Si vous le faites, le rôle disposera des autorisations nécessaires.

Si vous souhaitez créer le rôle IAM vous-même, ou créer un rôle IAM que vous pouvez utiliser lorsque vous utilisez AWS CLI ou APIs pour créer un Canary, le rôle doit contenir les autorisations répertoriées dans cette section.

Tous les rôles IAM pour les scripts canary doivent inclure la déclaration de politique d'approbation suivante.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "lambda.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

De plus, le rôle IAM du script canary nécessite l'une des déclarations suivantes.

 **Canary de base qui n'utilise pas AWS KMS ou n'a pas besoin d'un accès Amazon VPC** 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::path/to/your/s3/bucket/canary/results/folder"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::name/of/the/s3/bucket/that/contains/canary/results"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:CreateLogGroup"
            ],
            "Resource": [
            "arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/cwsyn-canary_name-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "xray:PutTraceSegments"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Resource": "*",
            "Action": "cloudwatch:PutMetricData",
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": "CloudWatchSynthetics"
                }
            }
        }
    ]
}
```

------

 **Canary qui crypte AWS KMS les artefacts Canary mais n'a pas besoin d'un accès Amazon VPC** 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::path/to/your/S3/bucket/canary/results/folder"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::name/of/the/S3/bucket/that/contains/canary/results"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:CreateLogGroup"
            ],
            "Resource": [
            "arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/cwsyn-canary_name-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "xray:PutTraceSegments"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Resource": "*",
            "Action": "cloudwatch:PutMetricData",
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": "CloudWatchSynthetics"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/KMS_key_id",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": [
                        "s3.us-east-1.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

 **Canary qui n'utilise pas Amazon VPC AWS KMS mais qui a besoin d'un accès à Amazon VPC** 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::path/to/your/S3/bucket/canary/results/folder"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::name/of/the/S3/bucket/that/contains/canary/results"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:CreateLogGroup"
            ],
            "Resource": [
            "arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/cwsyn-canary_name-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "xray:PutTraceSegments"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Resource": "*",
            "Action": "cloudwatch:PutMetricData",
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": "CloudWatchSynthetics"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DeleteNetworkInterface"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

 **Canary qui crypte AWS KMS les artefacts Canary et qui a également besoin d'un accès Amazon VPC** 

Si vous mettez à jour un script canary non VPC pour qu'il commence à utiliser un VPC, vous devez mettre à jour le rôle du script canary pour inclure les autorisations d'interface réseau répertoriées dans la politique suivante.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::path/to/your/S3/bucket/canary/results/folder"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::name/of/the/S3/bucket/that/contains/canary/results"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:CreateLogGroup"
            ],
            "Resource": [
            "arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/cwsyn-canary_name-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "xray:PutTraceSegments"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Resource": "*",
            "Action": "cloudwatch:PutMetricData",
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": "CloudWatchSynthetics"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DeleteNetworkInterface"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey"
            ],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/KMS_key_id",
            "Condition": {
                "StringEquals": {
                    "kms:ViaService": [
                        "s3.us-east-1.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

## AWS politiques gérées pour CloudWatch Synthetics
<a name="CloudWatch_Synthetics_IAMManagedPolicies"></a>

Pour ajouter des autorisations aux utilisateurs, aux groupes et aux rôles, il est plus facile d'utiliser des politiques AWS gérées que de les rédiger vous-même. Il faut du temps et de l’expertise pour créer des politiques gérées par le client IAM qui ne fournissent à votre équipe que les autorisations dont elle a besoin. Pour démarrer rapidement, vous pouvez utiliser nos politiques AWS gérées. Ces politiques couvrent les cas d'utilisation courants et sont disponibles dans votre AWS compte. Pour plus d'informations sur les politiques AWS gérées, consultez la section [Politiques AWSAWS gérées](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) dans le Guide de l'utilisateur IAM.

AWS les services maintiennent et mettent à jour les politiques AWS gérées. Vous ne pouvez pas modifier les autorisations dans les politiques AWS gérées. Les services modifient occasionnellement les autorisations dans une politique gérée par AWS . Ce type de mise à jour affecte toutes les identités (utilisateurs, groupes et rôles) auxquelles la politique est attachée.

### CloudWatch Mises à jour des politiques gérées par Synthetics AWS
<a name="CloudWatch_Synthetics_IAMManagedPolicies_Updates"></a>

Consultez les détails des mises à jour apportées aux politiques AWS gérées pour CloudWatch Synthetics depuis que ce service a commencé à suivre ces modifications. Pour recevoir des alertes automatiques concernant les modifications apportées à cette page, abonnez-vous au flux RSS sur la page Historique du CloudWatch document. 


| Modifier | Description | Date | 
| --- | --- | --- | 
|  Actions redondantes supprimées de **CloudWatchSyntheticsFullAccess**  |  CloudWatch Synthetics a supprimé les actions ` lambda:GetLayerVersionByArn` et ** CloudWatchSyntheticsFullAccess**de `s3:PutBucketEncryption` la politique car ces actions étaient redondantes par rapport aux autres autorisations de la politique. Les actions supprimées ne fournissaient aucune autorisation et il n'y a aucune modification nette des autorisations accordées par la stratégie.  | 12 mars 2021 | 
|  CloudWatch Synthetics a commencé à suivre les changements  |  CloudWatch Synthetics a commencé à suivre les modifications apportées à ses politiques gérées. AWS   | 10 mars 2021 | 

 **CloudWatchSyntheticsFullAccess** 

Voici le contenu de la politique `CloudWatchSyntheticsFullAccess` :

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": [
                "synthetics:*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:CreateBucket",
                "s3:PutEncryptionConfiguration"
            ],
            "Resource": [
                "arn:aws:s3:::cw-syn-results-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:ListRoles",
                "s3:ListAllMyBuckets",
                "xray:GetTraceSummaries",
                "xray:BatchGetTraces",
                "apigateway:GET"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::cw-syn-*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::aws-synthetics-library-*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::*:role/service-role/CloudWatchSyntheticsRole*"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": [
                        "lambda.amazonaws.com",
                        "synthetics.amazonaws.com"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:GetRole",
                "iam:ListAttachedRolePolicies"
            ],
            "Resource": [
                "arn:aws:iam::*:role/service-role/CloudWatchSyntheticsRole*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:GetMetricData",
                "cloudwatch:GetMetricStatistics"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricAlarm",
                "cloudwatch:DeleteAlarms"
            ],
            "Resource": [
                "arn:aws:cloudwatch:*:*:alarm:Synthetics-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:DescribeAlarms"
            ],
            "Resource": [
                "arn:aws:cloudwatch:*:*:alarm:*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:GetLogRecord",
                "logs:DescribeLogStreams",
                "logs:StartQuery",
                "logs:GetLogEvents",
                "logs:FilterLogEvents",
                "logs:GetLogGroupFields"
            ],
            "Resource": [
                "arn:aws:logs:*:*:log-group:/aws/lambda/cwsyn-*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "lambda:CreateFunction",
                "lambda:AddPermission",
                "lambda:PublishVersion",
                "lambda:UpdateFunctionCode",
                "lambda:UpdateFunctionConfiguration",
                "lambda:GetFunctionConfiguration",
                "lambda:GetFunction",
                "lambda:DeleteFunction",
                "lambda:ListTags",
                "lambda:TagResource",
                "lambda:UntagResource"
            ],
            "Resource": [
                "arn:aws:lambda:*:*:function:cwsyn-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "lambda:GetLayerVersion",
                "lambda:PublishLayerVersion",
                "lambda:DeleteLayerVersion"
            ],
            "Resource": [
                "arn:aws:lambda:*:*:layer:cwsyn-*",
                "arn:aws:lambda:*:*:layer:Synthetics:*",
                "arn:aws:lambda:*:*:layer:Synthetics_Selenium:*",
                "arn:aws:lambda:*:*:layer:AWS-CW-Synthetics*:*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeVpcs",
                "ec2:DescribeSubnets",
                "ec2:DescribeSecurityGroups"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "sns:ListTopics"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "sns:CreateTopic",
                "sns:Subscribe",
                "sns:ListSubscriptionsByTopic"
            ],
            "Resource": [
                "arn:*:sns:*:*:Synthetics-*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:ListAliases"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:*:*:key/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:*:*:key/*",
            "Condition": {
                "StringLike": {
                    "kms:ViaService": [
                        "s3.*.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

 **CloudWatchSyntheticsReadOnlyAccess** 

Voici le contenu de la politique `CloudWatchSyntheticsReadOnlyAccess` :

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "synthetics:Describe*",
                "synthetics:Get*",
                "synthetics:List*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

# Limiter un utilisateur pour afficher des canarys spécifiques
<a name="CloudWatch_Synthetics_Canaries_Restricted"></a>

Vous pouvez limiter la capacité d'un utilisateur à afficher des informations sur les canarys, de sorte qu'il ne puisse voir que les informations sur les canarys que vous spécifiez. Pour ce faire, utilisez une politique IAM avec une déclaration ` Condition` semblable à ce qui suit et attachez cette politique à un utilisateur ou à un rôle IAM.

L'exemple suivant montre comment limiter l'utilisateur à afficher uniquement des informations sur ` name-of-allowed-canary-1` et `name-of-allowed-canary-2`. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "synthetics:DescribeCanaries",
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "synthetics:Names": [
                        "name-of-allowed-canary-1",
                        "name-of-allowed-canary-2"
                    ]
                }
            }
        }
    ]
}
```

------

CloudWatch Synthetics permet de répertorier jusqu'à cinq éléments de la gamme. `synthetics:Names`

Vous pouvez également créer une politique qui utilise un \$1** comme caractère générique dans les noms canary qui doivent être autorisés, comme dans l'exemple suivant :

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "synthetics:DescribeCanaries",
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringLike": {
                    "synthetics:Names": [
                        "my-team-canary-*"
                    ]
                }
            }
        }
    ]
}
```

------

Tout utilisateur connecté avec l'une de ces politiques en pièce jointe ne peut pas utiliser la CloudWatch console pour consulter les informations Canary. Ils peuvent consulter les informations relatives aux canaris uniquement pour les canaris autorisés par la politique et uniquement à l'aide de l'[DescribeCanaries](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_DescribeCanaries.html)API ou de la commande [AWS CLI describe-canaries](https://docs.aws.amazon.com/cli/latest/reference/synthetics/describe-canaries.html).

# Création d'un Canary
<a name="CloudWatch_Synthetics_Canaries_Create"></a>

**Important**  
Assurez-vous d'utiliser Synthetics Canaries pour surveiller uniquement les points de terminaison dont vous êtes propriétaire ou APIs autorisé. Selon les paramètres de fréquence des scripts Canary, ces points de terminaison peuvent connaître un trafic accru.

Lorsque vous utilisez la CloudWatch console pour créer un canari, vous pouvez utiliser un plan fourni par CloudWatch pour créer votre canari ou vous pouvez écrire votre propre script. Pour de plus amples informations, veuillez consulter [Utilisation des modèles de scripts Canary](CloudWatch_Synthetics_Canaries_Blueprints.md).

Vous pouvez également créer un canari en utilisant CloudFormation si vous utilisez votre propre script pour le canari. Pour plus d'informations, consultez [ AWS::Synthetics::Canary](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-synthetics-canary.html)le *guide de AWS CloudFormation l'utilisateur*.

Si vous écrivez votre propre script, vous pouvez utiliser plusieurs fonctions intégrées par CloudWatch Synthetics dans une bibliothèque. Pour de plus amples informations, veuillez consulter [Versions d'exécution Synthetics](CloudWatch_Synthetics_Canaries_Library.md).

**Note**  
Lorsque vous créez un script Canary, l’une des couches générées est une couche Synthetics, dont le nom commence par ` Synthetics`. Cette couche appartient au compte de service Synthetics et contient le code d’exécution.

**Pour créer un canary**

1. Ouvrez la CloudWatch console à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Dans le volet de navigation, sélectionnez **Vigie applicative**, **Scripts Canary Synthetics**.

   

1. Choisissez **Create Canary** (Créer un script Canary).

1. Sélectionnez l’une des méthodes suivantes :
   + Pour baser votre script Canary sur un modèle de script, choisissez **Use a blueprint (Utiliser un modèle)**, puis le type de script Canary que vous souhaitez créer. Pour de plus amples informations sur les activités de chaque type de modèle, veuillez consulter [Utilisation des modèles de scripts Canary](CloudWatch_Synthetics_Canaries_Blueprints.md).
   + Pour télécharger votre propre script Node.js afin de créer un script Canary personnalisé, choisissez **Upload a script (Charger un script)**.

     Vous pouvez ensuite faire glisser votre script dans la zone **Script** ou choisir **Browse files (Parcourir les fichiers)** pour accéder au script dans votre système de fichiers.
   + Pour importer votre script à partir d'un compartiment S3, choisissez **Import from S3 (Importer à partir de S3)**. Sous **Source location (Emplacement source)**, saisissez le chemin d'accès complet à votre script Canary ou choisissez **Browse S3 (Parcourir S3)**.

     Vous devez disposer d'autorisations `s3:GetObject` et `s3:GetObjectVersion` pour le compartiment S3 que vous utilisez. Le compartiment doit se trouver dans la même région AWS que celle où vous créez le script Canary.

1. Sous **Nom**, entrez le nom du script Canary. Le nom est utilisé sur de nombreuses pages, donc nous vous recommandons de lui donner un nom descriptif qui le distingue des autres scripts Canary.

1. Sous **Application or endpoint URL (URL de l'application ou du point de terminaison)**, entrez l'URL que vous souhaitez tester avec le script Canary. Cette URL doit inclure le protocole (par exemple, https://).

   Si vous voulez que le script Canary teste un point de terminaison sur un VPC, vous devez également saisir des informations sur votre VPC plus loin dans cette procédure. 

1. Si vous utilisez votre propre script pour le script Canary, sous le **Lambda handler (Gestionnaire Lambda)**, saisissez le point d'entrée à partir duquel le script Canary doit commencer. Pour plus d’informations sur le format du gestionnaire Lambda, consultez [Versions d’exécution Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library.html).

1. Sous **Éditeur de script**, dans **Version d’exécution**, sélectionnez la version d’exécution Synthetics que le script Canary doit utiliser. Pour plus d’informations sur les versions d’exécution Synthetics, consultez [Versions d’exécution Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library.html).

   Dans **Configuration du navigateur**, vous pouvez activer un navigateur pour tester le script Canary. Vous devez sélectionner au moins un navigateur.

1. Si vous utilisez des variables d'environnement dans votre script, choisissez **Environment variables (Variables d'environnement)**, puis spécifiez une valeur pour chaque variable d'environnement définie dans votre script. Pour de plus amples informations, veuillez consulter [Variables d’environnement](CloudWatch_Synthetics_Canaries_WritingCanary_Nodejs_Pup.md#CloudWatch_Synthetics_Environment_Variables).

1. Sous **Schedule (Planification)**, choisissez si vous souhaitez exécuter ce script Canary une seule fois, l'exécuter en continu à l'aide d'une expression rate ou le planifier à l'aide d'une expression cron.
   + Lorsque vous utilisez la CloudWatch console pour créer un canari qui fonctionne en continu, vous pouvez choisir un débit compris entre une fois par minute et une fois par heure.
   + Pour plus d'informations sur l'écriture d'une expression cron pour la planification d'un script Canary, consultez [Planification d'exécutions de scripts Canary à l'aide de cron](CloudWatch_Synthetics_Canaries_cron.md).

1. (Facultatif) Pour définir une valeur de délai d'attente pour le canary, choisissez **Configuration supplémentaire** puis spécifiez la valeur du délai d'attente. Ne pas dépasser 15 secondes pour permettre les démarrages à froid Lambda et le temps nécessaire pour démarrer l'instrumentation canary.

1. Sous **Conservation des données**, spécifiez la durée de conservation des informations sur les exécutions de scripts Canary échouées et réussies. La plage va de 1 à 455 jours.

   Ce paramètre affecte la gamme d'informations renvoyées par [GetCanaryRuns](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_GetCanaryRuns.html)les opérations, ainsi que la gamme d'informations affichées dans la console Synthetics.

   Cela n'affecte pas les données stockées dans vos compartiments Amazon S3, ni les journaux ou les mesures publiés par Canary.

   Quelle que soit la période de conservation des données du script Canary, la quantité d’informations affichées dans la console est soumise à certaines limites. Dans la vue d’accueil de la console Synthetics, les plages de temps relatives et absolues sont limitées à sept jours. Dans la vue d’un script Canary spécifique de la console Synthetics, la plage de temps relative est limitée à sept jours et la plage de temps absolue est limitée à 30 jours.

1. Sous **Stockage de données**, sélectionnez le compartiment Amazon S3 à utiliser pour stocker les données provenant des exécutions des tests du script Canary. Le nom du compartiment ne peut pas contenir de point (.). Si vous laissez ce champ vide, un compartiment Amazon S3 par défaut est utilisé ou créé.

1. (Facultatif) Par défaut, les canaris stockent leurs artefacts sur Amazon S3, et les artefacts sont chiffrés au repos à l'aide d'une AWS clé gérée AWS KMS . Vous pouvez utiliser une autre option de chiffrement en choisissant **Additional configuration** (Configuration supplémentaire) dans la section **Data Storage** (Stockage de données). Vous pouvez ensuite choisir le type de clé à utiliser pour le chiffrement. Pour de plus amples informations, veuillez consulter [Chiffrement des artefacts de script Canary](CloudWatch_Synthetics_artifact_encryption.md). 

1. Sous **Access permissions (Autorisations d'accès)**, choisissez si vous souhaitez créer un rôle IAM pour exécuter le script Canary ou utiliser un rôle existant.

   Si CloudWatch Synthetics crée le rôle, il inclut automatiquement toutes les autorisations nécessaires. Si vous souhaitez créer le rôle vous-même, consultez [Rôles et autorisations requis pour les scripts Canary](CloudWatch_Synthetics_Canaries_CanaryPermissions.md) pour plus d'informations sur les autorisations nécessaires.

   Si vous utilisez la CloudWatch console pour créer un rôle pour un canari lorsque vous créez le canari, vous ne pouvez pas réutiliser le rôle pour d'autres canaris, car ces rôles sont spécifiques à un seul canari. Vous pouvez utiliser un rôle existant, si vous avez créé manuellement un rôle qui fonctionne pour plusieurs scripts Canary.

   Pour utiliser un rôle existant, vous devez avoir l'autorisation `iam:PassRole` de transmettre ce rôle à Synthetics et à Lambda. Vous devez également avoir l'autorisation `iam:GetRole`.

1. (Facultatif) Sous **Alarms (Alarmes)**, choisissez si vous souhaitez créer des alarmes CloudWatch par défaut pour ce script canari. Si vous choisissez de créer des alertes, elles sont créées selon la convention de nom suivante :`Synthetics-Alarm-canaryName -index `

   `index` est un numéro représentant chaque alerte créée pour ce script Canary. La première alerte a un index de 1, la deuxième alerte a un index de 2, et ainsi de suite.

1. (Facultatif) Pour que ce script Canary teste un point de terminaison figurant sur un VPC, choisissez **VPC settings (Paramètres VPC)** et procédez comme suit :

   1. Sélectionnez le VPC qui héberge le point de terminaison.

   1. Sélectionnez un ou plusieurs sous-réseaux sur votre VPC. Vous devez sélectionner un sous-réseau privé, car une instance Lambda ne peut pas être configurée pour s'exécuter dans un sous-réseau public lorsqu'une adresse IP ne peut pas être attribuée à l'instance Lambda lors de l'exécution. Pour de plus amples informations, veuillez consulter [Configuration d'une fonction Lambda pour accéder aux ressources d'un VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html).

   1. Sélectionnez un ou plusieurs groupes de sécurité sur votre VPC.

   1. Pour autoriser le IPv6 trafic sortant pour ce canari, sélectionnez **Autoriser le IPv6 trafic pour les sous-réseaux à double pile**. Cela permet au Canary de surveiller IPv6 uniquement les points de terminaison compatibles avec le double stack. IPv6

      Vous pouvez également surveiller des points de terminaison externes à votre VPC en donnant au script Canary un accès Internet et en configurant les sous-réseaux du VPC de manière appropriée. Pour de plus amples informations, veuillez consulter [Exécution d'un script Canary sur un VPC](CloudWatch_Synthetics_Canaries_VPC.md).

   Si le point de terminaison se trouve sur un VPC, vous devez autoriser votre Canary à envoyer des informations à Amazon S3 CloudWatch et à Amazon S3. Pour de plus amples informations, veuillez consulter [Exécution d'un script Canary sur un VPC](CloudWatch_Synthetics_Canaries_VPC.md).

1. (Facultatif ) Sous **Tags (Balises)**, ajoutez une ou plusieurs paires clé/valeur comme balises pour ce script Canary. Les balises peuvent vous aider à identifier et à organiser vos AWS ressources et à suivre vos AWS coûts. Pour de plus amples informations, veuillez consulter [Étiquette de vos ressources Amazon CloudWatch](CloudWatch-Tagging.md).

   Si vous souhaitez que les balises appliquées au script Canary soient également répliquées sur la fonction Lambda utilisée par ce script Canary, sélectionnez **Fonction Lambda** sous **Réplication des balises**. Si vous choisissez cette option, CloudWatch Synthetics synchronisera les balises du Canary et la fonction Lambda :
   + Synthetics applique les mêmes balises que vous définissez ici à la fois au script Canary et à la fonction Lambda.
   + Si vous modifiez ultérieurement les balises du script Canary tout en gardant cette option activée, Synthetics mettra également à jour les balises de la fonction Lambda afin de les maintenir synchronisées avec le script Canary. 

1. (Facultatif) Sous **Active tracing (Suivi actif)**, choisissez d'activer ou non le suivi X-Ray actif pour ce script Canary. Le suivi actif est disponible uniquement pour les exécutions Puppeteer et Java. Pour de plus amples informations, veuillez consulter [Scripts Canary et suivi X-Ray](CloudWatch_Synthetics_Canaries_tracing.md).

## Ressources créées pour les scripts Canary
<a name="CloudWatch_Synthetics_Canaries_Resources_Created"></a>

Lorsque vous créez un script Canary, les ressources suivantes sont créées :
+ Un rôle IAM portant le nom `CloudWatchSyntheticsRole-canary-name -uuid` (si vous utilisez la CloudWatch console pour créer le canari et que vous spécifiez qu'un nouveau rôle sera créé pour le canari)
+ Une stratégie IAM portant le nom `CloudWatchSyntheticsPolicy- canary-name-uuid`.
+ Un compartiment S3 portant le nom `cw-syn-results-accountID -region`.
+ Des alertes portant le nom `Synthetics-Alarm-MyCanaryName` (si vous voulez créer des alertes pour le script Canary)
+ Fonctions et couches Lambda, si vous utilisez un modèle pour créer le script Canary. Ces ressources ont le préfixe `cwsyn-MyCanaryName`.
+ CloudWatch Enregistre les groupes de journaux avec le nom`/aws/lambda/cwsyn-MyCanaryName -randomId`.

# Utilisation des modèles de scripts Canary
<a name="CloudWatch_Synthetics_Canaries_Blueprints"></a>

Cette section fournit des détails sur chacun des modèles de scripts Canary et les tâches auxquelles chaque modèle est le mieux adapté. Des plans sont fournis pour les types de scripts Canary suivants : 

**Topics**
+ [Surveillance des pulsations](#CloudWatch_Synthetics_Canaries_Blueprints_Heartbeat)
+ [Script Canary d'API](#CloudWatch_Synthetics_Canaries_Blueprints_API)
+ [Vérificateur des liens cassés](#CloudWatch_Synthetics_Canaries_Blueprints_Broken_Links)
+ [Modèle de surveillance visuelle](#CloudWatch_Synthetics_Canaries_Blueprints_VisualTesting)
+ [Enregistreur de scripts Canary](#CloudWatch_Synthetics_Canaries_Blueprints_Recorder)
+ [Générateur de flux de travail GUI](#CloudWatch_Synthetics_Canaries_Blueprints_GUI_Workflow)
+ [Plan multi-chèques](#CloudWatch_Synthetics_Canaries_Blueprints_Multichecks_Blueprint)
+ [Création d'un canari à plusieurs vérifications](CloudWatch_Synthetics_Canaries_MultiCheck_Blueprint.md)

Lorsque vous utilisez un modèle pour créer un script canari, lorsque vous renseignez les champs de la console CloudWatch, la zone **Script editor (Éditeur de script)** de la page affiche le script canari que vous créez en tant que script Node.js. Vous pouvez également modifier votre script Canary dans cette zone pour le personnaliser davantage.

## Surveillance des pulsations
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Heartbeat"></a>

Les scripts de pulsations chargent l'URL spécifiée et stockent une capture d'écran de la page et un fichier d'archive HTTP (fichier HAR). Ils stockent également les journaux des accès URLs. 

Vous pouvez utiliser les fichiers HAR pour afficher des données de performances détaillées sur les pages web. Vous pouvez analyser la liste des demandes web et détecter des problèmes liés aux performances, notamment le temps de chargement d'un élément.

Si votre Canary utilise la version d'exécution `syn-nodejs-puppeteer-3.1` ou une version ultérieure, vous pouvez utiliser le plan de surveillance du rythme cardiaque pour en surveiller plusieurs URLs et voir le statut, la durée, les captures d'écran associées et la raison de l'échec de chaque URL dans le résumé des étapes du rapport Canary Run.

## Script Canary d'API
<a name="CloudWatch_Synthetics_Canaries_Blueprints_API"></a>

Les scripts Canary d'API peuvent tester les fonctions de base de lecture et d'écriture d'une API REST. REST, qui signifie *transfert d'état représentatif*, est un ensemble de règles que les développeurs suivent lors de la création d'une API. L'une de ces règles stipule qu'un lien vers une URL spécifique doit renvoyer un élément de données.

Les Canaries peuvent travailler avec n'importe qui APIs et tester tous les types de fonctionnalités. Chaque script Canary peut effectuer plusieurs appels d'API.

Dans les canaris qui utilisent une version d'exécution `syn-nodejs-2.2` ou ultérieure, le plan API Canary prend en charge les canaris en plusieurs étapes qui vous APIs surveillent sous forme d'étapes HTTP. Vous pouvez en tester plusieurs APIs dans un seul canari. Chaque étape est une demande distincte qui peut accéder à des URL différentes, utiliser des en-têtes différents et des règles différentes pour déterminer si les en-têtes et les corps de réponse sont capturés. En ne capturant pas les en-têtes et le corps de la réponse, vous pouvez empêcher l'enregistrement de données sensibles. 

Chaque demande dans un script Canary d'API comprend les informations suivantes :
+ Le *point de terminaison*, qui est l'URL que vous demandez.
+ La *méthode*, qui est le type de demande envoyé au serveur. REST APIs prend en charge les opérations GET (lecture), POST (écriture), PUT (mise à jour), PATCH (mise à jour) et DELETE (suppression).
+ Les *en-têtes*, qui fournissent des informations à la fois au client et au serveur. Ils sont utilisés pour l'authentification et fournir des informations sur le contenu du corps. Pour une liste d'en-têtes valides, consultez [En-têtes HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers).
+ Les *données* (ou le *corps*) qui contiennent des informations à envoyer au serveur. Utilisées uniquement pour les demandes POST, PUT, PATCH ou DELETE.

**Note**  
Les plans de script Canary API ne sont pas pris en charge par les exécutions Playwright.

Le modèle de script Canary d'API prend en charge les méthodes GET et POST. Lorsque vous utilisez ce modèle, vous devez spécifier des en-têtes. Par exemple, vous pouvez spécifier **Authorization** en tant que **clé** et spécifier les données d'autorisation nécessaires en tant que **valeur** pour cette clé.

Si vous testez une requête POST, vous spécifiez également le contenu à publier dans le champ **Données**.

 **Intégration à API Gateway** 

Le modèle d'API est intégré à Amazon API Gateway. Cela vous permet de sélectionner une API API Gateway et un stage à partir du même AWS compte et de la même région que le Canary, ou de télécharger un modèle Swagger depuis API Gateway pour la surveillance des API entre comptes et entre régions. Vous pouvez ensuite choisir le reste des détails dans la console pour créer le script Canary, au lieu de les saisir à partir de zéro. Pour plus d'informations sur API Gateway, consultez [Qu'est-ce qu'Amazon API Gateway ?](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html). 

 **Utilisation d'une API privée** 

Vous pouvez créer un script canary utilisant une API privée dans Amazon API Gateway. Pour de plus amples informations, veuillez consulter [Création d'une API privée dans Amazon API Gateway ?](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html)

## Vérificateur des liens cassés
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Broken_Links"></a>

Le vérificateur de liens rompus collecte tous les liens à l'intérieur de l'URL que vous testez en utilisant `document.getElementsByTagName('a')`. Il teste uniquement le nombre de liens que vous spécifiez et l'URL elle-même est considérée comme le premier lien. Par exemple, si vous voulez vérifier tous les liens d'une page qui en contient cinq, vous devez spécifier que le script Canary doit suivre six liens.

Les scripts Canary du vérificateur de liens rompus créés à l'aide de l'exécution `syn-nodejs-2.0-beta` ou version ultérieure prennent en charge les fonctions supplémentaires suivantes :
+ Fourniture d'un rapport qui inclut les liens qui ont été vérifiés, le code d'état, la raison de l'échec (le cas échéant) et les captures d'écran des pages source et de destination.
+ Lors de l'affichage des résultats de scripts Canary, vous pouvez utiliser un filtre pour afficher uniquement les liens rompus, puis réparer ces liens en fonction de la raison de l'échec.
+ Cette version effectue pour chaque lien des captures d'écran annotées de la page source et met en surbrillance l'ancre où le lien a été trouvé. Les composants masqués ne sont pas annotés.
+ Vous pouvez configurer cette version pour effectuer des captures d'écran des pages source et de destination, des pages source uniquement ou des pages de destination uniquement.
+ Cette version résout un problème dans la version précédente qui provoquait l'arrêt du script Canary après le premier lien rompu, même lorsque d'autres liens sont récupérés à partir de la première page.

**Note**  
Les plans de vérification de liens brisés ne sont pas pris en charge par les exécutions Playwright.

Pour mettre à jour un script Canary existant à l’aide de `syn-1.0` afin d’utiliser une nouvelle exécution, vous devez supprimer le script Canary existant et en créer un nouveau. La mise à jour d'un script Canary existant vers la nouvelle exécution ne rend pas ces fonctions disponibles.

Un script Canary de vérification des liens rompus détecte les types d'erreurs de liens suivants :
+ 404 Page introuvable
+ Nom d'hôte non valide
+ URL incorrecte. Par exemple, il manque un crochet dans l'URL, elle a des barres obliques supplémentaires ou elle utilise le mauvais protocole.
+ Code de réponse HTTP non valide.
+ Le serveur hôte renvoie des réponses vides sans contenu ni code de réponse.
+ Les requêtes HTTP expirent constamment pendant l'exécution du script Canary.
+ L'hôte coupe systématiquement les connexions parce qu'il est mal configuré ou trop occupé.

## Modèle de surveillance visuelle
<a name="CloudWatch_Synthetics_Canaries_Blueprints_VisualTesting"></a>

Le modèle de surveillance visuelle inclut un code permettant de comparer les captures d'écran prises lors de l'exécution d'un script Canary aux captures d'écran prises lors de l'exécution d'un script Canary de référence. Si l'écart entre les deux captures d'écran dépasse un pourcentage de seuil, le script Canary échoue. La surveillance visuelle est prise en charge dans les canaris utilisant **syn-puppeteer-node-3.2 et versions ultérieures**. Cette fonctionnalité n’est actuellement pas prise en charge pour les scripts Canary utilisant Python et Selenium, ni pour ceux utilisant l’exécution Playwright.

Le modèle de surveillance visuelle inclut la ligne de code suivante dans le script Canary de modèle par défaut, cette ligne activant la surveillance visuelle.

```
syntheticsConfiguration.withVisualCompareWithBaseRun(true);
```

La première fois que le script Canary s'exécute avec succès après l'ajout de cette ligne au script, il utilise les captures d'écran prises au cours de cette exécution comme référence pour les comparaisons. Après cette première exécution de Canary, vous pouvez utiliser la CloudWatch console pour modifier le Canary afin d'effectuer l'une des opérations suivantes :
+ Définir la prochaine exécution du script Canary comme nouvelle référence.
+ Dessiner des limites sur la capture d'écran de référence actuelle pour désigner les zones de la capture d'écran à ignorer lors des comparaisons visuelles.
+ Empêcher une capture d'écran d'être utilisée pour la surveillance visuelle.

Pour plus d'informations sur l'utilisation de la CloudWatch console pour modifier un canari, consultez[Modification ou suppression d'un canary](synthetics_canaries_deletion.md).

Vous pouvez également modifier le canary run utilisé comme référence en utilisant les `lastrun` paramètres ` nextrun` or ou en spécifiant un identifiant Canary Run dans l'[UpdateCanary](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_UpdateCanary.html)API.

Lorsque vous utilisez le modèle de surveillance visuelle, vous saisissez l'URL à laquelle vous souhaitez effectuer la capture d'écran et vous spécifiez un seuil de différence sous forme de pourcentage. Après l'exécution de référence, les futures exécutions du script Canary qui détectent une différence visuelle supérieure à ce seuil déclenchent un échec du script Canary. Après l'exécution de référence, vous pouvez également modifier le script Canary pour « dessiner » des limites sur la capture d'écran de référence afin d'ignorer des zones pendant la surveillance visuelle.

La fonction de surveillance visuelle est alimentée par la boîte à outils logicielle ImageMagick open source. Pour plus d'informations, consultez [ ImageMagick](https://imagemagick.org/index.php).

## Enregistreur de scripts Canary
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Recorder"></a>

Avec le plan Canary Recorder, vous pouvez utiliser le CloudWatch Synthetics Recorder pour enregistrer vos actions de clic et de saisie sur un site Web et générer automatiquement un script Node.js qui peut être utilisé pour créer un Canary suivant les mêmes étapes. Le CloudWatch Synthetics Recorder est une extension Google Chrome fournie par Amazon. L’enregistreur Canary n’est pas pris en charge pour les scripts Canary utilisant l’exécution Playwright.

**Crédits** [: The CloudWatch Synthetics Recorder est basé sur l'enregistreur Headless.](https://github.com/checkly/headless-recorder)

Pour de plus amples informations, veuillez consulter [Utilisation de l' CloudWatch enregistreur Synthetics pour Google Chrome](CloudWatch_Synthetics_Canaries_Recorder.md).

## Générateur de flux de travail GUI
<a name="CloudWatch_Synthetics_Canaries_Blueprints_GUI_Workflow"></a>

Le modèle de générateur de flux de travail GUI vérifie que des actions peuvent être effectuées sur votre page web. Par exemple, si vous avez une page web avec un formulaire de connexion, le script Canary peut remplir les champs utilisateur et mot de passe et envoyer le formulaire pour vérifier le bon fonctionnement de la page web.

Lorsque vous utilisez un modèle pour créer ce type de script Canary, vous spécifiez les actions que ce dernier doit effectuer sur la page web. Les actions que vous pouvez utiliser sont les suivantes :
+ **Click (Cliquer)** : sélectionne l'élément que vous spécifiez et simule un utilisateur qui clique sur l'élément ou le choisit.

  Pour spécifier l'élément dans un script Node.js, utilisez `[id=]` ou ` a[class=]`.

  Pour spécifier l'élément dans un script Python, utilisez `xpath //*[@id=]` ou ` //*[@class=]`.
+ **Verify selector (Vérifier le sélecteur)** : vérifie que l'élément spécifié existe sur la page web. Ce test est utile pour vérifier qu'une action précédente a conduit les éléments corrects à remplir la page.

  Pour spécifier l'élément à vérifier dans un script Node.js, utilisez `[id=]` ou ` a[class=]`.

  Pour spécifier l'élément à vérifier dans un script Python, utilisez `xpath //*[@id=]` ou `//*[class=]`.
+ **Verify text (Vérifier le texte)** : vérifie que la chaîne spécifiée est contenue dans l'élément cible. Ce test est utile pour vérifier qu'une action précédente a provoqué l'affichage du bon texte.

  Pour spécifier l'élément dans un script Node.js, utilisez un format tel que ` div[@id=]//h1`, parce que cette action utilise la fonction `waitForXPath` dans Puppeteer.

  Pour spécifier l'élément dans un script Python, utilisez un format xpath tel que` //*[@id=] ` ou //\$1[@class=], parce que cette action utilise la fonction `implicitly_wait` dans Selenium.
+ **Input text (Saisir du texte)** : écrit le texte spécifié dans l'élément cible.

  Pour spécifier l'élément à vérifier dans un script Node.js, utilisez `[id=]` ou ` a[class=]`.

  Pour spécifier l'élément à vérifier dans un script Python, utilisez `xpath //*[@id=]` ou `//*[@class=]`.
+ **Click with navigation (Cliquer avec la navigation)** : attend que la page soit entièrement chargée après avoir choisi l'élément spécifié. Cela s'avère très utile lorsque vous devez recharger la page.

  Pour spécifier l'élément dans un script Node.js, utilisez `[id=]` ou ` a[class=]`.

  Pour spécifier l'élément dans un script Python, utilisez `xpath //*[@id=]` ou ` //*[@class=]`.

Par exemple, le modèle suivant utilise Node.js. Il clique sur le **firstButton** dans l'URL spécifiée, il vérifie que le sélecteur attendu s'affiche avec le texte attendu, il saisit le nom `Test_Customer` dans le champ **Name** (Nom), il clique sur le bouton **Login** (Connexion) et il vérifie ensuite que la connexion a réussi en recherchant le texte **Welcome** (Bienvenue) sur la page suivante.

![\[Page de création d'un script Canary dans la console, avec des champs remplis pour le modèle de flux de travail GUI.\]](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/images/canary_create_gui_workflow.PNG)


Les scripts Canary du flux de travail GUI qui utilisent les exécutions suivantes fournissent également un résumé des étapes exécutées pour chaque exécution de script Canary. Vous pouvez utiliser les captures d'écran et le message d'erreur associés à chaque étape pour trouver la cause racine de l'échec.
+ `syn-nodejs-2.0` ou version ultérieure
+ `syn-python-selenium-1.0` ou version ultérieure

## Plan multi-chèques
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Multichecks_Blueprint"></a>

Le plan Multi check simplifie la création de canaris. Il réduit les coûts en utilisant une configuration JSON simple qui fournit des out-of-the-box fonctionnalités permettant d'effectuer des vérifications HTTP, DNS, SSL et TCP. Vous pouvez configurer jusqu'à 10 contrôles. Configurez chaque vérification comme une étape numérique exécutée de manière séquentielle, afin de permettre une compréhension claire du Canary Flow.

Les plans à vérifications multiples sont compatibles avec :
+ Requêtes HTTP de base, requêtes TCP, validation des enregistrements DNS et surveillance des certificats SSL
+ Méthodes d'authentification HTTP telles que Basic, API Key et Sigv4 intégrées à Secrets Manager OAuth
+ Assertions pour chaque vérification

Pour de plus amples informations, veuillez consulter [Création d'un Canary](CloudWatch_Synthetics_Canaries_Create.md).

# Création d'un canari à plusieurs vérifications
<a name="CloudWatch_Synthetics_Canaries_MultiCheck_Blueprint"></a>

Le plan multi-contrôles Amazon CloudWatch Synthetics vous aide à créer un canari Synthetics en fournissant une configuration JSON simple. Vous pouvez réduire les coûts en regroupant jusqu'à 10 types de HTTP/DNS/SSL/TCP chèques différents de manière séquentielle par étapes. Chaque vérification inclut des assertions qui fournissent une vérification de base par rapport à un résultat de vérification.

Les canaris à vérifications multiples sont conçus pour des cas d'utilisation simples qui ne nécessitent que des vérifications de base, sans navigateur headless. Pour des cas d'utilisation plus complexes, consultez les autres types de canaris proposés par Amazon CloudWatch Synthetics.

**Topics**
+ [Conditions préalables](#CloudWatch_Synthetics_MultiCheck_Prerequisites)
+ [Limitations](#CloudWatch_Synthetics_MultiCheck_Limitations)
+ [Structure d'emballage, schéma JSON et paramètres de configuration](#CloudWatch_Synthetics_MultiCheck_Packaging)
+ [Création d'un canari à vérifications multiples dans AWS Management Console](#CloudWatch_Synthetics_MultiCheck_Console)
+ [Création d'un canari à contrôles multiples à l'aide de AWS Synthetics APIs](#CloudWatch_Synthetics_MultiCheck_API)
+ [Création d'un canari à vérifications multiples dans CloudFormation](#CloudWatch_Synthetics_MultiCheck_CloudFormation)
+ [Configuration de l’authentification](#CloudWatch_Synthetics_MultiCheck_Authentication)
+ [Résolution des problèmes](#CloudWatch_Synthetics_MultiCheck_Troubleshooting)

## Conditions préalables
<a name="CloudWatch_Synthetics_MultiCheck_Prerequisites"></a>
+ Vous devez utiliser syn-nodejs-3.0\$1 pour créer un canari à vérifications multiples
+ Lorsque vous utilisez la configuration d'Authentication and Secrets Manager, vous devez vous assurer que Canary [ ExecutionRoleArn](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_CreateCanary.html)autorise l'accès à ces secrets
+ Lorsque vous utilisez l'authentification pour Sigv4, vous devez vous assurer que le Canary [ ExecutionRoleArn](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_CreateCanary.html)autorise les autorisations d'accès au rôle correspondant

## Limitations
<a name="CloudWatch_Synthetics_MultiCheck_Limitations"></a>
+ La taille des réponses HTTP ne peut pas dépasser 1 Mo
+ Maximum de 10 variables définies.
+ Lors de l'utilisation de la RFC JSON, le Checks JSON peut contenir des champs dupliqués, mais seul le dernier champ séquentiel sera utilisé.
+ Dans le AWS Management Console, un canari à vérifications multiples affichera par défaut les mesures relatives aux étapes de vérification multiples afin d'identifier facilement la disponibilité de chaque vérification. Lorsque les chèques sont supprimés, ce graphique peut toujours afficher les contrôles dans le graphique de disponibilité jusqu'à ce que la métrique cesse d'être active pendant au moins 3 heures

## Structure d'emballage, schéma JSON et paramètres de configuration
<a name="CloudWatch_Synthetics_MultiCheck_Packaging"></a>

La configuration JSON Checks qui sera utilisée pour le canary doit être nommée` blueprint-config.json`. La configuration doit suivre le [schéma](https://github.com/aws-samples/synthetics-canary-local-debugging-sample/tree/main) et suivre les instructions ci-dessous[Écrire une configuration JSON pour le plan Node.js Multi Checks](CloudWatch_Synthetics_WritingCanary_Multichecks.md).

Compressez-le `blueprint-config.json` dans un fichier ZIP et insérez-le dans l'un des flux de travail de création suivants. Lorsqu'il existe une `synthetics.json` configuration, elle est également compressée dans le même fichier ZIP. Voici un exemple de fichier zip appelé`multi-checks.zip`.

```
multi-checks.zip
├── blueprint-config.json
└── synthetics.json
```

## Création d'un canari à vérifications multiples dans AWS Management Console
<a name="CloudWatch_Synthetics_MultiCheck_Console"></a>

1. Ouvrez la console Amazon CloudWatch Synthetics.

1. Choisissez **Create Canary** (Créer un script Canary).

1. Sous **Utiliser un plan**, choisissez **plusieurs vérifications**.

   Sous **Configurer les vérifications**, vous verrez deux onglets, **Checks** et **Configuration Canary**.

1. Sélectionnez la version d'exécution **syn-nodejs-3.0** ou ultérieure.

1. Suivez la procédure ci-dessous [Écrire une configuration JSON pour le plan Node.js Multi Checks](CloudWatch_Synthetics_WritingCanary_Multichecks.md) pour décrire la vérification que vous souhaitez effectuer. La console vous fournit également une configuration JSON par défaut sur laquelle vous pouvez vous appuyer.

1. Choisissez **Create Canary** (Créer un script Canary).

## Création d'un canari à contrôles multiples à l'aide de AWS Synthetics APIs
<a name="CloudWatch_Synthetics_MultiCheck_API"></a>

Utilisez l'`CreateCanary`API et, dans le `Code` paramètre, indiquez le field/value `BlueprintTypes="multi-checks"` au lieu de` Handler`. Lorsque les deux `BlueprintTypes` et `Handler` sont spécifiés, un `ValidationException` est affiché. La version d'exécution fournie doit être `syn-nodejs-3.0` ou ultérieure.

```
aws synthetics create-canary \
    --name my-multi-check-canary \
    --code ZipFile="ZIP_BLOB",BlueprintTypes="multi-checks" \
    --runtime-version syn-nodejs-3.0 \
    ...

// Or if you wanted to use S3 to provide your code.

aws synthetics create-canary \
    --name my-multi-check-canary \
    --code S3Bucket="my-code-bucket",S3Key="my-zip-code-key",BlueprintTypes="multi-checks" \
    ...
```

## Création d'un canari à vérifications multiples dans CloudFormation
<a name="CloudWatch_Synthetics_MultiCheck_CloudFormation"></a>

Dans votre CloudFormation modèle pour un canari à vérifications multiples, dans le `Code` paramètre, indiquez le field/value `BlueprintTypes="multi-checks"` au lieu de` Handler`. Lorsque les deux `BlueprintTypes` et `Handler` sont spécifiés, un `ValidationException` est affiché. La version d'exécution fournie doit être`syn-nodejs-3.0 or later`. 

Exemple de modèle :

```
SyntheticsCanary:
    Type: 'AWS::Synthetics::Canary'
    Properties:
      Name: MyCanary
      RuntimeVersion: syn-nodejs-3.0
      Schedule: {Expression: 'rate(5 minutes)', DurationInSeconds: 3600}
      ...
      Code:
        S3Bucket: "my-code-bucket"
        S3Key: "my-zip-code-key"
        BlueprintTypes: ["multi-checks"]
      ...
```

## Configuration de l’authentification
<a name="CloudWatch_Synthetics_MultiCheck_Authentication"></a>

Lorsque votre Canary envoie des requêtes HTTP à un point de terminaison authentifié, vous pouvez configurer les étapes de votre Blueprint Canary pour utiliser l'un des quatre types d'authentification suivants : Basic, API Key, OAuth Client Credentials et SigV4. Plutôt que de configurer vous-même les en-têtes de demande, vous pouvez spécifier un type d'authentification dans la définition de votre plan, et Synthetics suit le type d'authentification spécifié pour renseigner les composants de votre requête HTTP avec les informations d'authentification fournies.

Vous spécifiez un type d'authentification dans l'étape de votre plan dans la section Authentification. Vous spécifiez le schéma d'authentification que vous souhaitez utiliser, les propriétés requises pour le schéma d'authentification que vous avez choisi, et Synthetics utilise les informations fournies pour créer un en-tête d'authentification pour votre requête HTTP.

Étant donné que le stockage de secrets (tels que des mots de passe ou des clés d'API) en texte brut constitue un problème de sécurité, Synthetics prend en charge l'intégration avec. AWS Secrets Manager Lorsque vous souhaitez authentifier une requête HTTP dans un canari de plans Synthetics, vous pouvez vous référer au secret qui stocke vos informations d'authentification. Synthetics se charge de récupérer le secret et de le mettre en cache dans votre canari. Cette approche fournit des secrets à Synthetics tout en les stockant en toute sécurité, sans les spécifier en texte brut dans la configuration de votre plan.

Pour plus d'informations AWS Secrets Manager, voir [Qu'est-ce que c'est AWS Secrets Manager ?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)

### Authentification basique
<a name="CloudWatch_Synthetics_MultiCheck_BasicAuth"></a>

Synthetics implémente le schéma d'authentification HTTP de base défini dans la RFC 7617. Le processus fonctionne comme suit :
+ Une paire de nom d'utilisateur et de mot de passe est fournie à partir de la configuration du plan.
+ Le mot de passe utilisateur est créé en concaténant le nom d'utilisateur, un caractère deux-points (« : ») et le mot de passe.
+ Le passe utilisateur est codé en UTF-8, puis converti en une chaîne codée en base64.
+ Ce pass utilisateur codé en base64 est fourni dans l'en-tête « Authorization » au format suivant : Authorization : Basic \$1base64-\$1 encoded-user-pass

Par exemple, si l'agent utilisateur souhaite envoyer le nom d'utilisateur « Aladdin » et le mot de passe « open sesame », il utilise le champ d'en-tête suivant : Authorization : Basic FTzQ== QWxh ZGRpbjpvc GVu IHNlc2

Exemple de configuration :

```
"Authentication": {
    "type": "BASIC",
    "username": MY_USERNAME, // Required
    "password": MY_PASSWORD // Required
}
```

### Authentification par clé d'API
<a name="CloudWatch_Synthetics_MultiCheck_APIKeyAuth"></a>

Vous pouvez fournir une clé d'API pour authentifier vos requêtes HTTP. Lorsque vous utilisez l'authentification par clé d'API, la clé d'API que vous avez fournie est placée dans l'en-tête HTTP « X-api-key ». Si vous avez une ressource personnalisée qui recherche des en-têtes de clé d'API dans un en-tête autre que celui-ci, vous pouvez éventuellement spécifier un autre nom d'en-tête dans lequel Synthetics insère la clé d'API.

Exemple de configuration :

```
"Authentication": {
    "type": "API_KEY",
    "apiKey": S0A1M2P3L4E5, // Required
    "header": X-Specific-Header // Optional, defaults to "X-API-Key"
}
```

### Authentification SigV4
<a name="CloudWatch_Synthetics_MultiCheck_SigV4Auth"></a>

AWS SigV4 (Signature Version 4) est le protocole de AWS signature permettant d'ajouter des informations d'authentification aux demandes d' AWS API. Pour effectuer une demande authentifiée SIGv4, vous devez spécifier la région et le service auxquels vous envoyez des demandes, ainsi qu'un ARN (nom de AWS ressource) identifiant le rôle IAM que vous souhaitez que le canari assume lors de cette demande Sigv4. Synthetics assume le rôle IAM fourni dans le ROLearn et l'utilise pour authentifier votre demande d'API. AWS 

Exemple de configuration :

```
"Authentication": {
    "type": "SIGV4",
    "region": us-west-2, // Required
    "service": s3, // Required
    "roleArn": arn:AWS:iam:12345678912:role/SampleRole // Required
}
```

#### Considérations relatives au SigV4
<a name="CloudWatch_Synthetics_MultiCheck_SigV4Considerations"></a>

Pour que Synthetics assume le rôle que vous avez indiqué dans la section d'authentification SigV4, la politique de confiance associée à ce rôle doit être configurée pour permettre au Canary d'assumer le ROLearn fourni. Le AWS principe auquel vous devez faire confiance est le rôle que votre canari a assumé AWS STS. Il prend le format ` aws:sts::{account_running_the_canary}:assumed-role/<canary_name>/<assumed_role_name>` arn :.

Par exemple, si un canari s'exécute sur le compte 0123456789012, nommé test-canary, et que le rôle qu'il a assumé a été nommé canary-assume-role, la politique de confiance doit inclure cette déclaration pour que le canari assume correctement l'authentification ROLearn for SIGv4 :

```
{
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:AWS:sts::123456789012:assumed-role/test-canary/"
    },
    "Action": "sts:AssumeRole"
}
```

### OAuth informations d'identification du client
<a name="CloudWatch_Synthetics_MultiCheck_OAuthAuth"></a>

Synthetics implémente le type d'autorisation des informations d'identification OAuth du client tel que défini dans la section 4.4 de la RFC 6479. Si vous souhaitez envoyer une requête HTTP à un point de terminaison authentifié à l'aide d'un jeton porteur émis par un point de terminaison de OAuth jeton, Synthetics peut demander et gérer un jeton porteur en votre nom. Lorsque vous utilisez le OAuth schéma, Synthetics exécute les étapes suivantes :
+ Utilise le schéma d'authentification de base avec ClientID et ClientSecret pour authentifier une demande auprès du TokenURL, le point de terminaison qui émet les jetons porteurs
+ Si vous fournissez les paramètres optionnels de portée, d'audience et de ressource, ils sont inclus dans la demande de jeton
+ Utilise le jeton d'accès renvoyé par le tokenURL pour authentifier votre requête HTTP
+ Stocke en toute sécurité le jeton d'actualisation renvoyé par le tokenURL pour les futures demandes de jetons

Exemple de configuration :

```
"Authentication": {
    "type": "OAUTH_CLIENT_CREDENTIALS",
    "tokenUrl": ..., // Required
    "clientId": ..., // Required
    "clientSecret": ..., // Required
    "scope": ..., // Optional
    "audience": ..., // Optional
    "resource": ..., // Optional
}
```

#### OAuth considérations
<a name="CloudWatch_Synthetics_MultiCheck_OAuthConsiderations"></a>

Synthetics OAuth actualise les jetons lorsqu'une réponse 401 ou 407 est renvoyée.

### AWS Secrets Manager intégration
<a name="CloudWatch_Synthetics_MultiCheck_SecretsManager"></a>

Pour éviter de stocker des valeurs secrètes (telles que des mots de passe ou des clés d'API) en texte brut, Synthetics propose une intégration avec. AWS Secrets Manager Vous pouvez référencer une valeur secrète complète dans la configuration de votre plan à l'aide du format ` ${aws_SECRET:<secret_name>}` ou pour faire référence à une clé ` ${aws_SECRET:<secret_name>:<secret_key>}` particulière.

Par exemple, si vous avez un secret nommé login/basic-auth-credentials, vous stockez un nom d'utilisateur et un mot de passe avec la structure JSON suivante :

```
{
    "username": "Aladdin",
    "password": "open sesame"
}
```

Vous pouvez référencer le nom d'utilisateur et le mot de passe dans la configuration de votre plan comme suit, et Synthetics se charge de récupérer la valeur secrète et d'utiliser ses clés pour authentifier votre demande :

```
"Authentication": {
    "type": "BASIC",
    "username": ${AWS_SECRET:login/basic-auth-credentials:username},
    "password": ${AWS_SECRET:login/basic-auth-credentials:password}
}
```

Pour permettre à Synthetics de récupérer le secret spécifié, le rôle ARN assumé par le canari doit disposer des autorisations SecretsManager :. GetSecretValue Si le secret est chiffré à l'aide d'une clé gérée par le client au lieu de la clé AWS gérée AWS/secretsmanager, vous devez également disposer des autorisations de kms: déchiffrement pour cette clé.

Exemples d'autorisations :

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "secretsmanager:GetSecretValue",
            "Resource": "arn:AWS:secretsmanager:us-east-1:123456789012:secret:secretName-AbCdEf"
        },
        {
            "Effect": "Allow",
            "Action": "kms:Decrypt",
            "Resource": "arn:AWS:kms:us-east-1:123456789012:key/key-id"
        }
    ]
}
```

## Résolution des problèmes
<a name="CloudWatch_Synthetics_MultiCheck_Troubleshooting"></a>

### Défaillances de dépannage courantes
<a name="CloudWatch_Synthetics_MultiCheck_Common_Failures"></a>

Le code sous-jacent du plan à vérifications multiples est écrit en Typescript. Consultez la page de résolution des problèmes courants de Canary : [Résolution des problèmes liés à un Canary défaillant](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Troubleshoot.html).

### Erreurs de syntaxe de configuration de vérification JSON
<a name="CloudWatch_Synthetics_MultiCheck_JSON_Errors"></a>

En cas d'erreurs syntaxiques liées à la configuration de vérification JSON du canari, vous AWS Management Console indiquerez la raison de l'échec lorsque vous tenterez de créer le canari. Si vous créez un canari à l'aide d'une API CloudFormation, vous constaterez l'échec lorsque le canari sera exécuté pour la première fois. Il est recommandé d'utiliser le flux de travail sécurisé de Canary Updates pour Multi Check Canary. Pour plus d'informations, voir [Exécution de mises à jour sécurisées de Canary](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/performing-safe-canary-upgrades.html).

### Défaillances de mise en réseau ou de temporisation
<a name="CloudWatch_Synthetics_MultiCheck_Network_Failures"></a>

En cas de défaillance intermittente ou constante liée à des délais d'expiration ou à des défaillances de connexion réseau (par exemple, ENOTFOUND, ECONNRESET), envisagez d'activer les ` DEBUG` journaux afin que l'exécution suivante fournisse plus de détails supplémentaires sur les raisons de l'échec des vérifications. Pour ce faire, fournissez la variable d'environnement CW\$1SYNTHETICS\$1LOG\$1LEVEL : « DEBUG ».

Si vous ne parvenez toujours pas à corriger des défaillances, pensez à contacter le AWS Support ou à vérifier si l'un des autres types de Canary fournis par CloudWatch Synthetics correspond mieux à votre cas d'utilisation.

# Utilisation de l' CloudWatch enregistreur Synthetics pour Google Chrome
<a name="CloudWatch_Synthetics_Canaries_Recorder"></a>

Amazon fournit un enregistreur de CloudWatch synthetics pour vous aider à créer des canaris plus facilement. L'enregistreur est une extension Google Chrome.

L'enregistreur enregistre vos actions de clic et de saisie sur un site web et génère automatiquement un script Node.js qui peut être utilisé pour créer un script Canary qui suit les mêmes étapes.

Une fois que vous avez commencé à enregistrer, le CloudWatch Synthetics Recorder détecte vos actions dans le navigateur et les convertit en script. Si nécessaire, vous pouvez mettre en pause et reprendre l'enregistrement. Lorsque vous arrêtez l'enregistrement, l'enregistreur produit un script Node.js de vos actions, que vous pouvez facilement copier avec le bouton **Copy to Clipboard (Copier dans le presse-papier)**. Vous pouvez ensuite utiliser ce script pour créer un canari dans CloudWatch Synthetics. 

**Crédits** [: The CloudWatch Synthetics Recorder est basé sur l'enregistreur Headless.](https://github.com/checkly/headless-recorder)

## Installation de l' CloudWatch extension Synthetics Recorder pour Google Chrome
<a name="CloudWatch_Synthetics_Canaries_Recorder-install"></a>

Pour utiliser le CloudWatch Synthetics Recorder, vous pouvez commencer à créer un canari et choisir **le** plan Canary Recorder. Si vous le faites alors que vous n'avez pas encore téléchargé l'enregistreur, la console CloudWatch Synthetics fournit un lien pour le télécharger.

Vous pouvez également suivre ces étapes pour télécharger et installer l'enregistreur directement.

**Pour installer l'enregistreur CloudWatch Synthetics**

1. À l'aide de Google Chrome, rendez-vous sur ce site Web : [ https://chrome.google.com/webstore/detail/cloudwatch-synthetics-rec/bhdnlmmgiplmbcdmkkdfplenecpegfno](https://chrome.google.com/webstore/detail/cloudwatch-synthetics-rec/bhdnlmmgiplmbcdmkkdfplenecpegfno)

1. Choisissez **Ajouter à Chrome**, puis **Ajouter l'extension**.

## Utilisation de l' CloudWatch enregistreur Synthetics pour Google Chrome
<a name="CloudWatch_Synthetics_Canaries_Recorder-using"></a>

**Pour utiliser le CloudWatch Synthetics Recorder afin de créer un canari, vous pouvez **choisir Create** Canary dans CloudWatch la console, puis **choisir Utiliser un** plan, Canary Recorder.** Pour de plus amples informations, veuillez consulter [Création d'un Canary](CloudWatch_Synthetics_Canaries_Create.md). 

Vous pouvez également utiliser l'enregistreur pour enregistrer des étapes sans les utiliser immédiatement pour créer un script Canary.

**Pour utiliser le CloudWatch Synthetics Recorder pour enregistrer vos actions sur un site Web**

1. Accédez à la page que vous souhaitez contrôler.

1. Choisissez l'icône des extensions Chrome, puis **CloudWatchSynthetics Recorder**.

1. Choisissez **Start Recording (Démarrer l'enregistrement)**.

1. Réalisez les étapes que vous souhaitez enregistrer. Pour suspendre l'enregistrement, choisissez **Pause**.

1. Lorsque vous avez terminé d'enregistrer le flux de travail, sélectionnez **Stop recording (Arrêter l'enregistrement)**.

1. Choisissez **Copy to clipboard (Copier dans le presse-papiers)** pour copier le script généré dans votre presse-papier. Ou, si vous voulez recommencer, choisissez **New recording (Nouvel enregistrement)**.

1. Pour créer un script Canary avec le script copié, vous pouvez coller votre script copié dans l'éditeur en ligne du modèle de l'enregistreur ou l'enregistrer dans un compartiment Amazon S3 et l'importer à partir de là.

1. Si vous ne créez pas immédiatement un script Canary, vous pouvez enregistrer votre script enregistré dans un fichier.

## Limites connues du CloudWatch Synthetics Recorder
<a name="CloudWatch_Synthetics_Canaries_Recorder-limitations"></a>

L' CloudWatch enregistreur Synthetics pour Google Chrome présente actuellement les limites suivantes.
+ Les éléments HTML qui n'en ont pas IDs utiliseront des sélecteurs CSS. Cela peut interrompre les scripts Canary si la structure de la page web change plus tard. Nous prévoyons de fournir certaines options de configuration (comme l'utilisation de data-id) pour cette limitation dans une future version de l'enregistreur. 
+ L'enregistreur ne prend pas en charge les actions telles que le double-clic ou le copier/coller, et il ne prend pas en charge les combinaisons de touches telles que CMD\$10. 
+ Pour vérifier la présence d'un élément ou d'un texte sur la page, les utilisateurs doivent ajouter des assertions une fois le script généré. L'enregistreur ne prend pas en charge la vérification d'un élément sans effectuer d'action sur cet élément. Ceci est semblable aux options « Verify text (Vérifier le texte) » ou « Verify element (Vérifier l'élément) » dans le générateur de flux de travail de script Canary. Nous prévoyons d'ajouter la prise en charge de quelques assertions dans une future version de l'enregistreur. 
+ L'enregistreur enregistre toutes les actions dans l'onglet où l'enregistrement est lancé. Il n'enregistre pas les fenêtres contextuelles (par exemple, pour permettre le suivi de l'emplacement) ou la navigation vers différentes pages à partir de fenêtres contextuelles. 

# Versions d'exécution Synthetics
<a name="CloudWatch_Synthetics_Canaries_Library"></a>

Lorsque vous créez ou mettez à jour un script Canary, vous choisissez une version d'environnement d'exécution Synthetics pour le script Canary. Une exécution Synthetics est une combinaison du code Synthetics qui appelle votre gestionnaire de scripts et des couches Lambda de dépendances groupées.

CloudWatch Synthetics prend actuellement en charge les environnements d'exécution qui utilisent les langages Node.js, Python ou Java. Les cadriciels pris en charge sont Puppeteer, Playwright et Selenium.

Nous vous recommandons de toujours utiliser la version d'environnement d'exécution la plus récente pour vos scripts Canary, afin de pouvoir utiliser les dernières fonctionnalités et mises à jour apportées à la bibliothèque Synthetics.

**Remarque** : chaque fois que vous lancez un canary pour utiliser la nouvelle version du moteur d'exécution Synthetics, toutes les fonctions de la bibliothèque Synthetics utilisées par votre canary sont également automatiquement déplacées vers la même version de NodeJS prise en charge par le moteur d'exécution Synthetics.

**Topics**
+ [Versions d’exécution utilisant Java](CloudWatch_Synthetics_Library_Java.md)
+ [Versions d’exécution utilisant Node.js et Playwright](CloudWatch_Synthetics_Library_nodejs_playwright.md)
+ [Versions d'exécution utilisant Node.js et Puppeteer](CloudWatch_Synthetics_Library_nodejs_puppeteer.md)
+ [Versions d'exécution utilisant Python et Selenium Webdriver](CloudWatch_Synthetics_Library_python_selenium.md)
+ [Versions d'exécution utilisant Node.js](CloudWatch_Synthetics_Library_Nodejs.md)
+ [Politique de prise en charge des versions d'exécution](CloudWatch_Synthetics_Runtime_Support_Policy.md)
+ [Mise à jour des versions d'exécution](CloudWatch_Synthetics_Runtime_Version_Update.md)

# Versions d’exécution utilisant Java
<a name="CloudWatch_Synthetics_Library_Java"></a>

La section suivante contient des informations sur les CloudWatch versions d'exécution de Synthetics pour Java. Cette exécution ne comprend aucun navigateur ni cadre.

La convention de dénomination pour ces versions d'exécution est `syn-language -majorversion.minorversion`. 

## syn-java-1.0
<a name="Synthetics_runtimeversion-syn-java-1.0"></a>

**Dépendances principales** :
+ AWS Lambda exécution Java 21

 **Fonctions** 
+ *CloudWatch Intégration des journaux* : vous pouvez interroger et filtrer les journaux via la console CloudWatch Synthetics. Chaque message de journal contient un ` canaryRunId` unique, ce qui facilite la recherche des journaux associés à une exécution particulière du script Canary.
+ *Métriques* — Vous pouvez surveiller le pourcentage de réussite et la durée de Canary Run grâce à CloudWatch des métriques. Vous pouvez également configurer des alarmes pour être averti lorsqu’un script Canary détecte des anomalies.
+ *Artefacts Canary* : chaque exécution du script Canary génère un rapport détaillé contenant les informations sur le déroulement de l’exécution et les différentes étapes, accessible via Amazon S3.
+ *Prise en charge des suivis* : vous pouvez émettre des suivis pour toutes les requêtes effectuées par le script Canary via X-Ray. Chaque exécution du script Canary est associée à un identifiant de suivi unique.

# Versions d’exécution utilisant Node.js et Playwright
<a name="CloudWatch_Synthetics_Library_nodejs_playwright"></a>

Les sections suivantes contiennent des informations sur les CloudWatch versions d'exécution de Synthetics pour Node.js et Playwright. Playwright est une bibliothèque d’automatisation open source utilisée pour les tests de navigateur. [Pour plus d'informations sur Playwright, consultez https://playwright.dev/](https://playwright.dev) 

La convention de dénomination pour ces versions d'exécution est `syn-language -framework-majorversion. minorversion`. 

## syn-nodejs-playwright-6,0
<a name="Synthetics_runtimeversion-syn-nodejs-playwright-6.0"></a>

**Important**  
À partir de `syn-nodejs-playwright-5.1` Synthetics et des versions ultérieures, le runtime Synthetics utilise le nouvel espace de noms. Veuillez migrer le script Canary pour utiliser le nouvel espace de noms. L'ancien espace de noms sera obsolète dans une future version.  
@ amzn/synthetics-playwright → @aws/synthetics -dramaturge

**Dépendances principales** :
+ AWS Lambda exécution Node.js 22.x
+ Version du dramaturge 1.58.2
+ Playwright/version d'essai 1.58.2
+ Version 145.0.7632.77 de Chrome
+ Version 146.0.1 de Firefox

 **Modifications apportées à la version syn-nodejs-playwright -6.0** 
+ Correctifs de sécurité appliqués et mises à jour des versions de Playwright et du navigateur. 

Pour plus d’informations, consultez les ressources suivantes :
+  [Journal des modifications de Playwright](https://playwright.dev/docs/release-notes) 
+  [Référence de l’API Playwright](https://playwright.dev/docs/api/class-playwright) 

## Versions d’exécution précédentes pour Node.js et Playwright
<a name="Previousversions-nodejs-playwright"></a>

Les versions précédentes des environnements d’exécution CloudWatch Synthetics pour Node.js et Playwright restent prises en charge. 

### syn-nodejs-playwright-5,1
<a name="Synthetics_runtimeversion-syn-nodejs-playwright-5.1"></a>

**Dépendances principales** :
+ AWS Lambda exécution Node.js 22.x
+ Version du dramaturge 1.57.0
+ Playwright/version d'essai 1.57.0
+ Version 143.0.7499.169 de Chrome
+ Version 142.0.1 de Firefox

 **Modifications apportées à syn-nodejs-playwright -5.1** 
+ Migration de l'espace de noms Synthetics Runtime. 
+ La définition du type est disponible dans le [registre npm](https://www.npmjs.com/package/@aws/synthetics-playwright). Assurez-vous que la version du package de définition de type correspond à la version d'exécution de votre Canary.

Pour plus d’informations, consultez les ressources suivantes :
+  [Journal des modifications de Playwright](https://playwright.dev/docs/release-notes) 
+  [Référence de l’API Playwright](https://playwright.dev/docs/api/class-playwright) 

### syn-nodejs-playwright-5,0
<a name="Synthetics_runtimeversion-syn-nodejs-playwright-5.0"></a>

**Dépendances principales** :
+ AWS Lambda exécution Node.js 22.x
+ Version du dramaturge 1.57.0
+ Playwright/version d'essai 1.57.0
+ Version 143.0.7499.4 de Chrome
+ Version 142.0.1 de Firefox

 **Modifications apportées à la version syn-nodejs-playwright -5.0** 
+ Correctifs de sécurité appliqués et mises à jour des versions de Playwright et du navigateur. 

Pour plus d’informations, consultez les ressources suivantes :
+  [Journal des modifications de Playwright](https://playwright.dev/docs/release-notes) 
+  [Référence de l’API Playwright](https://playwright.dev/docs/api/class-playwright) 

### syn-nodejs-playwright-4,0
<a name="Synthetics_runtimeversion-syn-nodejs-playwright-4.0"></a>

**Dépendances principales** :
+ AWS Lambda exécution Node.js 22.x
+ Version du dramaturge 1.55.0
+ Playwright/version d'essai 1.55.0
+ Version 140.0.7339.16 de Chrome
+ Version 141.0 de Firefox

 **Modifications apportées à syn-nodejs-playwright -4.0** 
+ Correctifs de sécurité appliqués et mises à jour des versions de Playwright et du navigateur. 

Pour plus d’informations, consultez les ressources suivantes :
+  [Journal des modifications de Playwright](https://playwright.dev/docs/release-notes) 
+  [Référence de l’API Playwright](https://playwright.dev/docs/api/class-playwright) 

### syn-nodejs-playwright-3,0
<a name="Synthetics_runtimeversion-syn-nodejs-playwright-3.0"></a>

**Dépendances principales** :
+ AWS Lambda exécution Node.js 20.x
+ Playwright : version 1.53.0
+ Playwright/test : version 1.53.0
+ Version 138.0.7204.168 de Chrome

 **Modifications apportées à la version syn-nodejs-playwright -3.0** 
+ Prise en charge multinavigateurs : vous pouvez désormais exécuter vos scripts Canary Node.js Puppeteer sur Firefox ou Chrome
+ Prise en charge de la surveillance visuelle

Pour plus d’informations, consultez les ressources suivantes :
+  [Journal des modifications de Playwright](https://playwright.dev/docs/release-notes) 
+  [Référence de l’API Playwright](https://playwright.dev/docs/api/class-playwright) 

### syn-nodejs-playwright-2,0
<a name="Synthetics_runtimeversion-syn-nodejs-playwright-2.0"></a>

**Dépendances principales** :
+ AWS Lambda exécution Node.js 20.x
+ Playwright : version 1.49.1
+ Playwright/test : version 1.49.1
+ Version 131.0.6778.264 de Chrome

 **Changements par rapport à syn-nodejs-playwright -2.0** 
+ L’écart entre la durée totale et la somme des temps individuels pour une requête donnée dans le fichier HAR a été corrigé.
+ Le système prend désormais en charge les exécutions à blanc pour les scripts Canary, ce qui permet d’effectuer des exécutions ponctuelles ou de réaliser des mises à jour sécurisées du script Canary.

Pour plus d’informations, consultez les ressources suivantes :
+  [Journal des modifications de Playwright](https://playwright.dev/docs/release-notes) 
+  [Référence de l’API Playwright](https://playwright.dev/docs/api/class-playwright) 

### syn-nodejs-playwright-1,0
<a name="Synthetics_runtimeversion-syn-nodejs-playwright-1.0"></a>

**Dépendances principales** :
+ AWS Lambda exécution Node.js 20.x
+ Playwright : version 1.44.1
+ Playwright/test : version 1.44.1
+ Version 126.0.6478.126 de Chrome

**Fonctionnalités** :
+ **PlayWright support** — Vous pouvez écrire des scripts Canary en utilisant le framework d'automatisation Playwright. Vous pouvez exécuter vos scripts Playwright existants en tant que scripts Canary et les enrichir avec des fonctions de surveillance AWS . 
+ **CloudWatch Intégration des journaux** : vous pouvez interroger et filtrer les journaux via la console CloudWatch Synthetics. Chaque message de journal contient un `canaryRunId` unique, ce qui facilite la recherche des journaux associés à une exécution particulière du script Canary. 
+ **Métriques et artefacts liés aux canaris** : vous pouvez surveiller le taux de réussite de Canary Run grâce à CloudWatch des métriques et configurer des alarmes pour vous avertir lorsque les canaris détectent des problèmes. 
+ **Captures d’écran et association aux étapes** : vous pouvez prendre des captures d’écran à l’aide des fonctions natives de Playwright afin de visualiser les différentes étapes d’un script Canary à chaque exécution. Les captures d’écran sont automatiquement associées aux étapes du script Canary et chargées dans des compartiments Amazon S3. 
+ **Plusieurs onglets** : vous pouvez créer des scripts Canary qui ouvrent plusieurs onglets de navigateur et accéder aux captures d’écran de chacun d’eux. Vous pouvez créer des flux de travail utilisateur à plusieurs onglets et étapes dans Synthetics. 

# Versions d'exécution utilisant Node.js et Puppeteer
<a name="CloudWatch_Synthetics_Library_nodejs_puppeteer"></a>

La première version d'exécution pour Node.js et Puppeteer était appelée `syn-1.0`. Les versions d'exécution ultérieures ont la convention de dénomination `syn-language -majorversion.minorversion`. Commençant par `syn-nodejs-puppeteer-3.0`, la convention de dénomination est `syn- language-framework-majorversion .minorversion` 

Un suffixe `-beta` supplémentaire indique que la version d'exécution est actuellement dans une version préliminaire bêta.

Les versions d'environnement d'exécution dotées du même numéro de version majeure sont rétrocompatibles. 

Le code Lambda dans un script Canary est configuré pour avoir une mémoire maximale de 1 Go. Chaque exécution d'un script Canary expire après un délai d'attente configuré. Si aucune valeur de délai n'est spécifiée pour un canari, CloudWatch choisit une valeur de délai d'expiration en fonction de la fréquence du canari. Si vous configurez une valeur de délai d'attente, ne dépassez pas 15 secondes pour permettre les démarrages à froid Lambda et le temps nécessaire pour démarrer l'instrumentation canary.

## syn-nodejs-puppeteer-15,0
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-15.0"></a>

`syn-nodejs-puppeteer-15.0` est la version la plus récente de l’exécution Synthetics pour Node.js et Puppeteer. 

**Important**  
À partir de `syn-nodejs-puppeteer-13.1` Synthetics et des versions ultérieures, le runtime Synthetics utilise le nouvel espace de noms. Veuillez migrer le script Canary pour utiliser de nouveaux espaces de noms. Les anciens espaces de noms seront déconseillés dans une future version.  
Synthetics → @aws /synthetics-puppeteer
SyntheticsLink → @aws /synthetics-link
SyntheticsLogger → @aws /synthetics-logger
SyntheticsLogHelper → @aws/synthetics-log-helper
BrokenLinkCheckerReport → @aws/synthetics-broken-link-checker-report

**Important**  
Synthetics `syn-nodejs-puppeteer-11.0` Runtime et les versions ultérieures ne prennent en charge que les remplacements de configuration suivants au niveau des étapes :  
 `screenshotOnStepStart` 
 `screenshotOnStepSuccess` 
 `screenshotOnStepFailure` 
 `stepSuccessMetric` 
 `stepDurationMetric` 
 `continueOnStepFailure/continueOnHttpStepFailure` 
 `stepsReport` 

Pour plus d’informations, consultez les ressources suivantes :
+  [Journal des modifications de Puppeteer](https://pptr.dev/CHANGELOG#24375-2026-02-19) 
+  [Référence de l’API Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.37.5/docs/api/index.md) 

**Dépendances principales** :
+ Runtime Lambda Node.js 22.x
+ Version 24.37.5 de Puppeteer-core
+ Version 145.0.7632.77 de Chrome
+ Version 147.0.4 de Firefox

 **Variations par rapport à syn-nodejs-puppeteer -15,0** 
+ Correctifs de sécurité appliqués et mises à jour des versions de Puppeteer et du navigateur.
+ Correction d'un bogue qui n' continueOnHttpStepFailure était pas respecté, à cause duquel les exécutions de Canary étaient incorrectement marquées comme réussies malgré les échecs des étapes HTTP.

## Versions d’exécution précédentes pour Node.js et Puppeteer
<a name="Previousversions-nodejs-puppeteer"></a>

Les versions précédentes des environnements d’exécution CloudWatch Synthetics pour Node.js et Puppeteer restent prises en charge. 

### syn-nodejs-puppeteer-14,0
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-14.0"></a>

Pour plus d’informations, consultez les ressources suivantes :
+  [Journal des modifications de Puppeteer](https://pptr.dev/CHANGELOG#24340-2025-12-19) 
+  [Référence de l’API Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.34.0/docs/api/index.md) 

**Dépendances principales** :
+ Runtime Lambda Node.js 22.x
+ Version 24.34.0 de Puppeteer-core
+ Version 143.0.7499.169 de Chrome
+ Version 14.6.x de Firefox

 **Changements en syn-nodejs-puppeteer -14,0** 
+ Correctifs de sécurité appliqués et mises à jour des versions de Puppeteer et du navigateur.

### syn-nodejs-puppeteer-13,1
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-13.1"></a>

`syn-nodejs-puppeteer-13.1` est la version la plus récente de l’exécution Synthetics pour Node.js et Puppeteer. 

Pour plus d’informations, consultez les ressources suivantes :
+  [Journal des modifications de Puppeteer](https://pptr.dev/CHANGELOG#24250-2025-10-15) 
+  [Référence de l’API Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**Dépendances principales** :
+ Runtime Lambda Node.js 22.x
+ Version 24.25.0 de Puppeteer-core
+ Version 142.0.7444.175 de Chrome
+ Version 145.x de Firefox

 **Modifications apportées à la version syn-nodejs-puppeteer -13.1** 
+ Migration de l'espace de noms Synthetics Runtime.
+ Les définitions de type sont disponibles dans le registre npm. Assurez-vous que la version du package de définition de type correspond à la version d'exécution de votre Canary.
  +  [@aws /synthetics-marionnettiste](https://www.npmjs.com/package/@aws/synthetics-puppeteer) 
  +  [@aws /synthetics-link](https://www.npmjs.com/package/@aws/synthetics-link) 
  +  [@aws/synthetics-broken-link-checker-report](https://www.npmjs.com/package/@aws/synthetics-broken-link-checker-report) 
  +  [@aws/synthetics-log-helper](https://www.npmjs.com/package/@aws/synthetics-log-helper) 
  +  [@aws /synthetics-logger](https://www.npmjs.com/package/@aws/synthetics-logger) 

### syn-nodejs-puppeteer-13,0
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-13.0"></a>

Pour plus d’informations, consultez les ressources suivantes :
+  [Journal des modifications de Puppeteer](https://pptr.dev/CHANGELOG#24250-2025-10-15) 
+  [Référence de l’API Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**Dépendances principales** :
+ Runtime Lambda Node.js 22.x
+ Version 24.25.0 de Puppeteer-core
+ Version 142.0.7444.175 de Chrome
+ Version 145.x de Firefox

 **Changements par rapport à syn-nodejs-puppeteer -13,0** 
+ Correctifs de sécurité appliqués et mises à jour des versions de Puppeteer et du navigateur.
+ Correction d'un bug — Correction d'un problème de plantage intermittent de l'extension d'exécution causé par un accès simultané aux cartes

### syn-nodejs-puppeteer-12,0
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-12.0"></a>

Pour plus d’informations, consultez les ressources suivantes :
+  [Journal des modifications de Puppeteer](https://pptr.dev/CHANGELOG#24221-2025-09-23) 
+  [Référence de l’API Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.22.1/docs/api/index.md) 

**Dépendances principales** :
+ Runtime Lambda Node.js 22.x
+ Version 24.22.1 de Puppeteer-core
+ Version 140.0.7339.185 de Chrome
+ Version 143.0.1 de Firefox

 **Changements par rapport à syn-nodejs-puppeteer -12,0** 
+ Correctifs de sécurité appliqués et mises à jour des versions de Puppeteer et du navigateur.
+ Correction d'un bogue concernant la rédaction restreinte des en-têtes — Correction d'un problème en raison duquel, dans certains cas, les en-têtes restreints n'étaient pas expurgés dans executeHttpStep (). Le comportement est désormais compatible avec Puppeteer 10.0.
+ Correction d'un bogue relatif à includeResponseBody la configuration — Correction d'un problème en raison duquel la génération de fichiers HAR pouvait mal appliquer les paramètres includeResponseBody de configuration dans certaines situations. HAR garantit désormais que les corps de réponse sont exclus lors de la configuration du paramètre.
+ Correction du cycle de vie de capture des demandes — Correction d'un problème en raison duquel, dans certaines situations, le capteur de requêtes HTTP pouvait provoquer une agrégation continue des demandes. L'enregistrement se termine désormais correctement après chaque exécution d'étape.

### syn-nodejs-puppeteer-11,0
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-11.0"></a>

Pour plus d’informations, consultez les ressources suivantes :
+  [Journal des modifications de Puppeteer](https://pptr.dev/CHANGELOG) 
+  [Référence de l’API Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**Dépendances principales** :
+ Exécution Lambda Node.js 20.x
+ Version 24.15.0 de Puppeteer-core
+ Version 138.0.7204.168 de Chrome

 **Changements par rapport à syn-nodejs-puppeteer -11,0** 
+ Prise en charge multnavigateurs : vous pouvez désormais exécuter vos scripts Canary Node.js Puppeteer sur Firefox ou Chrome
+ Package simplifié : les scripts peuvent désormais être empaquetés directement à la racine, sans avoir à utiliser la structure de répertoires Node.js/node\$1modules
+ Intégration des captures d’écran : prenez des captures d’écran à l’aide des fonctions natives de Puppeteer afin de visualiser les différentes étapes du script Canary. Synthetics associe automatiquement les captures d’écran aux étapes du script Canary et les charge dans Amazon S3
+ Interrogation améliorée des journaux : interrogez et filtrez les journaux via la console CloudWatch Insights. Chaque message de journal comprend un `canaryRunId` unique, ce qui facilite la recherche
+ Prise en charge d’un fichier de configuration : vous pouvez définir et mettre à jour les paramètres Synthetics à l’aide d’un fichier synthetics.json. Cette séparation entre la configuration et la logique du script améliore la maintenance et la réutilisabilité.
+ Prise en charge de plusieurs onglets : vous pouvez créer des scripts Canary qui ouvrent plusieurs onglets de navigateur et accéder aux captures d’écran de chacun d’eux. Vous pouvez créer des flux de travail utilisateur à plusieurs onglets et étapes dans Synthetics
+ Correctifs de sécurité
+ Corrections liées à la surveillance visuelle
+ Ajout de la prise en charge de la journalisation JSON structurée avec des niveaux de journalisation configurables — Les journaux sont désormais émis au format JSON pour faciliter l'analyse et les requêtes. CloudWatch Le niveau de journalisation (par exemple, DEBUG, INFO, TRACE) peut être configuré via des variables d’environnement, permettant de contrôler le niveau de verbosité selon les besoins
+ Prise en charge de la syntaxe ES

### syn-nodejs-puppeteer-10,0
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-10.0"></a>

Pour plus d’informations, consultez les ressources suivantes :
+  [Journal des modifications de Puppeteer](https://pptr.dev/CHANGELOG) 
+  [Référence de l’API Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**Dépendances principales** :
+ Exécution Lambda Node.js 20.x
+ Version 24.2.0 de Puppeteer-core
+ Version 131.0.6778.264 de Chrome

 **Changements par rapport à syn-nodejs-puppeteer -10,0** 
+ Le bogue lié à la fermeture du navigateur, qui prenait un temps excessif, a été corrigé.
+ Le système prend désormais en charge les exécutions à blanc pour les scripts Canary, ce qui permet d’effectuer des exécutions ponctuelles ou de réaliser des mises à jour sécurisées du script Canary.

### syn-nodejs-puppeteer-9,1
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-9.1"></a>

**Dépendances principales** :
+ Exécution Lambda Node.js 20.x
+ Puppeteer-core version 22.12.1
+ Version 126.0.6478.126 de Chrome

**Modifications apportées à syn-nodejs-puppeteer -9.1** — Les corrections de bogues liées aux plages de dates et aux demandes en attente dans les fichiers HAR sont corrigées.

### syn-nodejs-puppeteer-9,0
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-9.0"></a>

**Dépendances principales** :
+ Exécution Lambda Node.js 20.x
+ Puppeteer-core version 22.12.1
+ Version 126.0.6478.126 de Chrome

**Modifications apportées à la syn-nodejs-puppeteer version -9.0** — La correction de bogue permettant d'activer les fonctionnalités de surveillance visuelle est corrigée.

### syn-nodejs-puppeteer-8,0
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-8.0"></a>

**Avertissement**  
En raison d’un bogue, l’exécution `syn-nodejs-puppeteer-8.0` ne prenait pas en charge la surveillance visuelle des scripts Canary. Passez à [syn-nodejs-puppeteer-9,0](#CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-9.0) pour bénéficier de la correction liée à la surveillance visuelle.

**Important**  
Les environnements d'exécution Lambda Node.js 18 et versions ultérieures utilisent le AWS SDK pour V3. JavaScript Si vous devez migrer un Canary à partir d'un environnement d'exécution antérieur, suivez l'[atelier de migration aws-sdk-js-v 3](https://github.com/aws-samples/aws-sdk-js-v3-workshop) sur GitHub. Pour plus d'informations sur le AWS SDK pour la JavaScript version 3, consultez [ce billet de blog](https://aws.amazon.com/blogs/developer/modular-aws-sdk-for-javascript-is-now-generally-available/).

**Dépendances principales** :
+ Exécution Lambda Node.js 20.x
+ Version 22.10.0 de Puppeteer-core
+ Version 125.0.6422.112 de Chrome

**Mises à jour en syn-nodejs-puppeteer version -8.0** :
+  **Prise en charge de l’authentification à deux facteurs** 
+ **Corrections de bogues** : résolution d’un problème où certains clients de service perdaient des données dans les réponses du kit SDK Node.js V3.

## Versions d’exécution obsolètes pour Node.js et Puppeteer
<a name="CloudWatch_Synthetics_nodejs-puppeteer-Deprecated"></a>

Les versions d’exécution suivantes pour Node.js et Puppeteer sont désormais obsolètes. Pour plus d’informations les dates de fin de prise en charge des versions d’exécution, consultez [CloudWatch Dates de dépréciation de Synthetics Runtime](CloudWatch_Synthetics_Runtime_Support_Policy.md#runtime_deprecation_dates).

### syn-nodejs-puppeteer-7,0
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-7.0"></a>

**Dépendances principales** :
+ Exécution Lambda Node.js 18.x
+ Version 21.9.0 de Puppeteer-core
+ Version 121.0.6167.139 de Chrome

**Taille du code** :

La taille du code et des dépendances pouvant être empaquetés dans cette exécution est de 80 Mo.

**Mises à jour en syn-nodejs-puppeteer version -7.0** :
+ **Mise à jour des bibliothèques groupées de Puppeteer et Chromium** : les dépendances Puppeteer et Chromium ont été mises à jour vers de nouvelles versions.
**Important**  
Le passage de Puppeteer 19.7.0 à Puppeteer 21.9.0 introduit des modifications majeures concernant les tests et les filtres. Pour plus d’informations, consultez les sections **MODIFICATIONS MAJEURES** dans [puppeteer : v20.0.0](https://github.com/puppeteer/puppeteer/releases/tag/puppeteer-v20.0.0) et [puppeteer-core : v21.0.0](https://github.com/puppeteer/puppeteer/releases/tag/puppeteer-core-v21.0.0).

 **Mise à niveau recommandée vers le AWS SDK v3** 

Le runtime Lambda nodejs18.x ne prend pas en charge le SDK v2. AWS Nous vous recommandons vivement de migrer vers le AWS SDK v3.

### syn-nodejs-puppeteer-6,2
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-6.2"></a>

**Dépendances principales** :
+ Exécution Lambda Node.js 18.x
+ Puppeteer-core version 19.7.0
+ Chromium version 111.0.5563.146

**Modifications apportées à la syn-nodejs-puppeteer version -6.2** :
+  **Versions mises à jour des bibliothèques groupées de Chromium** 
+ **Surveillance du stockage éphémère** : cette version d’exécution ajoute la surveillance du stockage éphémère dans les comptes clients.
+  **Corrections de bugs** 

### syn-nodejs-puppeteer-6,1
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-6.1"></a>

**Dépendances principales** :
+ Exécution Lambda Node.js 18.x
+ Puppeteer-core version 19.7.0
+ Chromium version 111.0.5563.146

**Mises à jour en syn-nodejs-puppeteer -6.1** :
+ **Améliorations de la stabilité** : ajout d’une logique de réessai automatique pour gérer les erreurs de lancement intermittentes de Puppeteer.
+ **Mises à niveau des dépendances** : met à niveau certains packages de dépendance tiers.
+ **Scripts canary sans autorisation Amazon S3** : corrections de bogues, de sorte que les scripts canary ne disposant d’aucune autorisation Amazon S3 peuvent toujours fonctionner. Ces scripts canary ne disposant d’aucune autorisation Amazon S3 ne pourront pas télécharger de captures d’écran ou d’autres artefacts sur Amazon S3. Pour plus d’informations sur les autorisations requises pour les scripts canary, veuillez consulter la rubrique [Rôles et autorisations requis pour les scripts Canary](CloudWatch_Synthetics_Canaries_CanaryPermissions.md).

**Important**  
IMPORTANT : Le AWS SDK inclus pour la dépendance JavaScript v2 sera supprimé et mis à jour pour utiliser le AWS SDK pour JavaScript v3 dans une future version d'exécution. À ce moment-là, vous pourrez mettre à jour les références de votre code canary. Vous pouvez également continuer à référencer et à utiliser le AWS SDK inclus pour la dépendance JavaScript v2 en l'ajoutant en tant que dépendance à votre fichier zip de code source.

### syn-nodejs-puppeteer-6,0
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-6.0"></a>

**Dépendances principales** :
+ Exécution Lambda Node.js 18.x
+ Puppeteer-core version 19.7.0
+ Chromium version 111.0.5563.146

**Mises à jour dans la syn-nodejs-puppeteer version -6.0** :
+ **Mise à niveau de dépendance** – La dépendance Node.js est mise à niveau vers la version 18.x.
+ **Support du mode d'interception** : le support du mode d'interception coopératif de Puppeteer a été ajouté à la bibliothèque d'exécution Synthetics Canary.
+ **Modification du comportement de suivi** : modification du comportement de suivi par défaut pour ne suivre que les requêtes fetch et xhr, et ne pas suivre les requêtes de ressources. Vous pouvez activer le suivi des requêtes de ressources en configurant l'option `traceResourceRequests`.
+ **Mesure de durée affinée** — La ` Duration` métrique exclut désormais le temps de fonctionnement utilisé par Canary pour télécharger des artefacts, prendre des captures d'écran et générer des CloudWatch métriques. `Duration`les valeurs métriques sont signalées à CloudWatch, et vous pouvez également les consulter dans la console Synthetics.
+ **Correction de bogue :** : vidage de mémoire généré lorsque Chromium se bloque lors d'une exécution de script canary.

**Important**  
IMPORTANT : Le AWS SDK inclus pour la dépendance JavaScript v2 sera supprimé et mis à jour pour utiliser le AWS SDK pour JavaScript v3 dans une future version d'exécution. À ce moment-là, vous pourrez mettre à jour les références de votre code canary. Vous pouvez également continuer à référencer et à utiliser le AWS SDK inclus pour la dépendance JavaScript v2 en l'ajoutant en tant que dépendance à votre fichier zip de code source.

### syn-nodejs-puppeteer-5,2
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-5.2"></a>

**Dépendances principales** :
+ Exécution Lambda Node.js 16.x
+ Puppeteer-core version 19.7.0
+ Chromium version 111.0.5563.146

**Mises à jour en syn-nodejs-puppeteer -5.2** :
+  **Versions mises à jour des bibliothèques groupées de Chromium** 
+  **Corrections de bugs** 

### syn-nodejs-puppeteer-5,1
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-5.1"></a>

**Dépendances principales** :
+ Exécution Lambda Node.js 16.x
+ Puppeteer-core version 19.7.0
+ Chromium version 111.0.5563.146

**Corrections de bugs dans syn-nodejs-puppeteer -5.1** :
+ **Correction de bogue** – Cette exécution corrige un bogue dans ` syn-nodejs-puppeteer-5.0` où les fichiers HAR créés par les scripts canary n'avaient pas d'en-têtes de requête.

### syn-nodejs-puppeteer-5,0
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-5.0"></a>

**Dépendances principales** :
+ Exécution Lambda Node.js 16.x
+ Puppeteer-core version 19.7.0
+ Chromium version 111.0.5563.146

**Mises à jour dans la syn-nodejs-puppeteer version -5.0** :
+ **Mise à niveau des dépendances** – La version Puppeteer-core est mise à jour vers la version 19.7.0. La version Chromium est mise à niveau vers la version 111.0.5563.146.

**Important**  
La nouvelle version de Puppeteer-core n'est pas totalement rétrocompatible avec les versions précédentes de Puppeteer. Certaines modifications apportées à cette version peuvent entraîner l'échec des scripts canary existants qui utilisent des fonctions Puppeteer obsolètes. Pour plus d'informations, consultez les derniers changements pour les versions 19.7.0 à 6.0 de Puppeteer-core dans les [journaux des modifications de Puppeteer](https://github.com/puppeteer/puppeteer/releases?q=breaking&expanded=true).

### syn-nodejs-puppeteer-4,0
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-4.0"></a>

**Dépendances principales** :
+ Exécution Lambda Node.js 16.x
+ Puppeteer-core version 5.5.0
+ Chromium version 92.0.4512

**Mises à jour en syn-nodejs-puppeteer -4.0** :
+ **Mise à niveau de dépendance** – La dépendance Node.js est mise à niveau vers la version 16.x.

### syn-nodejs-puppeteer-3,9
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-3.9"></a>

**Important**  
Cette version d’exécution a été rendue obsolète le 8 janvier 2024. Pour de plus amples informations, veuillez consulter [Politique de prise en charge des versions d'exécution](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dépendances principales** :
+ Moteur d'exécution Lambda Node.js 14.x
+ Puppeteer-core version 5.5.0
+ Chromium version 92.0.4512

**Mises à jour en syn-nodejs-puppeteer -3.9** :
+ **Mises à niveau des dépendances** : met à niveau certains packages de dépendance tiers.

### syn-nodejs-puppeteer-3,8
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-3.8"></a>

**Important**  
Cette version d’exécution a été rendue obsolète le 8 janvier 2024. Pour de plus amples informations, veuillez consulter [Politique de prise en charge des versions d'exécution](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dépendances principales** :
+ Moteur d'exécution Lambda Node.js 14.x
+ Puppeteer-core version 5.5.0
+ Chromium version 92.0.4512

**Mises à jour en syn-nodejs-puppeteer -3.8** :
+ **Nettoyage des profils** : les profils Chromium sont désormais nettoyés après chaque exécution de canary.

**Corrections de bugs dans syn-nodejs-puppeteer -3.8** :
+ **Correction de bogues** : auparavant, les canaris de surveillance visuelle cessaient parfois de fonctionner correctement après une exécution sans captures d'écran. Ceci est maintenant corrigé.

### syn-nodejs-puppeteer-3,7
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-3.7"></a>

**Important**  
Cette version d’exécution a été rendue obsolète le 8 janvier 2024. Pour de plus amples informations, veuillez consulter [Politique de prise en charge des versions d'exécution](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dépendances principales** :
+ Moteur d'exécution Lambda Node.js 14.x
+ Puppeteer-core version 5.5.0
+ Chromium version 92.0.4512

**Mises à jour en syn-nodejs-puppeteer -3.7** :
+ **Amélioration de la journalisation** : le canary chargera les journaux sur Amazon S3 même en cas d'expiration ou de panne.
+ **Taille de la couche Lambda réduite** : la taille de la couche Lambda utilisée pour les scripts canary est réduite de 34 %.

**Corrections de bugs dans syn-nodejs-puppeteer -3.7** :
+ **Correction de bogues** : les polices japonaises, chinoises simplifiées et chinoises traditionnelles seront restituées correctement.

### syn-nodejs-puppeteer-3,6
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-3.6"></a>

**Important**  
Cette version d’exécution a été rendue obsolète le 8 janvier 2024. Pour de plus amples informations, veuillez consulter [Politique de prise en charge des versions d'exécution](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dépendances principales** :
+ Moteur d'exécution Lambda Node.js 14.x
+ Puppeteer-core version 5.5.0
+ Chromium version 92.0.4512

**Mises à jour en syn-nodejs-puppeteer -3.6** :
+ **Horodatages plus précis**— L'heure de début et l'heure de fin des scripts Canary sont désormais précises à la milliseconde près.

### syn-nodejs-puppeteer-3,5
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-3.5"></a>

**Important**  
Cette version d’exécution a été rendue obsolète le 8 janvier 2024. Pour de plus amples informations, veuillez consulter [Politique de prise en charge des versions d'exécution](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dépendances principales** :
+ Moteur d'exécution Lambda Node.js 14.x
+ Puppeteer-core version 5.5.0
+ Chromium version 92.0.4512

**Mises à jour en syn-nodejs-puppeteer -3.5** :
+ **Updated Dependencies** (Dépendances mises à jour) : les seules nouvelles fonctions de ce moteur d'exécution sont les dépendances mises à jour.

### syn-nodejs-puppeteer-3,4
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-3.4"></a>

**Important**  
Cette version d'exécution a été rendue obsolète le 13 novembre 2022. Pour de plus amples informations, veuillez consulter [Politique de prise en charge des versions d'exécution](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dépendances principales** :
+ Exécution Lambda Node.js 12.x
+ Puppeteer-core version 5.5.0
+ Chromium version 88.0.4298.0

**Mises à jour en syn-nodejs-puppeteer -3.4** :
+ **Fonction de gestion personnalisée** : vous pouvez désormais utiliser une fonction de gestion personnalisée pour vos scripts Canary. Les exécutions précédentes nécessitaient que le point d'entrée du script comprenne `.handler`. 

  Vous pouvez également placer des scripts Canary dans n'importe quel dossier et transmettre le nom du dossier dans le gestionnaire. Par exemple, `MyFolder/MyScriptFile.functionname` peut être utilisé comme point d'entrée.
+ **Informations sur les fichiers HAR étendus** : vous pouvez désormais voir des demandes erronées, en attente et incomplètes dans les fichiers HAR produits par les scripts canary.

### syn-nodejs-puppeteer-3,3
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-3.3"></a>

**Important**  
Cette version d'exécution a été rendue obsolète le 13 novembre 2022. Pour de plus amples informations, veuillez consulter [Politique de prise en charge des versions d'exécution](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dépendances principales** :
+ Exécution Lambda Node.js 12.x
+ Puppeteer-core version 5.5.0
+ Chromium version 88.0.4298.0

**Mises à jour en syn-nodejs-puppeteer -3.3** :
+ **Options supplémentaires pour le chiffrement des artefacts** : pour les canaris utilisant ce moteur d'exécution ou une version ultérieure, au lieu d'utiliser une clé AWS gérée pour chiffrer les artefacts stockés dans Amazon S3, vous pouvez choisir d'utiliser une clé gérée par le AWS KMS client ou une clé gérée par Amazon S3. Pour de plus amples informations, veuillez consulter [Chiffrement des artefacts de script Canary](CloudWatch_Synthetics_artifact_encryption.md). 

### syn-nodejs-puppeteer-3,2
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-3.2"></a>

**Important**  
Cette version d'exécution a été rendue obsolète le 13 novembre 2022. Pour de plus amples informations, veuillez consulter [Politique de prise en charge des versions d'exécution](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dépendances principales** :
+ Exécution Lambda Node.js 12.x
+ Puppeteer-core version 5.5.0
+ Chromium version 88.0.4298.0

**Mises à jour en syn-nodejs-puppeteer -3.2** :
+ **Surveillance visuelle avec des captures d'écran** : les scripts Canary qui utilisent cette exécution ou une version ultérieure peuvent comparer une capture d'écran prise lors d'une exécution à une version de référence de la même capture d'écran. Si les différences entre les captures d'écran dépassent un seuil de pourcentage spécifié, le script Canary échoue. Pour plus d'informations, consultez [Surveillance visuelle](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsLogger_VisualTesting) ou [Modèle de surveillance visuelle](CloudWatch_Synthetics_Canaries_Blueprints.md#CloudWatch_Synthetics_Canaries_Blueprints_VisualTesting). 
+ **Nouvelles fonctions concernant les données sensibles** : vous pouvez empêcher l'apparition de données sensibles dans les journaux et rapports des scripts Canary. Pour de plus amples informations, veuillez consulter [SyntheticsLogHelper classe](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsLogHelper).
+ **Fonction obsolète** : la classe ` RequestResponseLogHelper` est rendue obsolète au profit de nouvelles options de configuration. Pour de plus amples informations, veuillez consulter [RequestResponseLogHelper classe](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_RequestResponseLogHelper).

### syn-nodejs-puppeteer-3,1
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-3.1"></a>

**Important**  
Cette version d'exécution a été rendue obsolète le 13 novembre 2022. Pour de plus amples informations, veuillez consulter [Politique de prise en charge des versions d'exécution](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dépendances principales** :
+ Exécution Lambda Node.js 12.x
+ Puppeteer-core version 5.5.0
+ Chromium version 88.0.4298.0

**Mises à jour en syn-nodejs-puppeteer -3.1** :
+ **Possibilité de configurer CloudWatch les métriques** — Avec cet environnement d'exécution, vous pouvez désactiver les métriques dont vous n'avez pas besoin. Sinon, les canaris publient différentes CloudWatch statistiques pour chaque course canari.
+ **Lien de capture d'écran** : vous pouvez lier une capture d'écran à une étape de script Canary une fois l'étape terminée. Pour ce faire, vous devez faire une capture d'écran à l'aide de la méthode **takeScreenshot**, en utilisant le nom de l'étape à laquelle vous souhaitez associer la capture d'écran. Par exemple, vous pouvez réaliser une étape, ajouter un temps d'attente, puis prendre la capture d'écran.
+ Le **plan de surveillance du rythme cardiaque peut en surveiller plusieurs URLs**. Vous pouvez utiliser le plan de surveillance du rythme cardiaque de la CloudWatch console pour en surveiller plusieurs URLs et voir le statut, la durée, les captures d'écran associées et la raison de l'échec de chaque URL dans le résumé des étapes du rapport Canary Run.

### syn-nodejs-puppeteer-3,0
<a name="CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-3.0"></a>

**Important**  
Cette version d'exécution a été rendue obsolète le 13 novembre 2022. Pour de plus amples informations, veuillez consulter [Politique de prise en charge des versions d'exécution](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dépendances principales** :
+ Exécution Lambda Node.js 12.x
+ Puppeteer-core version 5.5.0
+ Chromium version 88.0.4298.0

**Mises à jour en syn-nodejs-puppeteer -3.0** :
+ **Dépendances mises à niveau** : cette version utilise Puppeteer version 5.5.0, Node.js 12.x et Chromium 88.0.4298.0.
+ **Accès entre régions au compartiment** : vous pouvez désormais spécifier un compartiment S3 dans une autre région comme compartiment où votre script Canary stocke ses fichiers journaux, ses captures d'écran et ses fichiers HAR.
+ **Nouvelles fonctions disponibles** : cette version ajoute des fonctions de bibliothèque pour récupérer le nom du script Canary et la version d'exécution de Synthetics.

  Pour de plus amples informations, veuillez consulter [Classe Synthetics](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_Synthetics_Class_all).

### syn-nodejs-2.2
<a name="CloudWatch_Synthetics_runtimeversion-2.2"></a>

Cette section contient des informations sur la version d'exécution `syn-nodejs-2.2`.

**Important**  
Cette version d'exécution a été rendue obsolète le 28 mai 2021. Pour de plus amples informations, veuillez consulter [Politique de prise en charge des versions d'exécution](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dépendances principales** :
+ Exécution Lambda Node.js 10.x
+ Puppeteer-core version 3.3.0
+ Chromium version 83.0.4103.0

**Modifications apportées à syn-nodejs-2.2** :
+ **Surveillez vos canaris sous forme d'étapes HTTP** — Vous pouvez désormais en tester plusieurs APIs dans un seul canari. Chaque API est testée en tant qu'étape HTTP distincte, et CloudWatch Synthetics surveille le statut de chaque étape à l'aide de métriques et du rapport d'étape de CloudWatch Synthetics. CloudWatch Synthetics ` SuccessPercent` crée des statistiques pour `Duration` chaque étape HTTP.

  Cette fonctionnalité est implémentée par la fonction **executeHttpStep(StepName, RequestOptions, callback,** StepConfig). Pour de plus amples informations, veuillez consulter [executeHttpStep(StepName, RequestOptions, [rappel], [StepConfig])](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_executeHttpStep).

  Le modèle de script Canary d'API est mis à jour pour utiliser cette nouvelle fonction.
+ Rapports sur les **requêtes HTTP** : vous pouvez désormais consulter des rapports détaillés sur les requêtes HTTP qui capturent des détails tels que request/response les en-têtes, le corps de la réponse, le code d'état, les délais d'erreur et de performance, le temps de connexion TCP, le temps de prise de contact TLS, l'heure du premier octet et le temps de transfert du contenu. Toutes les requêtes HTTP qui utilisent le HTTP/HTTPS module intégré sont capturées ici. Les en-têtes et le corps de la réponse ne sont par défaut pas capturés, mais cette option peut être activée en définissant les options de configuration.
+ **Configuration globale et au niveau** des étapes — Vous pouvez définir des configurations CloudWatch Synthetics au niveau global, qui sont appliquées à toutes les étapes des canaris. Vous pouvez également remplacer ces configurations au niveau de l'étape en transmettant des key/value paires de configuration pour activer ou désactiver certaines options.

  Pour de plus amples informations, veuillez consulter [SyntheticsConfiguration classe](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsConfiguration).
+ **Configuration pour continuer après un échec de l'étape** : vous pouvez choisir de poursuivre l'exécution des scripts Canary en cas d'échec d'une étape. Pour la fonction ` executeHttpStep`, cette option est activée par défaut. Vous pouvez définir cette option une fois au niveau global ou la définir différemment par étape. 

### syn-nodejs-2.1
<a name="CloudWatch_Synthetics_runtimeversion-2.1"></a>

**Important**  
Cette version d'exécution a été rendue obsolète le 28 mai 2021. Pour de plus amples informations, veuillez consulter [Politique de prise en charge des versions d'exécution](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dépendances principales** :
+ Exécution Lambda Node.js 10.x
+ Puppeteer-core version 3.3.0
+ Chromium version 83.0.4103.0

**Mises à jour avec syn-nodejs-2.1** :
+ **Comportement de capture d'écran configurable** : offre la possibilité de désactiver la prise de captures d'écran par les scripts Canary d'interface utilisateur. Dans les scripts Canary qui utilisent des versions précédentes des exécutions, les scripts Canary d'interface utilisateur effectuent toujours des captures d'écran avant et après chaque étape. Avec `syn-nodejs-2.1`, ce comportement peut être configuré. La désactivation des captures d'écran peut réduire vos coûts de stockage Amazon S3 et vous aider à vous conformer aux réglementations HIPAA. Pour de plus amples informations, veuillez consulter [SyntheticsConfiguration classe](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsConfiguration).
+ **Personnalisation des paramètres de lancement de Google Chrome** : vous pouvez désormais configurer les arguments utilisés lorsqu'un script Canary lance une fenêtre de navigateur Google Chrome. Pour de plus amples informations, veuillez consulter [launch(options)](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_LaunchOptions).

Il peut y avoir une légère augmentation de la durée des scripts Canary lors de l'utilisation de syn-nodejs-2.0 ou d'une version ultérieure, par rapport aux versions antérieures des exécutions des scripts Canary.

### syn-nodejs-2.0
<a name="CloudWatch_Synthetics_runtimeversion-2.0"></a>

**Important**  
Cette version d'exécution a été rendue obsolète le 28 mai 2021. Pour de plus amples informations, veuillez consulter [Politique de prise en charge des versions d'exécution](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dépendances principales** :
+ Exécution Lambda Node.js 10.x
+ Puppeteer-core version 3.3.0
+ Chromium version 83.0.4103.0

**Mises à jour avec syn-nodejs-2.0** :
+ **Dépendances mises à niveau** : cette version d'exécution utilise Puppeteer-core version 3.3.0 et Chromium version 83.0.4103.0
+ **Prise en charge du suivi actif X-Ray.** Lorsque le suivi est activé sur un canary, des traces X-Ray sont envoyées pour tous les appels effectués par le canari qui utilisent le navigateur, le AWS SDK ou les modules HTTP ou HTTPS. Les scripts canary dont le suivi est activé apparaissent sur la carte de suivi X-Ray, même s’ils n’envoient pas de demandes à d’autres services ou applications dont le suivi est activé. Pour de plus amples informations, veuillez consulter [Scripts Canary et suivi X-Ray](CloudWatch_Synthetics_Canaries_tracing.md).
+ Rapports **synthétiques** — Pour chaque course à Canary, CloudWatch Synthetics crée un rapport ` SyntheticsReport-PASSED.json` nommé ` SyntheticsReport-FAILED.json` ou qui enregistre des données telles que l'heure de début, l'heure de fin, le statut et les échecs. Il enregistre également l' PASSED/FAILED état de chaque étape du script Canary, ainsi que les échecs et les captures d'écran capturées pour chaque étape.
+ **Rapport du vérificateur des liens rompus** : la nouvelle version du vérificateur de liens rompus inclus dans cette exécution crée un rapport qui inclut les liens qui ont été vérifiés, le code d'état, la raison de l'échec (le cas échéant) et les captures d'écran de la page source et de destination.
+ **Nouvelles CloudWatch métriques** — Synthetics publie les métriques `2xx` nommées`4xx`,`5xx`, `RequestFailed` et dans l'espace de noms. `CloudWatchSynthetics` Ces métriques indiquent le nombre d'échecs 200, 400, 500 et de demande dans les exécutions de scripts Canary. Avec cette version d'exécution, ces métriques sont signalées uniquement pour les scripts Canary d'interface utilisateur et ne sont pas signalées pour les scripts Canary d'API. Elles sont également signalées pour les scripts Canary d'API commençant par la version d'exécution ` syn-nodejs-puppeteeer-2.2`.
+ **Fichiers HAR triables** : vous pouvez maintenant trier vos fichiers HAR par code d'état, taille de la demande et durée.
+ **Horodatage des métriques** : CloudWatch les métriques sont désormais signalées en fonction de l'heure d'invocation de Lambda plutôt que de l'heure de fin de l'exécution de Canary.

**Corrections de bogues dans syn-nodejs-2.0** :
+ Correction du problème lors duquel les erreurs de téléchargement d'artefacts des scripts Canary n'étaient pas signalées. Ces erreurs apparaissent maintenant comme des erreurs d'exécution.
+ Correction du problème lors duquel des demandes redirigées (3xx) étaient incorrectement journalisées en tant qu'erreurs.
+ Correction du problème lors duquel les captures d'écran étaient numérotées à partir de 0. Elles devraient maintenant commencer par 1.
+ Correction du problème lors duquel des captures d'écran étaient brouillées pour les polices chinoises et japonaises.

Il peut y avoir une légère augmentation de la durée des scripts Canary lors de l'utilisation de syn-nodejs-2.0 ou d'une version ultérieure, par rapport aux versions antérieures des exécutions des scripts Canary.

### syn-nodejs-2.0-beta
<a name="CloudWatch_Synthetics_runtimeversion-2.0-beta"></a>

**Important**  
Cette version d'exécution a été rendue obsolète le 8 février 2021. Pour de plus amples informations, veuillez consulter [Politique de prise en charge des versions d'exécution](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dépendances principales** :
+ Exécution Lambda Node.js 10.x
+ Puppeteer-core version 3.3.0
+ Chromium version 83.0.4103.0

**Modifications apportées à syn-nodejs-2.0-beta** :
+ **Dépendances mises à niveau** : cette version d'exécution utilise Puppeteer-core version 3.3.0 et Chromium version 83.0.4103.0
+ Rapports **synthétiques** — Pour chaque course à Canary, CloudWatch Synthetics crée un rapport ` SyntheticsReport-PASSED.json` nommé ` SyntheticsReport-FAILED.json` ou qui enregistre des données telles que l'heure de début, l'heure de fin, le statut et les échecs. Il enregistre également l' PASSED/FAILED état de chaque étape du script Canary, ainsi que les échecs et les captures d'écran capturées pour chaque étape.
+ **Rapport du vérificateur des liens rompus** : la nouvelle version du vérificateur de liens rompus inclus dans cette exécution crée un rapport qui inclut les liens qui ont été vérifiés, le code d'état, la raison de l'échec (le cas échéant) et les captures d'écran de la page source et de destination.
+ **Nouvelles CloudWatch métriques** — Synthetics publie les métriques `2xx` nommées`4xx`,`5xx`, `RequestFailed` et dans l'espace de noms. `CloudWatchSynthetics` Ces métriques indiquent le nombre d'échecs 200, 400, 500 et de demande dans les exécutions de scripts Canary. ACes métriques sont signalées uniquement pour les scripts Canary d'interface utilisateur et ne sont pas signalées pour les scripts Canary d'API.
+ **Fichiers HAR triables** : vous pouvez maintenant trier vos fichiers HAR par code d'état, taille de la demande et durée.
+ **Horodatage des métriques** : CloudWatch les métriques sont désormais signalées en fonction de l'heure d'invocation de Lambda plutôt que de l'heure de fin de l'exécution de Canary.

**Corrections de bogues dans syn-nodejs-2.0-beta** :
+ Correction du problème lors duquel les erreurs de téléchargement d'artefacts des scripts Canary n'étaient pas signalées. Ces erreurs apparaissent maintenant comme des erreurs d'exécution.
+ Correction du problème lors duquel des demandes redirigées (3xx) étaient incorrectement journalisées en tant qu'erreurs.
+ Correction du problème lors duquel les captures d'écran étaient numérotées à partir de 0. Elles devraient maintenant commencer par 1.
+ Correction du problème lors duquel des captures d'écran étaient brouillées pour les polices chinoises et japonaises.

### syn-1.0
<a name="CloudWatch_Synthetics_runtimeversion-1.0"></a>

La première version d'exécution de Synthetics est `syn-1.0`.

**Dépendances principales** :
+ Exécution Lambda Node.js 10.x
+ Puppeteer-core version 1.14.0
+ La version Chromium qui correspond à Puppeteer-core 1.14.0

# Versions d'exécution utilisant Python et Selenium Webdriver
<a name="CloudWatch_Synthetics_Library_python_selenium"></a>

Les sections suivantes contiennent des informations sur les versions d' CloudWatch exécution de Synthetics pour Python et Selenium Webdriver. Selenium est un outil d'automatisation de navigateur open source. [Pour plus d'informations sur Selenium, consultez le site www.selenium.dev/](https://www.selenium.dev)

Pour obtenir des informations sur les fonctionnalités et les méthodes prises en charge par les versions d’exécution Synthetics utilisant le cadriciel Selenium, consultez [Classes et fonctions des bibliothèques Python et Selenium applicables uniquement aux scripts Canary pour interface utilisateur](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library_Python.html#CloudWatch_Synthetics_Library_Python_UIcanaries) et [Référence de l’API Selenium](https://www.selenium.dev/selenium/docs/api/py/api.html).

La convention de dénomination pour ces versions d'exécution est `syn-language -framework-majorversion. minorversion`.

## syn-python-selenium-10,0
<a name="CloudWatch_Synthetics_runtimeversion-syn-python-selenium-10.0"></a>

La version 10.0 est le dernier runtime CloudWatch Synthetics pour Python et Selenium.

**Dépendances principales** :
+ Python 3.11
+ Sélénium 4.32.0
+ Version 145.0.7632.77 de Chrome

**Changements par rapport à syn-python-selenium -10,0** 
+ Correctifs de sécurité appliqués et versions de navigateur mises à jour.

Pour plus d’informations, consultez les ressources suivantes :
+  [Journal des modifications de Selenium](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Documentation Selenium](https://www.selenium.dev/selenium/docs/api/py/api.html) 

## Versions d’exécution précédentes pour Python et Selenium
<a name="Previousversions-python-selenium"></a>

Les versions précédentes des versions d’exécution pour Python et Selenium restent prises en charge. 

### syn-python-selenium-9,0
<a name="CloudWatch_Synthetics_runtimeversion-syn-python-selenium-9.0"></a>

**Dépendances principales** :
+ Python 3.11
+ Sélénium 4.32.0
+ Version 143.0.7499.169 de Chrome

**Modifications apportées à la version syn-python-selenium -9.0** 
+ Correctifs de sécurité appliqués et versions de navigateur mises à jour.

Pour plus d’informations, consultez les ressources suivantes :
+  [Journal des modifications de Selenium](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Documentation Selenium](https://www.selenium.dev/selenium/docs/api/py/api.html) 

### syn-python-selenium-8,0
<a name="CloudWatch_Synthetics_runtimeversion-syn-python-selenium-8.0"></a>

La version 8.0 est le dernier runtime CloudWatch Synthetics pour Python et Selenium.

**Dépendances principales** :
+ Python 3.11
+ Sélénium 4.32.0
+ Version 142.0.7444.175 de Chrome

**Modifications apportées à la version syn-python-selenium -8.0** 
+ Correctifs de sécurité appliqués et versions mises à jour de Selenium et du navigateur.
+ Modification du niveau du journal des requêtes réseau HAR ayant échoué, passant de ERROR à INFO.

Pour plus d’informations, consultez les ressources suivantes :
+  [Journal des modifications de Selenium](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Documentation Selenium](https://www.selenium.dev/selenium/docs/api/py/api.html) 

### syn-python-selenium-7,0
<a name="CloudWatch_Synthetics_runtimeversion-syn-python-selenium-7.0"></a>

**Dépendances principales** :
+ Python 3.11
+ Sélénium 4.32.0
+ Version 138.0.7204.168 de Chrome

 **Modifications apportées à la version syn-python-selenium -7.0** 
+ Correctifs de sécurité appliqués et versions mises à jour de Selenium et du navigateur.

Pour plus d’informations, consultez les ressources suivantes :
+  [Journal des modifications de Selenium](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Documentation Selenium](https://www.selenium.dev/selenium/docs/api/py/api.html) 

### syn-python-selenium-6,0
<a name="CloudWatch_Synthetics_runtimeversion-syn-python-selenium-6.0"></a>

**Dépendances principales** :
+ Python 3.11
+ Selenium 4.21.0
+ Version 131.0.6778.264 de Chrome

 **Modifications apportées à la version syn-python-selenium -6.0** 
+ Mise à niveau de Python 3.9 vers Python 3.11.

Pour plus d’informations, consultez les ressources suivantes :
+  [Journal des modifications de Selenium](https://www.selenium.dev/blog/2024/selenium-4-21-released/) 
+  [Documentation Selenium](https://www.selenium.dev/selenium/docs/api/py/api.html) 

### syn-python-selenium-5,1
<a name="CloudWatch_Synthetics_runtimeversion-syn-python-selenium-5.1"></a>

**Dépendances principales** :
+ Python 3.9
+ Selenium 4.21.0
+ Version 131.0.6778.264 de Chrome

 **Modifications apportées à syn-python-selenium -5.1** 
+ Petites mises à jour concernant l’émission des métriques.
+ Le système prend désormais en charge les exécutions à blanc pour les scripts Canary, ce qui permet d’effectuer des exécutions ponctuelles ou de réaliser des mises à jour sécurisées du script Canary.

### syn-python-selenium-5,0
<a name="CloudWatch_Synthetics_runtimeversion-syn-python-selenium-5.0"></a>

**Dépendances principales** :
+ Python 3.9
+ Selenium 4.21.0
+ Version 131.0.6778.264 de Chrome

**Changements apportés à la syn-python-selenium version -5.0** :
+ Relance automatique en cas d’échec du lancement du navigateur.

### syn-python-selenium-4,1
<a name="CloudWatch_Synthetics_runtimeversion-syn-python-selenium-4.1"></a>

**Dépendances principales** :
+ Python 3.9
+ Selenium 4.15.1
+ Version 126.0.6478.126 de Chrome

**Modifications apportées à la syn-python-selenium version -4.1** :
+ **Correction d’une vulnérabilité de sécurité** : cette version d’exécution inclut une mise à jour pour corriger la vulnérabilité [CVE-2024-39689](https://nvd.nist.gov/vuln/detail/CVE-2024-39689).

### syn-python-selenium-4,0
<a name="CloudWatch_Synthetics_runtimeversion-syn-python-selenium-4.0"></a>

**Dépendances principales** :
+ Python 3.9
+ Selenium 4.15.1
+ Version 126.0.6478.126 de Chrome

**Changements apportés à la syn-python-selenium version -4.0** :
+ **Corrections de bogues** pour des erreurs dans la journalisation de l’analyseur HAR.

## Versions d’exécution obsolètes pour Python et Selenium
<a name="Deprecated-python-selenium"></a>

Les versions d’exécution antérieures suivantes pour Python et Selenium sont devenues obsolètes. Pour plus d’informations les dates de fin de prise en charge des versions d’exécution, consultez [CloudWatch Dates de dépréciation de Synthetics Runtime](CloudWatch_Synthetics_Runtime_Support_Policy.md#runtime_deprecation_dates).

### syn-python-selenium-3,0
<a name="CloudWatch_Synthetics_runtimeversion-syn-python-selenium-3.0"></a>

**Dépendances principales** :
+ Python 3.8
+ Selenium 4.15.1
+ Version 121.0.6167.139 de Chrome

**Changements apportés à la syn-python-selenium version -3.0** :
+ **Mise à jour des bibliothèques groupées de Chromium** : la dépendance Chromium a été mise à jour vers une nouvelle version.

### syn-python-selenium-2,1
<a name="CloudWatch_Synthetics_runtimeversion-syn-python-selenium-2.1"></a>

**Dépendances principales** :
+ Python 3.8
+ Selenium 4.15.1
+ Chromium version 111.0.5563.146

**Changements apportés à syn-python-selenium -2.1** :
+ **Mise à jour des bibliothèques groupées de Chromium** : les dépendances Chromium et Selenium ont été mises à jour vers de nouvelles versions.

### syn-python-selenium-2,0
<a name="CloudWatch_Synthetics_runtimeversion-syn-python-selenium-2.0"></a>

**Dépendances principales** :
+ Python 3.8
+ Selenium 4.10.0
+ Chromium version 111.0.5563.146

**Changements apportés à syn-python-selenium -2.0** :
+ **Dépendances mises à jour** – Les dépendances de Chromium et Selenium ont été mises à jour vers les nouvelles versions.

**Corrections de bugs dans syn-python-selenium -2.0** :
+ **Horodatage ajouté** – Un horodatage a été ajouté aux journaux de scripts canary.
+ **Réutilisation des sessions** – Un bogue a été corrigé pour empêcher les scripts canary de réutiliser la session de leur précédente exécution.

### syn-python-selenium-1,3
<a name="CloudWatch_Synthetics_runtimeversion-syn-python-selenium-1.3"></a>

**Dépendances principales** :
+ Python 3.8
+ Selenium 3.141.0
+ Chromium version 92.0.4512.0

**Modifications apportées à la syn-python-selenium version -1.3** :
+ **Horodatages plus précis**— L'heure de début et l'heure de fin des scripts Canary sont désormais précises à la milliseconde près.

### syn-python-selenium-1,2
<a name="CloudWatch_Synthetics_runtimeversion-syn-python-selenium-1.2"></a>

**Dépendances principales** :
+ Python 3.8
+ Selenium 3.141.0
+ Chromium version 92.0.4512.0
+ **Updated Dependencies** (Dépendances mises à jour) : les seules nouvelles fonctions de ce moteur d'exécution sont les dépendances mises à jour.

### syn-python-selenium-1,1
<a name="CloudWatch_Synthetics_runtimeversion-syn-python-selenium-1.1"></a>

**Dépendances principales** :
+ Python 3.8
+ Selenium 3.141.0
+ Chromium version 83.0.4103.0

**Fonctionnalités** :
+ **Fonction de gestion personnalisée** : vous pouvez désormais utiliser une fonction de gestion personnalisée pour vos scripts canary. Les exécutions précédentes nécessitaient que le point d'entrée du script comprenne `.handler`. 

  Vous pouvez également placer des scripts Canary dans n'importe quel dossier et transmettre le nom du dossier dans le gestionnaire. Par exemple, `MyFolder/MyScriptFile.functionname` peut être utilisé comme point d'entrée.
+ **Options de configuration pour ajouter des métriques et des configurations d'échec d'étapes** : Ces options étaient déjà disponibles dans les exécutions pour les scripts canary Node.js. Pour plus d’informations, consultez [SyntheticsConfiguration classe](CloudWatch_Synthetics_Canaries_Library_Python.md#CloudWatch_Synthetics_Library_SyntheticsConfiguration_Python).
+ **Arguments personnalisés dans Chrome** : vous pouvez désormais ouvrir un navigateur en mode navigation privée ou passer en configuration de serveur proxy. Pour de plus amples informations, veuillez consulter [Chrome()](CloudWatch_Synthetics_Canaries_Library_Python.md#CloudWatch_Synthetics_Library_Python_Chrome).
+ **Compartiments d'artefacts entre Régions** : un script Canary peut stocker ses artefacts dans un compartiment Simple Storage Service (Amazon S3) dans une autre Région.
+ **Corrections de bogue, y compris un correctif pour le problème `index.py`** : avec les exécutions précédentes, un fichier Canary nommé ` index.py` a provoqué des exceptions car il entrait en conflit avec le nom du fichier de bibliothèque. Le problème a été résolu.

### syn-python-selenium-1,0
<a name="CloudWatch_Synthetics_runtimeversion-syn-python-selenium-1.0"></a>

**Dépendances principales** :
+ Python 3.8
+ Selenium 3.141.0
+ Chromium version 83.0.4103.0

**Fonctionnalités** :
+ **Prise en charge de Selenium** : vous pouvez écrire des scripts Canary à l'aide du cadre de test Selenium. Vous pouvez importer vos scripts Selenium d'autres sources dans CloudWatch Synthetics avec un minimum de modifications, et ils fonctionneront avec les services. AWS 

# Versions d'exécution utilisant Node.js
<a name="CloudWatch_Synthetics_Library_Nodejs"></a>

La section suivante contient des informations sur les CloudWatch versions d'exécution de Synthetics pour Node.js. Cette exécution ne comprend aucun navigateur ni cadre.

La convention de dénomination pour ces versions d'exécution est `syn-language -majorversion.minorversion`.

## syn-nodejs-4.1
<a name="CloudWatch_Synthetics_runtimeversion-syn-nodejs-4.1"></a>

**Important**  
À partir de `syn-nodejs-3.1` Synthetics et des versions ultérieures, le runtime Synthetics utilise le nouvel espace de noms. Veuillez migrer le script Canary pour utiliser le nouvel espace de noms. L'ancien espace de noms sera obsolète dans une future version.  
@ amzn/synthetics-core → @aws/synthetics -core

**Dépendances principales** :
+ AWS Lambda exécution Node.js 22.x

 **Changements dans syn-nodejs-4.1** 
+ Passez `fast-xml-parser` à la version 5.5.7 pour résoudre les problèmes suivants : CVEs
  + CVE-2026-25128
  + CVE-2026-25896
  + CVE-2026-26278
  + CVE-2026-27942
  + CVE-2026-33036

## Versions d'exécution précédentes de Node.js
<a name="Previousversions-nodejs"></a>

Les versions d'exécution antérieures suivantes de Node.js sont toujours prises en charge. 

### syn-nodejs-4.0
<a name="CloudWatch_Synthetics_runtimeversion-syn-nodejs-4.0"></a>

**Dépendances principales** :
+ AWS Lambda exécution Node.js 22.x

 **Changements dans syn-nodejs-4.0** 
+ Correctifs de sécurité appliqués. 

### syn-nodejs-3.1
<a name="CloudWatch_Synthetics_runtimeversion-syn-nodejs-3.1"></a>

**Important**  
À partir de `syn-nodejs-3.1` Synthetics et des versions ultérieures, le runtime Synthetics utilise le nouvel espace de noms. Veuillez migrer le script Canary pour utiliser le nouvel espace de noms. L'ancien espace de noms sera obsolète dans une future version.  
@ amzn/synthetics-core → @aws/synthetics -core

**Dépendances principales** :
+ AWS Lambda exécution Node.js 20.x

 **Changements dans syn-nodejs-3.1** 
+ Migration de l'espace de noms Synthetics Runtime. 
+ La définition du type est disponible dans le [registre npm](https://www.npmjs.com/package/@aws/synthetics-core). Assurez-vous que la version du package de définition de type correspond à la version d'exécution de votre Canary.

### syn-nodejs-3.0
<a name="Synthetics_runtimeversion-syn-nodejs-3.0"></a>

**Dépendances principales** :
+ AWS Lambda exécution Node.js 20.x

 **Changements dans syn-nodejs-3.0** 
+ Support pour le plan à contrôles multiples. 

# Politique de prise en charge des versions d'exécution
<a name="CloudWatch_Synthetics_Runtime_Support_Policy"></a>

Les versions d'environnement d'exécution Synthetics sont soumises à des mises à jour de sécurité et de maintenance. Lorsqu'un composant quelconque d'une version d'exécution n'est plus pris en charge, cette version d'exécution Synthetics devient obsolète.

Vous ne pouvez pas créer des scripts Canary à l'aide de versions d'environnement d'exécution obsolètes. Les scripts Canary qui utilisent des environnements d'exécution obsolètes continuent à fonctionner. Vous pouvez arrêter, démarrer et supprimer ces scripts Canary. Vous pouvez mettre à jour un script Canary existant qui utilise une version d'exécution obsolète en mettant à jour le script Canary pour utiliser une version d'exécution prise en charge.

CloudWatch Synthetics vous avertit par e-mail si certains de vos canaris utilisent des runtimes dont la dépréciation est prévue dans les 60 prochains jours. Nous vous recommandons de migrer vos scripts Canary vers une version d'exécution prise en charge pour bénéficier des nouvelles fonctionnalités et des améliorations de la sécurité et des performances incluses dans les versions plus récentes. 

## CloudWatch Dates de dépréciation de Synthetics Runtime
<a name="runtime_deprecation_dates"></a>

Le tableau suivant répertorie la date de dépréciation de chaque environnement d'exécution Synthetics obsolète. CloudWatch 


| Version d'exécution | Date d’obsolescence | 
| --- | --- | 
|   `syn-python-selenium-5.1`   |  3 février 2026  | 
|   `syn-python-selenium-5.0`   |  3 février 2026  | 
|   `syn-python-selenium-4.1`   |  3 février 2026  | 
|   `syn-python-selenium-4.0`   |  3 février 2026  | 
|   `syn-nodejs-puppeteer-7.0`   |  22 janvier 2026  | 
|   `syn-nodejs-puppeteer-6.2`   |  22 janvier 2026  | 
|   `syn-nodejs-puppeteer-5.2`   |  22 janvier 2026  | 
|   `syn-python-selenium-3.0`   |  22 janvier 2026  | 
|   `syn-python-selenium-2.1`   |  22 janvier 2026  | 
|   `syn-nodejs-puppeteer-6.1`   |  8 mars 2024  | 
|   `syn-nodejs-puppeteer-6.0`   |  8 mars 2024  | 
|   `syn-nodejs-puppeteer-5.1`   |  8 mars 2024  | 
|   `syn-nodejs-puppeteer-5.0`   |  8 mars 2024  | 
|   `syn-nodejs-puppeteer-4.0`   |  8 mars 2024  | 
|   `syn-nodejs-puppeteer-3.9`   |  8 janvier 2024  | 
|   `syn-nodejs-puppeteer-3.8`   |  8 janvier 2024  | 
|   `syn-python-selenium-2.0`   |  8 mars 2024  | 
|   `syn-python-selenium-1.3`   |  8 mars 2024  | 
|   `syn-python-selenium-1.2`   |  8 mars 2024  | 
|   `syn-python-selenium-1.1`   |  8 mars 2024  | 
|   `syn-python-selenium-1.0`   |  8 mars 2024  | 
|   `syn-nodejs-puppeteer-3.7`   |  8 janvier 2024  | 
|   `syn-nodejs-puppeteer-3.6`   |  8 janvier 2024  | 
|   `syn-nodejs-puppeteer-3.5`   |  8 janvier 2024  | 
|   `syn-nodejs-puppeteer-3.4`   |  13 novembre 2022  | 
|   `syn-nodejs-puppeteer-3.3`   |  13 novembre 2022  | 
|   `syn-nodejs-puppeteer-3.2`   |  13 novembre 2022  | 
|   `syn-nodejs-puppeteer-3.1`   |  13 novembre 2022  | 
|   `syn-nodejs-puppeteer-3.0`   |  13 novembre 2022  | 
|   `syn-nodejs-2.2`   |  28 mai 2021  | 
|   `syn-nodejs-2.1`   |  28 mai 2021  | 
|   `syn-nodejs-2.0`   |  28 mai 2021  | 
|   `syn-nodejs-2.0-beta`   |  8 février 2021  | 
|   `syn-1.0`   |  28 mai 2021  | 

# Mise à jour des versions d'exécution
<a name="CloudWatch_Synthetics_Runtime_Version_Update"></a>

Vous pouvez mettre à jour la version d'exécution d'un Canary à l'aide de la CloudWatch console AWS CloudFormation, du SDK AWS CLI ou du AWS SDK. Lorsque vous utilisez la CloudWatch console, vous pouvez mettre à jour jusqu'à cinq canaris à la fois en les sélectionnant dans la page de liste des canaris, puis en choisissant **Actions**, **Update Runtime**.

Vous pouvez vérifier la mise à jour en la testant d'abord avant de valider la mise à jour d'exécution. Lors de la mise à jour des versions d'exécution, choisissez les options **Start Dry Run** ou **Validate et enregistrez ultérieurement** dans la CloudWatch console pour créer une version à sec du Canary original ainsi que toutes les modifications que vous avez apportées à la configuration. L’exécution à blanc mettra à jour et exécutera le script Canary afin de vérifier si la nouvelle version de l’exécution est compatible. Une fois la vérification de la nouvelle version d’exécution terminée et réussie, vous pouvez mettre à jour la version de l’exécution de votre script Canary. Pour de plus amples informations, veuillez consulter [Effectuer des mises à jour sécurisées des scripts Canary](performing-safe-canary-upgrades.md).

Vous pouvez également vérifier la mise à jour en clonant d'abord le Canary à l'aide de la CloudWatch console et en mettant à jour la version d'exécution. Cela crée un autre script Canary qui est un clone de votre script Canary d'origine. Une fois que vous avez vérifié votre script Canary avec la nouvelle version d'exécution, vous pouvez mettre à jour la version d'exécution de votre script Canary d'origine et supprimer le clone de script Canary.

 Vous pouvez également mettre à jour plusieurs scripts Canary à l'aide d'un script de mise à niveau. Pour de plus amples informations, veuillez consulter [Script de mise à niveau de l'exécution d'un script Canary](#CloudWatch_Synthetics_Canaries_upgrade_script).

Si vous mettez à niveau un script Canary et qu'il échoue, consultez [Dépannage d'un script Canary ayant échoué](CloudWatch_Synthetics_Canaries_Troubleshoot.md).

## Script de mise à niveau de l'exécution d'un script Canary
<a name="CloudWatch_Synthetics_Canaries_upgrade_script"></a>

Pour mettre à niveau un script Canary vers une version d'exécution prise en charge, utilisez le script suivant.

```
const AWS = require('aws-sdk');

// You need to configure your AWS credentials and Region.
//   https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/setting-credentials-node.html
//   https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/setting-region.html

const synthetics = new AWS.Synthetics();

const DEFAULT_OPTIONS = {
  /**
   * The number of canaries to upgrade during a single run of this script.
   */
  count: 10,
  /**
   * No canaries are upgraded unless force is specified.
   */
  force: false
};

/**
 * The number of milliseconds to sleep between GetCanary calls when
 * verifying that an update succeeded.
 */
const SLEEP_TIME = 5000;

(async () => {
  try {
    const options = getOptions();

    const versions = await getRuntimeVersions();
    const canaries = await getAllCanaries();
    const upgrades = canaries
      .filter(canary => !versions.isLatestVersion(canary.RuntimeVersion))
      .map(canary => {
        return {
          Name: canary.Name,
          FromVersion: canary.RuntimeVersion,
          ToVersion: versions.getLatestVersion(canary.RuntimeVersion)
        };
      });

    if (options.force) {
      const promises = [];

      for (const upgrade of upgrades.slice(0, options.count)) {
        const promise = upgradeCanary(upgrade);
        promises.push(promise);
        // Sleep for 100 milliseconds to avoid throttling.
        await usleep(100);
      }

      const succeeded = [];
      const failed = [];
      for (let i = 0; i < upgrades.slice(0, options.count).length; i++) {
        const upgrade = upgrades[i];
        const promise = promises[i];
        try {
          await promise;
          console.log(`The update of ${upgrade.Name} succeeded.`);
          succeeded.push(upgrade.Name);
        } catch (e) {
          console.log(`The update of ${upgrade.Name} failed with error: ${e}`);
          failed.push({
            Name: upgrade.Name,
            Reason: e
          });
        }
      }

      if (succeeded.length) {
        console.group('The following canaries were upgraded successfully.');
        for (const name of succeeded) {
          console.log(name);
        }
        console.groupEnd()
      } else {
        console.log('No canaries were upgraded successfully.');
      }

      if (failed.length) {
        console.group('The following canaries were not upgraded successfully.');
        for (const failure of failed) {
          console.log('\x1b[31m', `${failure.Name}: ${failure.Reason}`, '\x1b[0m');
        }
        console.groupEnd();
      }
    } else {
      console.log('Run with --force [--count <count>] to perform the first <count> upgrades shown. The default value of <count> is 10.')
      console.table(upgrades);
    }
  } catch (e) {
    console.error(e);
  }
})();

function getOptions() {
  const force = getFlag('--force', DEFAULT_OPTIONS.force);
  const count = getOption('--count', DEFAULT_OPTIONS.count);
  return { force, count };

  function getFlag(key, defaultValue) {
    return process.argv.includes(key) || defaultValue;
  }
  function getOption(key, defaultValue) {
    const index = process.argv.indexOf(key);
    if (index < 0) {
      return defaultValue;
    }
    const value = process.argv[index + 1];
    if (typeof value === 'undefined' || value.startsWith('-')) {
      throw `The ${key} option requires a value.`;
    }
    return value;
  }
}

function getAllCanaries() {
  return new Promise((resolve, reject) => {
    const canaries = [];

    synthetics.describeCanaries().eachPage((err, data) => {
      if (err) {
        reject(err);
      } else {
        if (data === null) {
          resolve(canaries);
        } else {
          canaries.push(...data.Canaries);
        }
      }
    });
  });
}

function getRuntimeVersions() {
  return new Promise((resolve, reject) => {
    const jsVersions = [];
    const pythonVersions = [];
    synthetics.describeRuntimeVersions().eachPage((err, data) => {
      if (err) {
        reject(err);
      } else {
        if (data === null) {
          jsVersions.sort((a, b) => a.ReleaseDate - b.ReleaseDate);
          pythonVersions.sort((a, b) => a.ReleaseDate - b.ReleaseDate);
          resolve({
            isLatestVersion(version) {
              const latest = this.getLatestVersion(version);
              return latest === version;
            },
            getLatestVersion(version) {
              if (jsVersions.some(v => v.VersionName === version)) {
                return jsVersions[jsVersions.length - 1].VersionName;
              } else if (pythonVersions.some(v => v.VersionName === version)) {
                return pythonVersions[pythonVersions.length - 1].VersionName;
              } else {
                throw Error(`Unknown version ${version}`);
              }
            }
          });
        } else {
          for (const version of data.RuntimeVersions) {
            if (version.VersionName === 'syn-1.0') {
              jsVersions.push(version);
            } else if (version.VersionName.startsWith('syn-nodejs-2.')) {
              jsVersions.push(version);
            } else if (version.VersionName.startsWith('syn-nodejs-puppeteer-')) {
              jsVersions.push(version);
            } else if (version.VersionName.startsWith('syn-python-selenium-')) {
              pythonVersions.push(version);
            } else {
              throw Error(`Unknown version ${version.VersionName}`);
            }
          }
        }
      }
    });
  });
}

async function upgradeCanary(upgrade) {
  console.log(`Upgrading canary ${upgrade.Name} from ${upgrade.FromVersion} to ${upgrade.ToVersion}`);
  await synthetics.updateCanary({ Name: upgrade.Name, RuntimeVersion: upgrade.ToVersion }).promise();
  while (true) {
    await usleep(SLEEP_TIME);
    console.log(`Getting the state of canary ${upgrade.Name}`);
    const response = await synthetics.getCanary({ Name: upgrade.Name }).promise();
    const state = response.Canary.Status.State;
    console.log(`The state of canary ${upgrade.Name} is ${state}`);
    if (state === 'ERROR' || response.Canary.Status.StateReason) {
      throw response.Canary.Status.StateReason;
    }
    if (state !== 'UPDATING') {
      return;
    }
  }
}

function usleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}
```

# Écriture d'un script Canary
<a name="CloudWatch_Synthetics_Canaries_WritingCanary"></a>

Les sections suivantes expliquent comment écrire un script Canary et comment intégrer un script Canary à d'autres AWS services ainsi qu'à des dépendances et bibliothèques externes.

**Topics**
+ [Écriture d’un script Canary en utilisant l’exécution Java](Synthetics_WritingCanary_Java.md)
+ [Écriture d’un script Canary Node.js en utilisant l’exécution Playwright](Synthetics_WritingCanary_Nodejs_Playwright.md)
+ [Écriture d’un script Canary Node.js utilisant l’exécution Puppeteer](CloudWatch_Synthetics_Canaries_WritingCanary_Nodejs_Pup.md)
+ [Écriture d'un script Canary Python](CloudWatch_Synthetics_Canaries_WritingCanary_Python.md)
+ [Écrire une configuration JSON pour le plan Node.js Multi Checks](CloudWatch_Synthetics_WritingCanary_Multichecks.md)

# Écriture d’un script Canary en utilisant l’exécution Java
<a name="Synthetics_WritingCanary_Java"></a>

**Topics**
+ [Structure d’un projet Java pour un script Canary](#Synthetics_canary_Java_package)
+ [Empaquetage du projet pour un script Canary](#Synthetics_canary_Java_package_canary)
+ [Nom du gestionnaire](#Synthetics_canary_Java_handler)
+ [CloudWatch Configurations Synthetics](#Synthetics_canary_Java_config)
+ [CloudWatch Variables d'environnement Synthetics](#Synthetics_canary_Java_variables)

## Structure d’un projet Java pour un script Canary
<a name="Synthetics_canary_Java_package"></a>

Pour créer un script Canary en Java, vous devez écrire votre code, le compiler et déployer les artefacts compilés dans Synthetics. Vous pouvez initialiser un projet Java Lambda de différentes manières. Par exemple, vous pouvez utiliser une configuration de projet Java standard dans votre IDE préféré, comme IntelliJ IDEA ou Visual Studio Code. Vous pouvez également créer manuellement la structure de fichiers requise.

Un projet Synthetics Java contient la structure générale suivante :

```
/project-root
    └ src
        └ main
            └ java
                └ canarypackage // name of package
                |    └ ExampleCanary.java // Canary code file
                |    └ other_supporting_classes
                - resources
                     └ synthetics.json // Synthetics configuration file    
     └ build.gradle OR pom.xml
```

Vous pouvez utiliser Maven ou Gradle pour créer votre projet et gérer les dépendances.

Dans la structure ci-dessus, la classe `ExampleCanary` est le point d’entrée ou le gestionnaire du script Canary.

 **Exemple de classe Java pour un script Canary** 

Dans cet exemple, un canari envoie une requête get à une URL stockée dans la variable d'environnement Lambda *TESTING\$1URL*. Ce script Canary n’utilise pas les méthodes fournies par l’exécution Synthetics.

```
package canarypackage;

import java.net.HttpURLConnection;
import java.net.URL;

// Handler value: canary.ExampleCanary::canaryCode
public class ExampleCanary { 
  public void canaryCode() throws Exception{ 
      URL url = new URL(System.getenv("TESTING_URL"));
      HttpURLConnection con=(HttpURLConnection)url.openConnection();
      con.setRequestMethod("GET");
      con.setConnectTimeout(5000);
      con.setReadTimeout(5000);
      int status=con.getResponseCode();
      if(status!=200){
        throw new Exception("Failed to load " + url + ", status code: " + status);
      }
  }
}
```

Il est fortement recommandé de modulariser vos scripts Canary à l’aide de la fonction de bibliothèque `executeStep` fournie par Synthetics. Le canari fait `get` appel à deux variables d' URL2 environnement URL1 et d' URLs approvisionnement distinctes.

**Note**  
Pour utiliser la fonctionnalité `executeStep`, la méthode de gestion du script Canary doit prendre en compte un paramètre de type Synthetics, comme indiqué ci-dessous. 

```
package canarypackage;

import com.amazonaws.synthetics.Synthetics;
import java.net.HttpURLConnection;
import java.net.URL;

// Handler value: canary.ExampleCanary::canaryCode
public class ExampleCanary {
  public void canaryCode(Synthetics synthetics) throws Exception {
    createStep("Step1", synthetics, System.getenv("URL1"));
    createStep("Step2", synthetics, System.getenv("URL2"));
    return;
  }
  
  private void createStep(String stepName, Synthetics synthetics, String url) throws Exception{
    synthetics.executeStep(stepName,()->{
      URL obj=new URL(url);
      HttpURLConnection con=(HttpURLConnection)obj.openConnection();
      con.setRequestMethod("GET");
      con.setConnectTimeout(5000);
      con.setReadTimeout(5000);
      int status=con.getResponseCode();
      if(status!=200){
        throw new Exception("Failed to load" + url + "status code:" + status);
      }
      return null;
    }).get();
  }
}
```

## Empaquetage du projet pour un script Canary
<a name="Synthetics_canary_Java_package_canary"></a>

Synthetics accepte le code d’un Canary Java au format *zip*. Le fichier zip contient les fichiers de classes du code du script Canary, les fichiers JAR des dépendances tierces et le fichier de configuration  Synthetics.

Un fichier zip Synthetics Java présente la structure générale suivante.

```
example-canary
    └ lib
    |  └ //third party dependency jars
       └ java-canary.jar
    └ synthetics.json
```

Pour créer ce fichier zip à partir de la structure de projet ci-dessus, vous pouvez utiliser Gradle (build.gradle) ou Maven (pom.xml). Voici un exemple.

[Pour plus d'informations sur les interdépendances ou les interfaces liées au temps de compilation pour la bibliothèque Synthetics, consultez le fichier README sous -java. aws-cloudwatch-synthetics-sdk](https://github.com/aws/aws-cloudwatch-synthetics-sdk-java/tree/main)

```
plugins {
    id 'java'
}

repositories {
    mavenCentral()
}

dependencies {
    // Third party dependencies 
    // example: implementation 'software.amazon.awssdk:s3:2.31.9'
    
    // Declares dependency on Synthetics interfaces for compiling only
    // Refer https://github.com/aws/aws-cloudwatch-synthetics-sdk-java for building from source.
    compileOnly 'software.amazon.synthetics:aws-cloudwatch-synthetics-sdk-java:1.0.0'}

test {
    useJUnitPlatform()
}

// Build the zip to be used as Canary code.
task buildZip(type: Zip) {

    archiveFileName.set("example-canary.zip")
    destinationDirectory.set(file("$buildDir"))
    
    from processResources
    into('lib') {
        from configurations.runtimeClasspath
        from(tasks.named("jar"))
    }
    from "src/main/java/resources/synthetics.json"
    
    doLast {
        println "Artifact written to: ${archiveFile.get().asFile.absolutePath}"
    }
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(21)
    }
}

tasks.named("build") {
    dependsOn "buildZip"
}
```

## Nom du gestionnaire
<a name="Synthetics_canary_Java_handler"></a>

Le nom du gestionnaire correspond au point d’entrée du script Canary. Pour l’exécution Java, le gestionnaire est au format suivant.

```
<<full qualified name for canary class>>::<<name of the method to start the execution from>>
// for above code: canarypackage.ExampleCanary::canaryCode
```

## CloudWatch Configurations Synthetics
<a name="Synthetics_canary_Java_config"></a>

Vous pouvez configurer le comportement de l’exécution Java Synthetics à l’aide d’un fichier de configuration JSON facultatif nommé `synthetics.json`. Ce fichier doit être empaqueté dans le répertoire racine du package zip. Bien qu'un fichier de configuration soit facultatif, il CloudWatch utilise les valeurs par défaut si vous ne fournissez pas de fichier de configuration ou s'il manque une clé de configuration.

Les valeurs de configuration prises en charge et leurs valeurs par défaut sont les suivantes.

```
{
    "step": {
        "stepSuccessMetric": true,
        "stepDurationMetric": true,
        "continueOnStepFailure": false,
        "stepsReport": true
    },
    "logging": {
        "logRequest": false,
        "logResponse": false
    },
    "httpMetrics": {
        "metric_2xx": true,
        "metric_4xx": true,
        "metric_5xx": true,
        "aggregated2xxMetric": true,
        "aggregated4xxMetric": true,
        "aggregated5xxMetric": true
    },
    "canaryMetrics": {
        "failedCanaryMetric": true,
        "aggregatedFailedCanaryMetric": true
    }
}
```

 **Étapes de configuration** 
+ *continueOnStepEchec* : détermine si un script doit continuer même après l'échec d'une étape. La valeur par défaut est false.
+ *stepSuccessMetric* : détermine si la métrique ` SuccessPercent` d’une étape est émise. La `SuccessPercent` métrique d'une étape est de *100* pour Canary Run si l'étape réussit, et de *0* si l'étape échoue. Par défaut, la valeur est *true*.
+ *stepDurationMetric*— Détermine si la métrique de *durée* d'une étape est émise. La métrique *Durée* est émise sous forme de durée, en millisecondes, de l’exécution de l’étape. La valeur par défaut est *true*.

 **Configurations d'enregistrement** 

S'applique aux journaux générés par CloudWatch Synthetics. Contrôle la verbosité des journaux de requêtes et de réponses.
+ *logRequest* : indique s’il faut journaliser chaque requête dans les journaux du script Canary. La valeur par défaut est false.
+ *logResponse* : indique s’il faut journaliser chaque réponse dans les journaux du script Canary. La valeur par défaut est false.

 **Configurations des métriques HTTP** 

Configurations pour les métriques liées au nombre de requêtes réseau avec différents codes d'état HTTP, émises par CloudWatch Synthetics pour ce canari.
+ *metric\$12xx* — Spécifie s'il faut émettre la métrique *2xx* (avec la CanaryName dimension) pour ce canari. Par défaut, la valeur est *true*.
+ *metric\$14xx* — Spécifie s'il faut émettre la métrique *4xx* (avec la CanaryName dimension) pour ce canari. Par défaut, la valeur est *true*.
+ *metric\$15xx* — Spécifie s'il faut émettre la métrique *5xx* (avec la CanaryName dimension) pour ce canari. Par défaut, la valeur est *true*.
+ *Aggregated2xxMetric* — Spécifie s'il faut émettre la métrique *2xx* (sans la CanaryName dimension) pour ce canari. Par défaut, la valeur est *true*.
+ *Aggregated4xxMetric* — Spécifie s'il faut émettre la métrique *4xx* (sans la CanaryName dimension) pour ce canari. Par défaut, la valeur est *true*.
+ *Aggregated5xxMetric* — Spécifie s'il faut émettre la métrique *5xx* (sans la CanaryName dimension) pour ce canari. Par défaut, la valeur est *true*.

 **Configurations des métriques du script Canary** 

Configurations pour les autres métriques émises par CloudWatch Synthetics.
+ *failedCanaryMetric*Network Access Analyzer indique s'il faut émettre la métrique *Failed* (avec la CanaryName dimension) pour ce canari. Par défaut, la valeur est *true*.
+ *aggregatedFailedCanaryMétrique* — Spécifie s'il faut émettre la métrique d'*échec* (sans la CanaryName dimension) pour ce canari. Par défaut, la valeur est *true*.

## CloudWatch Variables d'environnement Synthetics
<a name="Synthetics_canary_Java_variables"></a>

Vous pouvez configurer le niveau de journalisation et le format des journaux à l’aide de variables d’environnement.

 **Format du journal** 

Le moteur d'exécution CloudWatch Synthetics Java CloudWatch crée des journaux pour chaque exécution de Canary. Les journaux sont écrits au format JSON pour faciliter les requêtes. Vous pouvez éventuellement modifier le format du journal en *TEXT*.
+ *Nom de la variable d’environnement* : CW\$1SYNTHETICS\$1LOG\$1FORMAT
+ *Valeurs prises en charge* : JSON, TEXT
+ *Par défaut* : JSON

 **Niveaux de journalisation** 
+ *Nom de la variable d’environnement* : CW\$1SYNTHETICS\$1LOG\$1LEVEL
+ *Valeurs prises en charge* : TRACE, DEBUG, INFO, WARN, ERROR, FATAL
+ *Valeur par défaut* : INFO

Outre les variables d’environnement ci-dessus, une variable d’environnement par défaut est ajoutée à l’exécution Java. Ajoutez la variable d’environnement `AWS_LAMBDA-EXEC_WRAPPER` à votre fonction et définissez sa valeur sur `/opt/synthetics-otel-instrument`. Cette variable modifie le comportement de démarrage de la fonction pour la télémétrie. Si cette variable existe déjà, assurez-vous qu’elle est configurée avec la valeur requise.

# Écriture d’un script Canary Node.js en utilisant l’exécution Playwright
<a name="Synthetics_WritingCanary_Nodejs_Playwright"></a>

**Topics**
+ [Empaquetage de vos fichiers Canary Node.js pour l’exécution Playwright](#Synthetics_canary_Nodejs_Playwright_package)
+ [Modification d'un script de dramaturge existant pour l'utiliser comme canari CloudWatch Synthetics](#CloudWatch_Synthetics_canary_edit_Playwright_script)
+ [CloudWatch Configurations Synthetics](#Synthetics_canary_configure_Playwright_script)

## Empaquetage de vos fichiers Canary Node.js pour l’exécution Playwright
<a name="Synthetics_canary_Nodejs_Playwright_package"></a>

 Votre script Canary est constitué d’un fichier `.js` (syntaxe CommonJS) ou `.mjs` (syntaxe ES) contenant votre code de gestionnaire Synthetics,ainsi que de tout autre module ou package dont votre code dépend. Les scripts créés au format ES (ECMAScript) doivent utiliser .mjs comme extension ou inclure un fichier package.json avec le champ « type » : « module » défini. Contrairement à d’autres exécutions comme Node.js Puppeteer, il n’est pas nécessaire de respecter une structure de dossiers particulière pour enregistrer vos scripts. Vous pouvez empaqueter vos scripts directement. Utilisez votre utilitaire `zip` préféré pour créer un fichier `.zip` contenant votre fichier gestionnaire à la racine. Si votre script Canary dépend de packages supplémentaires qui ne sont pas inclus dans l’exécution Synthetics, vous pouvez les ajouter dans votre fichier `.zip`. Pour ce faire, vous pouvez installer les bibliothèques requises par votre fonction dans le répertoire `node_modules` à l’aide de la commande `npm install`. L’exemple suivant montre les commandes CLI permettant de créer un fichier  `.zip` nommé `my_deployment_package.zip`, contenant le fichier `index.js` ou `index.mjs` (le gestionnaire Synthetics) ainsi que ses dépendances. Dans cet exemple, les dépendances sont installées à l’aide du gestionnaire de packages `npm`.

```
~/my_function
├── index.mjs
├── synthetics.json
├── myhelper-util.mjs    
└── node_modules
    ├── mydependency
```

Créez un fichier `.zip` contenant le contenu de votre dossier de projet à la racine. Utilisez l’option `r` (récursive), comme dans l’exemple ci-dessous, pour que `zip` compresse également les sous-dossiers.

```
zip -r my_deployment_package.zip .
```

Ajoutez un fichier de configuration Synthetics pour configurer le comportement de Synthetics. CloudWatch Vous pouvez créer un fichier `synthetics.json` et l’enregistrer au même emplacement que votre point d’entrée ou fichier gestionnaire.

En option, vous pouvez également enregistrer votre fichier de point d’entrée dans une structure de dossiers de votre choix. Assurez-vous toutefois que le chemin du dossier est indiqué dans le nom de votre gestionnaire.

 **Nom du gestionnaire** 

Assurez-vous de définir le point d'entrée (gestionnaire) de votre script Canary de sorte que ` myCanaryFilename.functionName` corresponde au nom du fichier du point d'entrée de votre script. Vous pouvez également stocker le script Canary dans un dossier séparé, tel que ` myFolder/my_canary_filename.mjs`. Si vous le stockez dans un dossier séparé, spécifiez ce chemin dans le point d'entrée de votre script, tel que ` myFolder/my_canary_filename.functionName`.

## Modification d'un script de dramaturge existant pour l'utiliser comme canari CloudWatch Synthetics
<a name="CloudWatch_Synthetics_canary_edit_Playwright_script"></a>

Vous pouvez modifier un script existant pour Playwright et Node.js afin de l’utiliser comme script Canary. Pour plus d’informations sur Playwright, consultez la documentation de la [bibliothèque Playwright](https://playwright.dev/docs/api/class-playwright). 

Vous pouvez utiliser le script Playwright suivant qui est enregistré dans le fichier ` exampleCanary.mjs`.

```
import { chromium } from 'playwright';
import { expect } from '@playwright/test';

const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com', {timeout: 30000});
await page.screenshot({path: 'example-home.png'});

const title = await page.title();
expect(title).toEqual("Example Domain");
 
await browser.close();
```

Pour le convertir le script, procédez comme suit :

1. Créez et exportez une fonction `handler`. Le gestionnaire est la fonction de point d'entrée du script. Vous pouvez choisir n’importe quel nom pour la fonction de gestionnaire, mais celui utilisé dans votre script doit être identique à celui défini dans le gestionnaire Canary. Si le nom de votre script est `exampleCanary.mjs` et que le nom de la fonction de gestionnaire est `myhandler`, alors le gestionnaire Canary s’appelle `exampleCanary.myhandler`. Dans l’exemple suivant, le nom de fonction de gestionnaire est `handler`.

   ```
   exports.handler = async () => {
     // Your script here
     };
   ```

1. Importez le `Synthetics Playwright module` en tant que dépendance.

   ```
   import { synthetics } from '@aws/synthetics-playwright';
   ```

1. Lancez un navigateur à l’aide de la fonction `Launch` Synthetics.

   ```
   const browser = await synthetics.launch();
   ```

1. Créez une nouvelle page Playwright à l’aide de la fonction Synthetics `newPage`.

   ```
   const page = await synthetics.newPage();
   ```

Votre script est maintenant prêt à être exécuté en tant que script Canary Synthetics. Exemple de script mis à jour :

 **Script mis à jour au ES6 format** 

Le fichier de script est enregistré avec une extension `.mjs`.

```
import { synthetics } from '@aws/synthetics-playwright';
import { expect } from '@playwright/test';

export const handler = async (event, context) => {
  try {
        // Launch a browser
        const browser = await synthetics.launch();
        
        // Create a new page
        const page = await synthetics.newPage(browser);
        
        // Navigate to a website
        await page.goto('https://www.example.com', {timeout: 30000});
        
        // Take screenshot
        await page.screenshot({ path: '/tmp/example.png' });
        
        // Verify the page title
        const title = await page.title();
        expect(title).toEqual("Example Domain");
    } finally {
        // Ensure browser is closed
        await synthetics.close();
    }
};
```

 **Script mis à jour au format CommonJS** 

Le fichier de script est enregistré avec une extension `.js`.

```
const { synthetics } = require('@aws/synthetics-playwright');
const { expect } = require('@playwright/test');

exports.handler = async (event) => {
  try {
    const browser = await synthetics.launch();
    const page = await synthetics.newPage(browser);
    await page.goto('https://www.example.com', {timeout: 30000});
    await page.screenshot({ path: '/tmp/example.png' });
    const title = await page.title();
    expect(title).toEqual("Example Domain");
  } finally {
    await synthetics.close();
  }
};
```

## CloudWatch Configurations Synthetics
<a name="Synthetics_canary_configure_Playwright_script"></a>

Vous pouvez configurer le comportement de l’exécution Playwright Synthetics à l’aide d’un fichier de configuration JSON facultatif nommé `synthetics.json`. Ce fichier doit être empaqueté au même emplacement que le fichier gestionnaire. Bien qu'un fichier de configuration soit facultatif, si vous ne fournissez pas de fichier de configuration ou si une clé de configuration est manquante, CloudWatch il utilise les valeurs par défaut.

 **Empaquetage de votre fichier de configuration** 

Les valeurs de configuration prises en charge et leurs valeurs par défaut sont les suivantes.

```
{
    "step": {
        "screenshotOnStepStart": false,
        "screenshotOnStepSuccess": false,
        "screenshotOnStepFailure": false,
        "stepSuccessMetric": true,
        "stepDurationMetric": true,
        "continueOnStepFailure": true,
        "stepsReport": true
    },
    "report": {
        "includeRequestHeaders": true,
        "includeResponseHeaders": true,
        "includeUrlPassword": false,
        "includeRequestBody": true,
        "includeResponseBody": true,
        "restrictedHeaders": ['x-amz-security-token', 'Authorization'], // Value of these headers is redacted from logs and reports
        "restrictedUrlParameters": ['Session', 'SigninToken'] // Values of these url parameters are redacted from logs and reports
    },
    "logging": {
        "logRequest": false,
        "logResponse": false,
        "logResponseBody": false,
        "logRequestBody": false,
        "logRequestHeaders": false,
        "logResponseHeaders": false
    },
    "httpMetrics": {
        "metric_2xx": true,
        "metric_4xx": true,
        "metric_5xx": true,
        "failedRequestsMetric": true,
        "aggregatedFailedRequestsMetric": true,
        "aggregated2xxMetric": true,
        "aggregated4xxMetric": true,
        "aggregated5xxMetric": true
    },
    "canaryMetrics": {
        "failedCanaryMetric": true,
        "aggregatedFailedCanaryMetric": true
    },
    "userAgent": "",
    "har": true
}
```

 **Étapes de configuration** 
+ `screenshotOnStepStart` : détermine si Synthetics doit prendre une capture d’écran avant le début de l’étape. La valeur par défaut est `true`. 
+ `screenshotOnStepSuccess` : détermine si Synthetics doit prendre une capture d’écran après la réussite d’une étape. La valeur par défaut est `true`. 
+ `screenshotOnStepFailure` : détermine si Synthetics doit prendre une capture d’écran après l’échec d’une étape. La valeur par défaut est `true`. 
+ `continueOnStepFailure` : détermine si un script doit continuer à s’exécuter même après l’échec d’une étape. La valeur par défaut est `false`. 
+ `stepSuccessMetric` : détermine si la métrique ` SuccessPercent` d’une étape est émise. La métrique `SuccessPercent` d’une étape est `100` pour l’exécution du script Canary si l’étape réussit, et `0` si l’étape échoue. La valeur par défaut est `true`. 
+ `stepDurationMetric` : détermine si la métrique `Duration` d’une étape est émise. La métrique `Duration` est émise sous forme de durée, en millisecondes, de l’exécution de l’étape. La valeur par défaut est `true`.

 **Configurations des rapports** 

Inclut tous les rapports générés par CloudWatch Synthetics, tels qu'un fichier HAR et un rapport sur les étapes de Synthetics. Les champs de masquage des données sensibles, `restrictedHeaders` et `restrictedUrlParameters`, s’appliquent également aux journaux générés par Synthetics. 
+ `includeRequestHeaders` : indique s’il faut inclure les en-têtes de requête dans le rapport. La valeur par défaut est `false`. 
+ `includeResponseHeaders` : s’il faut inclure les en-têtes de réponse dans le rapport. La valeur par défaut est `false`.
+ `includeUrlPassword` : indique s’il faut inclure un mot de passe présent dans l’URL. Par défaut, les mots de passe qui apparaissent dans URLs les journaux et les rapports sont supprimés afin d'empêcher la divulgation de données sensibles. La valeur par défaut est `false`. 
+ `includeRequestBody` : indique s’il faut inclure le corps de la requête dans le rapport. La valeur par défaut est `false`. 
+ `includeResponseBody` : indique s’il faut inclure le corps de la réponse dans le rapport. La valeur par défaut est `false`. 
+ `restrictedHeaders` : une liste d’en-têtes à ignorer lorsque les en-têtes sont inclus. Cela s'applique à la fois aux en-têtes de demande et de réponse. Par exemple, vous pouvez masquer vos identifiants en définissant `includeRequestHeaders` sur « true » et `restrictedHeaders` sur `['Authorization']`. 
+ `restrictedUrlParameters` : une liste de chemins d’URL ou de paramètres de requête à masquer. Cela s'applique à URLs ceux qui apparaissent dans les journaux, les rapports et les erreurs. Le paramètre est sensible à la casse. Vous pouvez utiliser un astérisque (`*`) pour masquer toutes les valeurs des chemins et paramètres d’URL. La valeur par défaut est un tableau vide. 
+ `har` : indique s’il faut générer une archive HTTP (fichier HAR). La valeur par défaut est `true`.

L’exemple suivant illustre un fichier de configuration de rapports.

```
"includeRequestHeaders": true,
"includeResponseHeaders": true,
"includeUrlPassword": false,
"includeRequestBody": true,
"includeResponseBody": true,
"restrictedHeaders": ['x-amz-security-token', 'Authorization'], // Value of these headers is redacted from logs and reports
"restrictedUrlParameters": ['Session', 'SigninToken'] // Values of these URL parameters are redacted from logs and reports
```

 **Configurations d'enregistrement** 

S'applique aux journaux générés par CloudWatch Synthetics. Contrôle la verbosité des journaux de requêtes et de réponses.
+ `logRequest` : indique s’il faut journaliser chaque requête dans les journaux du script Canary. Pour les scripts Canary d'interface utilisateur, cette option journalise chaque demande envoyée par le navigateur. La valeur par défaut est ` false`. 
+ `logResponse` : indique s’il faut journaliser chaque réponse dans les journaux du script Canary. Pour les scripts Canary d'interface utilisateur, cette option journalise chaque réponse reçue par le navigateur. La valeur par défaut est ` false`. 
+ `logRequestBody` : indique s’il faut journaliser le corps des requêtes en même temps que les requêtes dans les journaux du script Canary. Cette configuration s’applique uniquement si `logRequest` est défini sur « true ». La valeur par défaut est `false`. 
+ `logResponseBody` : indique s’il faut journaliser le corps des réponses en même temps que les requêtes dans les journaux du script Canary. Cette configuration s’applique uniquement si `logResponse` est défini sur « true ». La valeur par défaut est `false`. 
+ `logRequestHeaders` : indique s’il faut journaliser les en-têtes de requête avec les requêtes dans les journaux du script Canary. Cette configuration s’applique uniquement si ` logRequest` est défini sur « true ». La valeur par défaut est `false`. 
+ `logResponseHeaders` : indique s’il faut journaliser les en-têtes de réponse avec les réponses dans les journaux du script Canary. Cette configuration s’applique uniquement si ` logResponse` est défini sur « true ». La valeur par défaut est `false`. 

 **Configurations des métriques HTTP** 

Configurations pour les métriques liées au nombre de requêtes réseau avec différents codes d'état HTTP, émises par CloudWatch Synthetics pour ce canari.
+ `metric_2xx` : indique s’il faut émettre la métrique `2xx` (avec la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est ` true`. 
+ `metric_4xx` : indique s’il faut émettre la métrique `4xx` (avec la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est ` true`. 
+ `metric_5xx` : indique s’il faut émettre la métrique `5xx` (avec la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est ` true`. 
+ `failedRequestsMetric` : indique s’il faut émettre la métrique ` failedRequests` (avec la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`. 
+ `aggregatedFailedRequestsMetric` : indique s’il faut émettre la métrique ` failedRequests` (sans la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`. 
+ `aggregated2xxMetric` : indique s’il faut émettre la métrique `2xx` (sans la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`. 
+ `aggregated4xxMetric` : indique s’il faut émettre la métrique `4xx` (sans la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`. 
+ `aggregated5xxMetric` : indique s’il faut émettre la métrique `5xx` (sans la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`. 

 **Configurations des métriques du script Canary** 

Configurations pour les autres métriques émises par CloudWatch Synthetics.
+ `failedCanaryMetric` : indique s’il faut émettre la métrique `Failed` (avec la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est ` true`. 
+ `aggregatedFailedCanaryMetric` : indique s’il faut émettre la métrique ` Failed` (sans la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`. 

 **Autres configurations** 
+ `userAgent` : chaîne à ajouter à l’agent utilisateur. L'agent utilisateur est une chaîne incluse dans l'en-tête de la demande et identifie votre navigateur auprès des sites Web que vous visitez lorsque vous utilisez le navigateur sans en-tête. CloudWatch Synthetics ajoute automatiquement. `CloudWatchSynthetics/canary-arn to the user agent` La configuration spécifiée est ajoutée à l’agent utilisateur généré. Par défaut, la valeur ajoutée à l’agent est une chaîne vide (`""`).

### CloudWatch Variables d'environnement Synthetics
<a name="Synthetics_canary_Nodejs_Playwright_script"></a>

Configurez le niveau de journalisation et le format des journaux à l’aide de variables d’environnement.

 **Format du journal** 

Le runtime CloudWatch Synthetics Playwright CloudWatch crée des journaux pour chaque course de Canary. Les journaux sont écrits au format JSON pour faciliter les requêtes. Vous pouvez éventuellement modifier le format du journal en `TEXT`.
+ `Environment variable name` : CW\$1SYNTHETICS\$1LOG\$1FORMAT 
+ `Supported values` : JSON, TEXT 
+ `Default` : JSON 

 **Niveaux de journalisation** 

Bien que l’activation du mode `Debug` augmente la quantité de détails enregistrés, cela peut s’avérer utile pour la résolution des problèmes.
+ `Environment variable name` : CW\$1SYNTHETICS\$1LOG\$1LEVEL
+ `Supported values` : TRACE, DEBUG, INFO, WARN, ERROR, FATAL 
+ `Default` : INFO

# Écriture d’un script Canary Node.js utilisant l’exécution Puppeteer
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Nodejs_Pup"></a>

**Topics**
+ [Création d'un CloudWatch canari Synthetics à partir de zéro](#CloudWatch_Synthetics_Canaries_write_from_scratch)
+ [Empaquetage de vos fichiers Canary Node.js](#CloudWatch_Synthetics_Canaries_package)
+ [Modification d'un script Puppeteer existant pour l'utiliser en tant que script Canary Synthetics](#CloudWatch_Synthetics_Canaries_modify_puppeteer_script)
+ [Variables d’environnement](#CloudWatch_Synthetics_Environment_Variables)
+ [Intégrer votre Canary à d'autres AWS services](#CloudWatch_Synthetics_Canaries_AWS_integrate)
+ [Utilisation forcée d'une adresse IP statique par le script Canary](#CloudWatch_Synthetics_Canaries_staticIP)

## Création d'un CloudWatch canari Synthetics à partir de zéro
<a name="CloudWatch_Synthetics_Canaries_write_from_scratch"></a>

Voici un exemple minimal de script Canary Synthetics. Ce script est transmis comme une exécution réussie et renvoie une chaîne. Pour voir à quoi ressemble un script Canary qui a échoué, remplacez `let fail = false;` par `let fail = true;`. 

Vous devez définir une fonction de point d'entrée pour le script Canary. Pour observer comment les fichiers sont téléchargés dans l’emplacement Amazon S3 défini comme `ArtifactS3Location` du script Canary, créez ces fichiers dans le dossier `/tmp`. Tous les artefacts du script Canary doivent être enregistrés dans `/tmp`, car il s’agit du seul répertoire accessible en écriture. Assurez-vous que le chemin des captures d’écran est défini sur `/tmp` pour toutes les captures ou autres fichiers créés par le script. Synthetics charge automatiquement les fichiers ` /tmp` dans un compartiment S3.

```
/tmp/<name>
```

Une fois le script exécuté, les métriques d' pass/fail état et de durée sont publiées dans un compartiment S3 CloudWatch et les fichiers situés en dessous `/tmp` sont chargés dans un compartiment S3.

```
const basicCustomEntryPoint = async function () {

    // Insert your code here

    // Perform multi-step pass/fail check

    // Log decisions made and results to /tmp

    // Be sure to wait for all your code paths to complete 
    // before returning control back to Synthetics.
    // In that way, your canary will not finish and report success
    // before your code has finished executing

    // Throw to fail, return to succeed
    let fail = false;
    if (fail) {
        throw "Failed basicCanary check.";
    }

    return "Successfully completed basicCanary checks.";
};

exports.handler = async () => {
    return await basicCustomEntryPoint();
};
```

Ensuite, nous allons développer le script pour utiliser la journalisation Synthetics et passer un appel à l'aide du SDK. AWS À des fins de démonstration, ce script créera un client Amazon DynamoDB et réalisera un appel à l'API ListTables DynamoDB. Il enregistre la réponse à la demande et les journaux réussissent ou échouent selon le succès de la demande.

```
const log = require('@aws/synthetics-logger');
const AWS = require('aws-sdk');
// Require any dependencies that your script needs
// Bundle additional files and dependencies into a .zip file with folder structure
// nodejs/node_modules/additional files and folders

const basicCustomEntryPoint = async function () {

    log.info("Starting DynamoDB:listTables canary.");
    
    let dynamodb = new AWS.DynamoDB();
    var params = {};
    let request = await dynamodb.listTables(params);
    try {
        let response = await request.promise();
        log.info("listTables response: " + JSON.stringify(response));
    } catch (err) {
        log.error("listTables error: " + JSON.stringify(err), err.stack);
        throw err;
    }

    return "Successfully completed DynamoDB:listTables canary.";
};

exports.handler = async () => {
    return await basicCustomEntryPoint();
};
```

## Empaquetage de vos fichiers Canary Node.js
<a name="CloudWatch_Synthetics_Canaries_package"></a>

 **Pour syn-nodejs-puppeteer -11,0 et plus** 

 L'ancienne structure d'empaquetage (pour syn-nodejs-puppeteer -10.0 et versions inférieures) est toujours prise en charge dans les nouvelles versions.

Créez un script en utilisant l’une des options suivantes :
+ fichier .js (syntaxe CommonJS)
+ fichier .mjs (syntaxe des modules ES)

Pour les modules ES, utilisez l’une des options suivantes :
+ fichier .js (syntaxe CommonJS)
+ fichier .mjs (syntaxe des modules ES)

La structure du package est définie ci-dessous :
+ Fichier gestionnaire à la racine (index.js/index.mjs)
+ Fichier de configuration facultatif (synthetics.json)
+ Dépendances supplémentaires dans node\$1modules (si nécessaire)

Exemple de structure d’empaquetage :

```
  my_function/
├── index.mjs
├── synthetics.json
├── helper-utils.mjs
└── node_modules/
    └── dependencies
```

Pour empaqueter, procédez comme suit :

1. Installez les dépendances (le cas échéant).

   ```
   npm install
   ```

1. Créer un package .zip.

   ```
   zip -r my_deployment_package.zip
   ```

 **Pour syn-nodejs-puppeteer -11,0 et moins** 

La structure suivante est requise lorsque vous utilisez Amazon S3 :

```
  nodejs/
└── node_modules/
    └── myCanaryFilename.js
```

 **Pour ajouter un support de sous-dossier facultatif dans syn-nodejs-puppeteer -3.4\$1 :** 

```
nodejs/
└── node_modules/
    └── myFolder/
        └── myCanaryFilename.js
```

**Note**  
Le chemin du gestionnaire indiqué dans la configuration doit correspondre à l’emplacement réel du fichier.

 **Nom du gestionnaire** 

Assurez-vous de définir le point d'entrée (gestionnaire) de votre script Canary de sorte que ` myCanaryFilename.functionName` corresponde au nom du fichier du point d'entrée de votre script. Si vous utilisez une exécution antérieure à `syn-nodejs-puppeteer-3.4`, alors `functionName` doit être `handler`. Si vous utilisez ` syn-nodejs-puppeteer-3.4` ou une version ultérieure, vous pouvez choisir n'importe quel nom de fonction comme gestionnaire. Si vous utilisez `syn-nodejs-puppeteer-3.4` ou une version ultérieure, vous pouvez également stocker le script canary dans un dossier séparé tel que ` nodejs/node_modules/myFolder/my_canary_filename`. Si vous le stockez dans un dossier séparé, spécifiez ce chemin dans le point d'entrée de votre script, tel que ` myFolder/my_canary_filename.functionName`.

## Modification d'un script Puppeteer existant pour l'utiliser en tant que script Canary Synthetics
<a name="CloudWatch_Synthetics_Canaries_modify_puppeteer_script"></a>

Cette section explique comment prendre des scripts Puppeteer, pour ensuite les modifier afin qu'ils s'exécutent en tant que scripts Canary Synthetics. Pour de plus amples informations sur Puppeteer, consultez [Puppeteer API v1.14.0](https://github.com/puppeteer/puppeteer/blob/v1.14.0/docs/api.md). 

Nous allons commencer avec cet exemple de script Puppeteer :

```
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await page.screenshot({path: 'example.png'});

  await browser.close();
})();
```

Les étapes de conversion sont les suivantes :
+ Créez et exportez une fonction `handler`. Le gestionnaire est la fonction de point d'entrée du script. Si vous utilisez une exécution antérieure à ` syn-nodejs-puppeteer-3.4`, la fonction du gestionnaire doit être nommée `handler`. Si vous utilisez `syn-nodejs-puppeteer-3.4` ou une version ultérieure, la fonction peut porter n'importe quel nom, mais il doit être identique à celui utilisé dans le script. De plus, si vous utilisez `syn-nodejs-puppeteer-3.4` ou une version ultérieure, vous pouvez stocker vos scripts dans n'importe quel dossier et spécifier ce dossier dans le nom du gestionnaire.

  ```
  const basicPuppeteerExample = async function () {};
  
  exports.handler = async () => {
      return await basicPuppeteerExample();
  };
  ```
+ Utilisez la dépendance `Synthetics`.

  ```
  var synthetics = require('@aws/synthetics-puppeteer');
  ```
+ Utilisez la fonction `Synthetics.getPage` pour obtenir un objet `Page` Puppeteer.

  ```
  const page = await synthetics.getPage();
  ```

  L'objet de page renvoyé par la fonction Synthetics.getPage contient le **page.on et les événements sont instrumentés pour** `request` la journalisation. `response` ` requestfailed` Synthetics configure également la génération de fichiers HAR pour les demandes et les réponses sur la page, et ajoute l'ARN du script Canary aux en-têtes des demandes sortantes de l'agent utilisateur sur la page.

Le script est maintenant prêt à être exécuté en tant que script Canary Synthetics. Voici le script mis à jour :

```
var synthetics = require('@aws/synthetics-puppeteer');  // Synthetics dependency

const basicPuppeteerExample = async function () {
    const page = await synthetics.getPage(); // Get instrumented page from Synthetics
    await page.goto('https://example.com');
    await page.screenshot({path: '/tmp/example.png'}); // Write screenshot to /tmp folder
};

exports.handler = async () => {  // Exported handler function 
    return await basicPuppeteerExample();
};
```

## Variables d’environnement
<a name="CloudWatch_Synthetics_Environment_Variables"></a>

Vous pouvez utiliser des variables d'environnement lorsque vous créez des scripts Canary. Cela vous permet d'écrire un seul script Canary, puis d'utiliser ce script avec des valeurs différentes pour créer rapidement plusieurs scripts Canary ayant une tâche similaire.

Par exemple, supposons que votre organisation dispose de points de terminaison tels que `prod`, ` dev` et `pre-release` pour les différentes étapes de votre développement logiciel et que vous devez créer des scripts Canary pour tester chacun de ces points de terminaison. Vous pouvez écrire un seul script Canary qui teste votre logiciel, puis spécifier différentes valeurs pour la variable d'environnement de point de terminaison lorsque vous créez chacun des trois scripts Canary. Ensuite, lorsque vous créez un script Canary, vous spécifiez le script et les valeurs à utiliser pour les variables d'environnement.

Les noms des variables d'environnement peuvent contenir des lettres, des chiffres et le caractère de soulignement. Ils doivent commencer par une lettre et comporter au moins deux caractères. La taille totale de vos variables d'environnement ne peut pas dépasser 4 Ko. Vous ne pouvez pas spécifier de variables d'environnement réservées Lambda comme noms pour vos variables d'environnement. Pour plus d'informations sur les variables d'environnement réservées, consultez [ Variables d'environnement d'exécution](https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html#configuration-envvars-runtime).

**Important**  
Les clés et valeurs des variables d'environnement sont chiffrées au repos à l'aide de AWS KMS clés AWS détenues. Cependant, les variables d’environnement ne sont pas chiffrées côté client. Ne stockez pas d'informations sensibles dans celles-ci.

L'exemple de script suivant utilise deux variables d'environnement. Ce script est destiné à un script Canary qui vérifie si une page web est disponible. Il utilise des variables d'environnement pour paramétrer à la fois l'URL qu'il vérifie et le niveau de journal Synthetics qu'il utilise CloudWatch . 

La fonction suivante définit `LogLevel` sur la valeur de la variable d'environnement ` LOG_LEVEL`.

```
 synthetics.setLogLevel(process.env.LOG_LEVEL);
```

Cette fonction définit `URL` sur la valeur de la variable d'environnement `URL`.

```
const URL = process.env.URL;
```

C'est le script complet. Lorsque vous créez un script Canary à l'aide de ce script, vous spécifiez les valeurs pour les variables d'environnement `LOG_LEVEL` et `URL`.

```
var synthetics = require('@aws/synthetics-puppeteer');
const log = require('@aws/synthetics-logger');

const pageLoadEnvironmentVariable = async function () {

    // Setting the log level (0-3)
    synthetics.setLogLevel(process.env.LOG_LEVEL);
    // INSERT URL here
    const URL = process.env.URL;

    let page = await synthetics.getPage();
    //You can customize the wait condition here. For instance,
    //using 'networkidle2' may be less restrictive.
    const response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000});
    if (!response) {
        throw "Failed to load page!";
    }
    //Wait for page to render.
    //Increase or decrease wait time based on endpoint being monitored.
    await page.waitFor(15000);
    await synthetics.takeScreenshot('loaded', 'loaded');
    let pageTitle = await page.title();
    log.info('Page title: ' + pageTitle);
    log.debug('Environment variable:' + process.env.URL);

    //If the response status code is not a 2xx success code
    if (response.status() < 200 || response.status() > 299) {
        throw "Failed to load page!";
    }
};

exports.handler = async () => {
    return await pageLoadEnvironmentVariable();
};
```

### Transmission de variables d'environnement à votre script
<a name="CloudWatch_Synthetics_Canaries_pass_variables"></a>

Pour transmettre des variables d'environnement à votre script lorsque vous créez un script Canary dans la console, spécifiez les clés et les valeurs des variables d'environnement dans la section **Environment variables (Variables d'environnement)** de la console. Pour de plus amples informations, veuillez consulter [Création d'un Canary](CloudWatch_Synthetics_Canaries_Create.md).

Pour transmettre des variables d'environnement via l'API AWS CLI, utilisez le ` EnvironmentVariables` paramètre de la `RunConfig` section. Voici un exemple de AWS CLI commande qui crée un canari qui utilise deux variables d'environnement avec les clés de `Environment` et`Region`.

```
aws synthetics create-canary --cli-input-json '{
   "Name":"nameofCanary",
   "ExecutionRoleArn":"roleArn",
   "ArtifactS3Location":"s3://amzn-s3-demo-bucket-123456789012-us-west-2",
   "Schedule":{
      "Expression":"rate(0 minute)",
      "DurationInSeconds":604800
   },
   "Code":{
      "S3Bucket": "canarycreation",
      "S3Key": "cwsyn-mycanaryheartbeat-12345678-d1bd-1234-abcd-123456789012-12345678-6a1f-47c3-b291-123456789012.zip",
      "Handler":"pageLoadBlueprint.handler"
   },
   "RunConfig": {
      "TimeoutInSeconds":60,
      "EnvironmentVariables": {
         "Environment":"Production",
         "Region": "us-west-1"
      }
   },
   "SuccessRetentionPeriodInDays":13,
   "FailureRetentionPeriodInDays":13,
   "RuntimeVersion":"syn-nodejs-2.0"
}'
```

## Intégrer votre Canary à d'autres AWS services
<a name="CloudWatch_Synthetics_Canaries_AWS_integrate"></a>

Tous les canaris peuvent utiliser la bibliothèque du AWS SDK. Vous pouvez utiliser cette bibliothèque lorsque vous écrivez votre canari pour intégrer le canari à d'autres AWS services.

Pour ce faire, vous devez ajouter le code suivant à votre script canary. Pour ces exemples, AWS Secrets Manager il est utilisé comme service auquel le canari s'intègre.
+ Importez le AWS SDK.

  ```
  const AWS = require('aws-sdk');
  ```
+ Créez un client pour le AWS service auquel vous souhaitez procéder à l'intégration.

  ```
  const secretsManager = new AWS.SecretsManager();
  ```
+ Utilisez le client pour effectuer des appels d'API vers ce service.

  ```
  var params = {
    SecretId: secretName
  };
  return await secretsManager.getSecretValue(params).promise();
  ```

L'extrait de code de script Canary suivant illustre une intégration à Secrets Manager de manière plus détaillée.

```
var synthetics = require('@aws/synthetics-puppeteer');
const log = require('@aws/synthetics-logger');
 
const AWS = require('aws-sdk');
const secretsManager = new AWS.SecretsManager();
 
const getSecrets = async (secretName) => {
    var params = {
        SecretId: secretName
    };
    return await secretsManager.getSecretValue(params).promise();
}
 
const secretsExample = async function () {
    let URL = "<URL>";
    let page = await synthetics.getPage();
    
    log.info(`Navigating to URL: ${URL}`);
    const response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000});
    
    // Fetch secrets
    let secrets = await getSecrets("secretname")
   
    /**
    * Use secrets to login. 
    *
    * Assuming secrets are stored in a JSON format like:
    * {
    *   "username": "<USERNAME>",
    *   "password": "<PASSWORD>"
    * }
    **/
    let secretsObj = JSON.parse(secrets.SecretString);
    await synthetics.executeStep('login', async function () {
        await page.type(">USERNAME-INPUT-SELECTOR<", secretsObj.username);
        await page.type(">PASSWORD-INPUT-SELECTOR<", secretsObj.password);
        
        await Promise.all([
          page.waitForNavigation({ timeout: 30000 }),
          await page.click(">SUBMIT-BUTTON-SELECTOR<")
        ]);
    });
   
    // Verify login was successful
    await synthetics.executeStep('verify', async function () {
        await page.waitForXPath(">SELECTOR<", { timeout: 30000 });
    });
};

exports.handler = async () => {
    return await secretsExample();
};
```

## Utilisation forcée d'une adresse IP statique par le script Canary
<a name="CloudWatch_Synthetics_Canaries_staticIP"></a>

Vous pouvez configurer un script Canary afin qu'il utilise une adresse IP statique.

**Pour forcer un script Canary à utiliser une adresse IP statique**

1. Créez un nouveau VPC. Pour plus d'informations, consultez [Utilisation de DNS avec votre VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html).

1. Créez une nouvelle passerelle Internet. Pour plus d'informations, consultez [Ajout d'une passerelle Internet à votre VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html#working-with-igw).

1. Créez un sous-réseau public dans votre nouveau VPC.

1. Ajoutez une nouvelle table de routage au VPC.

1. Ajoutez un routage dans la nouvelle table de routage, qui va de `0.0.0.0/0` à la passerelle Internet.

1. Associez la nouvelle table de routage au sous-réseau public.

1. Créez une adresse IP Elastic. Pour plus d'informations, consultez [Adresses IP élastiques](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html).

1. Créez une nouvelle passerelle NAT et affectez-la au sous-réseau public et à l'adresse IP Elastic.

1. Créez un sous-réseau privé dans le VPC.

1. Ajoutez un routage à la table de routage par défaut du VPC, qui va de `0.0.0.0/0` à la passerelle NAT.

1. Créez votre script Canary. 

# Écriture d'un script Canary Python
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Python"></a>

Ce script est transmis comme une exécution réussie et renvoie une chaîne. Pour voir à quoi ressemble un script Canary en échec, remplacez fail = False par fail = True

```
def basic_custom_script():
    # Insert your code here
    # Perform multi-step pass/fail check
    # Log decisions made and results to /tmp
    # Be sure to wait for all your code paths to complete 
    # before returning control back to Synthetics.
    # In that way, your canary will not finish and report success
    # before your code has finished executing
    fail = False
    if fail:
        raise Exception("Failed basicCanary check.")
    return "Successfully completed basicCanary checks."
def handler(event, context):
    return basic_custom_script()
```

## Empaquetage de vos fichiers Canary Python
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Python_package"></a>

Si vous avez plusieurs fichiers .py ou une dépendance à votre script, vous pouvez les regrouper dans un seul fichier ZIP. Si vous utilisez l'exécution `syn-python-selenium-1.1`, le fichier ZIP doit contenir votre fichier .py canary principal dans un dossier `python`, tel que `python/my_canary_filename.py`. Si vous utilisez ` syn-python-selenium-1.1` ou une version ultérieure, vous pouvez éventuellement utiliser un autre dossier, tel que `python/myFolder/my_canary_filename.py`.

Ce fichier ZIP doit contenir tous les dossiers et fichiers nécessaires, mais les autres fichiers n'ont pas besoin de se trouver dans le dossier `python`.

Assurez-vous de définir le point d'entrée de votre script Canary de sorte que ` my_canary_filename.functionName` corresponde au nom du fichier et de la fonction du point d'entrée de votre script. Si vous utilisez une exécution `syn-python-selenium-1.0`, alors `functionName` doit être `handler`. Si vous utilisez ` syn-python-selenium-1.1` ou une version ultérieure, cette restriction du nom du gestionnaire ne s'applique pas et vous pouvez également stocker le script Canary dans un dossier séparé tel que ` python/myFolder/my_canary_filename.py`. Si vous le stockez dans un dossier séparé, spécifiez ce chemin dans le point d'entrée de votre script, tel que ` myFolder/my_canary_filename.functionName`. 

## Modification d'un script Selenium existant pour l'utiliser en tant que script Canary Synthetics
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Python_Selenium"></a>

Vous pouvez rapidement modifier un script existant pour Python et Selenium pour l'utiliser comme script Canary. Pour plus d'informations sur Selenium, consultez le [site www.selenium.dev/](https://www.selenium.dev/).

Pour cet exemple, nous commencerons par le script Selenium suivant :

```
from selenium import webdriver

def basic_selenium_script():
    browser = webdriver.Chrome()
    browser.get('https://example.com')
    browser.save_screenshot('loaded.png')

basic_selenium_script()
```

Les étapes de conversion sont les suivantes.

**Pour convertir un script Selenium à utiliser comme script Canary**

1. Modifier l'instruction `import` pour utiliser Selenium à partir du module ` aws_synthetics` :

   ```
   from aws_synthetics.selenium import synthetics_webdriver as webdriver
   ```

   Le module Selenium de `aws_synthetics` garantit que le Canary peut émettre des métriques et des journaux, générer un fichier HAR et fonctionner avec d'autres fonctionnalités de CloudWatch Synthetics.

1. Créez une fonction de gestionnaire et appelez votre méthode Selenium. Le gestionnaire est la fonction de point d'entrée du script.

   Si vous utilisez `syn-python-selenium-1.0`, la fonction du gestionnaire doit être nommée `handler`. Si vous utilisez `syn-python-selenium-1.1` ou une version ultérieure, la fonction peut porter n'importe quel nom, mais il doit être identique à celui utilisé dans le script. De plus, si vous utilisez `syn-python-selenium-1.1` ou une version ultérieure, vous pouvez stocker vos scripts dans n'importe quel dossier et spécifier ce dossier dans le nom du gestionnaire.

   ```
   def handler(event, context):
       basic_selenium_script()
   ```

Le script est maintenant mis à jour pour devenir un canari CloudWatch Synthetics. Voici le script mis à jour :

`webdriver`Il s'agit d'une instance de la classe [ SyntheticsWebDriver](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library_Python.html#CloudWatch_Synthetics_Library_Python_SyntheticsWebDriver)et le navigateur renvoyé par `webdriver.Chrome()` est une instance de [ SyntheticsBrowser](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library_Python.html#CloudWatch_Synthetics_Library_Python_SyntheticsBrowser).

```
from aws_synthetics.selenium import synthetics_webdriver as webdriver

def basic_selenium_script():
    browser = webdriver.Chrome()
    browser.get('https://example.com')
    browser.save_screenshot('loaded.png')

def handler(event, context):
    basic_selenium_script()
```

## Modification d’un script Synthetics Puppeteer existant pour authentifier des certificats non standard
<a name="Canaries_Non-Standard_Certificates"></a>

Un cas d’utilisation fréquent des scripts Canary Synthetics consiste à surveiller vos propres points de terminaison. Si vous souhaitez surveiller un point de terminaison non encore accessible au trafic externe, il se peut que vous n’ayez pas encore de certificat valide signé par une autorité de certification tierce reconnue.

Les deux solutions possibles pour ce scénario sont les suivantes :
+ Pour authentifier un certificat client, consultez [Comment valider l'authentification à l'aide d'Amazon CloudWatch Synthetics — Partie 2](https://aws.amazon.com/blogs/mt/how-to-validate-authentication-using-amazon-cloudwatch-synthetics-part-2/).
+ Pour authentifier un certificat auto-signé, consultez [Comment valider l'authentification à l'aide de certificats auto-signés dans](https://aws.amazon.com/blogs/mt/how-to-validate-authentication-with-self-signed-certificates-in-amazon-cloudwatch-synthetics/) Amazon Synthetics CloudWatch

Vous n'êtes pas limité à ces deux options lorsque vous utilisez les canaris CloudWatch Synthetics. Vous pouvez étendre ces fonctionnalités et ajouter votre propre logique métier en modifiant le code du script Canary.

**Note**  
Les scripts Canary exécutés avec l’exécution Python disposent nativement du paramètre ` --ignore-certificate-errors` activé, ce qui leur permet d’accéder sans problème à des sites utilisant des certificats non standard.

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

# Fonctions de bibliothèque disponibles pour les scripts Canary
<a name="CloudWatch_Synthetics_Canaries_Function_Library"></a>

CloudWatch Synthetics inclut plusieurs classes et fonctions intégrées que vous pouvez appeler lorsque vous écrivez des scripts Node.js à utiliser comme canaris.

Certaines de ces classes et fonctions s'appliquent à la fois aux scripts Canary d'interface utilisateur et d'API. D'autres s'appliquent uniquement aux scripts Canary de l'interface utilisateur. Un script Canary d'interface utilisateur est un script Canary qui utilise la fonction `getPage()` et qui utilise Puppeteer comme pilote web pour naviguer entre les pages web et interagir avec elles.

**Note**  
Chaque fois que vous mettez à niveau un script canary pour utiliser une nouvelle version de l'exécution Synthetics, toutes les fonctions de la bibliothèque Synthetics utilisées par votre script canary sont également automatiquement mises à niveau vers la version de NodeJS prise en charge par l'exécution Synthetics.

**Topics**
+ [Fonctions de bibliothèque disponibles pour Node.js Canary](Library_function_Nodejs.md)
+ [Fonctions de bibliothèque disponibles pour les scripts Canary Java](CloudWatch_Synthetics_Canaries_Java.md)
+ [Fonctions de bibliothèque disponibles pour les scripts Canary Node.js utilisant Playwright](CloudWatch_Synthetics_Canaries_Nodejs_Playwright.md)
+ [Fonctions de bibliothèque disponibles pour les scripts Canary Node.js utilisant Puppeteer](CloudWatch_Synthetics_Canaries_Library_Nodejs.md)
+ [Fonctions de bibliothèque disponibles pour les scripts Canary Python utilisant Selenium](CloudWatch_Synthetics_Canaries_Library_Python.md)

# Fonctions de bibliothèque disponibles pour Node.js Canary
<a name="Library_function_Nodejs"></a>

Cette section décrit les fonctions de bibliothèque disponibles pour les scripts Canary à l'aide du moteur d'exécution Node.js.

**Topics**
+ [addExecutionError(Message d'erreur, par exemple) ;](#Library_function_Nodejs_addExecutionError_Nodecanary)
+ [getCanaryName();](#Library_function_Nodejs_getCanaryName)
+ [getCanaryArn();](#Library_function_Nodejs_Nodecanary)
+ [getCanaryUserAgentString();](#Library_function_Nodejs_getCanaryUserAgentString_Nodecanary)
+ [getRuntimeVersion();](#Library_function_Nodejs_getRuntimeVersion_Nodecanary)
+ [getLogLevel();](#Library_function_Nodejs_getLogLevel_Nodecanary)
+ [setLogLevel();](#Library_function_Nodejs_setLogLevel_Nodecanary)
+ [ExecuteStep (StepName, [StepConfig] functionToExecute)](#Library_function_Nodejs_executestep_Nodecanary)
+ [executeHttpStep(StepName, RequestOptions, [rappel], [StepConfig])](#Library_function_Nodejs_executeHttpStep)

## addExecutionError(Message d'erreur, par exemple) ;
<a name="Library_function_Nodejs_addExecutionError_Nodecanary"></a>

`errorMessage` décrit l'erreur et `ex` est l'exception rencontrée.

Vous pouvez utiliser `addExecutionError` pour définir les erreurs d'exécution pour votre script Canary. Ce code fait échouer le script Canary sans interrompre l'exécution du script. Cela n'a pas non plus d'impact sur vos métriques `successPercent`.

Vous ne devriez suivre les erreurs comme des erreurs d'exécution que si elles ne sont pas importantes pour indiquer le succès ou l'échec de votre script Canary.

L'exemple suivant illustre l'utilisation de `addExecutionError`. Vous surveillez la disponibilité de votre point de terminaison et vous prenez des captures d'écran après le chargement de la page. Étant donné que l'échec de la prise d'une capture d'écran ne détermine pas la disponibilité du point de terminaison, vous pouvez détecter toutes les erreurs rencontrées lors de la prise de captures d'écran et les ajouter en tant qu'erreurs d'exécution. Vos métriques de disponibilité indiqueront toujours que le point de terminaison est opérationnel, mais le statut de votre script Canary indiquera qu'il a échoué. L'exemple de bloc de code suivant détecte une telle erreur et l'ajoute en tant qu'erreur d'exécution.

```
try {await synthetics.executeStep(stepName, callbackFunc);} catch(ex) {synthetics.addExecutionError('Unable to take screenshot ', ex);}
```

## getCanaryName();
<a name="Library_function_Nodejs_getCanaryName"></a>

Renvoie le nom du script Canary.

## getCanaryArn();
<a name="Library_function_Nodejs_Nodecanary"></a>

Renvoie l'ARN du script canary.

## getCanaryUserAgentString();
<a name="Library_function_Nodejs_getCanaryUserAgentString_Nodecanary"></a>

Renvoie l'agent utilisateur personnalisé du script canary.

## getRuntimeVersion();
<a name="Library_function_Nodejs_getRuntimeVersion_Nodecanary"></a>

Cette fonction est disponible sur les versions d'exécution `syn-nodejs-3.0` et ultérieures. Elle renvoie la version d'exécution Synthetics du script Canary. Par exemple, la valeur renvoyée peut être `syn-nodejs-3.0`.

## getLogLevel();
<a name="Library_function_Nodejs_getLogLevel_Nodecanary"></a>

Récupère le niveau de journalisation actuel pour la bibliothèque Synthetics. Les valeurs possibles sont les suivantes :
+ `0` : débogage
+ `1` : informations
+ `2` : avertissement
+ `3` : erreur

Exemple :

```
let logLevel = synthetics.getLogLevel();
```

## setLogLevel();
<a name="Library_function_Nodejs_setLogLevel_Nodecanary"></a>

Définit le niveau de journalisation pour la bibliothèque Synthetics. Les valeurs possibles sont les suivantes :
+ `0` : débogage
+ `1` : informations
+ `2` : avertissement
+ `3` : erreur

Exemple :

```
synthetics.setLogLevel(0);
```

## ExecuteStep (StepName, [StepConfig] functionToExecute)
<a name="Library_function_Nodejs_executestep_Nodecanary"></a>

Exécute l'étape fournie, en l'enveloppant avec start/pass/fail logging and pass/fail des métriques de durée.

La fonction `executeStep` effectue également les opérations suivantes :
+ Enregistre le début de l'étape
+ Démarre un chronomètre
+ Exécute la fonction fournie
+ Lorsque la fonction revient normalement, elle est considérée comme une transmission. Si la fonction lance, elle est considérée comme un échec
+ Termine le chronomètre
+ Elle consigne le fait que l'étape a réussi ou échoué.
+ Émet la `stepName SuccessPercent` métrique, 100 en cas de réussite ou 0 en cas d'échec
+ Émet le`stepName Duration metric`, avec une valeur basée sur les heures de début et de fin de l'étape
+ Renvoie ce qu'il a functionToExecute renvoyé ou renvoie ce qu'` functionToExecute`il a lancé
+ Ajoute un résumé de l'exécution des étapes au rapport du canari

 **Exemple** 

```
await synthetics.executeStep(stepName, async function () {
    return new Promise((resolve, reject) => {
        const req = https.request(url, (res) => {
            console.log(`Status: ${res.statusCode}`);
            if (res.statusCode >= 400) {
                reject(new Error(`Request failed with status ${res.statusCode} for ${url}`));
            } else {
                resolve();
            }
        });

        req.on('error', (err) => {
            reject(new Error(`Request failed for ${url}: ${err.message}`));
        });

        req.end();
    });
});
```

## executeHttpStep(StepName, RequestOptions, [rappel], [StepConfig])
<a name="Library_function_Nodejs_executeHttpStep"></a>

Exécute la requête HTTP fournie en tant qu'étape et publie les métriques `SuccessPercent` (réussite/échec) et `Duration`.

**executeHttpStep**utilise des fonctions natives HTTP ou HTTPS sous le capot, selon le protocole spécifié dans la demande.

Cette fonction ajoute également un résumé de l'exécution des étapes au rapport du script Canary. Le résumé inclut des détails sur chaque requête HTTP, tels que les suivants :
+ L’heure de début
+ L'heure de fin
+ Le statut (PASSED/FAILED [RÉUSSITE/ÉCHEC])
+ La raison de l'échec, le cas échéant
+ Détails des appels HTTP tels que request/response les en-têtes, le corps, le code d'état, le message d'état et les délais de performance. 

**Topics**
+ [Parameters](#Library_function_Nodejs_executeHttpStep_parameters_Nodecanary)
+ [Exemples d'utilisation executeHttpStep](#Library_function_Nodejs_executeHttpStep_examples_Nodecanary)

### Parameters
<a name="Library_function_Nodejs_executeHttpStep_parameters_Nodecanary"></a>

 **StepName () *String*** 

Spécifie le nom de l'étape. Ce nom est également utilisé pour publier CloudWatch les statistiques de cette étape.

 **Options de demande () *Object or String*** 

La valeur de ce paramètre peut être une URL, une chaîne d'URL ou un objet. S'il s'agit d'un objet, il doit s'agir d'un ensemble d'options configurables pour effectuer une requête HTTP. Il prend en charge toutes les options dans [ http.request(options[, callback])](https://nodejs.org/api/http.html#http_http_request_options_callback) dans la documentation de Node.js.

En plus de ces options Node.js, **requestOptions** prend en charge le paramètre supplémentaire `body`. Vous pouvez utiliser le paramètre `body` pour transmettre des données en tant que corps de requête.

 **rappel () *response*** 

(Facultatif) Il s'agit d'une fonction utilisateur qui est appelée avec la réponse HTTP. La réponse est du type [Class : http. IncomingMessage](https://nodejs.org/api/http.html#http_class_http_incomingmessage).

 **Configuration de l'étape () *object*** 

(Facultatif) Utilisez ce paramètre pour remplacer les configurations Synthetics globales par une configuration différente pour cette étape.

### Exemples d'utilisation executeHttpStep
<a name="Library_function_Nodejs_executeHttpStep_examples_Nodecanary"></a>

Les exemples suivants s'inspirent les uns des autres pour illustrer les différentes utilisations de cette option.

Ce premier exemple configure les paramètres de requête. Vous pouvez transmettre une URL sous la forme **RequestOptions** :

```
let requestOptions = 'https://www.amazon.com';
```

Vous pouvez également transmettre un ensemble d'options :

```
let requestOptions = {
        'hostname': 'myproductsEndpoint.com',
        'method': 'GET',
        'path': '/test/product/validProductName',
        'port': 443,
        'protocol': 'https:'
    };
```

L'exemple suivant crée une fonction de rappel qui accepte une réponse. Par défaut, si vous ne spécifiez pas de **rappel**, CloudWatch Synthetics vérifie que le statut est compris entre 200 et 299 inclus.

```
// Handle validation for positive scenario
    const callback = async function(res) {
        return new Promise((resolve, reject) => {
            if (res.statusCode < 200 || res.statusCode > 299) {
                throw res.statusCode + ' ' + res.statusMessage;
            }
     
            let responseBody = '';
            res.on('data', (d) => {
                responseBody += d;
            });
     
            res.on('end', () => {
                // Add validation on 'responseBody' here if required. For ex, your status code is 200 but data might be empty
                resolve();
            });
        });
    };
```

L'exemple suivant crée une configuration pour cette étape qui remplace la configuration globale de CloudWatch Synthetics. La configuration d'étape dans cet exemple autorise les en-têtes de requête, les en-têtes de réponse, le corps de requête (données de publication) et le corps de réponse dans votre rapport et restreint les valeurs d'en-tête 'X-Amz-Security-Token' et 'Authorization'. Par défaut, ces valeurs ne sont pas incluses dans le rapport pour des raisons de sécurité. Si vous choisissez de les inclure, les données sont stockées uniquement dans votre compartiment S3.

```
// By default headers, post data, and response body are not included in the report for security reasons. 
// Change the configuration at global level or add as step configuration for individual steps
let stepConfig = {
    includeRequestHeaders: true, 
    includeResponseHeaders: true,
    restrictedHeaders: ['X-Amz-Security-Token', 'Authorization'], // Restricted header values do not appear in report generated.
    includeRequestBody: true,
    includeResponseBody: true
};
```

Ce dernier exemple transmet votre demande à l'étape **executeHttpStep**et lui donne un nom.

```
await synthetics.executeHttpStep('Verify GET products API', requestOptions, callback, stepConfig);
```

**Avec cet ensemble d'exemples, CloudWatch Synthetics ajoute les détails de chaque étape de votre rapport et produit des métriques pour chaque étape à l'aide de StepName.**

 Vous verrez les métriques `successPercent` et `duration` pour l'étape `Verify GET products API`. Vous pouvez contrôler les performances de vos API en contrôlant les métriques des étapes d'appel de vos API. 

Pour obtenir un exemple de script complet qui utilise ces fonctions, consultez [Script Canary d'API à plusieurs étapes](CloudWatch_Synthetics_Canaries_Samples.md#CloudWatch_Synthetics_Canaries_Samples_APIsteps).

# Fonctions de bibliothèque disponibles pour les scripts Canary Java
<a name="CloudWatch_Synthetics_Canaries_Java"></a>

La fonction `executeStep` permet de modulariser le code du script Canary et de l’exécuter en plusieurs étapes. Dans CloudWatch Synthetics, une étape Synthetics permet de décomposer votre script Canary en une série d'actions clairement définies, ce qui vous permet de suivre séparément les différentes étapes du parcours de votre application. Pour chaque étape, CloudWatch Synthetics effectue les opérations suivantes :
+ Crée un rapport contenant un résumé des détails d’exécution de l’étape, par exemple, la durée, l’état de *réussite* ou *échec*, etc., pour chaque exécution du script Canary. **Lorsque vous choisissez une exécution dans la console CloudWatch Synthetics, vous pouvez consulter les détails d'exécution de chaque étape dans l'onglet Étape.**
+ *SuccessPercent*et CloudWatch des métriques de *durée* sont émises pour chaque étape, permettant aux utilisateurs de surveiller la disponibilité et la latence de chaque étape.

   **Utilisation** 

  ```
  synthetics.executeStep(stepName,()->{
      try {
          //step code to be executed
          return null;
      } catch (Exception e) {
          throw e;
      }
  }).get();
  ```

   **Paramètres** 
  + *stepName*, chaîne (obligatoire) : nom descriptif de l’étape Synthetics
  + *fonction à exécuter*, appelable <T> (obligatoire) : représente les tâches à exécuter
  + *StepOptions*, `com.amazonaws.synthetics.StepOptions (optional)` — StepOptions objet qui peut être utilisé pour configurer l'exécution de l'étape. 

    *stepConfiguration*, ` com.amazonaws.synthetics.StepConfiguration` (obligatoire dans le cadre des stepOptions)

 **Renvoie** 

La valeur renvoyée est *CompletableFuture*<T>.

**Note**  
Synthetics ne prend en charge que les étapes séquentielles. Veillez à appeler la méthode `.get()` comme indiqué dans l’exemple, afin que chaque étape soit terminée avant le début de la suivante.

# Fonctions de bibliothèque disponibles pour les scripts Canary Node.js utilisant Playwright
<a name="CloudWatch_Synthetics_Canaries_Nodejs_Playwright"></a>

Elle décrit également les fonctions de bibliothèque disponibles pour les scripts Canary utilisant l’exécution Playwright pour Node.js.

**Topics**
+ [lancer](#Synthetics_Library_Nodejs_Playwright_functions)
+ [newPage](#Synthetics_Library_Nodejs_Playwright_function_newPage)
+ [close](#Synthetics_Library_Nodejs_Playwright_function_close)
+ [getDefaultLaunchDes options](#Synthetics_Library_Nodejs_Playwright_function_getDefaultLaunchOptions)
+ [executeStep](#Synthetics_Library_Nodejs_Playwright_function_executeStep)

## lancer
<a name="Synthetics_Library_Nodejs_Playwright_functions"></a>

Cette fonction lance un navigateur Chromium à l’aide de la fonction de lancement de Playwright et renvoye l’objet navigateur correspondant. Elle décompresse les fichiers binaires du navigateur et lance Chromium avec des options par défaut adaptées à un navigateur sans périphériques. Pour plus d’informations sur la fonction `launch`, consultez [https://playwright.dev/docs/api/class-browsertype#browser-type-launch](https://playwright.dev/docs/api/class-browsertype#browser-type-launch) dans la documentation de Playwright.

 **Utilisation** 

```
const browser = await synthetics.launch();
```

 **Arguments** 

`options` [options](https://playwright.dev/docs/api/class-browsertype#browser-type-launch) (facultatif) est un ensemble d’options configurables pour le navigateur.

 **Renvoie** 

Promesse `<Browser>` où [Browser](https://playwright.dev/docs/api/class-browser) est une instance du navigateur Playwright.

Si cette fonction est appelée à nouveau, le navigateur déjà ouvert est fermé avant le lancement d’un nouveau navigateur. Vous pouvez remplacer les paramètres de lancement utilisés par CloudWatch Synthetics et transmettre des paramètres supplémentaires lors du lancement du navigateur. Par exemple, le code suivant lance un navigateur avec les arguments et le chemin d’exécutable par défaut, mais définit une fenêtre d’affichage de 800 x 600 pixels. Pour plus d’informations, consultez [Options de lancement de Playwright](https://playwright.dev/docs/api/class-browsertype#browser-type-launch) dans la documentation de Playwright.

```
const browser = await synthetics.launch({
  defaultViewport: { 
      "deviceScaleFactor": 1, 
      "width": 800,
      "height": 600 
}});
```

 Vous pouvez également ajouter ou modifier les indicateurs Chromium transmis par défaut au navigateur. Par exemple, vous pouvez désactiver la sécurité Web en ajoutant un `--disable-web-security` indicateur aux arguments dans les paramètres de lancement de CloudWatch Synthetics : 

```
// This function adds the --disable-web-security flag to the launch parameters
const defaultOptions = await synthetics.getDefaultLaunchOptions();
const launchArgs = [...defaultOptions.args, '--disable-web-security'];
const browser = await synthetics.launch({
    args: launchArgs
  });
```

## newPage
<a name="Synthetics_Library_Nodejs_Playwright_function_newPage"></a>

La fonction `newPage()` crée et renvoie une nouvelle page Playwright. Synthetics configure automatiquement une connexion au protocole DevTools Chrome (CDP) pour permettre les captures réseau pour la génération d'archives HTTP (HAR).

 **Utilisation** 

Utiliser `newPage()` de l’une des deux façons suivantes :

 **1. Création d’une nouvelle page dans un nouveau contexte de navigateur :** 

```
const page = await synthetics.newPage(browser);
```

 **2. Création d’une nouvelle page dans un contexte de navigateur spécifié :** 

```
// Create a new browser context
const browserContext = await browser.newContext();

// Create a new page in the specified browser context
const page = await synthetics.newPage(browserContext)
```

 **Arguments** 

Accepte l'instance Playwright [Browser](https://playwright.dev/docs/api/class-browser) ou Playwright [ BrowserContext](https://playwright.dev/docs/api/class-browsercontext). 

 **Renvoie** 

Promesse <Page> où Page est une instance [Page](https://playwright.dev/docs/api/class-page) de Playwright.

## close
<a name="Synthetics_Library_Nodejs_Playwright_function_close"></a>

Ferme le navigateur actuellement ouvert.

 **Utilisation** 

```
await synthetics.close();
```

Il est recommandé de fermer le navigateur dans un bloc `finally` de votre script.

 **Arguments** 

Aucun 

 **Renvoie** 

Renvoie la promesse <void> utilisée par la fonction de lancement de Synthetics pour lancer le navigateur.

## getDefaultLaunchDes options
<a name="Synthetics_Library_Nodejs_Playwright_function_getDefaultLaunchOptions"></a>

La `getDefaultLaunchOptions()` fonction renvoie les options de lancement du navigateur utilisées par CloudWatch Synthetics.

 **Utilisation** 

```
const defaultOptions = await synthetics.getDefaultLaunchOptions();
```

 **Arguments** 

Aucun 

 **Renvoie** 

Renvoie les [options de lancement](https://playwright.dev/docs/api/class-browsertype#browser-type-launch) de Playwright utilisées par la fonction `launch` Synthetics pour lancer le navigateur.

## executeStep
<a name="Synthetics_Library_Nodejs_Playwright_function_executeStep"></a>

La fonction `executeStep` est utilisée pour exécuter une étape dans un script Synthetics. Dans CloudWatch Synthetics, une étape Synthetics permet de décomposer votre script Canary en une série d'actions clairement définies, ce qui vous permet de suivre séparément les différentes étapes du parcours de votre application. Pour chaque étape, CloudWatch Synthetics effectue les opérations suivantes :
+ Prend automatiquement une capture d’écran avant le début de l’étape et après son achèvement. Vous pouvez également prendre des captures d’écran au cours d’une étape. Les captures d'écran sont capturées par défaut, mais peuvent être désactivées à l'aide des configurations Synthetics.
+ Un rapport contenant un résumé des détails relatifs à l'exécution des étapes, tels que la durée d'une étape `pass` ou `fail` son statut, les pages source et de destination URLs, les captures d'écran associées, etc., est créé pour chaque exécution de Canary. **Lorsque vous choisissez une exécution dans la console CloudWatch Synthetics, vous pouvez consulter les détails d'exécution de chaque étape dans l'onglet Étape.**
+ `SuccessPercent`et `Duration` CloudWatch des métriques sont émises pour chaque étape, permettant aux utilisateurs de surveiller la disponibilité et la latence de chaque étape.

 **Utilisation** 

```
await synthetics.executeStep("mystepname", async function () {
  await page.goto(url, { waitUntil: 'load', timeout: 30000 });
}
```

**Note**  
Les étapes doivent être exécutées de manière séquentielle. Veillez à utiliser `await` sur les promesses.

 **Arguments** 
+ Chaîne `stepName` (obligatoire) (booléen) : nom de l’étape Synthetics. 
+ Fonction asynchrone `functionToExecute` (obligatoire) : la fonction que vous souhaitez que Synthetics exécute. Cette fonction doit contenir la logique de l’étape.
+ Objet `stepConfig` (facultatif) : configuration de l’étape, qui remplace la configuration Synthetics globale pour cette étape.
  + Booléen `continueOnStepFailure` (facultatif) : indique s’il faut continuer à exécuter le script Canary après l’échec de cette étape. 
  + Booléen `screenshotOnStepStart` (facultatif) : indique s’il faut prendre une capture d’écran au début de cette étape. 
  + Booléen `screenshotOnStepSuccess` (facultatif) : indique s’il faut prendre une capture d’écran si cette étape réussit. 
  + Booléen `screenshotOnStepFailure` (facultatif) : indique s’il faut prendre une capture d’écran si cette étape échoue. 
+ `page` : objet Page de Playwright (facultatif)

  Un objet Page de Playwright. Synthetics utilise cet objet de page pour capturer des captures d'écran et. URLs Par défaut, Synthetics utilise la page Playwright créée lorsque la fonction est appelée pour capturer les détails de `synthetics.newPage()` la page, tels que les captures d'écran et. URLs

 **Renvoie** 

Renvoie une promesse qui se résout avec la valeur renvoyée par la fonction ` functionToExecute`. Pour un exemple de script, consultez [Exemple de code pour les scripts Canary](CloudWatch_Synthetics_Canaries_Samples.md) dans ce guide.

# Fonctions de bibliothèque disponibles pour les scripts Canary Node.js utilisant Puppeteer
<a name="CloudWatch_Synthetics_Canaries_Library_Nodejs"></a>

Cette section décrit les fonctions de bibliothèque disponibles pour les scripts Canary Node.js.

**Topics**
+ [Classes et fonctions de bibliothèque Node.js qui s'appliquent à tous les scripts Canary](#CloudWatch_Synthetics_Library_allcanaries)
+ [Classes et fonctions de bibliothèque Node.js qui s'appliquent uniquement aux scripts Canary d'interface utilisateur](#CloudWatch_Synthetics_Library_UIcanaries)
+ [Classes et fonctions de bibliothèque Node.js qui s'appliquent uniquement aux scripts Canary d'API](#CloudWatch_Synthetics_Library_APIcanaries)

## Classes et fonctions de bibliothèque Node.js qui s'appliquent à tous les scripts Canary
<a name="CloudWatch_Synthetics_Library_allcanaries"></a>

Les fonctions de la bibliothèque CloudWatch Synthetics suivantes pour Node.js sont utiles pour tous les canaris.

**Topics**
+ [Classe Synthetics](#CloudWatch_Synthetics_Library_Synthetics_Class_all)
+ [SyntheticsConfiguration classe](#CloudWatch_Synthetics_Library_SyntheticsConfiguration)
+ [Enregistreur Synthetics](#CloudWatch_Synthetics_Library_SyntheticsLogger)
+ [SyntheticsLogHelper classe](#CloudWatch_Synthetics_Library_SyntheticsLogHelper)

### Classe Synthetics
<a name="CloudWatch_Synthetics_Library_Synthetics_Class_all"></a>

Les fonctions suivantes pour tous les scripts Canary sont dans la classe Synthetics.

**Topics**
+ [addExecutionError(Message d'erreur, par exemple) ;](#CloudWatch_Synthetics_Library_addExecutionError)
+ [getCanaryName();](#CloudWatch_Synthetics_Library_getCanaryName)
+ [getCanaryArn();](#CloudWatch_Synthetics_Library_getCanaryARN)
+ [getCanaryUserAgentString();](#CloudWatch_Synthetics_Library_getCanaryUserAgentString)
+ [getRuntimeVersion();](#CloudWatch_Synthetics_Library_getRuntimeVersion)
+ [getLogLevel();](#CloudWatch_Synthetics_Library_getLogLevel)
+ [setLogLevel();](#CloudWatch_Synthetics_Library_setLogLevel)

#### addExecutionError(Message d'erreur, par exemple) ;
<a name="CloudWatch_Synthetics_Library_addExecutionError"></a>

`errorMessage` décrit l'erreur et `ex` est l'exception rencontrée.

Vous pouvez utiliser `addExecutionError` pour définir les erreurs d'exécution pour votre script Canary. Ce code fait échouer le script Canary sans interrompre l'exécution du script. Cela n'a pas non plus d'impact sur vos métriques `successPercent`.

Vous ne devriez suivre les erreurs comme des erreurs d'exécution que si elles ne sont pas importantes pour indiquer le succès ou l'échec de votre script Canary.

L'exemple suivant illustre l'utilisation de `addExecutionError`. Vous surveillez la disponibilité de votre point de terminaison et vous prenez des captures d'écran après le chargement de la page. Étant donné que l'échec de la prise d'une capture d'écran ne détermine pas la disponibilité du point de terminaison, vous pouvez détecter toutes les erreurs rencontrées lors de la prise de captures d'écran et les ajouter en tant qu'erreurs d'exécution. Vos métriques de disponibilité indiqueront toujours que le point de terminaison est opérationnel, mais le statut de votre script Canary indiquera qu'il a échoué. L'exemple de bloc de code suivant détecte une telle erreur et l'ajoute en tant qu'erreur d'exécution.

```
try {
    await synthetics.takeScreenshot(stepName, "loaded");
} catch(ex) {
    synthetics.addExecutionError('Unable to take screenshot ', ex);
}
```

#### getCanaryName();
<a name="CloudWatch_Synthetics_Library_getCanaryName"></a>

Renvoie le nom du script Canary.

#### getCanaryArn();
<a name="CloudWatch_Synthetics_Library_getCanaryARN"></a>

Renvoie l'ARN du script canary.

#### getCanaryUserAgentString();
<a name="CloudWatch_Synthetics_Library_getCanaryUserAgentString"></a>

Renvoie l'agent utilisateur personnalisé du script canary.

#### getRuntimeVersion();
<a name="CloudWatch_Synthetics_Library_getRuntimeVersion"></a>

Cette fonction est disponible dans la version d'exécution `syn-nodejs-puppeteer-3.0` et versions ultérieures. Elle renvoie la version d'exécution Synthetics du script Canary. Par exemple, la valeur renvoyée peut être `syn-nodejs-puppeteer-3.0`.

#### getLogLevel();
<a name="CloudWatch_Synthetics_Library_getLogLevel"></a>

Récupère le niveau de journalisation actuel pour la bibliothèque Synthetics. Les valeurs possibles sont les suivantes :
+ `0` : débogage
+ `1` : informations
+ `2` : avertissement
+ `3` : erreur

Exemple :

```
let logLevel = synthetics.getLogLevel();
```

#### setLogLevel();
<a name="CloudWatch_Synthetics_Library_setLogLevel"></a>

Définit le niveau de journalisation pour la bibliothèque Synthetics. Les valeurs possibles sont les suivantes :
+ `0` : débogage
+ `1` : informations
+ `2` : avertissement
+ `3` : erreur

Exemple :

```
synthetics.setLogLevel(0);
```

### SyntheticsConfiguration classe
<a name="CloudWatch_Synthetics_Library_SyntheticsConfiguration"></a>

Cette classe est disponible uniquement dans la version d'exécution `syn-nodejs-2.1` ou version ultérieure.

Vous pouvez utiliser la classe `SyntheticsConfiguration` pour configurer le comportement des fonctions de bibliothèque Synthetics. Par exemple, vous pouvez utiliser cette classe pour configurer la fonction `executeStep()` pour ne pas prendre de captures d'écran.

Vous pouvez définir CloudWatch des configurations Synthetics au niveau global, qui sont appliquées à toutes les étapes des canaris. Il est également possible de remplacer ces configurations au niveau d’une étape en passant des paires clé-valeur de configuration.

Vous pouvez transmettre des options au niveau de l'étape. Pour obtenir des exemples, veuillez consulter [async ExecuteStep (StepName, [StepConfig]) ; functionToExecute](#CloudWatch_Synthetics_Library_executeStep) et [executeHttpStep(StepName, RequestOptions, [rappel], [StepConfig])](#CloudWatch_Synthetics_Library_executeHttpStep)

**Topics**
+ [setConfig(options)](#CloudWatch_Synthetics_Library_setConfig)
+ [Surveillance visuelle](#CloudWatch_Synthetics_Library_SyntheticsLogger_VisualTesting)

#### setConfig(options)
<a name="CloudWatch_Synthetics_Library_setConfig"></a>

` options ` est un objet, qui est un ensemble d'options configurables pour votre script Canary. Les sections suivantes expliquent les champs possibles dans ` options `.

##### setConfig(options) pour tous les scripts Canary
<a name="CloudWatch_Synthetics_Library_setConfigall"></a>

Pour les canaris utilisant `syn-nodejs-puppeteer-3.2` ou version ultérieure, les **(options)** de **SetConfig** peuvent inclure les paramètres suivants :
+ `includeRequestHeaders` (booléen) : indique si les en-têtes de demande doivent être inclus dans le rapport. La valeur par défaut est `false`.
+ `includeResponseHeaders` (booléen) : indique si les en-têtes de réponse doivent être inclus dans le rapport. La valeur par défaut est `false`.
+ `restrictedHeaders` (tableau) : une liste de valeurs d'en-tête à ignorer, si les en-têtes sont inclus. Cela s'applique à la fois aux en-têtes de demande et de réponse. Par exemple, vous pouvez masquer vos informations d'identification en passant ** includeRequestHeaders**as `true` et **RestrictedHeaders** as. `['Authorization']` 
+ `includeRequestBody` (booléen) : indique si le corps de requête doit être inclus dans le rapport. La valeur par défaut est `false`.
+ `includeResponseBody` (booléen) : indique si le corps de réponse doit être inclus dans le rapport. La valeur par défaut est `false`.
**Important**  
Si vous activez l'une `includeResponseBody` ou l'autre` logResponseBody`, l'objet de données n'est pas renvoyé dans la réponse de certains APIs, tels que les clients aws-sdk v3. Cela est dû à une limitation de Node.js et au type d’objet de réponse utilisé.

 **SetConfig (options) concernant les métriques CloudWatch ** 

Pour les canaris utilisant `syn-nodejs-puppeteer-3.1` ou version ultérieure, les **(options)** de **SetConfig** peuvent inclure les paramètres booléens suivants qui déterminent les métriques publiées par le canari. La valeur par défaut de chacune de ces options est `true`. Les options qui commencent par `aggregated` déterminent si la métrique est émise sans la dimension ` CanaryName`. Vous pouvez utiliser ces métriques pour afficher les résultats agrégés de tous vos scripts Canary. Les autres options déterminent si la métrique est émise avec la dimension `CanaryName`. Vous pouvez utiliser ces métriques pour afficher les résultats de chaque script Canary individuel.

Pour une liste des CloudWatch métriques émises par les canaris, voir[CloudWatch statistiques publiées par canaries](CloudWatch_Synthetics_Canaries_metrics.md).
+ `failedCanaryMetric` (booléen) : indique s'il faut émettre la métrique ` Failed` (avec la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `failedRequestsMetric` (booléen) : indique s'il faut émettre la métrique `Failed requests` (avec la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `_2xxMetric` (booléen) : indique s'il faut émettre la métrique `2xx` (avec la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `_4xxMetric` (booléen) : indique s'il faut émettre la métrique `4xx` (avec la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `_5xxMetric` (booléen) : indique s'il faut émettre la métrique `5xx` (avec la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `stepDurationMetric` (booléen) : indique s'il faut émettre la métrique `Step duration` (avec les dimensions `CanaryName` `StepName`) pour ce script Canary. La valeur par défaut est `true`.
+ `stepSuccessMetric` (booléen) : indique s'il faut émettre la métrique `Step success` (avec les dimensions `CanaryName` `StepName`) pour ce script Canary. La valeur par défaut est `true`.
+ `aggregatedFailedCanaryMetric` (booléen) : indique s'il faut émettre la métrique `Failed` (sans la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `aggregatedFailedRequestsMetric` (booléen) : indique s'il faut émettre la métrique `Failed Requests` (sans la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `aggregated2xxMetric` (booléen) : indique s'il faut émettre la métrique ` 2xx` (sans la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `aggregated4xxMetric` (booléen) : indique s'il faut émettre la métrique ` 4xx` (sans la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `aggregated5xxMetric` (booléen) : indique s'il faut émettre la métrique ` 5xx` (sans la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `visualMonitoringSuccessPercentMetric` (booléen) : indique s'il faut émettre la métrique `visualMonitoringSuccessPercent` pour ce script Canary. La valeur par défaut est `true`.
+ `visualMonitoringTotalComparisonsMetric` (booléen) : indique s'il faut émettre la métrique `visualMonitoringTotalComparisons` pour ce script Canary. La valeur par défaut est `false`.
+ `includeUrlPassword` (booléen) : indique s'il faut inclure un mot de passe qui apparaît dans l'URL. Par défaut, les mots de passe qui apparaissent dans URLs les journaux et les rapports sont supprimés afin d'empêcher la divulgation de données sensibles. La valeur par défaut est `false`.
+ `restrictedUrlParameters` (tableau) : liste de paramètres de chemin d'URL ou de requête à effacer. Cela s'applique à URLs l'affichage dans les journaux, les rapports et les erreurs. Le paramètre est sensible à la casse. Vous pouvez utiliser un astérisque (\$1) en tant que valeur pour effacer toutes les valeurs de paramètre de chemin d'URL et de requête. La valeur par défaut est un tableau vide.
+ `logRequest` (booléen) : indique s'il faut journaliser chaque demande dans les journaux des scripts Canary. Pour les scripts Canary d'interface utilisateur, cette option journalise chaque demande envoyée par le navigateur. La valeur par défaut est `true`.
+ `logResponse` (booléen) : indique s'il faut journaliser chaque réponse dans les journaux des scripts Canary. Pour les scripts Canary d'interface utilisateur, cette option journalise chaque réponse reçue par le navigateur. La valeur par défaut est `true`.
+ `logRequestBody` (booléen) : indique si les corps de requête doivent être journalisés avec les requêtes dans les journaux des scripts Canary. Cette configuration s'applique uniquement si `logRequest` est `true`. La valeur par défaut est `false`.
+ `logResponseBody` (booléen) : indique si les corps de réponse doivent être journalisés avec les réponses dans les journaux des scripts Canary. Cette configuration s'applique uniquement si `logResponse` est `true`. La valeur par défaut est ` false`.
**Important**  
Si vous activez l'une `includeResponseBody` ou l'autre` logResponseBody`, l'objet de données n'est pas renvoyé dans la réponse de certains APIs, tels que les clients aws-sdk v3. Cela est dû à une limitation de Node.js et au type d’objet de réponse utilisé.
+ `logRequestHeaders` (booléen) : indique si les en-têtes de requête doivent être journalisés avec les requêtes dans les journaux des scripts Canary. Cette configuration s'applique uniquement si `logRequest` est `true`. La valeur par défaut est ` false`.

  Notez que `includeRequestHeaders` active les en-têtes dans les artefacts.
+ `logResponseHeaders` (booléen) : indique si les en-têtes de réponse doivent être journalisés avec les réponses dans les journaux des scripts Canary. Cette configuration s'applique uniquement si `logResponse` est `true`. La valeur par défaut est ` false`.

  Notez que `includeResponseHeaders` active les en-têtes dans les artefacts.

**Note**  
Les métriques `Duration` et `SuccessPercent` sont toujours émises pour chaque script Canary, à la fois avec et sans la métrique `CanaryName`.

##### Méthodes pour activer ou désactiver les métriques
<a name="CloudWatch_Synthetics_Library_setConfig_metrics"></a>

 **disableAggregatedRequestMétriques ()** 

Désactive l'émission par le script Canary de toutes les métriques de demande émises sans dimension `CanaryName`.

 **disableRequestMetrics()** 

Désactive toutes les métriques de demande, y compris les métriques par script Canary et les métriques agrégées pour tous les scripts Canary.

 **disableStepMetrics()** 

Désactive toutes les métriques d'étapes, y compris les métriques de succès des étapes et les métriques de durée des étapes.

 **enableAggregatedRequestMétriques ()** 

Active l'émission par le script Canary de toutes les métriques de demande émises sans dimension ` CanaryName`.

 **enableRequestMetrics()** 

Active toutes les métriques de demande, y compris les métriques par script Canary et les métriques agrégées pour tous les scripts Canary.

 **enableStepMetrics()** 

Active toutes les métriques d'étapes, y compris les métriques de succès des étapes et les métriques de durée des étapes.

 **get2xxMetric()** 

Renvoie une valeur indiquant si le script Canary émet une métrique `2xx` avec la dimension ` CanaryName`.

 **get4xxMetric()** 

Renvoie une valeur indiquant si le script Canary émet une métrique `4xx` avec la dimension ` CanaryName`.

 **get5xxMetric()** 

Renvoie une valeur indiquant si le script Canary émet une métrique `5xx` avec la dimension ` CanaryName`.

 **getAggregated2xxMetric()** 

Renvoie une valeur indiquant si le script Canary émet une métrique `2xx` sans dimension.

 **getAggregated4xxMetric()** 

Renvoie une valeur indiquant si le script Canary émet une métrique `4xx` sans dimension.

 **getAggregatedFailedCanaryMetric()** 

Renvoie une valeur indiquant si le script Canary émet une métrique `Failed` sans dimension.

 **getAggregatedFailedRequestsMetric()** 

Renvoie une valeur indiquant si le script Canary émet une métrique `Failed requests` sans dimension.

 **getAggregated5xxMetric()** 

Renvoie une valeur indiquant si le script Canary émet une métrique `5xx` sans dimension.

 **getFailedCanaryMétrique ()** 

Renvoie une valeur indiquant si le script Canary émet une métrique `Failed` avec la dimension ` CanaryName`.

 **getFailedRequestsMétrique ()** 

Renvoie une valeur indiquant si le script Canary émet une métrique `Failed requests` avec la dimension `CanaryName`.

 **getStepDurationMétrique ()** 

Renvoie une valeur indiquant si le script Canary émet une métrique `Duration` avec la dimension ` CanaryName` pour ce script Canary.

 **getStepSuccessMétrique ()** 

Renvoie une valeur indiquant si le script Canary émet une métrique `StepSuccess` avec la dimension ` CanaryName` pour ce script Canary.

 **with2xxMetric(\$12xxMetric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `2xx` avec la dimension `CanaryName` pour ce script Canary.

 **with4xxMetric(\$14xxMetric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `4xx` avec la dimension `CanaryName` pour ce script Canary.

 **with5xxMetric(\$15xxMetric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `5xx` avec la dimension `CanaryName` pour ce script Canary.

 **withAggregated2xxMetric(aggregated2xxMetric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `2xx` sans dimension pour ce script Canary.

 **withAggregated4xxMetric(aggregated4xxMetric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `4xx` sans dimension pour ce script Canary.

 **withAggregated5xxMetric(aggregated5xxMetric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `5xx` sans dimension pour ce script Canary.

 ** withAggregatedFailedCanaryMetric(aggregatedFailedCanaryMétrique)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `Failed` sans dimension pour ce script Canary.

 ** withAggregatedFailedRequestsMetric(aggregatedFailedRequestsMétrique)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `Failed requests` sans dimension pour ce script Canary.

 **withFailedCanaryMétrique (failedCanaryMetric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `Failed` avec la dimension `CanaryName` pour ce script Canary.

 **withFailedRequestsMétrique (failedRequestsMetric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `Failed requests` avec la dimension `CanaryName` pour ce script Canary.

 **withStepDurationMétrique (stepDurationMetric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `Duration` avec la dimension `CanaryName` pour ce script Canary.

 **withStepSuccessMétrique (stepSuccessMetric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique ` StepSuccess` avec la dimension `CanaryName` pour ce script Canary.

##### Méthodes pour activer ou désactiver d'autres fonctions
<a name="CloudWatch_Synthetics_Library_setConfig_methods"></a>

 **withHarFile()** 

Accepte un argument booléen qui spécifie s'il faut créer un fichier HAR pour ce script Canary.

 **withStepsReport()** 

Accepte un argument booléen qui spécifie s'il faut créer un rapport avec un résumé de l'exécution des étapes pour ce script Canary.

 **withIncludeUrlMot de passe ()** 

Accepte un argument booléen, qui indique s'il faut inclure les mots de passe qui apparaissent URLs dans les journaux et les rapports.

 **withRestrictedUrlParamètres ()** 

Accepte un tableau des paramètres de chemin d'URL ou de requête à effacer. Cela s'applique à URLs l'affichage dans les journaux, les rapports et les erreurs. Vous pouvez utiliser un astérisque (\$1) en tant que valeur pour effacer toutes les valeurs de paramètre de chemin d'URL et de requête.

 **withLogRequest()** 

Accepte un argument booléen qui spécifie si chaque demande doit être journalisée dans les journaux du script Canary.

 **withLogResponse()** 

Accepte un argument booléen qui spécifie si chaque réponse doit être journalisée dans les journaux du script Canary.

 **withLogRequestCorps ()** 

Accepte un argument booléen qui spécifie si chaque corps de requête doit être journalisé dans les journaux du script Canary.

 **withLogResponseCorps ()** 

Accepte un argument booléen qui spécifie si chaque corps de réponse doit être journalisé dans les journaux du script Canary.

 **withLogRequestEn-têtes ()** 

Accepte un argument booléen qui spécifie si chaque en-tête de demande doit être journalisé dans les journaux du script Canary.

 **withLogResponseEn-têtes ()** 

Accepte un argument booléen qui spécifie si chaque en-tête de réponse doit être journalisé dans les journaux du script Canary.

 **getHarFile()** 

Renvoie une valeur indiquant si le script Canary crée un fichier HAR.

 **getStepsReport()** 

Renvoie une valeur indiquant si le script Canary génère un rapport avec un résumé de l'exécution des étapes.

 **getIncludeUrlMot de passe ()** 

Indique si le canari inclut les mots de passe qui apparaissent URLs dans les journaux et les rapports.

 **getRestrictedUrlParamètres ()** 

Renvoie une valeur indiquant si le script Canary supprime les paramètres de chemin d'URL ou de requête.

 **getLogRequest()** 

Renvoie une valeur indiquant si le script Canary journalise chaque demande dans les journaux du script Canary.

 **getLogResponse()** 

Renvoie une valeur indiquant si le script Canary journalise chaque réponse dans les journaux du script Canary.

 **getLogRequestCorps ()** 

Renvoie une valeur indiquant si le script Canary journalise chaque corps de requête dans les journaux du script Canary.

 **getLogResponseCorps ()** 

Renvoie une valeur indiquant si le script Canary journalise chaque corps de réponse dans les journaux du script Canary.

 **getLogRequestEn-têtes ()** 

Renvoie une valeur indiquant si le script Canary journalise chaque en-tête de demande dans les journaux du script Canary.

 **getLogResponseEn-têtes ()** 

Renvoie une valeur indiquant si le script Canary journalise chaque en-tête de réponse dans les journaux du script Canary.

 **Fonctions pour tous les scripts canary** 
+ `withIncludeRequestHeaders`(includeRequestHeaders)
+ `withIncludeResponseHeaders`(includeResponseHeaders)
+ `withRestrictedHeaders`(restrictedHeaders)
+ `withIncludeRequestBody`(includeRequestBody)
+ `withIncludeResponseBody`(includeResponseBody)
+ `enableReportingOptions`() — Active toutes les options de reporting-- **includeRequestHeaders** includeResponseHeaders****, **includeRequestBody**, et **includeResponseBody**,.
+ `disableReportingOptions`() — Désactive toutes les options de création de rapports-- **includeRequestHeaders** includeResponseHeaders****, **includeRequestBody**, et **includeResponseBody**,.

##### setConfig(options) pour les scripts Canary d'interface utilisateur
<a name="CloudWatch_Synthetics_Library_setConfigUI"></a>

Pour les scripts Canary d'interface utilisateur, **setConfig** peut inclure les paramètres booléens suivants :
+ `continueOnStepFailure`**(booléen) — S'il faut continuer à exécuter le script Canary après l'échec d'une étape (cela fait référence à la fonction ExecuteStep).** Si une étape échoue, l'exécution du script Canary sera toujours marquée comme ayant échoué. La valeur par défaut est `false`.
+ `harFile` (booléen) : indique s'il faut créer un fichier HAR. La valeur par défaut est `True`.
+ `screenshotOnStepStart` (booléen) : indique s'il faut prendre une capture d'écran avant de commencer une étape.
+ `screenshotOnStepSuccess` (booléen) : indique s'il faut prendre une capture d'écran après la réussite d'une étape.
+ `screenshotOnStepFailure` (booléen) : indique s'il faut prendre une capture d'écran après l'échec d'une étape.

##### Méthodes pour activer ou désactiver les captures d'écran
<a name="CloudWatch_Synthetics_Library_setConfig_screenshots"></a>

 **disableStepScreenshots()** 

Désactive toutes les options de capture d'écran (screenshotOnStepdémarrage, screenshotOnStep réussite et screenshotOnStep échec).

 **enableStepScreenshots()** 

Active toutes les options de capture d'écran (screenshotOnStepdémarrage, screenshotOnStep réussite et screenshotOnStep échec). Par défaut, toutes ces méthodes sont activées.

 **getScreenshotOnStepFailure()** 

Renvoie une valeur indiquant si le script Canary prend une capture d'écran après l'échec d'une étape.

 **getScreenshotOnStepStart()** 

Renvoie une valeur indiquant si le script Canary prend une capture d'écran avant de commencer une étape.

 **getScreenshotOnStepSuccess()** 

Renvoie une valeur indiquant si le script Canary prend une capture d'écran après la réussite d'une étape.

 **withScreenshotOnStepStart(screenshotOnStepDémarrer)** 

Accepte un argument booléen qui indique s'il faut prendre une capture d'écran avant de commencer une étape.

 **withScreenshotOnStepSuccess(screenshotOnStepSuccès)** 

Accepte un argument booléen qui indique s'il faut prendre une capture d'écran après la réussite d'une étape.

 **withScreenshotOnStepFailure(screenshotOnStepÉchec)** 

Accepte un argument booléen qui indique s'il faut prendre une capture d'écran après l'échec d'une étape.

 **Utilisation dans les scripts canary d'interface utilisateur** 

Tout d'abord, importez la dépendance Synthetics et récupérez la configuration.

```
// Import Synthetics dependency
const synthetics = require('@aws/synthetics-puppeteer');

// Get Synthetics configuration
const synConfig = synthetics.getConfiguration();
```

Ensuite, définissez la configuration de chaque option en appelant la méthode setConfig à l'aide de l'une des options suivantes.

```
// Set configuration values
    synConfig.setConfig({
        screenshotOnStepStart: true, 
        screenshotOnStepSuccess: false,
        screenshotOnStepFailure: false
    });
```

Or

```
synConfig.withScreenshotOnStepStart(false).withScreenshotOnStepSuccess(true).withScreenshotOnStepFailure(true)
```

Pour désactiver toutes les captures d’écran, utilisez la fonction `disableStepScreenshots()` comme indiqué dans l’exemple.

```
synConfig.disableStepScreenshots();
```

Vous pouvez activer et désactiver des captures d'écran à tout moment dans le code. Par exemple, pour désactiver les captures d'écran pour une seule étape, désactivez-les avant d'exécuter cette étape, puis activez-les après l'étape.

##### setConfig(options) pour les scripts Canary d'API
<a name="CloudWatch_Synthetics_Library_setConfigAPI"></a>

Pour les scripts Canary d'API, **setConfig** peut inclure les paramètres booléens suivants :
+ `continueOnHttpStepFailure`(booléen) — S'il faut continuer à exécuter le script Canary après l'échec d'une étape HTTP (cela fait référence à la **executeHttpStep**fonction). Si une étape échoue, l'exécution du script Canary sera toujours marquée comme ayant échoué. La valeur par défaut est `true`.

#### Surveillance visuelle
<a name="CloudWatch_Synthetics_Library_SyntheticsLogger_VisualTesting"></a>

La surveillance visuelle compare les captures d'écran prises lors de l'exécution d'un script Canary aux captures d'écran prises lors de l'exécution d'un script Canary de référence. Si l'écart entre les deux captures d'écran dépasse un pourcentage de seuil, le script Canary échoue et les zones présentant des différences sont mises en évidence en couleur dans le rapport d'exécution du script Canary. La surveillance visuelle est prise en charge dans les canaris utilisant **syn-puppeteer-node-3.2 et versions ultérieures**. Elle n'est actuellement pas prise en charge dans les scripts Canary exécutant Python et Selenium.

Pour activer la surveillance visuelle, ajoutez la ligne de code suivante au script Canary. Pour en savoir plus, consultez [SyntheticsConfiguration classe](#CloudWatch_Synthetics_Library_SyntheticsConfiguration).

```
syntheticsConfiguration.withVisualCompareWithBaseRun(true);
```

La première fois que le script Canary s'exécute avec succès après l'ajout de cette ligne au script, il utilise les captures d'écran prises au cours de cette exécution comme référence pour les comparaisons. Après cette première exécution de Canary, vous pouvez utiliser la CloudWatch console pour modifier le Canary afin d'effectuer l'une des opérations suivantes :
+ Définir la prochaine exécution du script Canary comme nouvelle référence.
+ Dessiner des limites sur la capture d'écran de référence actuelle pour désigner les zones de la capture d'écran à ignorer lors des comparaisons visuelles.
+ Empêcher une capture d'écran d'être utilisée pour la surveillance visuelle.

Pour plus d'informations sur l'utilisation de la CloudWatch console pour modifier un canari, consultez[Modification ou suppression d'un canary](synthetics_canaries_deletion.md).

 **Autres options pour la surveillance visuelle** 

 **Configuration synthétique. withVisualVarianceThresholdPercentage(Pourcentage souhaité)** 

Définissez le pourcentage d'écart acceptable entre les captures d'écran lors des comparaisons visuelles.

 **Configuration synthétique. withVisualVarianceHighlightHexColor(» \$1fafa00 «)** 

Définissez la couleur de surbrillance qui désigne les zones d'écart lorsque vous consultez les rapports d'exécution des scripts Canary qui utilisent la surveillance visuelle.

 **Configuration synthétique. withFailCanaryRunOnVisualVariance(FailCanary**) 

Définissez si le script Canary échoue ou non lorsqu'il y a une différence visuelle supérieure au seuil. La valeur par défaut est de faire échouer le script Canary.

### Enregistreur Synthetics
<a name="CloudWatch_Synthetics_Library_SyntheticsLogger"></a>

SyntheticsLogger écrit les déconnexions à la fois dans la console et dans un fichier journal local au même niveau de journal. Ce fichier journal est écrit dans les deux emplacements seulement si le niveau de journalisation est égal ou inférieur au niveau de journalisation souhaité de la fonction de journalisation qui a été appelée.

Les instructions de journalisation dans le fichier journal local sont précédées de « DEBUG: », « INFO: », etc., pour respecter le niveau de journalisation de la fonction appelée.

Vous pouvez utiliser le SyntheticsLogger, en supposant que vous souhaitiez exécuter la bibliothèque Synthetics au même niveau de journalisation que votre journalisation Synthetics Canary.

 SyntheticsLogger Il n'est pas nécessaire d'utiliser le pour créer un fichier journal qui est téléchargé vers votre emplacement de résultats S3. Vous pouvez créer à la place un autre fichier journal dans le dossier ` /tmp`. Tous les fichiers créés sous le dossier `/tmp` sont chargés vers l'emplacement des résultats dans S3 en tant qu'artefacts. 

Pour utiliser l'enregistreur de la bibliothèque Synthetics :

```
const log = require('@aws/synthetics-logger');
```

Définitions de fonctions utiles :

 **log.debug (,) ; *message* *ex*** 

Paramètres : *message* est le message à enregistrer. * ex*est l'exception, le cas échéant, à la journalisation.

Exemple :

```
log.debug("Starting step - login.");
```

 **log.error (*message*,) ; *ex*** 

Paramètres : *message* est le message à enregistrer. * ex*est l'exception, le cas échéant, à la journalisation.

Exemple :

```
try {
  await login();
catch (ex) {
  log.error("Error encountered in step - login.", ex);
}
```

 **log.info (*message*,*ex*) ;** 

Paramètres : *message* est le message à enregistrer. * ex*est l'exception, le cas échéant, à la journalisation.

Exemple :

```
log.info("Successfully completed step - login.");
```

 **log.log (*message*,*ex*) ;** 

Ceci est un alias pour `log.info`. 

Paramètres : *message* est le message à enregistrer. * ex*est l'exception, le cas échéant, à la journalisation.

Exemple :

```
 log.log("Successfully completed step - login.");
```

 **log.warn (*message*,) ; *ex*** 

Paramètres : *message* est le message à enregistrer. * ex*est l'exception, le cas échéant, à la journalisation.

Exemple :

```
log.warn("Exception encountered trying to publish CloudWatch Metric.", ex);
```

### SyntheticsLogHelper classe
<a name="CloudWatch_Synthetics_Library_SyntheticsLogHelper"></a>

La classe `SyntheticsLogHelper` est disponible dans l'exécution ` syn-nodejs-puppeteer-3.2` et versions ultérieures. Il est déjà initialisé dans la bibliothèque CloudWatch Synthetics et est configuré avec la configuration Synthetics. Vous pouvez l'ajouter en tant que dépendance dans votre script. Cette classe vous permet de nettoyer les en-têtes et URLs les messages d'erreur afin de supprimer des informations sensibles.

**Note**  
Synthetics nettoie URLs tous les messages d'erreur qu'il enregistre avant de les inclure dans les journaux, les rapports, les fichiers HAR et les erreurs Canary Run en fonction du paramètre de configuration de Synthetics. `restrictedUrlParameters` Vous devez utiliser ` getSanitizedUrl` ou `getSanitizedErrorMessage` uniquement si vous vous connectez URLs ou si des erreurs se produisent dans votre script. Synthetics ne stocke pas d'artefacts de script Canary, sauf pour les erreurs de script Canary levées par le script. Les artefacts d'exécution de script Canary sont stockés sur votre compte client. Pour de plus amples informations, veuillez consulter [Considérations de sécurité pour les scripts Canary Synthetics](servicelens_canaries_security.md).

**Topics**
+ [getSanitizedUrl(url, StepConfig = nul)](#CloudWatch_Synthetics_Library_getSanitizedUrl)
+ [getSanitizedErrorUn message](#CloudWatch_Synthetics_Library_getSanitizedErrorMessage)
+ [getSanitizedHeaders(en-têtes, StepConfig=NULL)](#CloudWatch_Synthetics_Library_getSanitizedHeaders)

#### getSanitizedUrl(url, StepConfig = nul)
<a name="CloudWatch_Synthetics_Library_getSanitizedUrl"></a>

Cette fonction est disponible dans `syn-nodejs-puppeteer-3.2` et versions ultérieures. Elle renvoie des chaînes d'URL nettoyées en fonction de la configuration. Vous pouvez choisir d'effacer les paramètres d'URL sensibles tels que les mots de passe et access\$1token en définissant la propriété `restrictedUrlParameters`. Par défaut, les mots de passe saisis URLs sont expurgés. Vous pouvez activer les mots de passe d'URL si nécessaire en définissant `includeUrlPassword` sur true (vrai). 

Cette fonction lève une erreur si l'URL transmise n'est pas une URL valide.

 **Paramètres ** 
+ *url*est une chaîne et est l'URL à nettoyer.
+  *stepConfig*(Facultatif) remplace la configuration globale de Synthetics pour cette fonction. Si `stepConfig` n'est pas transmis, la configuration globale est utilisée pour nettoyer l'URL.

 **Exemple : ** 

Cet exemple utilise l'exemple d'URL suivant : ` https://example.com/learn/home?access_token=12345&token_type=Bearer&expires_in=1200`. Dans cet exemple, `access_token` contient vos informations sensibles qui ne doivent pas être journalisées. Notez que les services Synthetics ne stockent pas d'artefacts d'exécution de script Canary. Les artefacts tels que les journaux, les captures d'écran et les rapports sont tous stockés dans un compartiment Amazon S3 sur votre compte client.

La première étape consiste à définir la configuration Synthetics.

```
// Import Synthetics dependency
const synthetics = require('@aws/synthetics-puppeteer');

// Import Synthetics logger for logging url
const log = require('@aws/synthetics-logger');

// Get Synthetics configuration
const synConfig = synthetics.getConfiguration();

// Set restricted parameters
synConfig.setConfig({
   restrictedUrlParameters: ['access_token'];
});
// Import SyntheticsLogHelper dependency
const syntheticsLogHelper = require('@aws/synthetics-log-helper');

const sanitizedUrl = syntheticsLogHelper.getSanitizedUrl('URL');



const urlConfig = {
   restrictedUrlParameters = ['*']
};
const sanitizedUrl = syntheticsLogHelper.getSanitizedUrl('URL', urlConfig);
logger.info('My example url is: ' + sanitizedUrl);
```

Ensuite, nettoyez et journalisez l'URL

```
// Import SyntheticsLogHelper dependency
const syntheticsLogHelper = require('@aws/synthetics-log-helper');

const sanitizedUrl = syntheticsLogHelper.getSanitizedUrl('https://example.com/learn/home?access_token=12345&token_type=Bearer&expires_in=1200');
```

Ceci journalise ce qui suit dans votre journal de script Canary.

```
My example url is: https://example.com/learn/home?access_token=REDACTED&token_type=Bearer&expires_in=1200
```

Vous pouvez remplacer la configuration Synthetics d'une URL en transmettant un paramètre facultatif contenant des options de configuration Synthetics, comme dans l'exemple suivant.

```
const urlConfig = {
   restrictedUrlParameters = ['*']
};
const sanitizedUrl = syntheticsLogHelper.getSanitizedUrl('https://example.com/learn/home?access_token=12345&token_type=Bearer&expires_in=1200', urlConfig);
logger.info('My example url is: ' + sanitizedUrl);
```

L'exemple précédent efface tous les paramètres de requête et est journalisé comme suit :

```
My example url is: https://example.com/learn/home?access_token=REDACTED&token_type=REDACTED&expires_in=REDACTED
```

#### getSanitizedErrorUn message
<a name="CloudWatch_Synthetics_Library_getSanitizedErrorMessage"></a>

Cette fonction est disponible dans `syn-nodejs-puppeteer-3.2` et versions ultérieures. Il renvoie des chaînes d'erreur nettoyées en nettoyant tous les URLs présents en fonction de la configuration de Synthetics. Vous pouvez choisir de remplacer la configuration Synthetics globale lorsque vous appelez cette fonction en transmettant un paramètre `stepConfig` facultatif. 

 **Paramètres ** 
+ *error*est l'erreur de désinfection. Il peut s'agir d'un objet Error ou d'une chaîne.
+  *stepConfig*(Facultatif) remplace la configuration globale de Synthetics pour cette fonction. Si `stepConfig` n'est pas transmis, la configuration globale est utilisée pour nettoyer l'URL.

 **Exemple : ** 

Cet exemple utilise l'erreur suivante : ` Failed to load url: https://example.com/learn/home?access_token=12345&token_type=Bearer&expires_in=1200`

La première étape consiste à définir la configuration Synthetics.

```
// Import Synthetics dependency
const synthetics = require('@aws/synthetics-puppeteer');

// Import Synthetics logger for logging url
const log = require('@aws/synthetics-logger');

// Get Synthetics configuration
const synConfig = synthetics.getConfiguration();

// Set restricted parameters
synConfig.setConfig({
   restrictedUrlParameters: ['access_token'];
});
```

Ensuite, nettoyez et journalisez le message d'erreur

```
// Import SyntheticsLogHelper dependency
const syntheticsLogHelper = require('@aws/synthetics-log-helper');

try {
   // Your code which can throw an error containing url which your script logs
} catch (error) {
    const sanitizedErrorMessage = syntheticsLogHelper.getSanitizedErrorMessage(errorMessage);
    logger.info(sanitizedErrorMessage);
}
```

Ceci journalise ce qui suit dans votre journal de script Canary.

```
Failed to load url: https://example.com/learn/home?access_token=REDACTED&token_type=Bearer&expires_in=1200
```

#### getSanitizedHeaders(en-têtes, StepConfig=NULL)
<a name="CloudWatch_Synthetics_Library_getSanitizedHeaders"></a>

Cette fonction est disponible dans `syn-nodejs-puppeteer-3.2` et versions ultérieures. Elle renvoie les en-têtes nettoyés en fonction de la propriété `restrictedHeaders` de ` syntheticsConfiguration`. Les en-têtes spécifiés dans la propriété `restrictedHeaders` sont effacés des journaux, des fichiers HAR et des rapports. 

 **Paramètres ** 
+ *headers*est un objet contenant les en-têtes à assainir.
+ *stepConfig*(Facultatif) remplace la configuration globale de Synthetics pour cette fonction. Si `stepConfig` n'est pas transmis, la configuration globale est utilisée pour nettoyer les en-têtes.

## Classes et fonctions de bibliothèque Node.js qui s'appliquent uniquement aux scripts Canary d'interface utilisateur
<a name="CloudWatch_Synthetics_Library_UIcanaries"></a>

Les fonctions de bibliothèque CloudWatch Synthetics suivantes pour Node.js ne sont utiles que pour les canaris de l'interface utilisateur.

**Topics**
+ [Classe Synthetics](#CloudWatch_Synthetics_Library_Synthetics_Class)
+ [BrokenLinkCheckerReport classe](#CloudWatch_Synthetics_Library_BrokenLinkCheckerReport)
+ [SyntheticsLink classe](#CloudWatch_Synthetics_Library_SyntheticsLink)

### Classe Synthetics
<a name="CloudWatch_Synthetics_Library_Synthetics_Class"></a>

Les fonctions suivantes sont dans la classe Synthetics.

**Topics**
+ [asynchrone addUserAgent (page, userAgentString) ;](#CloudWatch_Synthetics_Library_addUserAgent)
+ [async ExecuteStep (StepName, [StepConfig]) ; functionToExecute](#CloudWatch_Synthetics_Library_executeStep)
+ [getDefaultLaunchDes options () ;](#CloudWatch_Synthetics_Library_getDefaultLaunchOptions)
+ [getPage();](#CloudWatch_Synthetics_Library_getPage)
+ [getRequestResponseLogHelper();](#CloudWatch_Synthetics_Library_getRequestResponseLogHelper)
+ [launch(options)](#CloudWatch_Synthetics_Library_LaunchOptions)
+ [RequestResponseLogHelper classe](#CloudWatch_Synthetics_Library_RequestResponseLogHelper)
+ [setRequestResponseLogHelper();](#CloudWatch_Synthetics_Library_setRequestResponseLogHelper)
+ [async takeScreenshot(name, suffix);](#CloudWatch_Synthetics_Library_takeScreenshot)

#### asynchrone addUserAgent (page, userAgentString) ;
<a name="CloudWatch_Synthetics_Library_addUserAgent"></a>

Cette fonction s'ajoute *userAgentString* à l'en-tête de l'agent utilisateur de la page spécifiée.

Exemple :

```
await synthetics.addUserAgent(page, "MyApp-1.0");
```

Il en résulte que l'en-tête d'agent utilisateur de la page est défini sur ` browsers-user-agent-header-valueMyApp-1.0`

#### async ExecuteStep (StepName, [StepConfig]) ; functionToExecute
<a name="CloudWatch_Synthetics_Library_executeStep"></a>

Exécute l'étape fournie, en l'enveloppant avec start/pass/fail logging, start/pass/fail screenshots, and pass/fail des métriques de durée.

**Note**  
Si vous utilisez l'exécution `syn-nodejs-2.1` ou version ultérieure, vous pouvez configurer s'il faut prendre des captures d'écran et quand. Pour de plus amples informations, veuillez consulter [SyntheticsConfiguration classe](#CloudWatch_Synthetics_Library_SyntheticsConfiguration).

La fonction `executeStep` effectue également les opérations suivantes :
+ Elle consigne le fait que l'étape a commencé.
+ Prend une capture d'écran appelée `<stepName>-starting`.
+ Elle démarre un minuteur.
+ Elle exécute la fonction fournie.
+ Si la fonction a un retour normal, elle est considérée comme une réussite. Si la fonction lève une exception, elle est considérée comme un échec.
+ Elle arrête le minuteur.
+ Elle consigne le fait que l'étape a réussi ou échoué.
+ Prend une capture d'écran appelée `<stepName>-succeeded` ou ` <stepName>-failed`.
+ Elle émet la métrique `stepName` `SuccessPercent`, 100 pour succès ou 0 pour échec.
+ Elle émet la métrique `stepName` `Duration` avec une valeur basée sur les heures de début et de fin de l'étape.
+ Enfin, elle retourne ce que `functionToExecute` a retourné ou lève à son tour ce que `functionToExecute` a levé.

Si le script Canary utilise l'exécution `syn-nodejs-2.0` ou version ultérieure, cette fonction ajoute également un résumé de l'exécution des étapes au rapport du script Canary. Le résumé inclut des détails sur chaque étape, tels que l'heure de début, l'heure de fin, le statut (PASSED/FAILED [RÉUSSITE/ÉCHEC]), le motif de l'échec (en cas d'échec) et les captures d'écran prises lors de l'exécution de chaque étape.

Exemple :

```
await synthetics.executeStep('navigateToUrl', async function (timeoutInMillis = 30000) {
           await page.goto(url, {waitUntil: ['load', 'networkidle0'], timeout: timeoutInMillis});});
```

Réponse :

Retourne ce que `functionToExecute` retourne.

 **Mises à jour avec syn-nodejs-2.2** 

En commençant par`syn-nodejs-2.2`, vous pouvez éventuellement passer des configurations d'étape pour remplacer les configurations CloudWatch Synthetics au niveau de l'étape. Pour obtenir la liste des options que vous pouvez transmettre à `executeStep`, consultez [SyntheticsConfiguration classe](#CloudWatch_Synthetics_Library_SyntheticsConfiguration).

L'exemple suivant remplace la configuration par défaut `false` pour ` continueOnStepFailure` par `true` et spécifie quand prendre des captures d'écran.

```
var stepConfig = {
    'continueOnStepFailure': true,
    'screenshotOnStepStart': false,
    'screenshotOnStepSuccess': true,
    'screenshotOnStepFailure': false
}

await executeStep('Navigate to amazon', async function (timeoutInMillis = 30000) {
      await page.goto(url, {waitUntil: ['load', 'networkidle0'], timeout: timeoutInMillis});
 }, stepConfig);
```

#### getDefaultLaunchDes options () ;
<a name="CloudWatch_Synthetics_Library_getDefaultLaunchOptions"></a>

La `getDefaultLaunchOptions()` fonction renvoie les options de lancement du navigateur utilisées par CloudWatch Synthetics. Pour plus d'informations, voir [Launch options type](https://pptr.dev/browsers-api/browsers.launchoptions/) 

```
// This function returns default launch options used by Synthetics.
const defaultOptions = await synthetics.getDefaultLaunchOptions();
```

#### getPage();
<a name="CloudWatch_Synthetics_Library_getPage"></a>

Retourne la page ouverte actuelle en tant qu'objet Puppeteer. Pour de plus amples informations, reportez-vous à l'[API Puppeteer v1.14.0](https://github.com/puppeteer/puppeteer/blob/v1.14.0/docs/api.md).

Exemple :

```
let page = await synthetics.getPage();
```

Réponse :

La page (objet Puppeteer) actuellement ouverte dans la session de navigateur en cours.

#### getRequestResponseLogHelper();
<a name="CloudWatch_Synthetics_Library_getRequestResponseLogHelper"></a>

**Important**  
Dans les scripts Canary qui utilisent l'exécution `syn-nodejs-puppeteer-3.2` ou version ultérieure, cette fonction et la classe `RequestResponseLogHelper` sont rendues obsolètes. Toute utilisation de cette fonction entraîne l'apparition d'un avertissement dans les journaux des scripts Canary. Cette fonction sera supprimée dans les futures versions d'exécution. Si vous utilisez cette fonction, utilisez plutôt [RequestResponseLogHelper classe](#CloudWatch_Synthetics_Library_RequestResponseLogHelper). 

Utilisez cette fonction comme modèle de générateur pour ajuster les indicateurs de journalisation des demandes et des réponses.

Exemple :

```
synthetics.setRequestResponseLogHelper(getRequestResponseLogHelper().withLogRequestHeaders(false));;
```

Réponse :

```
{RequestResponseLogHelper}
```

#### launch(options)
<a name="CloudWatch_Synthetics_Library_LaunchOptions"></a>

Les options de cette fonction ne sont disponibles que dans l'exécution `syn-nodejs-2.1` ou version ultérieure.

Cette fonction est utilisée uniquement pour les scripts Canary d'interface utilisateur. Elle ferme le navigateur existant et en lance un nouveau.

**Note**  
CloudWatch Synthetics lance toujours un navigateur avant de commencer à exécuter votre script. Vous n'avez pas besoin d'appeler launch(), sauf si vous voulez lancer un nouveau navigateur avec des options personnalisées.

(options) est un ensemble configurable d'options à définir sur le navigateur. Pour plus d’informations, consultez [Type d’options de lancement](https://pptr.dev/browsers-api/browsers.launchoptions/).

Si vous appelez cette fonction sans options, Synthetics lance un navigateur avec des arguments par défaut, `executablePath` et `defaultViewport`. La fenêtre d'affichage par défaut dans CloudWatch Synthetics est 1920 x 1080.

Vous pouvez remplacer les paramètres de lancement utilisés par CloudWatch Synthetics et transmettre des paramètres supplémentaires lors du lancement du navigateur. Par exemple, l'extrait de code suivant lance un navigateur avec des arguments par défaut et un chemin d'accès au fichier exécutable par défaut, mais avec une fenêtre d'affichage de 800 x 600.

```
await synthetics.launch({
        defaultViewport: { 
            "deviceScaleFactor": 1, 
            "width": 800,
            "height": 600 
    }});
```

L'exemple de code suivant ajoute un nouveau `ignoreHTTPSErrors` paramètre aux paramètres de lancement de CloudWatch Synthetics :

```
await synthetics.launch({
        ignoreHTTPSErrors: true
 });
```

Vous pouvez désactiver la sécurité Web en ajoutant un `--disable-web-security` indicateur aux arguments dans les paramètres de lancement de CloudWatch Synthetics :

```
// This function adds the --disable-web-security flag to the launch parameters
const defaultOptions = await synthetics.getDefaultLaunchOptions();
const launchArgs = [...defaultOptions.args, '--disable-web-security'];
await synthetics.launch({
     args: launchArgs
  });
```

#### RequestResponseLogHelper classe
<a name="CloudWatch_Synthetics_Library_RequestResponseLogHelper"></a>

**Important**  
Dans les scripts Canary qui utilisent l'exécution `syn-nodejs-puppeteer-3.2` ou version ultérieure, cette classe est rendue obsolète. Toute utilisation de cette classe entraîne l'apparition d'un avertissement dans les journaux des scripts Canary. Cette fonction sera supprimée dans les futures versions d'exécution. Si vous utilisez cette fonction, utilisez plutôt [RequestResponseLogHelper classe](#CloudWatch_Synthetics_Library_RequestResponseLogHelper).

Elle gère la configuration précise et la création de représentations chaînes des charges utiles de demandes et de réponses. 

```
class RequestResponseLogHelper {
 
    constructor () {
        this.request = {url: true, resourceType: false, method: false, headers: false, postData: false};
        this.response = {status: true, statusText: true, url: true, remoteAddress: false, headers: false};
    }
 
    withLogRequestUrl(logRequestUrl);
    
    withLogRequestResourceType(logRequestResourceType);
    
    withLogRequestMethod(logRequestMethod);
    
    withLogRequestHeaders(logRequestHeaders);
    
    withLogRequestPostData(logRequestPostData);

        
    withLogResponseStatus(logResponseStatus);
    
    withLogResponseStatusText(logResponseStatusText);
   
    withLogResponseUrl(logResponseUrl);
 
    withLogResponseRemoteAddress(logResponseRemoteAddress);
    
    withLogResponseHeaders(logResponseHeaders);
```

Exemple :

```
synthetics.setRequestResponseLogHelper(getRequestResponseLogHelper()
.withLogRequestPostData(true)
.withLogRequestHeaders(true)
.withLogResponseHeaders(true));
```

Réponse :

```
{RequestResponseLogHelper}
```

#### setRequestResponseLogHelper();
<a name="CloudWatch_Synthetics_Library_setRequestResponseLogHelper"></a>

**Important**  
Dans les scripts Canary qui utilisent l'exécution `syn-nodejs-puppeteer-3.2` ou version ultérieure, cette fonction et la classe `RequestResponseLogHelper` sont rendues obsolètes. Toute utilisation de cette fonction entraîne l'apparition d'un avertissement dans les journaux des scripts Canary. Cette fonction sera supprimée dans les futures versions d'exécution. Si vous utilisez cette fonction, utilisez plutôt [RequestResponseLogHelper classe](#CloudWatch_Synthetics_Library_RequestResponseLogHelper). 

Utilisez cette fonction comme modèle de générateur pour définir les indicateurs de journalisation de demandes et de réponses.

Exemple :

```
synthetics.setRequestResponseLogHelper().withLogRequestHeaders(true).withLogResponseHeaders(true);
```

Réponse :

```
{RequestResponseLogHelper}
```

#### async takeScreenshot(name, suffix);
<a name="CloudWatch_Synthetics_Library_takeScreenshot"></a>

Effectue une capture d'écran (.PNG) de la page actuelle avec un nom et un suffixe (facultatif).

Exemple :

```
await synthetics.takeScreenshot("navigateToUrl", "loaded")
```

Cet exemple effectue et télécharge une capture d'écran nommée ` 01-navigateToUrl-loaded.png` dans le compartiment S3 du script Canary.

Vous pouvez prendre une capture d'écran pour une étape spécifique d'un script Canary en transmettant ` stepName` en tant que premier paramètre. Les captures d'écran sont liées à l'étape du script Canary dans vos rapports afin de vous aider à suivre chaque étape lors du débogage.

CloudWatch Synthetics Canaries prend automatiquement des captures d'écran avant de commencer une étape (`executeStep`la fonction) et une fois l'étape terminée (sauf si vous configurez le canari pour désactiver les captures d'écran). Vous pouvez prendre plus de captures d'écran en transmettant le nom de l'étape dans la fonction `takeScreenshot`.

L'exemple suivant prend une capture d'écran avec `signupForm` comme valeur de la propriété `stepName`. La capture d'écran sera nommée ` 02-signupForm-address` et sera liée à l'étape nommée ` signupForm` dans le rapport du script Canary.

```
await synthetics.takeScreenshot('signupForm', 'address')
```

### BrokenLinkCheckerReport classe
<a name="CloudWatch_Synthetics_Library_BrokenLinkCheckerReport"></a>

Cette classe fournit des méthodes pour ajouter un lien Synthetics. Elle n'est prise en charge que sur les scripts Canary qui utilisent la version `syn-nodejs-2.0-beta` ou ultérieure de l'exécution. 

Pour utiliser `BrokenLinkCheckerReport`, incluez les lignes suivantes dans le script :

```
const BrokenLinkCheckerReport = require('@aws/synthetics-broken-link-checker-report');
            
const brokenLinkCheckerReport = new BrokenLinkCheckerReport();
```

Définitions de fonctions utiles :

 **Ajouter un lien (*syntheticsLink*, IsBroken)** 

` syntheticsLink ` est un objet ` SyntheticsLink` représentant un lien. Cette fonction ajoute le lien en fonction du code de statut. Par défaut, elle considère qu'un lien est rompu si le code de statut n'est pas disponible ou s'il est 400 ou plus. Vous pouvez remplacer ce comportement par défaut en transmettant le paramètre facultatif `isBrokenLink` avec une valeur `true` ou `false`.

Cette fonction n'a pas de valeur de retour.

 **getLinks()** 

Cette fonction renvoie un tableau d'objets `SyntheticsLink` qui sont inclus dans le rapport du vérificateur de liens rompus.

 **getTotalBrokenLiens ()** 

Cette fonction renvoie un nombre représentant le nombre total de liens rompus.

 **getTotalLinksVérifié ()** 

Cette fonction renvoie un nombre représentant le nombre total de liens inclus dans le rapport.

 **Comment utiliser BrokenLinkCheckerReport** 

L'extrait de code de script Canary suivant illustre un exemple de navigation vers un lien et de l'ajout de celui-ci au rapport du vérificateur de liens rompus.

1. Importez `SyntheticsLink`, `BrokenLinkCheckerReport` et ` Synthetics`.

   ```
   const BrokenLinkCheckerReport = require('@aws/synthetics-broken-link-checker-report');
   const SyntheticsLink = require('@aws/synthetics-link');
   
   // Synthetics dependency
   const synthetics = require('@aws/synthetics-puppeteer');
   ```

1. Pour ajouter un lien au rapport, créez une instance de ` BrokenLinkCheckerReport`.

   ```
   let brokenLinkCheckerReport = new BrokenLinkCheckerReport();
   ```

1. Accédez à l'URL et ajoutez-la au rapport du vérificateur de liens rompus.

   ```
   let url = "https://amazon.com";
   
   let syntheticsLink = new SyntheticsLink(url);
   
   // Navigate to the url.
   let page = await synthetics.getPage();
   
   // Create a new instance of Synthetics Link
   let link = new SyntheticsLink(url)
   
   try {
       const response = await page.goto(url, {waitUntil: 'domcontentloaded', timeout: 30000});
   } catch (ex) {
       // Add failure reason if navigation fails.
       link.withFailureReason(ex);
   }
   
   if (response) {
       // Capture screenshot of destination page
       let screenshotResult = await synthetics.takeScreenshot('amazon-home', 'loaded');
      
       // Add screenshot result to synthetics link
       link.addScreenshotResult(screenshotResult);
   
       // Add status code and status description to the link
       link.withStatusCode(response.status()).withStatusText(response.statusText())
   }
   
   // Add link to broken link checker report.
   brokenLinkCheckerReport.addLink(link);
   ```

1. Ajoutez le rapport à Synthetics. Cela crée un fichier JSON nommé ` BrokenLinkCheckerReport.json` dans votre compartiment S3 pour chaque exécution de script Canary. Vous pouvez voir un rapport des liens dans la console pour chaque exécution de script Canary ainsi que des captures d'écran, des journaux et des fichiers HAR.

   ```
   await synthetics.addReport(brokenLinkCheckerReport);
   ```

### SyntheticsLink classe
<a name="CloudWatch_Synthetics_Library_SyntheticsLink"></a>

Cette classe fournit des méthodes pour envelopper les informations. Elle n'est prise en charge que sur les scripts Canary qui utilisent la version `syn-nodejs-2.0-beta` ou ultérieure de l'exécution. 

Pour utiliser `SyntheticsLink`, incluez les lignes suivantes dans le script :

```
const SyntheticsLink = require('@aws/synthetics-link');

const syntheticsLink = new SyntheticsLink("https://www.amazon.com");
```

Cette fonction retourne `syntheticsLinkObject`.

Définitions de fonctions utiles :

 **Avec URL () *url*** 

` url ` est une chaîne d'URL. Cette fonction retourne `syntheticsLinkObject`.

 **Avec texte () *text*** 

` text ` est une chaîne représentant le texte d'ancrage. Cette fonction retourne `syntheticsLinkObject`. Elle ajoute le texte d'ancrage correspondant au lien.

 **withParentUrl(*parentUrl*)** 

` parentUrl ` est une chaîne représentant l'URL parent (page source). Cette fonction retourne `syntheticsLink Object`.

 **withStatusCode(*statusCode*)** 

` statusCode ` est une chaîne représentant le code de statut. Cette fonction retourne `syntheticsLinkObject`.

 **withFailureReason(*failureReason*)** 

` failureReason ` est une chaîne représentant la raison de l'échec. Cette fonction retourne `syntheticsLink Object`.

 **addScreenshotResult(*screenshotResult*)** 

` screenshotResult ` est un objet. Il s'agit d'une instance de `ScreenshotResult` qui a été retournée par la fonction Synthetics `takeScreenshot`. L'objet inclut les éléments suivants :
+ `fileName` : chaîne représentant ` screenshotFileName`
+ `pageUrl` (facultatif)
+ `error` (facultatif)

## Classes et fonctions de bibliothèque Node.js qui s'appliquent uniquement aux scripts Canary d'API
<a name="CloudWatch_Synthetics_Library_APIcanaries"></a>

Les fonctions de bibliothèque CloudWatch Synthetics suivantes pour Node.js ne sont utiles que pour les canaris d'API.

**Topics**
+ [executeHttpStep(StepName, RequestOptions, [rappel], [StepConfig])](#CloudWatch_Synthetics_Library_executeHttpStep)

### executeHttpStep(StepName, RequestOptions, [rappel], [StepConfig])
<a name="CloudWatch_Synthetics_Library_executeHttpStep"></a>

Exécute la requête HTTP fournie en tant qu'étape et publie les métriques `SuccessPercent` (réussite/échec) et `Duration`.

**executeHttpStep**utilise des fonctions natives HTTP ou HTTPS sous le capot, selon le protocole spécifié dans la demande.

Cette fonction ajoute également un résumé de l'exécution des étapes au rapport du script Canary. Le résumé inclut des détails sur chaque requête HTTP, tels que les suivants :
+ L’heure de début
+ L'heure de fin
+ Le statut (PASSED/FAILED [RÉUSSITE/ÉCHEC])
+ La raison de l'échec, le cas échéant
+ Détails des appels HTTP tels que request/response les en-têtes, le corps, le code d'état, le message d'état et les délais de performance. 

**Topics**
+ [Parameters](#CloudWatch_Synthetics_Library_executeHttpStep_parameters)
+ [Exemples d'utilisation executeHttpStep](#CloudWatch_Synthetics_Library_executeHttpStep_examples)

#### Parameters
<a name="CloudWatch_Synthetics_Library_executeHttpStep_parameters"></a>

 **StepName () *String*** 

Spécifie le nom de l'étape. Ce nom est également utilisé pour publier CloudWatch les statistiques de cette étape.

 **Options de demande () *Object or String*** 

La valeur de ce paramètre peut être une URL, une chaîne d'URL ou un objet. S'il s'agit d'un objet, il doit s'agir d'un ensemble d'options configurables pour effectuer une requête HTTP. Il prend en charge toutes les options dans [ http.request(options[, callback])](https://nodejs.org/api/http.html#http_http_request_options_callback) dans la documentation de Node.js.

En plus de ces options Node.js, **requestOptions** prend en charge le paramètre supplémentaire `body`. Vous pouvez utiliser le paramètre `body` pour transmettre des données en tant que corps de requête.

 **rappel () *response*** 

(Facultatif) Il s'agit d'une fonction utilisateur qui est appelée avec la réponse HTTP. La réponse est du type [Class : http. IncomingMessage](https://nodejs.org/api/http.html#http_class_http_incomingmessage).

 **Configuration de l'étape () *object*** 

(Facultatif) Utilisez ce paramètre pour remplacer les configurations Synthetics globales par une configuration différente pour cette étape.

#### Exemples d'utilisation executeHttpStep
<a name="CloudWatch_Synthetics_Library_executeHttpStep_examples"></a>

Les exemples suivants s'inspirent les uns des autres pour illustrer les différentes utilisations de cette option.

Ce premier exemple configure les paramètres de requête. Vous pouvez transmettre une URL sous la forme **RequestOptions** :

```
let requestOptions = 'https://www.amazon.com';
```

Vous pouvez également transmettre un ensemble d'options :

```
let requestOptions = {
        'hostname': 'myproductsEndpoint.com',
        'method': 'GET',
        'path': '/test/product/validProductName',
        'port': 443,
        'protocol': 'https:'
    };
```

L'exemple suivant crée une fonction de rappel qui accepte une réponse. Par défaut, si vous ne spécifiez pas de **rappel**, CloudWatch Synthetics vérifie que le statut est compris entre 200 et 299 inclus.

```
// Handle validation for positive scenario
    const callback = async function(res) {
        return new Promise((resolve, reject) => {
            if (res.statusCode < 200 || res.statusCode > 299) {
                throw res.statusCode + ' ' + res.statusMessage;
            }
     
            let responseBody = '';
            res.on('data', (d) => {
                responseBody += d;
            });
     
            res.on('end', () => {
                // Add validation on 'responseBody' here if required. For ex, your status code is 200 but data might be empty
                resolve();
            });
        });
    };
```

L'exemple suivant crée une configuration pour cette étape qui remplace la configuration globale de CloudWatch Synthetics. La configuration d'étape dans cet exemple autorise les en-têtes de requête, les en-têtes de réponse, le corps de requête (données de publication) et le corps de réponse dans votre rapport et restreint les valeurs d'en-tête 'X-Amz-Security-Token' et 'Authorization'. Par défaut, ces valeurs ne sont pas incluses dans le rapport pour des raisons de sécurité. Si vous choisissez de les inclure, les données sont stockées uniquement dans votre compartiment S3.

```
// By default headers, post data, and response body are not included in the report for security reasons. 
// Change the configuration at global level or add as step configuration for individual steps
let stepConfig = {
    includeRequestHeaders: true, 
    includeResponseHeaders: true,
    restrictedHeaders: ['X-Amz-Security-Token', 'Authorization'], // Restricted header values do not appear in report generated.
    includeRequestBody: true,
    includeResponseBody: true
};
```

Ce dernier exemple transmet votre demande à l'étape **executeHttpStep**et lui donne un nom.

```
await synthetics.executeHttpStep('Verify GET products API', requestOptions, callback, stepConfig);
```

**Avec cet ensemble d'exemples, CloudWatch Synthetics ajoute les détails de chaque étape de votre rapport et produit des métriques pour chaque étape à l'aide de StepName.**

 Vous verrez les métriques `successPercent` et `duration` pour l'étape `Verify GET products API`. Vous pouvez contrôler les performances de vos API en contrôlant les métriques des étapes d'appel de vos API. 

Pour obtenir un exemple de script complet qui utilise ces fonctions, consultez [Script Canary d'API à plusieurs étapes](CloudWatch_Synthetics_Canaries_Samples.md#CloudWatch_Synthetics_Canaries_Samples_APIsteps).

# Fonctions de bibliothèque disponibles pour les scripts Canary Python utilisant Selenium
<a name="CloudWatch_Synthetics_Canaries_Library_Python"></a>

Cette section répertorie les fonctions de bibliothèque Selenium disponibles pour les scripts Canary Python.

**Topics**
+ [Classes et fonctions de bibliothèque Python et Selenium qui s'appliquent à tous les scripts Canary](#CloudWatch_Synthetics_Library_allcanaries_Python)
+ [Classes et fonctions de bibliothèque Python et Selenium qui s'appliquent aux scripts Canary d'interface utilisateur uniquement](#CloudWatch_Synthetics_Library_Python_UIcanaries)

## Classes et fonctions de bibliothèque Python et Selenium qui s'appliquent à tous les scripts Canary
<a name="CloudWatch_Synthetics_Library_allcanaries_Python"></a>

Les fonctions de la bibliothèque CloudWatch Synthetics Selenium pour Python suivantes sont utiles pour tous les canaris.

**Topics**
+ [SyntheticsConfiguration classe](#CloudWatch_Synthetics_Library_SyntheticsConfiguration_Python)
+ [SyntheticsLogger classe](#CloudWatch_Synthetics_Library_SyntheticsLogger_Python)

### SyntheticsConfiguration classe
<a name="CloudWatch_Synthetics_Library_SyntheticsConfiguration_Python"></a>

Vous pouvez utiliser la SyntheticsConfiguration classe pour configurer le comportement des fonctions de la bibliothèque Synthetics. Par exemple, vous pouvez utiliser cette classe pour configurer la fonction ` executeStep()` pour ne pas prendre de captures d'écran.

Vous pouvez définir CloudWatch des configurations Synthetics au niveau global.

Définitions des fonctions :

#### set\$1config(options)
<a name="CloudWatch_Synthetics_Library_setConfig_Python"></a>

```
from aws_synthetics.common import synthetics_configuration
```

` options ` est un objet, qui est un ensemble d'options configurables pour votre script Canary. Les sections suivantes expliquent les champs possibles dans ` options `.
+ `screenshot_on_step_start` (booléen) : indique s'il faut prendre une capture d'écran avant de commencer une étape.
+ `screenshot_on_step_success` (booléen) : indique s'il faut prendre une capture d'écran après la réussite d'une étape.
+ `screenshot_on_step_failure` (booléen) : indique s'il faut prendre une capture d'écran après l'échec d'une étape.

 **with\$1screenshot\$1on\$1step\$1start(screenshot\$1on\$1step\$1start)** 

Accepte un argument booléen qui indique s'il faut prendre une capture d'écran avant de commencer une étape.

 **with\$1screenshot\$1on\$1step\$1success(screenshot\$1on\$1step\$1success)** 

Accepte un argument booléen qui indique s'il faut prendre une capture d'écran après la réussite d'une étape.

 **with\$1screenshot\$1on\$1step\$1failure(screenshot\$1on\$1step\$1failure)** 

Accepte un argument booléen qui indique s'il faut prendre une capture d'écran après l'échec d'une étape.

 **get\$1screenshot\$1on\$1step\$1start()** 

Renvoie une valeur indiquant s'il faut prendre une capture d'écran avant de commencer une étape.

 **get\$1screenshot\$1on\$1step\$1success()** 

Renvoie une valeur indiquant s'il faut prendre une capture d'écran après la réussite d'une étape.

 **get\$1screenshot\$1on\$1step\$1failure()** 

Renvoie une valeur indiquant s'il faut prendre une capture d'écran après l'échec d'une étape.

 **disable\$1step\$1screenshots()** 

Désactive toutes les options de capture d'écran (get\$1screenshot\$1on\$1step\$1start, get\$1screenshot\$1on\$1step\$1success et get\$1screenshot\$1on\$1step\$1failure).

 **enable\$1step\$1screenshots()** 

Active toutes les options de capture d'écran (get\$1screenshot\$1on\$1step\$1start, get\$1screenshot\$1on\$1step\$1success et get\$1screenshot\$1on\$1step\$1failure). Par défaut, toutes ces méthodes sont activées.

 **SetConfig (options) concernant les métriques CloudWatch ** 

Pour les canaris utilisant `syn-python-selenium-1.1` ou version ultérieure, les **(options)** de **SetConfig** peuvent inclure les paramètres booléens suivants qui déterminent les métriques publiées par le canari. La valeur par défaut de chacune de ces options est `true`. Les options qui commencent par ` aggregated` déterminent si la métrique est émise sans la dimension ` CanaryName`. Vous pouvez utiliser ces métriques pour afficher les résultats agrégés de tous vos scripts Canary. Les autres options déterminent si la métrique est émise avec la dimension `CanaryName`. Vous pouvez utiliser ces métriques pour afficher les résultats de chaque script Canary individuel.

Pour une liste des CloudWatch métriques émises par les canaris, voir[CloudWatch statistiques publiées par canaries](CloudWatch_Synthetics_Canaries_metrics.md).
+ `failed_canary_metric` (booléen) : indique s'il faut émettre la métrique ` Failed` (avec la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `failed_requests_metric` (booléen) : indique s'il faut émettre la métrique `Failed requests` (avec la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `2xx_metric` (booléen) : indique s'il faut émettre la métrique `2xx` (avec la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `4xx_metric` (booléen) : indique s'il faut émettre la métrique `4xx` (avec la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `5xx_metric` (booléen) : indique s'il faut émettre la métrique `5xx` (avec la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `step_duration_metric` (booléen) : indique s'il faut émettre la métrique `Step duration` (avec les dimensions `CanaryName` `StepName`) pour ce script Canary. La valeur par défaut est `true`.
+ `step_success_metric` (booléen) : indique s'il faut émettre la métrique `Step success` (avec les dimensions `CanaryName` `StepName`) pour ce script Canary. La valeur par défaut est `true`.
+ `aggregated_failed_canary_metric` (booléen) : indique s'il faut émettre la métrique `Failed` (sans la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `aggregated_failed_requests_metric` (booléen) : indique s'il faut émettre la métrique `Failed Requests` (sans la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `aggregated_2xx_metric` (booléen) : indique s'il faut émettre la métrique ` 2xx` (sans la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `aggregated_4xx_metric` (booléen) : indique s'il faut émettre la métrique ` 4xx` (sans la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.
+ `aggregated_5xx_metric` (booléen) : indique s'il faut émettre la métrique ` 5xx` (sans la dimension `CanaryName`) pour ce script Canary. La valeur par défaut est `true`.

 **with\$12xx\$1metric(2xx\$1metric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `2xx` avec la dimension `CanaryName` pour ce script Canary.

 **with\$14xx\$1metric(4xx\$1metric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `4xx` avec la dimension `CanaryName` pour ce script Canary.

 **with\$15xx\$1metric(5xx\$1metric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `5xx` avec la dimension `CanaryName` pour ce script Canary.

 **withAggregated2xxMetric(aggregated2xxMetric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `2xx` sans dimension pour ce script Canary.

 **withAggregated4xxMetric(aggregated4xxMetric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `4xx` sans dimension pour ce script Canary.

 **with\$1aggregated\$15xx\$1metric(aggregated\$15xx\$1metric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `5xx` sans dimension pour ce script Canary.

 **with\$1aggregated\$1failed\$1canary\$1metric (aggregated\$1failed\$1canary\$1metric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `Failed` sans dimension pour ce script Canary.

 **with\$1aggregated\$1failed\$1requests\$1metric (aggregated\$1failed\$1requests\$1metric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `Failed requests` sans dimension pour ce script Canary.

 **with\$1failed\$1canary\$1metric(failed\$1canary\$1metric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `Failed` avec la dimension `CanaryName` pour ce script Canary.

 **with\$1failed\$1requests\$1metric(failed\$1requests\$1metric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `Failed requests` avec la dimension `CanaryName` pour ce script Canary.

 **with\$1step\$1duration\$1metric(step\$1duration\$1metric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `Duration` avec la dimension `CanaryName` pour ce script Canary.

 **with\$1step\$1success\$1metric(step\$1success\$1metric)** 

Accepte un argument booléen qui spécifie s'il faut émettre une métrique `StepSuccess` avec la dimension `CanaryName` pour ce script Canary.

##### Méthodes pour activer ou désactiver les métriques
<a name="CloudWatch_Synthetics_Python_setConfig_metrics"></a>

 **disable\$1aggregated\$1request\$1metrics()** 

Désactive l'émission par le script Canary de toutes les métriques de demande émises sans dimension ` CanaryName`.

 **disable\$1request\$1metrics()** 

Désactive toutes les métriques de demande, y compris les métriques par script Canary et les métriques agrégées pour tous les scripts Canary.

 **disable\$1step\$1metrics()** 

Désactive toutes les métriques d'étapes, y compris les métriques de succès des étapes et les métriques de durée des étapes.

 **enable\$1aggregated\$1request\$1metrics()** 

Active l'émission par le script Canary de toutes les métriques de demande émises sans dimension ` CanaryName`.

 **enable\$1request\$1metrics()** 

Active toutes les métriques de demande, y compris les métriques par script Canary et les métriques agrégées pour tous les scripts Canary.

 **enable\$1step\$1metrics()** 

Active toutes les métriques d'étapes, y compris les métriques de succès des étapes et les métriques de durée des étapes.

 **Utilisation dans les scripts canary d'interface utilisateur** 

Tout d'abord, importez la dépendance Synthetics et récupérez la configuration. Ensuite, définissez la configuration de chaque option en appelant la méthode setConfig à l'aide de l'une des options suivantes.

```
from aws_synthetics.common import synthetics_configuration

synthetics_configuration.set_config(
     {
        "screenshot_on_step_start": False,
        "screenshot_on_step_success": False,
        "screenshot_on_step_failure": True
     }
)

or
```

Or

```
synthetics_configuration.with_screenshot_on_step_start(False).with_screenshot_on_step_success(False).with_screenshot_on_step_failure(True)
```

Pour désactiver toutes les captures d'écran, utilisez la fonction disableStepScreenshots () comme dans cet exemple.

```
synthetics_configuration.disable_step_screenshots()
```

Vous pouvez activer et désactiver des captures d'écran à tout moment dans le code. Par exemple, pour désactiver les captures d'écran pour une seule étape, désactivez-les avant d'exécuter cette étape, puis activez-les après l'étape.

##### set\$1config(options) pour les scripts Canary d'interface utilisateur
<a name="CloudWatch_Synthetics_Library_Python_UI"></a>

En commençant par `syn-python-selenium-1.1`, pour les scripts Canary d'interface utilisateur, ` set_config` peut inclure les paramètres booléens suivants :
+ `continue_on_step_failure`**(booléen) — S'il faut continuer à exécuter le script Canary après l'échec d'une étape (cela fait référence à la fonction ExecuteStep).** Si une étape échoue, l'exécution du script Canary sera toujours marquée comme ayant échoué. La valeur par défaut est `false`.

### SyntheticsLogger classe
<a name="CloudWatch_Synthetics_Library_SyntheticsLogger_Python"></a>

`synthetics_logger` écrit les journaux dans la console et dans un fichier journal local au même niveau de journalisation. Ce fichier journal est écrit dans les deux emplacements seulement si le niveau de journalisation est égal ou inférieur au niveau de journalisation souhaité de la fonction de journalisation qui a été appelée.

Les instructions de journalisation dans le fichier journal local sont précédées de « DEBUG: », « INFO: », etc., pour respecter le niveau de journalisation de la fonction appelée.

L'utilisation de `synthetics_logger` n'est pas nécessaire pour créer un fichier journal qui est téléchargé dans votre emplacement des résultats Amazon S3. Vous pouvez créer à la place un autre fichier journal dans le dossier `/tmp`. Tous les fichiers créés sous le dossier `/tmp` sont téléchargés vers l'emplacement des résultats dans le compartiment S3 en tant qu'artefacts.

Pour utiliser `synthetics_logger` :

```
from aws_synthetics.common import synthetics_logger
```

****Définitions de fonctions utiles :

Obtenir le niveau de journalisation :

```
log_level = synthetics_logger.get_level()
```

Définir le niveau de journalisation :

```
synthetics_logger.set_level()
```

Journaliser un message avec un niveau spécifié. Le niveau peut être `DEBUG`, ` INFO`, `WARN` ou `ERROR`, comme dans les exemples de syntaxe suivants :

```
synthetics_logger.debug(message, *args, **kwargs)
```

```
synthetics_logger.info(message, *args, **kwargs)
```

```
synthetics_logger.log(message, *args, **kwargs)
```

```
synthetics_logger.warning(message, *args, **kwargs)
```

```
synthetics_logger.error(message, *args, **kwargs)
```

Pour plus d'informations sur les paramètres de débogage, consultez [logging.debug](https://docs.python.org/3/library/logging.html#logging.debug) dans la documentation Python standard.

Dans ces fonctions de journalisation, le `message` est la chaîne de format du message. Les `args` sont les arguments qui sont fusionnés dans le `msg` à l'aide de l'opérateur de formatage de chaîne.

Il y a trois arguments de mot-clé dans `kwargs` :
+ `exc_info` : s'il n'est pas évalué comme false (faux), ajoute des informations d'exception au message de journalisation.
+ `stack_info` : la valeur par défaut est false (faux). Si true (vrai), ajoute des informations de pile au message de journalisation, y compris l'appel de journalisation réel.
+ `extra` : le troisième argument de mot-clé facultatif, que vous pouvez utiliser pour transmettre un dictionnaire qui est utilisé pour remplir le `__dict__` du `LogRecord` créé pour l'événement de journalisation avec des attributs définis par l'utilisateur.

Exemples :

Journaliser un message avec le niveau `DEBUG`:

```
synthetics_logger.debug('Starting step - login.')
```

Journaliser un message avec le niveau `INFO`. `logger.log` est un synonyme de `logger.info` :

```
synthetics_logger.info('Successfully completed step - login.')
```

or

```
synthetics_logger.log('Successfully completed step - login.')
```

Journaliser un message avec le niveau `WARN` :

```
synthetics_logger.warning('Warning encountered trying to publish %s', 'CloudWatch Metric')
```

Journaliser un message avec le niveau `ERROR` :

```
synthetics_logger.error('Error encountered trying to publish %s', 'CloudWatch Metric')
```

Journaliser une exception :

```
synthetics_logger.exception(message, *args, **kwargs)
```

Journalise un message avec le niveau `ERROR`. Des informations d'exception sont ajoutées au message de journalisation. Vous ne devriez appeler cette fonction qu'à partir d'un gestionnaire d'exceptions.

Pour plus d'informations sur les paramètres d'exception, consultez la documentation standard de Python sur [logging.exception](https://docs.python.org/3/library/logging.html#logging.exception)

Le `message` est la chaîne de format du message. Les `args` sont les arguments qui sont fusionnés dans le `msg` à l'aide de l'opérateur de formatage de chaîne.

Il y a trois arguments de mot-clé dans `kwargs` :
+ `exc_info` : s'il n'est pas évalué comme false (faux), ajoute des informations d'exception au message de journalisation.
+ `stack_info` : la valeur par défaut est false (faux). Si true (vrai), ajoute des informations de pile au message de journalisation, y compris l'appel de journalisation réel.
+ `extra` : le troisième argument de mot-clé facultatif, que vous pouvez utiliser pour transmettre un dictionnaire qui est utilisé pour remplir le `__dict__` du `LogRecord` créé pour l'événement de journalisation avec des attributs définis par l'utilisateur.

Exemple :

```
synthetics_logger.exception('Error encountered trying to publish %s', 'CloudWatch Metric')
```

## Classes et fonctions de bibliothèque Python et Selenium qui s'appliquent aux scripts Canary d'interface utilisateur uniquement
<a name="CloudWatch_Synthetics_Library_Python_UIcanaries"></a>

Les fonctions suivantes de la bibliothèque CloudWatch Synthetics Selenium pour Python ne sont utiles que pour les canaris de l'interface utilisateur.

**Topics**
+ [SyntheticsBrowser classe](#CloudWatch_Synthetics_Library_Python_SyntheticsBrowser)
+ [SyntheticsWebDriver classe](#CloudWatch_Synthetics_Library_Python_SyntheticsWebDriver)

### SyntheticsBrowser classe
<a name="CloudWatch_Synthetics_Library_Python_SyntheticsBrowser"></a>

**Note**  
`SyntheticsBrowser` n’est pris en charge que sur le navigateur Chrome.

Lorsque vous créez une instance de navigateur en appelant `synthetics_webdriver.Chrome()`, l'instance de navigateur renvoyée est du type `SyntheticsBrowser`. La ` SyntheticsBrowser` classe hérite de la WebDriver classe et donne accès à toutes les méthodes exposées par le [WebDriver](https://www.selenium.dev/documentation/webdriver/). Il contrôle le ChromeDriver navigateur et permet au script Canary de piloter le navigateur, permettant ainsi au Selenium de WebDriver fonctionner avec Synthetics.

**Note**  
Synthetics remplace la méthode d'arrêt WebDriver [du](https://www.selenium.dev/selenium/docs/api/py/selenium_webdriver_firefox/selenium.webdriver.firefox.webdriver.html) tabac pour ne rien faire. Vous n’avez donc pas besoin de fermer manuellement le navigateur, car Synthetics le gère automatiquement.

En plus des méthodes Selenium standard, elle fournit également les méthodes suivantes. 

**Topics**
+ [set\$1viewport\$1size(largeur, hauteur)](#CloudWatch_Synthetics_Library_set_viewport_size)
+ [save\$1screenshot(filename, suffix)](#CloudWatch_Synthetics_Library_save_screenshot)

#### set\$1viewport\$1size(largeur, hauteur)
<a name="CloudWatch_Synthetics_Library_set_viewport_size"></a>

Définit la fenêtre d'affichage du navigateur. Exemple :

```
browser.set_viewport_size(1920, 1080)
```

#### save\$1screenshot(filename, suffix)
<a name="CloudWatch_Synthetics_Library_save_screenshot"></a>

Enregistre les captures d'écran dans le répertoire `/tmp`. Les captures d'écran sont téléchargées à partir de ce répertoire dans le dossier des artefacts des scripts Canary dans le compartiment S3.

*filename* est le nom de fichier de la capture d'écran, et le *suffixe* est une chaîne facultative à utiliser pour nommer la capture d'écran.

Exemple :

```
browser.save_screenshot('loaded.png', 'page1')
```

### SyntheticsWebDriver classe
<a name="CloudWatch_Synthetics_Library_Python_SyntheticsWebDriver"></a>

Pour utiliser cette classe, utilisez ce qui suit dans votre script :

```
from aws_synthetics.selenium import synthetics_webdriver
```

**Topics**
+ [add\$1execution\$1error(errorMessage, ex);](#CloudWatch_Synthetics_Library_Python_addExecutionError)
+ [add\$1user\$1agent(user\$1agent\$1str)](#CloudWatch_Synthetics_Library_add_user_agent)
+ [execute\$1step(step\$1name, function\$1to\$1execute)](#CloudWatch_Synthetics_Library_Python_execute_step)
+ [get\$1http\$1response(url)](#CloudWatch_Synthetics_Library_Python_get_http_response)
+ [Chrome()](#CloudWatch_Synthetics_Library_Python_Chrome)

#### add\$1execution\$1error(errorMessage, ex);
<a name="CloudWatch_Synthetics_Library_Python_addExecutionError"></a>

`errorMessage` décrit l'erreur et `ex` est l'exception rencontrée.

Vous pouvez utiliser `add_execution_error` pour définir les erreurs d'exécution pour votre script Canary. Ce code fait échouer le script Canary sans interrompre l'exécution du script. Cela n'a pas non plus d'impact sur vos métriques `successPercent`.

Vous ne devriez suivre les erreurs comme des erreurs d'exécution que si elles ne sont pas importantes pour indiquer le succès ou l'échec de votre script Canary.

L'exemple suivant illustre l'utilisation de `add_execution_error`. Vous surveillez la disponibilité de votre point de terminaison et vous prenez des captures d'écran après le chargement de la page. Étant donné que l'échec de la prise d'une capture d'écran ne détermine pas la disponibilité du point de terminaison, vous pouvez détecter toutes les erreurs rencontrées lors de la prise de captures d'écran et les ajouter en tant qu'erreurs d'exécution. Vos métriques de disponibilité indiqueront toujours que le point de terminaison est opérationnel, mais le statut de votre script Canary indiquera qu'il a échoué. L'exemple de bloc de code suivant détecte une telle erreur et l'ajoute en tant qu'erreur d'exécution.

```
try:
    browser.save_screenshot("loaded.png")  
except Exception as ex:
   self.add_execution_error("Unable to take screenshot", ex)
```

#### add\$1user\$1agent(user\$1agent\$1str)
<a name="CloudWatch_Synthetics_Library_add_user_agent"></a>

Ajoute la valeur de `user_agent_str` à l'en-tête de l'agent utilisateur du navigateur. Vous devez assigner `user_agent_str` avant de créer l'instance du navigateur.

Exemple :

```
await synthetics_webdriver.add_user_agent('MyApp-1.0')
```

`add_user_agent` doit être utilisé à l’intérieur d’une fonction `async`.

#### execute\$1step(step\$1name, function\$1to\$1execute)
<a name="CloudWatch_Synthetics_Library_Python_execute_step"></a>

Traite une fonction. Elle effectue également les opérations suivantes :
+ Elle consigne le fait que l'étape a commencé.
+ Prend une capture d'écran appelée `<stepName>-starting`.
+ Elle démarre un minuteur.
+ Elle exécute la fonction fournie.
+ Si la fonction a un retour normal, elle est considérée comme une réussite. Si la fonction lève une exception, elle est considérée comme un échec.
+ Elle arrête le minuteur.
+ Elle consigne le fait que l'étape a réussi ou échoué.
+ Prend une capture d'écran appelée `<stepName>-succeeded` ou ` <stepName>-failed`.
+ Elle émet la métrique `stepName` `SuccessPercent`, 100 pour succès ou 0 pour échec.
+ Elle émet la métrique `stepName` `Duration` avec une valeur basée sur les heures de début et de fin de l'étape.
+ Enfin, elle retourne ce que `functionToExecute` a retourné ou lève à son tour ce que `functionToExecute` a levé.

Exemple :

```
from selenium.webdriver.common.by import By

def custom_actions():
        #verify contains
        browser.find_element(By.XPATH, "//*[@id=\"id_1\"][contains(text(),'login')]")
        #click a button
        browser.find_element(By.XPATH, '//*[@id="submit"]/a').click()

    await synthetics_webdriver.execute_step("verify_click", custom_actions)
```

#### get\$1http\$1response(url)
<a name="CloudWatch_Synthetics_Library_Python_get_http_response"></a>

Envoie une requête HTTP vers l’URL fournie et retourne le code de réponse HTTP correspondant. Si une exception se produit pendant la requête HTTP, la fonction renvoie la chaîne de caractères « erreur » à la place.

Exemple :

```
response_code = syn_webdriver.get_http_response(url)
if not response_code or response_code == "error" or response_code < 200 or response_code > 299:
    raise Exception("Failed to load page!")
```

#### Chrome()
<a name="CloudWatch_Synthetics_Library_Python_Chrome"></a>

Lance une instance du navigateur Chromium et renvoie l'instance créée du navigateur.

Exemple :

```
browser = synthetics_webdriver.Chrome()
browser.get("https://example.com/)
```

Pour lancer un navigateur en mode navigation privée, utilisez ce qui suit :

```
add_argument('——incognito')
```

Pour ajouter des paramètres proxys, utilisez ce qui suit :

```
add_argument('--proxy-server=%s' % PROXY)
```

Exemple :

```
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("——incognito")
browser = syn_webdriver.Chrome(chrome_options=chrome_options)
```

# Planification d'exécutions de scripts Canary à l'aide de cron
<a name="CloudWatch_Synthetics_Canaries_cron"></a>

L'utilisation d'une expression cron vous donne de la flexibilité lorsque vous planifiez un script Canary. Les expressions cron contiennent cinq ou six champs dans l'ordre indiqué dans le tableau suivant. Les champs sont séparés par des espaces. La syntaxe est différente selon que vous utilisez la CloudWatch console pour créer le canary ou le AWS CLI ou AWS SDKs. Lorsque vous utilisez la console, vous spécifiez uniquement les cinq premiers champs. Lorsque vous utilisez le AWS CLI ou AWS SDKs, vous spécifiez les six champs, et vous devez spécifier `*` le `Year` champ.


|  **Champ**  |  **Valeurs autorisées**  |  **Caractères spéciaux autorisés**  | 
| --- | --- | --- | 
|  Minutes  |  0-59  |  , - \$1 /  | 
|  Heures  |  0-23  |  , - \$1 /  | 
|  D ay-of-month  |  1-31  |  , - \$1 ? / L W  | 
|  Mois  |  1-12 ou JAN-DEC  |  , - \$1 /  | 
|  D ay-of-week  |  1-7 ou DIM-SAM  |  , - \$1 ? L \$1  | 
|  Année  |  \$1  |    | 

**Caractères spéciaux**
+ Le caractère spécial **,** (virgule) inclut plusieurs valeurs dans l'expression d'un champ. Dans le champ Month (Mois), JAN,FEB,MAR englobe janvier, février et mars.
+ Le caractère spécial **-** (tiret) spécifie des plages. Dans le champ Jour, 1-15 englobe les jours 1 à 15 du mois spécifié.
+ Le caractère spécial **\$1** (astérisque) inclut toutes les valeurs du champ. Dans le champ Hours (Heures), **\$1** inclut toutes les heures. Vous ne pouvez pas utiliser **\$1** à la fois dans Day-of-week les champs Day-of-month et d'une même expression. Si vous l'utilisez dans un champ, vous devez utiliser **?** dans l'autre.
+ Le caractère spécial **/** (barre oblique) spécifie les incréments. Dans le champ Minutes, vous pouvez saisir 1/10 pour spécifier toutes les dix minutes, à partir de la première minute de l'heure (par exemple, la 11e, 21e et 31e minute, et ainsi de suite).
+ Le caractère spécial **?** (point d'interrogation) indique l'un ou l'autre. Si vous entrez **7** dans le Day-of-month champ et que vous ne vous souciez pas du jour de la semaine le septième, pouvez-vous participer **?** sur le Day-of-week terrain.
+ Le caractère générique **L** dans les champs ou spécifie le dernier jour du mois ou de la semaine. Day-of-month Day-of-week
+ Le **W** caractère générique dans le Day-of-month champ indique un jour de la semaine. Dans le Day-of-month champ, **3W** indique le jour de la semaine le plus proche du troisième jour du mois.
+ Le caractère générique **\$1** dans le Day-of-week champ indique une certaine instance du jour de la semaine spécifié dans un délai d'un mois. Par exemple, 3\$12 est le deuxième mardi du mois. Le 3 fait référence au mardi, car c'est le troisième jour de chaque semaine et le 2 fait référence à la deuxième journée de ce type dans le mois.

**Limitations**
+ Vous ne pouvez pas spécifier les champs Day-of-month et Day-of-week de la même expression cron. Si vous spécifiez une valeur ou le caractère `*` (astérisque) dans l'un de ces champs, vous devez utiliser un caractère **?** (point d'interrogation) dans l'autre.
+ Les expressions cron qui entraînent des fréquences d'une rapidité supérieure à une minute ne sont pas prises en charge.
+ Vous ne pouvez pas configurer un script Canary pour qu'il attende plus d'un an avant son exécution. Vous ne pouvez donc spécifier que `*` dans le champ `Year`.

**Exemples**  
Vous pouvez vous référer aux exemples de chaînes cron suivants lorsque vous créez un script Canary. Les exemples suivants présentent la syntaxe correcte pour utiliser le AWS CLI ou pour créer ou AWS SDKs mettre à jour un canari. Si vous utilisez la CloudWatch console, omettez le final `*` dans chaque exemple.


| Expression | Signification | 
| --- | --- | 
|   `0 10 * * ? *`   |  Exécuter à 10 h 00 (UTC) chaque jour  | 
|   `15 12 * * ? *`   |  Exécuter à 12 h 15 (UTC) chaque jour  | 
|   `0 18 ? * MON-FRI *`   |  Exécuter à 18 h 00 (UTC) du lundi au vendredi  | 
|   `0 8 1 * ? *`   |  Exécuter à 8 h 00 (UTC) le premier jour du mois  | 
|   `0/10 * ? * MON-SAT *`   |  Exécuter toutes les 10 minutes du lundi au samedi de chaque semaine  | 
|   `0/5 8-17 ? * MON-FRI *`   |  Exécuter toutes les 5 minutes du lundi au vendredi entre 8 h 00 et 17 h 55 (UTC)   | 

# Configuration du script Canary pour une relance automatique
<a name="CloudWatch_Synthetics_Canaries_autoretry"></a>

Lorsque vous créez ou mettez à jour un script Canary, vous pouvez le configurer pour tenter automatiquement d’autres exécutions si celle planifiée échoue. Cela permet de faire la différence entre une véritable défaillance et un incident temporaire, garantissant ainsi des résultats plus fiables. Cette fonctionnalité est idéale pour renforcer la résilience de vos systèmes de surveillance tout en réduisant les fausses alarmes et la nécessité d’une intervention manuelle.

**Pour créer un script Canary avec relance automatique**

1. Ouvrez la CloudWatch console à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Dans le volet de navigation, sélectionnez **Vigie applicative**, **Scripts Canary Synthetics**.

1. Choisissez **Create Canary** (Créer un script Canary).

1. Sous **Configuration supplémentaire**, **Relance automatique**, sélectionnez le nombre maximal de relances souhaité.

**Pour mettre à jour le nombre maximal de relances d’un script Canary**

1. Ouvrez la CloudWatch console à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Dans le volet de navigation, sélectionnez **Vigie applicative**, **Scripts Canary Synthetics**.

1. Vous pouvez effectuer l’une des actions suivantes :
   + Sélectionnez le script Canary, puis choisissez **Actions**, **Activer la relance automatique** et ajustez le nombre maximal de relances.
   + Sélectionnez le script Canary, puis choisissez **Actions**, **Modifier**. Sur la page **Modifier les détails**, sous **Configuration supplémentaire**, **Relance automatique**, ajustez les paramètres de relance.

 **Limites** 

Voici les limites de configuration de la relance automatique.
+ Pris en charge uniquement sur les versions `syn-nodejs-puppeteer-10.0 ` d'exécution ` syn-nodejs-playwright-2.0` ou plus récentes, `syn-python-selenium-5.1` ou plus récentes, `syn-nodejs-3.0` ou plus récentes.
+ Les scripts Canary à exécution longue, de plus de dix minutes, sont limités à une seule relance. Tous les autres scripts Canary peuvent effectuer jusqu’à deux relances.

# Utilisation des dépendances avec les canaris CloudWatch Synthetics
<a name="CloudWatch_Synthetics_Canaries_dependencies"></a>

Cette section explique comment l'utiliser `Dependencies` dans les canaris CloudWatch Synthetics. Le champ `Dependencies` vous permet de spécifier des dépendances pour vos scripts Canary, afin d’y inclure des bibliothèques supplémentaires ou du code personnalisé que vos scripts peuvent utiliser.

## Présentation de
<a name="overview"></a>

CloudWatch Les canaris Synthetics permettent de spécifier des couches Lambda en tant que dépendances. Cette fonctionnalité vous permet de :
+ Partager du code commun entre plusieurs scripts Canary
+ Gérer les dépendances séparément du code de votre script Canary
+ Réduire la taille de votre script Canary en déplaçant les dépendances dans une couche Lambda

## Soutenu APIs
<a name="supported-apis"></a>

Le `Dependencies` champ est pris en charge dans les domaines suivants APIs :
+  [CreateCanary](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_CreateCanary.html) 
+  [UpdateCanary](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_UpdateCanary.html) 
+  [ StartCanaryDryRun](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_StartCanaryDryRun.html) 

## Syntaxe
<a name="syntax"></a>

Le champ `Dependencies` fait partie de la structure de code dans la syntaxe des requêtes :

```
"Code": { 
  "Handler": "string",
  "S3Bucket": "string",
  "S3Key": "string",
  "S3Version": "string",
  "ZipFile": blob,
  "Dependencies": [
    {
      "Type": "LambdaLayer",
      "Reference": "string"
    }
  ]
}
```

## Utilisation des dépendances
<a name="usage"></a>

Voici quelques exemples et instructions d’utilisation du champ `Dependencies` dans différents scénarios.

### Création d’un script Canary avec des dépendances
<a name="creating-canary"></a>

Lors de la création d’un script Canary, vous pouvez spécifier une couche Lambda comme dépendance :

```
{
  "Name": "my-canary",
  "Code": {
    "Handler": "pageLoadBlueprint.handler",
    "S3Bucket": "my-bucket",
    "S3Key": "my-canary-script.zip",
    "Dependencies": [
      {
        "Type": "LambdaLayer",
        "Reference": "arn:aws:lambda:us-west-2:123456789012:layer:my-custom-layer:1"
      }
    ]
  },
  "ArtifactS3Location": "s3://my-bucket/artifacts/",
  "ExecutionRoleArn": "arn:aws:iam::123456789012:role/my-canary-role",
  "Schedule": {
    "Expression": "rate(5 minutes)"
  },
  "RuntimeVersion": "syn-nodejs-puppeteer-3.9"
}
```

### Mise à jour des dépendances d’un script Canary
<a name="updating-canary"></a>

Vous pouvez mettre à jour les dépendances d'un canari à l'aide de l' UpdateCanary API :

```
{
  "Name": "my-canary",
  "Code": {
    "Dependencies": [
      {
        "Type": "LambdaLayer",
        "Reference": "arn:aws:lambda:us-west-2:123456789012:layer:my-updated-layer:2"
      }
    ]
  }
}
```

### Suppression des dépendances
<a name="removing-dependencies"></a>

Pour supprimer les dépendances d’un script Canary, fournissez un tableau vide dans le champ Dépendances :

```
{
  "Name": "my-canary",
  "Code": {
    "Dependencies": []
  }
}
```

### Tester les dépendances avec StartCanaryDryRun
<a name="testing-dependencies"></a>

Avant de mettre à jour un canari avec de nouvelles dépendances, vous pouvez les tester à l'aide de l' StartCanaryDryRun API :

```
{
  "Name": "my-canary",
  "Code": {
    "Dependencies": [
      {
        "Type": "LambdaLayer",
        "Reference": "arn:aws:lambda:us-west-2:123456789012:layer:my-test-layer:3"
      }
    ]
  }
}
```

## Limites et considérations
<a name="limitations"></a>
+ Une seule couche Lambda peut être spécifiée en tant que dépendance
+ Le rôle utilisé pour créer un script Canary avec dépendances doit disposer d’un accès ` lambda:GetLayerVersion` à la couche de dépendance, en plus des [rôles et autorisations requis](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Roles.html)

## Création de couches Lambda compatibles
<a name="creating-compatible-layers"></a>

Pour plus d’informations sur la façon de créer et d’empaqueter des couches, consultez [Gestion des dépendances Lambda avec des couches](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html). Pour comprendre la structure d’empaquetage d’un script Canary, consultez [Écriture d’un script Canary](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_WritingCanary.html).

# Groupes
<a name="CloudWatch_Synthetics_Groups"></a>

Vous pouvez créer des *groupes* pour associer les versions Canary entre elles, y compris les versions Canary entre régions. L'utilisation de groupes peut vous aider à gérer et à automatiser vos versions Canary, et vous pouvez également afficher les résultats d'exécution et les statistiques agrégés pour toutes les versions Canary d'un groupe. 

Les groupes sont des ressources globales. Lorsque vous créez un groupe, il est répliqué dans toutes les AWS régions qui prennent en charge des groupes, et vous pouvez y ajouter des canaris de n'importe laquelle de ces régions et le visualiser dans n'importe laquelle de ces régions. Bien que le format ARN du groupe reflète le nom de la région dans laquelle elle a été créée, le groupe n'est soumis à aucune région. Cela signifie que vous pouvez placer des versions Canary de plusieurs régions dans le même groupe, puis utiliser ce groupe pour afficher et gérer toutes ces versions Canary dans une seule vue.

Les groupes sont pris en charge dans toutes les régions, à l'exception des régions désactivées par défaut. Pour de plus amples informations sur les régions, veuillez consulter la rubrique [Enabling a Region](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html#rande-manage-enable) (Activer une région).

Chaque groupe peut contenir jusqu'à 10 versions Canary. Vous pouvez avoir jusqu'à 20 groupes dans votre compte. Chaque script Canary peut appartenir à 10 groupes au maximum.

**Pour créer un groupe**

1. Ouvrez la CloudWatch console à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Dans le volet de navigation, sélectionnez **Vigie applicative**, **Scripts Canary Synthetics**.

   

1. Choisissez **Create Group**.

1. Pour **Group Name** (Nom du groupe), saisissez un nom de groupe. 

1. Sélectionnez les versions Canary à associer à ce groupe. Pour sélectionner un script Canary, tapez son nom complet dans **Exact canary name** (Nom exact du script Canary) et choisissez **Search** (Rechercher). Activez ensuite la case à cocher en regard du nom du script Canary. S'il y a plusieurs versions Canary portant le même nom dans différentes régions, assurez-vous de sélectionner les versions Canary souhaitées.

   Vous pouvez répéter cette étape pour associer jusqu'à 10 versions Canary au groupe.

1. (Facultatif) Sous **Tags** (Balises), ajoutez une ou plusieurs paires clé/valeur comme balises pour ce groupe. Les balises peuvent vous aider à identifier et à organiser vos AWS ressources et à suivre vos AWS coûts. Pour de plus amples informations, veuillez consulter [Étiquette de vos ressources Amazon CloudWatch](CloudWatch-Tagging.md).

1. Choisissez **Create Group**.

# Tester un script Canary localement
<a name="CloudWatch_Synthetics_Debug_Locally"></a>

Cette section explique comment modifier, tester et déboguer les canaries CloudWatch Synthetics directement dans l'éditeur de code ou Microsoft Visual Studio l'éditeur de code. JetBrains IDE L’environnement local de débogage utilise un conteneur sans serveur Serverless Application Model (SAM) pour simuler une fonction Lambda et reproduire le comportement d’un script Canary Synthetics. 

**Note**  
Il n’est pas pratique de déboguer localement les scripts Canary qui reposent sur la surveillance visuelle. La surveillance visuelle repose sur la capture d’images de référence lors de la première exécution, puis sur la comparaison de ces images avec celles des exécutions suivantes. Dans un environnement de développement local, les exécutions ne sont ni stockées ni suivies, et chaque itération est une exécution indépendante et autonome. L’absence d’un historique d’exécutions rend donc impossible le débogage efficace des scripts Canary basés sur la surveillance visuelle.

 **Conditions préalables** 

1. Choisissez ou créez un compartiment Amazon S3 pour stocker les artefacts des tests locaux des scripts Canary, par exemple des fichiers HAR et des captures d’écran. Cela nécessite des autorisations IAM. Si vous ne configurez pas de compartiment Amazon S3, vous pourrez tout de même tester votre script Canary localement, mais un message d’erreur s’affichera pour signaler l’absence du compartiment et vous n’aurez pas accès aux artefacts générés par le script Canary.

   Si vous utilisez un compartiment Amazon S3, il est recommandé de configurer une règle de cycle de vie pour supprimer les objets après quelques jours afin de réduire les coûts. Pour plus d'informations, voir [Gestion du cycle de vie de votre stockage](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html).

1. Configurez un AWS profil par défaut pour votre AWS compte. Pour plus d’informations, consultez [Paramètres des fichiers de configuration et d’informations d’identification](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html).

1. Définissez la AWS région par défaut de l'environnement de débogage sur votre région préférée, telle que` us-west-2`.

1. Installez la AWS SAM CLI. Pour plus d'informations, consultez la section [Installation de la AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html).

1. Installez Visual Studio Code Editor ou JetBrains IDE. Pour plus d’informations, consultez [https://code.visualstudio.com/](https://code.visualstudio.com/) ou [https://www.jetbrains.com/ides/](https://www.jetbrains.com/ides/)

1. Installez-le Docker pour fonctionner avec la AWS SAM CLI. Assurez-vous que le démon Docker est lancé. Pour plus d'informations, consultez la section [Installation  Docker à utiliser avec la AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-docker.html).

   Vous pouvez également installer un autre outil de gestion de conteneurs, comme  Rancher, à condition qu’il utilise l’exécution Docker.

1. Installez une extension de AWS boîte à outils pour votre éditeur préféré. Pour plus d’informations, consultez [Installation de AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-toolkit.html) ou [Installation de AWS Toolkit for JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/setup-toolkit.html).

**Topics**
+ [Configuration de l’environnement de test et de débogage](#CloudWatch_Synthetics_Debug_Environment)
+ [Utilisation des Visual Studio Code IDE](#CloudWatch_Synthetics_Debug_VS)
+ [Utilisation des JetBrains IDE](#CloudWatch_Synthetics_Debug_JetBrains)
+ [Exécution locale d’un script Canary à l’aide de la CLI SAM](#CloudWatch_Synthetics_Run_Locally)
+ [Intégration de votre environnement de test local dans un package Canary existant](#CloudWatch_Synthetics_Debug_Integrate)
+ [Modifier le runtime de CloudWatch Synthetics](#CloudWatch_Synthetics_Debug_DifferentRuntime)
+ [Erreurs courantes](#CloudWatch_Synthetics_Debug_Errors)

## Configuration de l’environnement de test et de débogage
<a name="CloudWatch_Synthetics_Debug_Environment"></a>

Tout d'abord, clonez le dépôt Github qui le AWS fournit en saisissant la commande suivante. Le référentiel contient des exemples de code pour les scripts Canary en Node.js et en Python. 

```
git clone https://github.com/aws-samples/synthetics-canary-local-debugging-sample.git
```

Ensuite, selon le langage utilisé pour vos scripts Canary, procédez comme suit.

**Pour les scripts Canary en Node.js**

1. Accédez au répertoire source du script Canary Node.js en saisissant la commande suivante.

   ```
   cd synthetics-canary-local-debugging-sample/nodejs-canary/src
   ```

1. Saisissez la commande suivante pour installer les dépendances du script Canary.

   ```
   npm install
   ```

**Pour les scripts Canary en Python**

1. Accédez au répertoire source du script Canary Python en saisissant la commande suivante.

   ```
   cd synthetics-canary-local-debugging-sample/python-canary/src
   ```

1. Saisissez la commande suivante pour installer les dépendances du script Canary.

   ```
   pip3 install -r requirements.txt -t .
   ```

## Utilisation des Visual Studio Code IDE
<a name="CloudWatch_Synthetics_Debug_VS"></a>

Le fichier de configuration de lancement Visual Studio se trouve à l’emplacement ` .vscode/launch.json`. Il contient les configurations nécessaires pour permettre à Visual Studio de détecter le fichier modèle. Il définit une charge de données utiles Lambda contenant les paramètres requis pour invoquer le script Canary. Voici la configuration de lancement pour un script Canary Node.js : 

```
{
            ...
            ...
            "lambda": {
                "payload": {
                    "json": {
                        // Canary name. Provide any name you like.
                        "canaryName": "LocalSyntheticsCanary", 
                        // Canary artifact location
                        "artifactS3Location": {
                            "s3Bucket": "cw-syn-results-123456789012-us-west-2",
                            "s3Key": "local-run-artifacts",
                        },
                        // Your canary handler name
                        "customerCanaryHandlerName": "heartbeat-canary.handler"
                    }
                },
                // Environment variables to pass to the canary code
                "environmentVariables": {}
            }
        }
    ]
}
```

Vous pouvez également ajouter les champs facultatifs suivants dans le fichier JSON de la charge de données utiles :
+ Valeurs valides `s3EncryptionMode` : `SSE_S3` \$1 `SSE_KMS`
+ `s3KmsKeyArn`Valeur valide : *KMS Key ARN*
+ Valeurs valides `activeTracing` : `true` \$1 `false`
+ `canaryRunId`Valeur valide : *UUID* ce paramètre est obligatoire si le suivi actif est activé.

Pour déboguer le script Canary dans Visual Studio, ajoutez des points d’arrêt dans le code du script Canary aux endroits où vous souhaitez interrompre l’exécution. Pour ajouter un point d’arrêt, cliquez dans la marge de l’éditeur, puis passez en mode **Exécuter et déboguer** dans l’éditeur. Lancez le script Canary en cliquant sur le bouton d’exécution. Lorsque le script Canary s’exécute, les journaux s’affichent en temps réel dans la console de débogage, vous permettant d’analyser le comportement du script Canary. Si vous avez ajouté des points d’arrêt, l’exécution du script Canary s’arrête à chaque point, ce qui vous permet d’inspecter les variables, les méthodes d’instance, les attributs d’objet et la pile d’appels.

L'exécution et le débogage des canaris en local sont gratuits, à l'exception des artefacts stockés dans le compartiment Amazon S3 et des CloudWatch métriques générées par chaque exécution locale.

![\[Visual Studio Code interface showing JavaScript code for a heartbeat canary function.\]](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/images/DebugCanaryVS.png)


## Utilisation des JetBrains IDE
<a name="CloudWatch_Synthetics_Debug_JetBrains"></a>

Une fois l' AWS Toolkit for JetBrains extension installée, assurez-vous que le plug-in et le JavaScript débogueur Node.js sont activés pour s'exécuter, si vous déboguez un canari Node.js. Procédez comme suit.

**Débogage d’un script Canary à l’aide de JetBrains IDE**

1. Dans le volet de navigation de gauche de JetBrains IDE, sélectionnez **Lambda**, puis sélectionnez le modèle de configuration locale.

1. Saisissez un nom de configuration, par exemple **LocalSyntheticsCanary**

1. Sélectionnez **À partir du modèle**, puis utilisez l’explorateur de fichiers dans le champ du modèle pour sélectionner le fichier **template.yml** du projet, situé dans le répertoire **nodejs** ou **python**.

1. Dans la section **Entrée**, saisissez la charge de données utiles du script Canary, comme illustré dans l’écran suivant.

   ```
   {
    "canaryName": "LocalSyntheticsCanary",
    "artifactS3Location": {
        "s3Bucket": "cw-syn-results-123456789012-us-west-2",
        "s3Key": "local-run-artifacts"
    },
    "customerCanaryHandlerName": "heartbeat-canary.handler"
   }
   ```

   Vous pouvez également définir d’autres variables d’environnement dans le fichier JSON de la charge de données utiles, comme indiqué dans [Utilisation des Visual Studio Code IDE](#CloudWatch_Synthetics_Debug_VS).

![\[Run/Debug Configurations interface for AWS Lambda with LocalSyntheticsCanary settings.\]](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/images/DebugCanaryIntellij.png)


## Exécution locale d’un script Canary à l’aide de la CLI SAM
<a name="CloudWatch_Synthetics_Run_Locally"></a>

Utilisez l’une des procédures suivantes pour exécuter votre script Canary localement à l’aide de la CLI SAM (Serverless Application Model). Assurez-vous d’indiquer le nom de votre compartiment Amazon S3 pour `s3Bucket` dans `event.json`

**Pour utiliser la CLI SAM afin d’exécuter un script Canary Node.js**

1. Accédez au répertoire source en saisissant la commande suivante.

   ```
   cd synthetics-canary-local-debugging-sample/nodejs-canary
   ```

1. Entrez les commandes suivantes :

   ```
   sam build
   sam local invoke -e ../event.json
   ```

**Pour utiliser la CLI SAM afin d’exécuter un script Canary Python**

1. Accédez au répertoire source en saisissant la commande suivante.

   ```
   cd synthetics-canary-local-debugging-sample/python-canary
   ```

1. Entrez les commandes suivantes :

   ```
   sam build
   sam local invoke -e ../event.json
   ```

## Intégration de votre environnement de test local dans un package Canary existant
<a name="CloudWatch_Synthetics_Debug_Integrate"></a>

Vous pouvez intégrer le débogage Canary local à un package Canary existant en copiant trois fichiers :
+ Copiez le fichier `template.yml` dans la racine de votre package Canary. Veillez à modifier le chemin dans `CodeUri` afin qu’il pointe vers le répertoire où se trouve votre code Canary.
+ Si vous travaillez avec un script Canary Node.js, copiez le fichier `cw-synthetics.js` dans le répertoire source Node.js du script Canary. Si vous travaillez avec un script Canary Python, copiez le fichier ` cw-synthetics.py` dans le répertoire source Node.js du Canary.
+ Copiez le fichier de configuration de lancement .`vscode/launch.json` dans le répertoire racine du package. Veillez à le placer dans le répertoire `.vscode` ; créez-le s’il n’existe pas déjà.

## Modifier le runtime de CloudWatch Synthetics
<a name="CloudWatch_Synthetics_Debug_DifferentRuntime"></a>

Dans le cadre de votre débogage, vous pouvez essayer d'exécuter un canary avec un environnement d'exécution CloudWatch Synthetics différent, au lieu du dernier environnement d'exécution. Pour ce faire, trouvez la version d’exécution souhaitée dans l’un des tableaux suivants. Veillez à sélectionner la version d’exécution correspondant à la bonne région. Collez ensuite l’ARN de cette version d’exécution à l’endroit approprié dans votre fichier ` template.yml`, puis exécutez le script Canary.

### Exécutions Node.js et Puppeteer
<a name="Synthetics_NodeJS_Puppeteer_Runtime_ARNs"></a>

#### ARNs pour syn-nodejs-puppeteer -15,0
<a name="syn-nodejs-puppeteer-15.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-puppeteer-15.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARNs pour syn-nodejs-puppeteer -14,0
<a name="syn-nodejs-puppeteer-14.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-puppeteer-14.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARNs pour syn-nodejs-puppeteer -13,1
<a name="syn-nodejs-puppeteer-13.1"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-puppeteer-13.1` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARNs pour syn-nodejs-puppeteer -13,0
<a name="syn-nodejs-puppeteer-13.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-puppeteer-13.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARNs pour syn-nodejs-puppeteer -12,0
<a name="syn-nodejs-puppeteer-12.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-puppeteer-12.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARNs pour syn-nodejs-puppeteer -11,0
<a name="syn-nodejs-puppeteer-11.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-puppeteer-11.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARNs pour syn-nodejs-puppeteer -10,0
<a name="syn-nodejs-puppeteer-10.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-puppeteer-10.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:58`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:61`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:59`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:61`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:59`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:59`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:34`   | 
|  Asie-Pacifique (Jakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:41`   | 
|  Asie-Pacifique (Malaisie)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics:15`   | 
|  Asie-Pacifique (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:32`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:59`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   `arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics:18`   | 
|  Asie-Pacifique (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:45`   | 
|  Asia Pacific (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:62`   | 
|  Asie-Pacifique (Singapour)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:63`   | 
|  Asie-Pacifique (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:58`   | 
|  Asie-Pacifique (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics:24`   | 
|  Asie-Pacifique (Thaïlande)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics:6`   | 
|  Asie-Pacifique (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:59`   | 
|  Canada (Centre)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:59`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:90`   | 
|  Chine (Pékin)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:58`   | 
|  Chine (Ningxia) ;  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:59`   | 
|  Europe (Francfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:59`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:60`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:58`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:60`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:59`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:34`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:59`   | 
|  Europe (Zurich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:33`   | 
|  Israël (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:31`   | 
|  Mexique (Centre)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics:7`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:58`   | 
|  Moyen-Orient (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:34`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:60`   | 
|  AWS GovCloud (USA Est)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:54`   | 
|  AWS GovCloud (US-Ouest)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:55`   | 

#### ARNs pour syn-nodejs-puppeteer -9,1
<a name="syn-nodejs-puppeteer-9.1"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-puppeteer-9.1` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:53`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:56`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:54`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:56`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:54`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:54`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:29`   | 
|  Asie-Pacifique (Jakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:36`   | 
|  Asie-Pacifique (Malaisie)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics:10`   | 
|  Asie-Pacifique (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:27`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:54`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   `arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics:17`   | 
|  Asie-Pacifique (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:40`   | 
|  Asia Pacific (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:57`   | 
|  Asie-Pacifique (Singapour)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:58`   | 
|  Asie-Pacifique (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:53`   | 
|  Asie-Pacifique (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics:25`   | 
|  Asie-Pacifique (Thaïlande)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics:1`   | 
|  Asie-Pacifique (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:54`   | 
|  Canada (Centre)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:54`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:85`   | 
|  Chine (Pékin)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:54`   | 
|  Chine (Ningxia) ;  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:55`   | 
|  Europe (Francfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:54`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:55`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:53`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:55`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:54`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:29`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:54`   | 
|  Europe (Zurich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:28`   | 
|  Israël (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:26`   | 
|  Mexique (Centre)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics:3`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:53`   | 
|  Moyen-Orient (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:29`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:55`   | 
|  AWS GovCloud (USA Est)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:50`   | 
|  AWS GovCloud (US-Ouest)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:51`   | 

#### ARNs pour syn-nodejs-puppeteer -9,0
<a name="syn-nodejs-puppeteer-9.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-puppeteer-9.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:51`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:54`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:52`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:54`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:52`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:52`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:27`   | 
|  Asie-Pacifique (Jakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:34`   | 
|  Asie-Pacifique (Malaisie)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics:8`   | 
|  Asie-Pacifique (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:25`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:52`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   `arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics:16`   | 
|  Asie-Pacifique (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:38`   | 
|  Asia Pacific (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:55`   | 
|  Asie-Pacifique (Singapour)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:56`   | 
|  Asie-Pacifique (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:51`   | 
|  Asie-Pacifique (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics:26`   | 
|  Asie-Pacifique (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:52`   | 
|  Canada (Centre)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:52`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:83`   | 
|  Chine (Pékin)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:52`   | 
|  Chine (Ningxia) ;  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:53`   | 
|  Europe (Francfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:52`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:53`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:51`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:53`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:52`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:27`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:52`   | 
|  Europe (Zurich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:26`   | 
|  Israël (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:24`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:51`   | 
|  Moyen-Orient (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:27`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:53`   | 
|  AWS GovCloud (USA Est)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:48`   | 
|  AWS GovCloud (US-Ouest)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:49`   | 

#### ARNs pour syn-nodejs-puppeteer -8,0
<a name="syn-nodejs-puppeteer-8.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-puppeteer-8.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:48`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:50`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:48`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:51`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:48`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:49`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:24`   | 
|  Asie-Pacifique (Jakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:30`   | 
|  Asie-Pacifique (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:22`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:48`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   `arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics:15`   | 
|  Asie-Pacifique (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:34`   | 
|  Asia Pacific (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:51`   | 
|  Asie-Pacifique (Singapour)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:53`   | 
|  Asie-Pacifique (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:48`   | 
|  Asie-Pacifique (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics:23`   | 
|  Asie-Pacifique (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:48`   | 
|  Canada (Centre)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:48`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:80`   | 
|  Chine (Pékin)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:49`   | 
|  Chine (Ningxia) ;  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:50`   | 
|  Europe (Francfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:48`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:50`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:48`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:49`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:48`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:24`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:48`   | 
|  Europe (Zurich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:23`   | 
|  Israël (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:21`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:48`   | 
|  Moyen-Orient (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:23`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:49`   | 
|  AWS GovCloud (USA Est)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:45`   | 
|  AWS GovCloud (US-Ouest)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:46`   | 

#### ARNs pour syn-nodejs-puppeteer -7,0
<a name="syn-nodejs-puppeteer-7.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-puppeteer-7.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:44`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:46`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:44`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:47`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:44`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:45`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:20`   | 
|  Asie-Pacifique (Jakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:26`   | 
|  Asie-Pacifique (Malaisie)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics:7`   | 
|  Asie-Pacifique (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:18`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:44`   | 
|  Asie-Pacifique (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:30`   | 
|  Asia Pacific (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:46`   | 
|  Asie-Pacifique (Singapour)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:49`   | 
|  Asie-Pacifique (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:44`   | 
|  Asie-Pacifique (Thaïlande)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics:3`   | 
|  Asie-Pacifique (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:44`   | 
|  Canada (Centre)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:44`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:76`   | 
|  Chine (Pékin)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:45`   | 
|  Chine (Ningxia) ;  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:46`   | 
|  Europe (Francfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:44`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:46`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:44`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:45`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:44`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:20`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:44`   | 
|  Europe (Zurich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:19`   | 
|  Israël (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:17`   | 
|  Mexique (Centre)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics:4`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:44`   | 
|  Moyen-Orient (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:19`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:45`   | 
|  AWS GovCloud (USA Est)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:41`   | 
|  AWS GovCloud (US-Ouest)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:42`   | 

#### ARNs pour syn-nodejs-puppeteer -6,2
<a name="syn-nodejs-puppeteer-6.2"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-puppeteer-6.2` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:41`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:43`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:41`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:44`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:41`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:42`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:17`   | 
|  Asie-Pacifique (Jakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:23`   | 
|  Asie-Pacifique (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:15`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:41`   | 
|  Asie-Pacifique (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:27`   | 
|  Asia Pacific (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:42`   | 
|  Asie-Pacifique (Singapour)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:46`   | 
|  Asie-Pacifique (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:41`   | 
|  Asie-Pacifique (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:41`   | 
|  Canada (Centre)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:41`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:73`   | 
|  Chine (Pékin)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:42`   | 
|  Chine (Ningxia) ;  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:43`   | 
|  Europe (Francfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:41`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:43`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:41`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:42`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:41`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:17`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:41`   | 
|  Europe (Zurich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:16`   | 
|  Israël (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:14`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:41`   | 
|  Moyen-Orient (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:16`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:42`   | 
|  AWS GovCloud (USA Est)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:39`   | 
|  AWS GovCloud (US-Ouest)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:39`   | 

#### ARNs pour syn-nodejs-puppeteer -5,2
<a name="syn-nodejs-puppeteer-5.2"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-puppeteer-5.2` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:42`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:44`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:42`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:45`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:42`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:43`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:18`   | 
|  Asie-Pacifique (Jakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:24`   | 
|  Asie-Pacifique (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:16`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:42`   | 
|  Asie-Pacifique (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:28`   | 
|  Asia Pacific (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:44`   | 
|  Asie-Pacifique (Singapour)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:47`   | 
|  Asie-Pacifique (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:42`   | 
|  Asie-Pacifique (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:42`   | 
|  Canada (Centre)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:42`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:74`   | 
|  Chine (Pékin)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:43`   | 
|  Chine (Ningxia) ;  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:44`   | 
|  Europe (Francfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:42`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:44`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:42`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:43`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:42`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:18`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:42`   | 
|  Europe (Zurich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:17`   | 
|  Israël (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:15`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:42`   | 
|  Moyen-Orient (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:17`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:43`   | 
|  AWS GovCloud (USA Est)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:40`   | 
|  AWS GovCloud (US-Ouest)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:40`   | 

### Exécutions Node.js et Playwright
<a name="Synthetics_Playwright_Runtime_ARNs"></a>

#### ARNs pour syn-nodejs-playwright -6,0
<a name="syn-nodejs-playwright-6.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-playwright-6.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARNs pour syn-nodejs-playwright -5,1
<a name="syn-nodejs-playwright-5.1"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-playwright-5.1` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARNs pour syn-nodejs-playwright -5,0
<a name="syn-nodejs-playwright-5.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-playwright-5.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARNs pour syn-nodejs-playwright -4,0
<a name="syn-nodejs-playwright-4.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-playwright-4.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARNs pour syn-nodejs-playwright -3.0
<a name="syn-nodejs-playwright-3.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-playwright-3.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARNs pour syn-nodejs-playwright -2,0
<a name="syn-nodejs-playwright-2.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-playwright-2.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   ` arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  USA Est (Ohio)  |   ` arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  USA Ouest (Californie du Nord)  |   ` arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  USA Ouest (Oregon)  |   ` arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Afrique (Le Cap)  |   ` arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asie-Pacifique (Hong Kong)  |   ` arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asie-Pacifique (Hyderabad)  |   ` arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asie-Pacifique (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asie-Pacifique (Malaisie)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asie-Pacifique (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asie-Pacifique (Mumbai)  |   ` arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJsPlaywright:7`   | 
|  Asie-Pacifique (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pacific (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asie-Pacifique (Singapour)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asie-Pacifique (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asie-Pacifique (Taipei)  |   ` arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJsPlaywright:9`   | 
|  Asie-Pacifique (Thaïlande)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  Asie-Pacifique (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Canada (Centre)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Canada Ouest (Calgary)  |   ` arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Chine (Pékin)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  Chine (Ningxia) ;  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  Europe (Francfort)  |   ` arn:aws:lambda:eu-central-1:122305336817:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europe (Irlande)  |   ` arn:aws:lambda:eu-west-1:563204233543:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europe (Londres)  |   ` arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europe (Milan)  |   ` arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europe (Paris)  |   ` arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europe (Espagne)  |   ` arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europe (Stockholm)  |   ` arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europe (Zurich)  |   ` arn:aws:lambda:eu-central-2:224218992030:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Israël (Tel Aviv)  |   ` arn:aws:lambda:il-central-1:313249807427:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Mexique (Centre)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJsPlaywright:5`   | 
|  Middle East (Bahrain)  |   ` arn:aws:lambda:me-south-1:823195537320:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Moyen-Orient (EAU)  |   ` arn:aws:lambda:me-central-1:239544149032:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Amérique du Sud (São Paulo)  |   ` arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  AWS GovCloud (USA Est)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  AWS GovCloud (US-Ouest)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 

#### ARNs pour syn-nodejs-playwright -1,0
<a name="syn-nodejs-playwright-1.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-nodejs-playwright-1.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   ` arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  USA Est (Ohio)  |   ` arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  USA Ouest (Californie du Nord)  |   ` arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  USA Ouest (Oregon)  |   ` arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Afrique (Le Cap)  |   ` arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asie-Pacifique (Hong Kong)  |   ` arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asie-Pacifique (Hyderabad)  |   ` arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asie-Pacifique (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asie-Pacifique (Malaisie)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asie-Pacifique (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asie-Pacifique (Mumbai)  |   ` arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJsPlaywright:8`   | 
|  Asie-Pacifique (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pacific (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asie-Pacifique (Singapour)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asie-Pacifique (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asie-Pacifique (Taipei)  |   ` arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJsPlaywright:10`   | 
|  Asie-Pacifique (Thaïlande)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asie-Pacifique (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Canada (Centre)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Canada Ouest (Calgary)  |   ` arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Chine (Pékin)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Chine (Ningxia) ;  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europe (Francfort)  |   ` arn:aws:lambda:eu-central-1:122305336817:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europe (Irlande)  |   ` arn:aws:lambda:eu-west-1:563204233543:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europe (Londres)  |   ` arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europe (Milan)  |   ` arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europe (Paris)  |   ` arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europe (Espagne)  |   ` arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europe (Stockholm)  |   ` arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europe (Zurich)  |   ` arn:aws:lambda:eu-central-2:224218992030:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Israël (Tel Aviv)  |   ` arn:aws:lambda:il-central-1:313249807427:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Mexique (Centre)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  Middle East (Bahrain)  |   ` arn:aws:lambda:me-south-1:823195537320:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Moyen-Orient (EAU)  |   ` arn:aws:lambda:me-central-1:239544149032:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Amérique du Sud (São Paulo)  |   ` arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  AWS GovCloud (USA Est)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  AWS GovCloud (US-Ouest)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 

### Environnements d’exécution Node.js
<a name="Synthetics_NodeJS_Runtime_ARNs"></a>

#### ARNs pour syn-nodejs-4.1
<a name="syn-nodejs-4.1"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur `syn-nodejs-4.1` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Afrique (Le Cap)  |   ` arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asie-Pacifique (Hyderabad)  |   ` arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asie-Pacifique (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asie-Pacifique (Malaisie)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asie-Pacifique (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asie-Pacifique (Mumbai)  |   ` arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asie-Pacifique (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pacific (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asie-Pacifique (Singapour)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asie-Pacifique (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asie-Pacifique (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asie-Pacifique (Thaïlande)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asie-Pacifique (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Canada (Centre)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Chine (Pékin)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  China (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europe (Francfort)  |   ` arn:aws:lambda:eu-central-1:122305336817:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europe (Milan)  |   ` arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europe (Espagne)  |   ` arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europe (Stockholm)  |   ` arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europe (Zurich)  |   ` arn:aws:lambda:eu-central-2:224218992030:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Israël (Tel Aviv)  |   ` arn:aws:lambda:il-central-1:313249807427:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Mexique (Centre)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  AWS GovCloud (USA Est)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  AWS GovCloud (US-Ouest)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJs:12`   | 

#### ARNs pour syn-nodejs-4.0
<a name="syn-nodejs-4.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser pour le `syn-nodejs-4.0` runtime CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Afrique (Le Cap)  |   ` arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asie-Pacifique (Hyderabad)  |   ` arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asie-Pacifique (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asie-Pacifique (Malaisie)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asie-Pacifique (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asie-Pacifique (Mumbai)  |   ` arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asie-Pacifique (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pacific (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asie-Pacifique (Singapour)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asie-Pacifique (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asie-Pacifique (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asie-Pacifique (Thaïlande)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asie-Pacifique (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Canada (Centre)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Chine (Pékin)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  China (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europe (Francfort)  |   ` arn:aws:lambda:eu-central-1:122305336817:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europe (Milan)  |   ` arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europe (Espagne)  |   ` arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europe (Stockholm)  |   ` arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europe (Zurich)  |   ` arn:aws:lambda:eu-central-2:224218992030:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Israël (Tel Aviv)  |   ` arn:aws:lambda:il-central-1:313249807427:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Mexique (Centre)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  AWS GovCloud (USA Est)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  AWS GovCloud (US-Ouest)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJs:11`   | 

#### ARNs pour syn-nodejs-3.1
<a name="syn-nodejs-3.1"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur `syn-nodejs-3.1` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asie-Pacifique (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asie-Pacifique (Malaisie)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asie-Pacifique (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asie-Pacifique (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pacific (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asie-Pacifique (Singapour)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asie-Pacifique (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asie-Pacifique (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asie-Pacifique (Thaïlande)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asie-Pacifique (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Canada (Centre)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Chine (Pékin)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  China (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europe (Francfort)  |   ` arn:aws:lambda:eu-central-1:122305336817:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europe (Zurich)  |   ` arn:aws:lambda:eu-central-2:224218992030:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Israël (Tel Aviv)  |   ` arn:aws:lambda:il-central-1:313249807427:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Mexique (Centre)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Moyen-Orient (EAU)  |   ` arn:aws:lambda:me-central-1:239544149032:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  AWS GovCloud (USA Est)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  AWS GovCloud (US-Ouest)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJs:9`   | 

#### ARNs pour syn-nodejs-3.0
<a name="syn-nodejs-3.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur `syn-nodejs-3.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asie-Pacifique (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asie-Pacifique (Malaisie)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asie-Pacifique (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asie-Pacifique (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pacific (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asie-Pacifique (Singapour)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asie-Pacifique (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asie-Pacifique (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asie-Pacifique (Thaïlande)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asie-Pacifique (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Canada (Centre)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Chine (Pékin)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  China (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europe (Francfort)  |   ` arn:aws:lambda:eu-central-1:122305336817:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europe (Zurich)  |   ` arn:aws:lambda:eu-central-2:224218992030:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Israël (Tel Aviv)  |   ` arn:aws:lambda:il-central-1:313249807427:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Mexique (Centre)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Moyen-Orient (EAU)  |   ` arn:aws:lambda:me-central-1:239544149032:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  AWS GovCloud (USA Est)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  AWS GovCloud (US-Ouest)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJs:1`   | 

### Exécutions pour Python et Selenium
<a name="Synthetics_Python_Runtime_ARNs"></a>

#### ARNs pour syn-python-selenium -10,0
<a name="syn-python-selenium-10.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser pour le ` syn-python-selenium-10.0` runtime CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:62`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:65`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:63`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:64`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:63`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:62`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:50`   | 
|  Asie-Pacifique (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:57`   | 
|  Asie-Pacifique (Malaisie)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:32`   | 
|  Asie-Pacifique (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:48`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:63`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:38`   | 
|  Asie-Pacifique (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:61`   | 
|  Asia Pacific (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:66`   | 
|  Asie-Pacifique (Singapour)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:67`   | 
|  Asie-Pacifique (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:62`   | 
|  Asie-Pacifique (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:25`   | 
|  Asie-Pacifique (Thaïlande)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:23`   | 
|  Asie-Pacifique (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:63`   | 
|  Canada (Centre)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:63`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:106`   | 
|  Chine (Pékin)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:61`   | 
|  China (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:61`   | 
|  Europe (Francfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:63`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:64`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:62`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:64`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:63`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:50`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:63`   | 
|  Europe (Zurich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:49`   | 
|  Israël (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:47`   | 
|  Mexique (Centre)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:24`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:64`   | 
|  AWS GovCloud (USA Est)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:59`   | 
|  AWS GovCloud (US-Ouest)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:60`   | 

#### ARNs pour syn-python-selenium -9,0
<a name="syn-python-selenium-9.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser pour le ` syn-python-selenium-9.0` runtime CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:61`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:64`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:62`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:63`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:62`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:61`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:49`   | 
|  Asie-Pacifique (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:56`   | 
|  Asie-Pacifique (Malaisie)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:31`   | 
|  Asie-Pacifique (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:47`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:62`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:37`   | 
|  Asie-Pacifique (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:60`   | 
|  Asia Pacific (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:65`   | 
|  Asie-Pacifique (Singapour)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:66`   | 
|  Asie-Pacifique (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:61`   | 
|  Asie-Pacifique (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:24`   | 
|  Asie-Pacifique (Thaïlande)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:22`   | 
|  Asie-Pacifique (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:62`   | 
|  Canada (Centre)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:62`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:105`   | 
|  Chine (Pékin)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:60`   | 
|  China (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:60`   | 
|  Europe (Francfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:62`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:63`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:61`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:63`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:62`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:49`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:62`   | 
|  Europe (Zurich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:48`   | 
|  Israël (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:46`   | 
|  Mexique (Centre)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:23`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:61`   | 
|  Moyen-Orient (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:49`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:63`   | 
|  AWS GovCloud (USA Est)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:58`   | 
|  AWS GovCloud (US-Ouest)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:59`   | 

#### ARNs pour syn-python-selenium -8,0
<a name="syn-python-selenium-8.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-python-selenium-8.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:57`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:60`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:58`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:59`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:58`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:57`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:45`   | 
|  Asie-Pacifique (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:52`   | 
|  Asie-Pacifique (Malaisie)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:27`   | 
|  Asie-Pacifique (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:43`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:58`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:33`   | 
|  Asie-Pacifique (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:56`   | 
|  Asia Pacific (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:61`   | 
|  Asie-Pacifique (Singapour)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:62`   | 
|  Asie-Pacifique (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:57`   | 
|  Asie-Pacifique (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:20`   | 
|  Asie-Pacifique (Thaïlande)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:18`   | 
|  Asie-Pacifique (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:58`   | 
|  Canada (Centre)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:58`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:101`   | 
|  Chine (Pékin)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:56`   | 
|  China (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:56`   | 
|  Europe (Francfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:58`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:59`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:57`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:59`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:58`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:45`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:58`   | 
|  Europe (Zurich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:44`   | 
|  Israël (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:42`   | 
|  Mexique (Centre)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:19`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:57`   | 
|  Moyen-Orient (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:45`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:59`   | 
|  AWS GovCloud (USA Est)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:54`   | 
|  AWS GovCloud (US-Ouest)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:55`   | 

#### ARNs pour syn-python-selenium -7,0
<a name="syn-python-selenium-7.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-python-selenium-7.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:49`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:52`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:50`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:51`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:50`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:49`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:37`   | 
|  Asie-Pacifique (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:44`   | 
|  Asie-Pacifique (Malaisie)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:19`   | 
|  Asie-Pacifique (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:35`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:50`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:25`   | 
|  Asie-Pacifique (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:48`   | 
|  Asia Pacific (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:53`   | 
|  Asie-Pacifique (Singapour)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:54`   | 
|  Asie-Pacifique (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:49`   | 
|  Asie-Pacifique (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:12`   | 
|  Asie-Pacifique (Thaïlande)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:10`   | 
|  Asie-Pacifique (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:50`   | 
|  Canada (Centre)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:50`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:93`   | 
|  Chine (Pékin)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:48`   | 
|  China (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:48`   | 
|  Europe (Francfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:50`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:51`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:49`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:51`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:50`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:37`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:50`   | 
|  Europe (Zurich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:36`   | 
|  Israël (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:34`   | 
|  Mexique (Centre)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:11`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:49`   | 
|  Moyen-Orient (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:37`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:51`   | 
|  AWS GovCloud (USA Est)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:46`   | 
|  AWS GovCloud (US-Ouest)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:47`   | 

#### ARNs pour syn-python-selenium -6,0
<a name="syn-python-selenium-6.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-python-selenium-6.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:47`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:50`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:48`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:49`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:48`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:47`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:35`   | 
|  Asie-Pacifique (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:42`   | 
|  Asie-Pacifique (Malaisie)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:17`   | 
|  Asie-Pacifique (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:33`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:48`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:25`   | 
|  Asie-Pacifique (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:46`   | 
|  Asia Pacific (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:51`   | 
|  Asie-Pacifique (Singapour)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:52`   | 
|  Asie-Pacifique (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:47`   | 
|  Asie-Pacifique (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:10`   | 
|  Asie-Pacifique (Thaïlande)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:8`   | 
|  Asie-Pacifique (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:48`   | 
|  Canada (Centre)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:48`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:91`   | 
|  Chine (Pékin)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:46`   | 
|  China (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:46`   | 
|  Europe (Francfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:48`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:49`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:47`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:49`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:48`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:35`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:48`   | 
|  Europe (Zurich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:34`   | 
|  Israël (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:32`   | 
|  Mexique (Centre)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:9`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:47`   | 
|  Moyen-Orient (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:35`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:49`   | 
|  AWS GovCloud (USA Est)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:44`   | 
|  AWS GovCloud (US-Ouest)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:45`   | 

#### ARNs pour syn-python-selenium -5,1
<a name="syn-python-selenium-5.1"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-python-selenium-5.1` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:45`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:48`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:46`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:47`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:46`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:45`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:33`   | 
|  Asie-Pacifique (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:40`   | 
|  Asie-Pacifique (Malaisie)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:15`   | 
|  Asie-Pacifique (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:31`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:46`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:24`   | 
|  Asie-Pacifique (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:44`   | 
|  Asia Pacific (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:49`   | 
|  Asie-Pacifique (Singapour)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:50`   | 
|  Asie-Pacifique (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:45`   | 
|  Asie-Pacifique (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:8`   | 
|  Asie-Pacifique (Thaïlande)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:6`   | 
|  Asie-Pacifique (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:46`   | 
|  Canada (Centre)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:44`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:89`   | 
|  Chine (Pékin)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:44`   | 
|  Chine (Ningxia) ;  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:44`   | 
|  Europe (Francfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:46`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:47`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:45`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:47`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:46`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:33`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:46`   | 
|  Europe (Zurich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:32`   | 
|  Israël (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:30`   | 
|  Mexique (Centre)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:7`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:45`   | 
|  Moyen-Orient (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:33`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:47`   | 
|  AWS GovCloud (USA Est)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:42`   | 
|  AWS GovCloud (US-Ouest)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:43`   | 

#### ARNs pour syn-python-selenium -5,0
<a name="syn-python-selenium-5.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-python-selenium-5.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:43`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:46`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:44`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:45`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:44`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:43`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:31`   | 
|  Asie-Pacifique (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:38`   | 
|  Asie-Pacifique (Malaisie)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:13`   | 
|  Asie-Pacifique (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:29`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:44`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:23`   | 
|  Asie-Pacifique (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:42`   | 
|  Asia Pacific (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:47`   | 
|  Asie-Pacifique (Singapour)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:48`   | 
|  Asie-Pacifique (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:43`   | 
|  Asie-Pacifique (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:3`   | 
|  Asie-Pacifique (Thaïlande)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:4`   | 
|  Asie-Pacifique (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:44`   | 
|  Canada (Centre)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:44`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:87`   | 
|  Chine (Pékin)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:43`   | 
|  Chine (Ningxia) ;  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:43`   | 
|  Europe (Francfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:44`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:45`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:43`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:45`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:44`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:31`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:44`   | 
|  Europe (Zurich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:30`   | 
|  Israël (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:28`   | 
|  Mexique (Centre)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:5`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:43`   | 
|  Moyen-Orient (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:31`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:45`   | 
|  AWS GovCloud (USA Est)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:41`   | 
|  AWS GovCloud (US-Ouest)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:42`   | 

#### ARNs pour syn-python-selenium -4.1
<a name="syn-python-selenium-4.1"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-python-selenium-4.1` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:40`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:43`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:41`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:42`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:41`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:40`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:28`   | 
|  Asie-Pacifique (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:35`   | 
|  Asie-Pacifique (Malaisie)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:10`   | 
|  Asie-Pacifique (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:26`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:41`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:22`   | 
|  Asie-Pacifique (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:39`   | 
|  Asia Pacific (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:44`   | 
|  Asie-Pacifique (Singapour)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:45`   | 
|  Asie-Pacifique (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:40`   | 
|  Asie-Pacifique (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:4`   | 
|  Asie-Pacifique (Thaïlande)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:1`   | 
|  Asie-Pacifique (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:41`   | 
|  Canada (Centre)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:41`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:84`   | 
|  Chine (Pékin)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:40`   | 
|  Chine (Ningxia) ;  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:40`   | 
|  Europe (Francfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:41`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:42`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:40`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:42`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:41`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:28`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:41`   | 
|  Europe (Zurich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:27`   | 
|  Israël (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:25`   | 
|  Mexique (Centre)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:3`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:40`   | 
|  Moyen-Orient (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:28`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:42`   | 
|  AWS GovCloud (USA Est)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:38`   | 
|  AWS GovCloud (US-Ouest)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:39`   | 

#### ARNs pour syn-python-selenium -4,0
<a name="syn-python-selenium-4.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-python-selenium-4.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:38`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:41`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:39`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:40`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:39`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:38`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:26`   | 
|  Asie-Pacifique (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:33`   | 
|  Asie-Pacifique (Malaisie)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:8`   | 
|  Asie-Pacifique (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:24`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:39`   | 
|  Asie-Pacifique (Nouvelle Zélande)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:21`   | 
|  Asie-Pacifique (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:37`   | 
|  Asia Pacific (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:42`   | 
|  Asie-Pacifique (Singapour)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:43`   | 
|  Asie-Pacifique (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:38`   | 
|  Asie-Pacifique (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:5`   | 
|  Asie-Pacifique (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:39`   | 
|  Canada (Centre)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:39`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:82`   | 
|  Chine (Pékin)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:38`   | 
|  Chine (Ningxia) ;  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:38`   | 
|  Europe (Francfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:39`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:40`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:38`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:40`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:39`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:26`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:39`   | 
|  Europe (Zurich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:25`   | 
|  Israël (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:23`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:38`   | 
|  Moyen-Orient (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:26`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:40`   | 
|  AWS GovCloud (USA Est)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:36`   | 
|  AWS GovCloud (US-Ouest)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:37`   | 

#### ARNs pour syn-python-selenium -3.0
<a name="syn-python-selenium-3.0"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-python-selenium-3.0` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:32`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:34`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:32`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:34`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:32`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:32`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:20`   | 
|  Asie-Pacifique (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:26`   | 
|  Asie-Pacifique (Malaisie)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:7`   | 
|  Asie-Pacifique (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:18`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:32`   | 
|  Asie-Pacifique (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:30`   | 
|  Asia Pacific (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:34`   | 
|  Asie-Pacifique (Singapour)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:37`   | 
|  Asie-Pacifique (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:32`   | 
|  Asie-Pacifique (Thaïlande)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:3`   | 
|  Asie-Pacifique (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:32`   | 
|  Canada (Centre)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:32`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:76`   | 
|  Chine (Pékin)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:32`   | 
|  Chine (Ningxia) ;  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:32`   | 
|  Europe (Francfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:32`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:34`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:32`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:33`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:32`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:20`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:32`   | 
|  Europe (Zurich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:19`   | 
|  Israël (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:17`   | 
|  Mexique (Centre)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:4`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:32`   | 
|  Moyen-Orient (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:19`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:33`   | 
|  AWS GovCloud (USA Est)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:30`   | 
|  AWS GovCloud (US-Ouest)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:31`   | 

#### ARNs pour syn-python-selenium -2,1
<a name="syn-python-selenium-2.1"></a>

Le tableau suivant répertorie les versions ARNs à utiliser du moteur ` syn-python-selenium-2.1` d'exécution CloudWatch Synthetics dans AWS chaque région où il est disponible.


| Région | ARN | 
| --- | --- | 
|  USA Est (Virginie du Nord)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:29`   | 
|  USA Est (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:31`   | 
|  USA Ouest (Californie du Nord)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:29`   | 
|  USA Ouest (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:31`   | 
|  Afrique (Le Cap)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:29`   | 
|  Asie-Pacifique (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:29`   | 
|  Asie-Pacifique (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:17`   | 
|  Asie-Pacifique (Jakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:23`   | 
|  Asie-Pacifique (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:15`   | 
|  Asie-Pacifique (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:29`   | 
|  Asie-Pacifique (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:27`   | 
|  Asia Pacific (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:30`   | 
|  Asie-Pacifique (Singapour)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:34`   | 
|  Asie-Pacifique (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:29`   | 
|  Asie-Pacifique (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:29`   | 
|  Canada (Centre)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:29`   | 
|  Canada Ouest (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:73`   | 
|  Chine (Pékin)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:29`   | 
|  Chine (Ningxia) ;  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:29`   | 
|  Europe (Francfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:29`   | 
|  Europe (Irlande)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:31`   | 
|  Europe (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:29`   | 
|  Europe (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:30`   | 
|  Europe (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:29`   | 
|  Europe (Espagne)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:17`   | 
|  Europe (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:29`   | 
|  Europe (Zurich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:16`   | 
|  Israël (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:14`   | 
|  Middle East (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:29`   | 
|  Moyen-Orient (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:16`   | 
|  Amérique du Sud (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:30`   | 
|  AWS GovCloud (USA Est)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:29`   | 
|  AWS GovCloud (US-Ouest)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:29`   | 

## Erreurs courantes
<a name="CloudWatch_Synthetics_Debug_Errors"></a>

 **Erreur : Docker est requis pour exécuter des projets AWS SAM en local. L’avez-vous bien installé et lancé ?** 

Veillez à démarrer Docker sur votre ordinateur.

 **Échec de l'appel local SAM : une erreur s'est produite (ExpiredTokenException) lors de l'appel de l' GetLayerVersion opération : le jeton de sécurité inclus dans la demande a expiré** 

Assurez-vous que le profil AWS par défaut est configuré.

 **Erreurs les plus courantes** 

Pour en savoir plus sur les erreurs fréquemment rencontrées avec SAM, consultez [Résolution des problèmes liés à la CLI AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-troubleshooting.html).

# Dépannage d'un script Canary ayant échoué
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot"></a>

Si votre script Canary échoue, vérifiez les points suivants pour le dépannage.

 **Résolution de problème généraux** 
+ Utilisez la page des détails des scripts Canary pour trouver plus d'informations. Dans la CloudWatch console, choisissez **Canaries** dans le volet de navigation, puis choisissez le nom du canari pour ouvrir la page de détails du canari. Dans l'onglet **Disponibilité**, vérifiez la ** SuccessPercent**métrique pour voir si le problème est constant ou intermittent.

  Toujours dans l'onglet **Availability** (Disponibilité), choisissez un point de données ayant échoué pour afficher les captures d'écran, les journaux et les rapports d'étape (le cas échéant) de cette exécution ayant échoué.

  Si un rapport d'étape est disponible car les étapes font partie de votre script, vérifiez l'étape qui a échoué et consultez les captures d'écran associées pour voir le problème rencontré par vos clients.

  Vous pouvez également vérifier les fichiers HAR pour voir si une ou plusieurs demandes échouent. Vous pouvez aller plus loin en utilisant les journaux pour explorer les demandes ayant échoué et les erreurs. Enfin, vous pouvez comparer ces artefacts avec les artefacts d'une exécution de script canary réussie pour identifier le problème.

  Par défaut, CloudWatch Synthetics capture des captures d'écran pour chaque étape d'un canari d'interface utilisateur. Toutefois, votre script peut être configuré de manière à désactiver les captures d'écran. Pendant le débogage, vous devrez peut-être activer à nouveau les captures d'écran. De même, pour les scripts Canary d'API, vous voudrez peut-être voir les en-têtes et le corps de requête et de réponse HTTP pendant le débogage. Pour plus d'informations sur la manière d'inclure ces données dans le rapport, consultez [executeHttpStep(StepName, RequestOptions, [rappel], [StepConfig])](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_executeHttpStep).
+ S'il y a eu un déploiement récent dans votre application, annulez-le, puis déboguez plus tard.
+ Connectez-vous manuellement à votre point de terminaison pour voir si vous pouvez reproduire le même problème.

**Topics**
+ [Échec d’un script Canary après une mise à jour de l’environnement Lambda](#Troubleshoot_upgradeLambda)
+ [Mon canari est bloqué par AWS WAF](#Canary_Blocked_WAF)
+ [Attente de l'apparition d'un élément](#CloudWatch_Synthetics_Canaries_Troubleshoot_waiting)
+ [Le nœud n'est pas visible ou n'est pas un HTMLElement for page.click ()](#CloudWatch_Synthetics_Canaries_Troubleshoot_notvisible)
+ [Impossible de télécharger des artefacts dans S3 (Exception : Unable to fetch S3 bucket location: Access Denied)](#CloudWatch_Synthetics_Canaries_Troubleshoot_noupload)
+ [Erreur : erreur de protocole (exécution). callFunctionOn) : Cible fermée.](#CloudWatch_Synthetics_Canaries_Troubleshoot_protocolError)
+ [Canary Failed. Error: No datapoint – Le script Canary affiche une erreur de dépassement de délai d'attente](#CloudWatch_Synthetics_Canaries_Troubleshoot_nodatapoint)
+ [Tentative d'accès à un point de terminaison interne](#CloudWatch_Synthetics_Canaries_Troubleshoot_internalendpoint)
+ [Problèmes de mise à niveau et de rétrogradation des versions d'exécution des scripts Canary](#CloudWatch_Synthetics_Canaries_Troubleshoot_upgradeissues)
+ [Problème CORS (partage des demandes cross-origin)](#CloudWatch_Synthetics_Canaries_CORS)
+ [Problèmes de conditions de concurrence des scripts Canary](#CloudWatch_Synthetics_Canaries_RaceCondition)
+ [Dépannage d'un script Canary sur un VPC](#CloudWatch_Synthetics_Canaries_VPC_troubleshoot)
+ [Résolution des problèmes liés à une relance automatique de Canary](#CloudWatch_Synthetics_Canaries_autoretry)

## Échec d’un script Canary après une mise à jour de l’environnement Lambda
<a name="Troubleshoot_upgradeLambda"></a>

CloudWatch Les canaris Synthetics sont implémentés sous forme de fonctions Lambda dans votre compte. Ces fonctions Lambda font l’objet de mises à jour régulières de leur environnement d’exécution, incluant des correctifs de sécurité, corrections de bogues et autres améliorations. Lambda s’efforce de fournir des mises à jour d’environnement d’exécution qui sont rétrocompatibles avec les fonctions existantes. Cependant, comme pour les correctifs logiciels, il existe de rares cas dans lesquels une mise à jour de l’environnement d’exécution peut avoir un impact négatif sur une fonction existante. Cependant, si vous pensez que votre script Canary a été affecté par une mise à jour d’environnement Lambda, vous pouvez utiliser le mode manuel de gestion des environnements Lambda (dans les régions prises en charge) pour revenir temporairement à une version antérieure de l’exécution Lambda. Cela permet de maintenir le fonctionnement du script Canary et de limiter les interruptions, tout en vous laissant le temps de corriger les incompatibilités avant de revenir à la version d’exécution la plus récente.

Si votre script Canary échoue après une mise à jour de l’environnement Lambda, la meilleure solution consiste à le mettre à niveau vers l’une des versions les plus récentes de l’exécution CloudWatch Synthetics. Pour plus d’informations sur les dernières versions d’exécution, consultez [Versions d'exécution Synthetics](CloudWatch_Synthetics_Canaries_Library.md).

Comme solution alternative, dans les régions où les contrôles de gestion des environnements d’exécution Lambda sont disponibles, vous pouvez rétablir le script Canary sur une version précédente de l’environnement d’exécution Lambda géré, en activant le mode manuel pour la gestion de l’exécution. Vous pouvez définir le mode manuel à l'aide de la console Lambda AWS CLI ou à l'aide de celle-ci, en suivant les étapes ci-dessous dans les sections suivantes.

**Avertissement**  
Lorsque vous modifiez les paramètres d’exécution en mode manuel, votre fonction Lambda ne reçoit pas de mises à jour de sécurité automatiques tant qu’elle n’est pas revenue en mode automatique. Pendant cette période, votre fonction Lambda peut être exposée à des vulnérabilités de sécurité.

 **Conditions préalables** 
+ Installation de [jq](https://jqlang.github.io/jq/)
+ Installez la dernière version de AWS CLI. Pour plus d’informations, consultez les [Instructions d’installation et de mise à jour de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html#getting-started-install-instructions).

### Étape 1 : obtenir l’ARN de la fonction Lambda
<a name="UpgradeLambda_ObtainFunctionARN"></a>

Exécutez la commande suivante pour extraire le champ `EngineArn` de la réponse. Cet `EngineArn` correspond à l’ARN de la fonction Lambda associée au script Canary. Vous utiliserez cet ARN dans les étapes suivantes.

```
aws synthetics get-canary --name my-canary | jq '.Canary.EngineArn'
```

Exemple de sortie pour `EngingArn` :

```
"arn:aws:lambda:us-west-2:123456789012:function:cwsyn-my-canary-dc5015c2-db17-4cb5-afb1-EXAMPLE991:8"
```

### Étape 2 : obtenir l’ARN de la dernière version stable de l’exécution Lambda
<a name="UpgradeLambda_RuntimeARN"></a>

Pour déterminer si votre script Canary a été affecté par une mise à jour de l’environnement Lambda, comparez la date et l’heure du changement d’ARN de version d’exécution Lambda dans vos journaux avec la date et l’heure où vous avez constaté l’incident. Si les deux ne coïncident pas, il est probable que votre problème ne soit pas lié à une mise à jour de l’exécution Lambda.

Si votre script Canary a été affecté par une mise à jour de l’exécution Lambda, vous devez identifier l’ARN de la version stable de l’exécution Lambda que vous utilisiez précédemment. Suivez les instructions de la section [Identification des modifications de version d’exécution](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-update.html#runtime-management-identify.html) pour trouver l’ARN de la version d’exécution précédente. Notez cet ARN, puis passez à l’étape 3, où vous configurerez la gestion de l’exécution.

Si votre script Canary n’a pas encore été affecté par une mise à jour de l’environnement Lambda, vous pouvez simplement trouver l’ARN de la version d’exécution Lambda que vous utilisez actuellement. Exécutez la commande suivante pour extraire le `RuntimeVersionArn` de la fonction Lambda à partir de la réponse. 

```
aws lambda get-function-configuration \
--function-name "arn:aws:lambda:us-west-2:123456789012:function:cwsyn-my-canary-dc5015c2-db17-4cb5-afb1-EXAMPLE991:8" | jq '.RuntimeVersionConfig.RuntimeVersionArn'
```

Exemple de sortie pour `RuntimeVersionArn` :

```
"arn:aws:lambda:us-west-2::runtime:EXAMPLE647b82f490a45d7ddd96b557b916a30128d9dcab5f4972911ec0f"
```

### Étape 3 : mettre à jour la configuration de gestion de l’exécution Lambda
<a name="UpgradeLambda_Update"></a>

Vous pouvez utiliser la console Lambda AWS CLI ou la console Lambda pour mettre à jour la configuration de gestion de l'exécution.

 **Pour activer le mode manuel de gestion de l’exécution Lambda à l’aide de la AWS CLI** 

Saisissez la commande suivante pour passer la gestion de l’exécution de la fonction Lambda en mode manuel. Assurez-vous de remplacer le *function-name* et * qualifier* par l'ARN de la fonction Lambda et le numéro de version de la fonction Lambda respectivement, en utilisant les valeurs que vous avez trouvées à l'étape 1. Remplacez également le * runtime-version-arn* par la version ARN que vous avez trouvée à l'étape 2. 

```
aws lambda put-runtime-management-config \
    --function-name "arn:aws:lambda:us-west-2:123456789012:function:cwsyn-my-canary-dc5015c2-db17-4cb5-afb1-EXAMPLE991" \
    --qualifier 8 \
    --update-runtime-on "Manual" \
    --runtime-version-arn "arn:aws:lambda:us-west-2::runtime:a993d90ea43647b82f490a45d7ddd96b557b916a30128d9dcab5f4972911ec0f"
```

**Pour passer un script Canary en mode manuel à partir de la console Lambda**

1. Ouvrez la AWS Lambda console à l'adresse [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Sélectionnez l’onglet **Versions**, puis le lien du numéro de version correspondant à votre ARN, et enfin l’onglet **Code**.

1. Faites défiler jusqu’à la section **Paramètres d’exécution**, développez **Configuration de la gestion de l’exécution**, puis copiez l’**ARN de la version d’exécution**.  
![\[Cette section de l’écran affiche les Paramètres d’exécution et indique où se trouve l’ARN de la version d’exécution.\]](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/images/SyntheticsManual1.png)

1. Choisissez **Modifier la configuration de gestion d'exécution**, choisissez **Manuel**, collez l'ARN de la version d'exécution que vous avez copié précédemment dans le champ **ARN de la version d'exécution**. Ensuite, choisissez **Save** (Enregistrer).  
![\[Cette section montre l’écran Configuration de la gestion de l’exécution et indique où coller l’ARN de la version d’exécution que vous avez copié plus tôt.\]](http://docs.aws.amazon.com/fr_fr/AmazonCloudWatch/latest/monitoring/images/SyntheticsManual2.png)

## Mon canari est bloqué par AWS WAF
<a name="Canary_Blocked_WAF"></a>

Pour autoriser le trafic Canary AWS WAF, créez une condition de correspondance de AWS WAF chaîne qui autorise une chaîne personnalisée que vous spécifiez. Pour plus d'informations, consultez la section [Utilisation des conditions de correspondance de chaînes](https://docs.aws.amazon.com/waf/latest/developerguide/classic-web-acl-string-conditions.html) dans la AWS WAF documentation.

Nous vous recommandons fortement d’utiliser votre propre chaîne d’agent utilisateur personnalisée plutôt que les valeurs par défaut. Cela vous offre un meilleur contrôle sur le filtrage de AWS WAF et améliore la sécurité.

Pour définir une chaîne d’agent utilisateur personnalisée, procédez comme suit :
+ Pour les environnements d'exécution de Playwright, vous pouvez ajouter votre chaîne d'agent utilisateur personnalisée AWS WAF approuvée à l'aide du fichier de configuration Synthetics. Pour de plus amples informations, veuillez consulter [CloudWatch Configurations Synthetics](Synthetics_WritingCanary_Nodejs_Playwright.md#Synthetics_canary_configure_Playwright_script).
+ Pour les exécutions Puppeteer ou Selenium, vous pouvez ajouter votre chaîne d’agent utilisateur personnalisée à l’aide des fonctions de bibliothèque prises en charge. Pour les exécutions Puppeteer, consultez [asynchrone addUserAgent (page, userAgentString) ;](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_addUserAgent). Pour les exécutions Selenium, consultez [add\$1user\$1agent(user\$1agent\$1str)](CloudWatch_Synthetics_Canaries_Library_Python.md#CloudWatch_Synthetics_Library_add_user_agent).

## Attente de l'apparition d'un élément
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_waiting"></a>

Après avoir analysé vos journaux et captures d'écran, si vous constatez que votre script attend qu'un élément apparaisse à l'écran et qu'il expire, vérifiez la capture d'écran appropriée pour voir si l'élément apparaît sur la page. Vérifiez votre `xpath` pour vous assurer qu'il est correct.

Pour les problèmes liés à Puppeteer, consultez la page de [Puppeteer ou](https://github.com/puppeteer/puppeteer/issues) les forums Internet. GitHub 

## Le nœud n'est pas visible ou n'est pas un HTMLElement for page.click ()
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_notvisible"></a>

Si un nœud n'est pas visible ou n'est pas un `HTMLElement` pour `page.click()`, vérifiez d'abord le `xpath` que vous utilisez pour cliquer sur l'élément. De plus, si votre élément se trouve en bas de l'écran, ajustez votre fenêtre d'affichage. CloudWatch Synthetics utilise par défaut une fenêtre d'affichage de 1920 x 1080. Vous pouvez définir une fenêtre d'affichage différente lorsque vous lancez le navigateur ou à l'aide de la fonction Puppeteer `page.setViewport`.

## Impossible de télécharger des artefacts dans S3 (Exception : Unable to fetch S3 bucket location: Access Denied)
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_noupload"></a>

Si votre Canary échoue à cause d'une erreur Amazon S3, CloudWatch Synthetics n'a pas pu télécharger les captures d'écran, les journaux ou les rapports créés pour le Canary en raison de problèmes d'autorisation. Vérifiez les éléments suivants :
+ Vérifiez que le rôle IAM du script Canary possède l'autorisation `s3:ListAllMyBuckets`, l'autorisation `s3:GetBucketLocation` pour le compartiment Amazon S3 approprié, et l'autorisation `s3:PutObject` pour le compartiment dans lequel le script Canary stocke ses artefacts. Si le script Canary effectue une surveillance visuelle, le rôle a également besoin de l'autorisation ` s3:GetObject` pour le compartiment. Ces mêmes autorisations sont également requises dans la politique de point de terminaison de passerelle Amazon VPC S3, si le script canary est déployé dans un VPC doté d’un point de terminaison d’un VPC.
+  Si le Canary utilise une clé gérée par le AWS KMS client pour le chiffrement au lieu de la clé AWS gérée standard (par défaut), le rôle IAM du Canary n'est peut-être pas autorisé à chiffrer ou à déchiffrer à l'aide de cette clé. Pour de plus amples informations, veuillez consulter [Chiffrement des artefacts de script Canary](CloudWatch_Synthetics_artifact_encryption.md).
+ Votre politique de compartiment peut ne pas autoriser le mécanisme de chiffrement utilisé par le script Canary. Par exemple, si votre politique de compartiment exige d'utiliser un mécanisme de chiffrement spécifique ou une clé KMS, vous devez sélectionner le même mode de chiffrement pour votre script Canary.

Si le script Canary effectue une surveillance visuelle, consultez [Mise à jour de l'emplacement et du chiffrement des artefacts en utilisant la surveillance visuelle](CloudWatch_Synthetics_artifact_encryption.md#CloudWatch_Synthetics_artifact_encryption_visual) pour en savoir plus.

## Erreur : erreur de protocole (exécution). callFunctionOn) : Cible fermée.
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_protocolError"></a>

Cette erreur apparaît s'il y a des demandes réseau après la fermeture de la page ou du navigateur. Vous avez peut-être oublié d'attendre une opération asynchrone. Après avoir exécuté votre script, CloudWatch Synthetics ferme le navigateur. L'exécution de toute opération asynchrone après la fermeture du navigateur peut provoquer `target closed error`. 

## Canary Failed. Error: No datapoint – Le script Canary affiche une erreur de dépassement de délai d'attente
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_nodatapoint"></a>

Cela signifie que l'exécution de votre script Canary a dépassé le délai d'attente. L'exécution de Canary s'est arrêtée avant que CloudWatch Synthetics puisse publier des indicateurs de réussite ou mettre à jour CloudWatch des artefacts tels que des fichiers HAR, des journaux et des captures d'écran. Si votre délai d'attente est trop court, vous pouvez l'augmenter.

Par défaut, la valeur de délai d'attente d'un script Canary est égale à sa fréquence. Vous pouvez ajuster manuellement la valeur du délai d'attente pour qu'elle soit inférieure ou égale à la fréquence du script Canary. Si la fréquence de votre script Canary est faible, vous devez l'augmenter pour augmenter le délai d'attente. Vous pouvez ajuster à la fois la fréquence et le délai d'expiration dans **Schedule** lorsque vous créez ou mettez à jour un Canary à l'aide de la console CloudWatch Synthetics.

Vérifiez que la valeur du délai d'attente de votre script canary n'est pas inférieure à 15 secondes pour permettre les démarrages à froid Lambda et le temps nécessaire pour démarrer l'instrumentation canary.

Les artefacts Canary ne peuvent pas être consultés dans la console CloudWatch Synthetics lorsque cette erreur se produit. Vous pouvez utiliser CloudWatch Logs pour voir les logs du canari.

**Pour utiliser CloudWatch les journaux pour voir les journaux d'un canari**

1. Ouvrez la CloudWatch console à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Dans le panneau de navigation de gauche, choisissez **Log groups** (Groupes de journaux).

1. Recherchez le groupe de journaux en saisissant le nom du script Canary dans la zone de filtre. Les groupes de logs pour canaris portent le nom**/aws/lambda/cwsyn- *canaryName* -RandomId**.

## Tentative d'accès à un point de terminaison interne
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_internalendpoint"></a>

Si vous souhaitez que votre Canary accède à un point de terminaison de votre réseau interne, nous vous recommandons de configurer CloudWatch Synthetics pour utiliser le VPC. Pour de plus amples informations, veuillez consulter [Exécution d'un script Canary sur un VPC](CloudWatch_Synthetics_Canaries_VPC.md).

## Problèmes de mise à niveau et de rétrogradation des versions d'exécution des scripts Canary
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_upgradeissues"></a>

Si vous avez récemment mis à niveau le script Canary de la version d'exécution `syn-1.0` vers une version ultérieure, il peut s'agir d'un problème CORS (partage des demandes cross-origin). Pour de plus amples informations, veuillez consulter [Problème CORS (partage des demandes cross-origin)](#CloudWatch_Synthetics_Canaries_CORS).

Si vous avez récemment rétrogradé Canary vers une ancienne version d'exécution, assurez-vous que les fonctions Synthetics que vous utilisez sont disponibles dans CloudWatch l'ancienne version d'exécution vers laquelle vous avez rétrogradé. Par exemple, la fonction `executeHttpStep` est disponible pour l'exécution `syn-nodejs-2.2` et version ultérieure. Pour vérifier la disponibilité des fonctions, consultez [Écriture d'un script Canary](CloudWatch_Synthetics_Canaries_WritingCanary.md). 

**Note**  
Lorsque vous prévoyez de mettre à niveau ou de rétrograder la version d’exécution d’un script Canary, nous vous recommandons de cloner d’abord le script Canary, puis de mettre à jour la version d’exécution dans le clone. Une fois que vous avez vérifié que le clone fonctionne avec la nouvelle version d'exécution, vous pouvez mettre à jour la version d'exécution de votre script Canary d'origine et supprimer le clone.

## Problème CORS (partage des demandes cross-origin)
<a name="CloudWatch_Synthetics_Canaries_CORS"></a>

Dans un script Canary d'interface utilisateur, si certaines demandes réseau échouent avec une erreur `403` ou ` net::ERR_FAILED`, vérifiez si le suivi actif est activé pour le script Canary et si ce dernier utilise également la fonction Puppeteer `page.setExtraHTTPHeaders` pour ajouter des en-têtes. Si c'est le cas, les demandes réseau peuvent échouer en raison de restrictions CORS (partage des demandes cross-origin). Vous pouvez confirmer si c'est le cas en désactivant le suivi actif ou en supprimant les en-têtes HTTP supplémentaires.

 **Pourquoi cela se produit-il ?** 

Lorsque le suivi actif est utilisé, un en-tête supplémentaire est ajouté à toutes les demandes sortantes pour suivre l'appel. La modification des en-têtes de requête en ajoutant un en-tête de trace ou en ajoutant des en-têtes supplémentaires à l'aide de Puppeteer `page.setExtraHTTPHeaders` entraîne une vérification CORS des XMLHttp requêtes Request (XHR).

Si vous ne souhaitez pas désactiver le suivi actif ou supprimer les en-têtes supplémentaires, vous pouvez mettre à jour votre application web pour autoriser l'accès cross-origin ou désactiver la sécurité web à l'aide de l'indicateur `disable-web-security` lorsque vous lancez le navigateur Chrome dans votre script.

Vous pouvez remplacer les paramètres de lancement utilisés par CloudWatch Synthetics et transmettre des paramètres d'indicateur ` disable-web-security` supplémentaires à l'aide de la fonction de lancement de Synthetics. CloudWatch Pour de plus amples informations, veuillez consulter [Fonctions de bibliothèque disponibles pour les scripts Canary Node.js utilisant Puppeteer](CloudWatch_Synthetics_Canaries_Library_Nodejs.md).

**Note**  
Vous pouvez remplacer les paramètres de lancement utilisés par CloudWatch Synthetics lorsque vous utilisez la version d'exécution ou une version ultérieure. `syn-nodejs-2.1`

## Problèmes de conditions de concurrence des scripts Canary
<a name="CloudWatch_Synthetics_Canaries_RaceCondition"></a>

Pour une expérience optimale lors de l'utilisation de CloudWatch Synthetics, assurez-vous que le code écrit pour les canaris est idempotent. Sinon, dans de rares cas, les exécutions du script Canary peuvent rencontrer des problèmes de conditions de concurrence, notamment lorsqu’elles interagissent avec une même ressource à travers plusieurs exécutions.

## Dépannage d'un script Canary sur un VPC
<a name="CloudWatch_Synthetics_Canaries_VPC_troubleshoot"></a>

Si vous rencontrez des problèmes après la création ou la mise à jour d'un script Canary sur un VPC, l'une des sections suivantes pourrait vous aider à résoudre le problème.

### Nouveau script Canary en état d'erreur ou échec de mise à jour du script Canary
<a name="CloudWatch_Synthetics_Canaries_VPC_troubleshoot_errorstate"></a>

Si vous créez un script Canary à exécuter sur un VPC et qu'il obtient immédiatement un état d'erreur, ou si vous ne pouvez pas mettre à jour un script Canary à exécuter sur un VPC, le rôle du script Canary peut ne pas avoir les autorisations appropriées. Pour s'exécuter sur un VPC, un script Canary doit disposer des autorisations ` ec2:CreateNetworkInterface`, `ec2:DescribeNetworkInterfaces` et ` ec2:DeleteNetworkInterface`. Ces autorisations sont toutes contenues dans la politique ` AWSLambdaVPCAccessExecutionRole` gérée. Pour de plus amples informations, veuillez consulter [Rôle d'exécution et autorisations utilisateur](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-permissions).

Si ce problème s'est produit lorsque vous avez créé un script Canary, vous devez supprimer le script Canary et en créer un nouveau. Si vous utilisez la CloudWatch console pour créer le nouveau canary, sous **Autorisations d'accès**, sélectionnez **Créer un nouveau rôle**. Un nouveau rôle est créé qui inclut toutes les autorisations requises pour exécuter le script Canary.

Si ce problème se produit lorsque vous mettez à jour un script Canary, vous pouvez à nouveau mettre à jour le script Canary et fournir un nouveau rôle qui dispose des autorisations requises.

### Erreur de type « No test result returned » (aucun résultat de test retourné)
<a name="CloudWatch_Synthetics_Canaries_VPC_troubleshoot_noresult"></a>

Si un script Canary affiche une erreur de type « aucun résultat de test retourné », l'un des problèmes suivants peut en être la cause : 
+ Si votre VPC n'a pas accès à Internet, vous devez utiliser des points de terminaison VPC pour autoriser Canary à accéder à Amazon S3 et à Amazon S3. CloudWatch Vous devez activer les options **Résolution DNS** et **Nom d'hôte DNS** dans le VPC pour que ces adresses de point de terminaison soient résolues correctement. Pour plus d'informations, consultez les sections [Utilisation du DNS avec votre VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html) et [Utilisation et CloudWatch synthèse des points de terminaison VPC d' CloudWatch interface.](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-and-interface-VPC.html)
+ Les scripts Canary doivent s'exécuter dans des sous-réseaux privés au sein d'un VPC. Pour vérifier cela, ouvrez la page **Sous-réseaux** dans la console VPC. Vérifiez les sous-réseaux que vous avez sélectionnés lors de la configuration du script Canary. S'ils ont un chemin d'accès à une passerelle Internet (**igw-**), ce ne sont pas des sous-réseaux privés.

Pour mieux résoudre ces problèmes, veuillez consulter les journaux pour le script Canary.

**Pour consulter les événements de journalisation à partir d'un script Canary**

1. Ouvrez la CloudWatch console à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Dans le panneau de navigation, choisissez **Groupes de journaux**.

1. Choisissez le nom du groupe de journaux du script Canary. Le nom du groupe de journaux commence par ` /aws/lambda/cwsyn-canary-name`.

## Résolution des problèmes liés à une relance automatique de Canary
<a name="CloudWatch_Synthetics_Canaries_autoretry"></a>

Pour comprendre la cause de l’échec d’un script Canary ou examiner certaines tentatives ayant échoué, suivez les étapes de résolution ci-dessous.

1. Ouvrez la CloudWatch console à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Dans le volet de navigation, sélectionnez **Vigie applicative**, **Scripts Canary Synthetics**.

1. Sélectionnez **Canary**.

1. Sous l’onglet **Disponibilité**, vous pouvez examiner les détails de l’exécution de l’une des manières suivantes :
   + Sélection d’un point spécifique sur le graphique Exécutions du script canary
   + Sous **Problèmes**, sélectionnez un enregistrement. Remarque : les relances automatiques sont identifiées par des balises et partagent le même horodatage que leurs exécutions planifiées

   Vous pouvez consulter des informations supplémentaires sous **Étapes**, **Capture d'écran**, **Journaux**, **Fichier HAR** ou **Traces (si le suivi actif est activé)**.

1. Sous **Artefacts du script canary et emplacement Amazon S3**, vous pouvez accéder aux artefacts et naviguer vers les dossiers ou compartiments Amazon S3 à l’aide des liens fournis.

1. Le graphique **Exécutions du script canary** utilise des points de couleur différente pour indiquer différents états :
   + Points bleus : indiquent des exécutions planifiées réussies, avec une valeur constante de 100 %
   + Points rouges : indiquent l’échec de toutes les exécutions planifiées et de leurs relances automatiques, marquées à 0 %
   + Points orange : indiquent soit 0 %, soit 100 %. 0 % indique une relance en cours après l’échec des relances précédentes et 100 % indique qu’une exécution a réussi après une ou plusieurs relances automatiques.

# Exemple de code pour les scripts Canary
<a name="CloudWatch_Synthetics_Canaries_Samples"></a>

Cette section contient des exemples de code illustrant certaines fonctions possibles pour les scripts CloudWatch Canary de Synthetics.

## Exemples pour Node.js et Playwright
<a name="Synthetics_Canaries_Samples_nodejs_playwright"></a>

### Script Canary Playwright avec plusieurs étapes
<a name="Synthetics_canary_example_nodejs_playwright_multistep"></a>

L’exemple suivant illustre un script Canary Node.js Playwright comportant plusieurs étapes.

```
import { synthetics } from '@aws/synthetics-playwright';

export async function handler(event, context) {
  try {
    console.log('Running Synthetics Playwright canary');
    const browser = await synthetics.launch();
    const browserContext = await browser.newContext();
    const page = await synthetics.getPage(browserContext);
    

    // Add steps
    // Step 1
    await synthetics.executeStep("home-page", async () => {
      console.log("Verify home page loads")
      await page.goto('https://www.amazon.com', {waitUntil: "load"});
      await new Promise(r => setTimeout(r, 5000));
    });
    
    // Step 2
    await synthetics.executeStep("search", async () => {
      console.log("Searching for a product")
      const searchInput = page.getByPlaceholder("Search Amazon").first();
      await searchInput.click()
      await searchInput.fill('Amazon echo');
      const btn = page.getByRole('button', { name: 'Go' }).first()
      await btn.click({ timeout: 15000 })
      console.log("Clicked search button")
    });

    // Step 3
    await synthetics.executeStep("search-results", async () => {
      console.log("Verifying search results")
      const resultsHeading = page.getByText("Results", {exact: true}).first()
      await resultsHeading.highlight();
      await new Promise(r => setTimeout(r, 5000));
    });

  } finally {
    // Close all browser contexts and browser
    await synthetics.close();
  }
}
```

### Scripts Canary Playwright configurant des témoins
<a name="Synthetics_canaries_nodejs_playwright_cookies"></a>

L’exemple suivant illustre un script Canary Node.js Playwright configurant trois témoins.

```
import { synthetics } from '@aws/synthetics-playwright';

export const handler = async (event, context) => {
  try {
    let url = "http://smile.amazon.com/";
    const browser = await synthetics.launch();
    const page = await synthetics.getPage(browser);
    const cookies = [{
        'name': 'cookie1',
        'value': 'val1',
        'url': url
    },
    {
        'name': 'cookie2',
        'value': 'val2',
        'url': url
    },
    {
        'name': 'cookie3',
        'value': 'val3',
        'url': url
    }
   ];
   await page.context().addCookies(cookies);
   await page.goto(url, {waitUntil: 'load', timeout: 30000});
   await page.screenshot({ path: '/tmp/smile.png' });
    
  } finally {
    await synthetics.close();
  }
};
```

## Exemples pour Node.js et Puppeteer
<a name="CloudWatch_Synthetics_Canaries_Samples_nodejspup"></a>

### Définition des cookies
<a name="CloudWatch_Synthetics_Canaries_Samples_cookies"></a>

Les sites web s'appuient sur des cookies pour fournir des fonctionnalités personnalisées ou suivre les utilisateurs. En configurant des cookies dans CloudWatch les scripts Synthetics, vous pouvez imiter ce comportement personnalisé et le valider.

Par exemple, un site web peut afficher un lien **Connexion** pour un utilisateur qui a déjà consulté le site au lieu d'un lien **S'enregistrer**.

```
var synthetics = require('@aws/synthetics-puppeteer');
const log = require('@aws/synthetics-logger');

const pageLoadBlueprint = async function () {

    let url = "http://smile.amazon.com/";

    let page = await synthetics.getPage();

    // Set cookies.  I found that name, value, and either url or domain are required fields.
    const cookies = [{
      'name': 'cookie1',
      'value': 'val1',
      'url': url
    },{
      'name': 'cookie2',
      'value': 'val2',
      'url': url
    },{
      'name': 'cookie3',
      'value': 'val3',
      'url': url
    }];
    
    await page.setCookie(...cookies);

    // Navigate to the url
    await synthetics.executeStep('pageLoaded_home', async function (timeoutInMillis = 30000) {
        
        var response = await page.goto(url, {waitUntil: ['load', 'networkidle0'], timeout: timeoutInMillis});

        // Log cookies for this page and this url
        const cookiesSet = await page.cookies(url);
        log.info("Cookies for url: " + url + " are set to: " + JSON.stringify(cookiesSet));
    });

};

exports.handler = async () => {
    return await pageLoadBlueprint();
};
```

### Émulation d'appareils
<a name="CloudWatch_Synthetics_Canaries_Samples_device"></a>

Vous pouvez écrire des scripts qui émulent divers appareils pour obtenir un aperçu de l'apparence et du comportement d'une page sur ces appareils.

L'exemple suivant émule un iPhone 6. Pour de plus amples informations sur l'émulation, veuillez consulter [ page.emulate(options)](https://pptr.dev/#?product=Puppeteer&version=v5.3.1&show=api-pageemulateoptions) dans la documentation Puppeteer.

```
var synthetics = require('@aws/synthetics-puppeteer');
const log = require('@aws/synthetics-logger');
const puppeteer = require('puppeteer-core');

const pageLoadBlueprint = async function () {
    
    const iPhone = puppeteer.devices['iPhone 6'];

    // INSERT URL here
    const URL = "https://amazon.com";

    let page = await synthetics.getPage();
    await page.emulate(iPhone);

    //You can customize the wait condition here. For instance,
    //using 'networkidle2' may be less restrictive.
    const response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000});
    if (!response) {
        throw "Failed to load page!";
    }
    
    await page.waitFor(15000);

    await synthetics.takeScreenshot('loaded', 'loaded');
    
    //If the response status code is not a 2xx success code
    if (response.status() < 200 || response.status() > 299) {
        throw "Failed to load page!";
    }
};

exports.handler = async () => {
    return await pageLoadBlueprint();
};
```

### Script Canary d'API à plusieurs étapes
<a name="CloudWatch_Synthetics_Canaries_Samples_APIsteps"></a>

Cet exemple de code illustre un script Canary d'API avec deux étapes HTTP afin de tester la même API pour les cas de tests positifs et négatifs. La configuration des étapes est transmise pour permettre le reporting des request/response en-têtes. En outre, il masque l'en-tête d'autorisation X-Amz-Security-Token, car ils contiennent les informations d'identification de l'utilisateur. 

Lorsque ce script est utilisé en tant que script Canary, vous pouvez afficher des détails sur chaque étape et les demandes HTTP associées, tels que la réussite/l'échec de l'étape, la durée et les métriques de performances telles que le temps de recherche DNS et le temps du premier octet. Vous pouvez voir le nombre de 2xx, 4xx et 5xx pour l'exécution de votre script Canary. 

```
var synthetics = require('@aws/synthetics-puppeteer');
const log = require('@aws/synthetics-logger');

const apiCanaryBlueprint = async function () {
    
    // Handle validation for positive scenario
    const validatePositiveCase = async function(res) {
        return new Promise((resolve, reject) => {
            if (res.statusCode < 200 || res.statusCode > 299) {
                throw res.statusCode + ' ' + res.statusMessage;
            }
     
            let responseBody = '';
            res.on('data', (d) => {
                responseBody += d;
            });
     
            res.on('end', () => {
                // Add validation on 'responseBody' here if required. For ex, your status code is 200 but data might be empty
                resolve();
            });
        });
    };
    
    // Handle validation for negative scenario
    const validateNegativeCase = async function(res) {
        return new Promise((resolve, reject) => {
            if (res.statusCode < 400) {
                throw res.statusCode + ' ' + res.statusMessage;
            }
            
            resolve();
        });
    };
    
    let requestOptionsStep1 = {
        'hostname': 'myproductsEndpoint.com',
        'method': 'GET',
        'path': '/test/product/validProductName',
        'port': 443,
        'protocol': 'https:'
    };
    
    let headers = {};
    headers['User-Agent'] = [synthetics.getCanaryUserAgentString(), headers['User-Agent']].join(' ');
    
    requestOptionsStep1['headers'] = headers;

    // By default headers, post data and response body are not included in the report for security reasons. 
    // Change the configuration at global level or add as step configuration for individual steps
    let stepConfig = {
        includeRequestHeaders: true, 
        includeResponseHeaders: true,
        restrictedHeaders: ['X-Amz-Security-Token', 'Authorization'], // Restricted header values do not appear in report generated.
        includeRequestBody: true,
        includeResponseBody: true
    };
       

    await synthetics.executeHttpStep('Verify GET products API with valid name', requestOptionsStep1, validatePositiveCase, stepConfig);
    
    let requestOptionsStep2 = {
        'hostname': 'myproductsEndpoint.com',
        'method': 'GET',
        'path': '/test/canary/InvalidName(',
        'port': 443,
        'protocol': 'https:'
    };
    
    headers = {};
    headers['User-Agent'] = [synthetics.getCanaryUserAgentString(), headers['User-Agent']].join(' ');
    
    requestOptionsStep2['headers'] = headers;

    // By default headers, post data and response body are not included in the report for security reasons. 
    // Change the configuration at global level or add as step configuration for individual steps
    stepConfig = {
        includeRequestHeaders: true, 
        includeResponseHeaders: true,
        restrictedHeaders: ['X-Amz-Security-Token', 'Authorization'], // Restricted header values do not appear in report generated.
        includeRequestBody: true,
        includeResponseBody: true
    };
    
    await synthetics.executeHttpStep('Verify GET products API with invalid name', requestOptionsStep2, validateNegativeCase, stepConfig);
    
};

exports.handler = async () => {
    return await apiCanaryBlueprint();
};
```

## Exemples pour Python et Selenium
<a name="CloudWatch_Synthetics_Canaries_Samples_pythonsel"></a>

L'exemple de code Selenium suivant est un script Canary qui échoue avec un message d'erreur personnalisé lorsqu'un élément cible n'est pas chargé.

```
from aws_synthetics.selenium import synthetics_webdriver as webdriver
from aws_synthetics.common import synthetics_logger as logger
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

def custom_selenium_script():
    # create a browser instance
    browser = webdriver.Chrome()
    browser.get('https://www.example.com/')
    logger.info('navigated to home page')
    # set cookie
    browser.add_cookie({'name': 'foo', 'value': 'bar'})
    browser.get('https://www.example.com/')
    # save screenshot
    browser.save_screenshot('signed.png')
    # expected status of an element
    button_condition = EC.element_to_be_clickable((By.CSS_SELECTOR, '.submit-button'))
    # add custom error message on failure
    WebDriverWait(browser, 5).until(button_condition, message='Submit button failed to load').click()
    logger.info('Submit button loaded successfully')
    # browser will be quit automatically at the end of canary run, 
    # quit action is not necessary in the canary script
    browser.quit()

# entry point for the canary
def handler(event, context):
    return custom_selenium_script()
```

# Scripts Canary et suivi X-Ray
<a name="CloudWatch_Synthetics_Canaries_tracing"></a>

Vous pouvez choisir d'activer le AWS X-Ray suivi actif sur les canaris qui utilisent le runtime ` syn-nodejs-2.0` ou une version ultérieure. Lorsque le suivi est activé, des traces sont envoyées pour tous les appels effectués par le Canary qui utilisent le navigateur, le AWS SDK ou les modules HTTP ou HTTPS. Les scripts canary dont le suivi est activé apparaissent sur la [Carte de suivi X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-console-servicemap.html) et dans [Application Signals](CloudWatch-Application-Monitoring-Sections.md) une fois que vous l’avez activé pour votre application. 

**Note**  
L'activation du suivi aux X-Ray sur les canarys n'est pas encore prise en charge en Asie-Pacifique (Jakarta).  
Le suivi X-Ray n’est pas pris en charge avec les scripts Canary utilisant le navigateur Firefox.

Lorsqu’un script Canary apparaît sur la carte de suivi X-Ray, il apparaît comme un nouveau type de nœud client. Vous pouvez passer la souris sur un nœud de script Canary pour afficher les données relatives à la latence, aux demandes et aux défaillances. Vous pouvez également choisir le nœud de script Canary pour afficher plus de données en bas de la page. Dans cette zone de la page, vous pouvez choisir **Afficher dans Synthetics** pour accéder à la console Synthetics pour obtenir plus de détails sur le canari, ou **choisir Afficher** les traces pour obtenir plus de détails sur les traces des courses de ce canari. CloudWatch 

Un script Canary dont le suivi est activé a également un onglet **Tracing (Suivi)** dans sa page de détails, avec des détails sur les suivis et les segments des exécutions du script Canary.

L'activation du suivi augmente le temps d'exécution des scripts Canary de 2,5 % à 7 %.

Un script Canary dont le suivi est activé doit utiliser un rôle avec les autorisations suivantes. Si vous utilisez la console pour créer le rôle lorsque vous créez le script Canary, il dispose de ces autorisations.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Sid230934",
            "Effect": "Allow",
            "Action": [
                "xray:PutTraceSegments"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Les suivis générés par les scripts Canary entraînent des frais. Pour plus d'informations sur la tarification de X-Ray, consultez [Tarification d'AWS X-Ray](https://aws.amazon.com/xray/pricing/).

# Exécution d'un script Canary sur un VPC
<a name="CloudWatch_Synthetics_Canaries_VPC"></a>

Vous pouvez exécuter des scripts Canary sur des points de terminaison sur un VPC, ainsi que des points de terminaison internes publics. Pour exécuter un script Canary sur un VPC, les options **Résolution DNS** et **Noms d'hôte DNS** doivent être activées sur le VPC. Pour plus d'informations, consultez [Utilisation de DNS avec votre VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html).

Lorsque vous exécutez un Canary sur un point de terminaison VPC, vous devez lui fournir un moyen d'envoyer ses métriques CloudWatch et ses artefacts à Amazon S3. Si le VPC est déjà activé pour l'accès à Internet, il n'y a rien de plus à faire. Le script Canary s'exécute dans votre VPC, mais peut accéder à Internet pour charger ses métriques et ses artefacts.

Si le VPC n'est pas encore activé pour l'accès Internet, vous avez deux options :
+ Activez l'accès à IPv4 Internet pour permettre au Canary d'envoyer des métriques à CloudWatch Amazon S3. Pour plus d'informations, consultez la section [Donner accès à Internet à votre script Canary sur un VPC](#CloudWatch_Synthetics_VPC_Internet) suivante.
+ Si vous souhaitez que votre VPC reste privé, vous pouvez configurer le Canary pour qu'il envoie ses données à Amazon S3 via des CloudWatch points de terminaison VPC privés. Si ce n'est pas déjà fait, vous devez créer un point de terminaison VPC pour CloudWatch (com.amazonaws). *region*.monitoring) et un point de terminaison de passerelle pour Amazon S3. Pour de plus amples informations, veuillez consulter [Utilisation CloudWatch, CloudWatch synthetics et surveillance du réseau avec des points de CloudWatch terminaison VPC d'interface](cloudwatch-and-interface-VPC.md) et [Points de terminaison Amazon VPC pour Amazon S3](https://docs.aws.amazon.com/glue/latest/dg/vpc-endpoints-s3.html). 

## Donner accès à Internet à votre script Canary sur un VPC
<a name="CloudWatch_Synthetics_VPC_Internet"></a>

Suivez ces étapes pour donner accès à Internet à votre script Canary sur un VPC ou pour attribuer à votre script Canary une adresse IP statique

**Pour donner accès à Internet (IPv4) à un canari sur un VPC**

1. Créez une passerelle NAT dans un sous-réseau public sur le VPC. Pour obtenir des instructions, consultez [Create a NAT gateway](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-creating) (Créer une passerelle NAT).

1. Ajoutez un nouvel acheminement à la table de routage dans le sous-réseau privé où le scirpt Canary est lancé. Spécifiez les paramètres suivants :
   + Pour **Destination**, saisissez **0.0.0.0/0**
   + Pour **Cible**, choisissez **Passerelle NAT**, puis sélectionnez l'ID de la passerelle NAT que vous avez créée.
   + Choisissez **Save routes (Enregistrer les acheminements)**.

   Pour plus d'informations sur l'ajout d'acheminements à la table de routage, consultez [Add and remove routes from a route table](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithRouteTables.html#AddRemoveRoutes) (Ajout et retrait d'acheminements d'une table de routage).

**Pour donner accès à Internet (IPv6) à un canari sur un VPC**

1. Configurez votre VPC pour qu’il utilise des sous-réseaux Dualstack. Vous devez ajouter une passerelle Internet sortante uniquement au VPC, mettre à jour les tables de routage pour autoriser le trafic vers la passerelle Internet et permettre l’accès sortant dans les groupes de sécurité associés. Pour plus d'informations, consultez [Ajouter un IPv6 support pour votre VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6-add.html).

1. Définissez le paramètre `Ipv6AllowedForDualstack ` dans la configuration VPC de votre script Canary à l’aide de l’API `CreateCanary` ou `UpdateCanary`. Pour plus d’informations, consultez [VpcConfigInput](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_VpcConfigInput.html).

   Pour activer le IPv6 trafic sortant de votre Canary, les sous-réseaux VPC attachés au Canary doivent être activés pour Dualstack.

**Note**  
Assurez-vous que les acheminements vers votre passerelle NAT sont à l'état **active** (actif). Si la passerelle NAT est supprimée et que les routes ne sont pas mises à jour, elles se retrouvent en état de trou noir. Pour plus d'informations, consultez la section [Work with NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with) (Travailler avec des passerelles NAT).

# Chiffrement des artefacts de script Canary
<a name="CloudWatch_Synthetics_artifact_encryption"></a>

CloudWatch Synthetics stocke les artefacts Canary tels que les captures d'écran, les fichiers HAR et les rapports dans votre compartiment Amazon S3. Par défaut, ces artefacts sont chiffrés au repos à l'aide d'une clé AWS gérée. Pour plus d'informations, consultez la section [Clés et AWS clés du client](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-mgmt.html). 

Vous pouvez choisir d'utiliser une autre option de chiffrement. CloudWatch Synthetics prend en charge les éléments suivants :
+ **SSE-S3** : chiffrement côté serveur (SSE) avec une clé gérée par Amazon S3.
+ **SSE-KMS** : chiffrement côté serveur (SSE) avec une clé gérée par le client AWS KMS .

Si vous souhaitez utiliser l'option de chiffrement par défaut avec une clé AWS gérée, vous n'avez pas besoin d'autorisations supplémentaires. 

Pour utiliser le chiffrement SSE-S3, vous devez spécifier **SSE\$1S3** comme mode de chiffrement lorsque vous créez ou mettez à jour votre script Canary. Vous n'avez pas besoin d'autorisations supplémentaires pour utiliser ce mode de chiffrement. Pour plus d'informations, consultez [Protection des données à l'aide du chiffrement côté serveur avec les clés de chiffrement gérées par Amazon S3 (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html).

Pour utiliser une clé gérée par le AWS KMS client, vous spécifiez **SSE-KMS** comme mode de chiffrement lorsque vous créez ou mettez à jour votre Canary, et vous fournissez également le nom de ressource Amazon (ARN) de votre clé. Vous pouvez également utiliser une clé KMS entre comptes.

Pour utiliser une clé gérée par le client, vous devez disposer des paramètres suivants :
+ Le rôle IAM de votre script Canary doit être autorisé à chiffrer vos artefacts à l'aide de votre clé. Si vous utilisez la surveillance visuelle, vous devez également lui accorder l'autorisation de déchiffrer des artefacts.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowKMSKeyUsage",
              "Effect": "Allow",
              "Action": [
                  "kms:GenerateDataKey",
                  "kms:Decrypt"
              ],
              "Resource": "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
          }
      ]
  }
  ```

------
+ Au lieu d'ajouter des autorisations à votre rôle IAM, vous pouvez ajouter votre rôle IAM à votre politique de clé. Si vous utilisez le même rôle pour plusieurs scripts canarys, vous devez envisager cette approche.

  ```
  {
      "Sid": "Enable IAM User Permissions",
      "Effect": "Allow",
      "Principal": {
          "AWS": "Your synthetics IAM role ARN"
      },
      "Action": [
          "kms:GenerateDataKey",
          "kms:Decrypt"
      ],
      "Resource": "*"
  }
  ```
+ Si vous utilisez une clé KMS entre comptes, consultez [Allowing users in other accounts to use a KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html).

 **Affichage des artefacts de script Canary chiffrés en utilisant une clé gérée par le client** 

Pour afficher les artefacts Canary, mettez à jour votre clé gérée par le client pour autoriser AWS KMS le déchiffrement à l'utilisateur qui consulte les artefacts. Vous pouvez également ajouter des autorisations de déchiffrement à l'utilisateur ou au rôle IAM qui affiche les artefacts.

La AWS KMS politique par défaut active les politiques IAM du compte pour autoriser l'accès aux clés KMS. Si vous utilisez une clé KMS entre comptes, consultez [Pourquoi les utilisateurs intercomptes reçoivent-ils des erreurs d'accès refusé lorsqu'ils tentent d'accéder à des objets Amazon S3 chiffrés par une clé personnalisée AWS KMS](https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-denied-error-s3/) ? . 

Pour plus d'informations sur le dépannage des problèmes d'accès rejeté en raison d'une clé KMS, consultez [Troubleshooting key access](https://docs.aws.amazon.com/kms/latest/developerguide/policy-evaluation.html) (Résolution des problèmes de clé d'accès). 

## Mise à jour de l'emplacement et du chiffrement des artefacts en utilisant la surveillance visuelle
<a name="CloudWatch_Synthetics_artifact_encryption_visual"></a>

Pour effectuer une surveillance visuelle, CloudWatch Synthetics compare vos captures d'écran avec les captures d'écran de référence acquises lors de l'exécution sélectionnée comme référence. Si vous mettez à jour l'emplacement de votre artefact ou l'option de chiffrement, vous devez effectuer l'une des actions suivantes :
+ Assurez-vous que votre rôle IAM dispose d'autorisations suffisantes pour l'ancien emplacement Amazon S3 et le nouvel emplacement Amazon S3 pour les artefacts. Assurez-vous également qu'il dispose d'une autorisation pour les méthodes de chiffrement précédentes, les nouvelles méthodes de chiffrement et les clés KMS.
+ Créez une nouvelle référence en sélectionnant la prochaine exécution de script Canary comme nouvelle référence. Si vous utilisez cette option, il vous suffit de vous assurer que votre rôle IAM dispose des autorisations suffisantes pour la nouvelle option d'emplacement et de chiffrement des artefacts.

Nous recommandons la deuxième option de sélection de la prochaine exécution comme nouvelle référence. Cela évite de dépendre d'un emplacement d'artefact ou d'une option de chiffrement que vous n'utilisez plus pour le script Canary.

Par exemple, supposons que votre script Canary utilise l'emplacement de l'artefact A et la clé KMS K pour charger des artefacts. Si vous mettez à jour votre script Canary vers l'emplacement de l'artefact B et la clé KMS L, vous pouvez vous assurer que votre rôle IAM dispose d'autorisations sur les deux emplacements d'artefact (A et B) et les deux clés KMS (K et L). Vous pouvez également sélectionner la prochaine exécution comme nouvelle référence et vous assurer que votre rôle IAM de script Canary dispose des autorisations sur l'emplacement d'artefact B et la clé KMS L. 

# Affichage des politiques et détails sur les scripts Canary
<a name="CloudWatch_Synthetics_Canaries_Details"></a>

Vous pouvez afficher des détails sur vos scripts Canary et voir des statistiques sur leurs exécutions.

Pour être en mesure de voir tous les détails sur les résultats de l'exécution de votre script Canary, vous devez être connecté à un compte disposant d'autorisations suffisantes. Pour de plus amples informations, veuillez consulter [Rôles et autorisations requis pour les CloudWatch canaris](CloudWatch_Synthetics_Canaries_Roles.md).

**Pour afficher les statistiques et les détails des scripts Canary**

1. Ouvrez la CloudWatch console à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Dans le volet de navigation, sélectionnez **Vigie applicative**, **Scripts Canary Synthetics**.

   Détails sur les scripts Canary que vous avez créés :
   + L'**Status (État)** montre visuellement combien de vos scripts Canary ont passé leurs exécutions les plus récentes.
   + **Groups** (Groupes) affiche les groupes que vous avez créés et indique combien d'entre eux ont des versions Canary défaillantes ou en alarme.
   + **Slowest performers** (Les plus lents) affiche le groupe et la région avec les versions Canary les plus lentes. Elles sont calculées en additionnant la durée moyenne de toutes les versions Canary (sur la période sélectionnée) au sein d'un groupe ou d'une région et en la divisant par le nombre de versions Canary dans le groupe ou la région. Si vous choisissez la métrique pour le groupe le plus lent, le tableau est filtré pour afficher uniquement les groupes les plus lents et leurs versions Canary. Le tableau est trié par durée moyenne.
   + Un tableau affichant tous les scripts Canary se trouve près du bas de la page. Vous pouvez utiliser la barre de filtrage pour afficher dans le tableau uniquement les scripts Canary correspondant à certains critères, tels que le nom du script Canary, le résultat de la dernière exécution, le taux de réussite, les alarmes, la fréquence d’exécution, l’état du script Canary, la version d’exécution et les balises uniques. 

     Pour la colonne Alarms, seules les alarmes respectant la convention de nommage standard des alarmes de script Canary sont affichées. Cette norme est `Synthetics-Alarm-canaryName -index`. Les alarmes Canary que vous créez dans la section **Synthetics** de CloudWatch la console utilisent automatiquement cette convention de dénomination. Si vous créez des alarmes Canary dans la section **Alarmes** de la CloudWatch console ou en utilisant AWS CloudFormation, sans utiliser cette convention de dénomination, les alarmes fonctionnent mais elles n'apparaissent pas dans cette liste.

1. Pour obtenir plus de détails sur un canari, choisissez le nom du canari dans le tableau **des Canaries**.

   Détails sur ce script Canary :
   + L'onglet **Availability (Disponibilité)** affiche des informations sur les exécutions récentes de ce script Canary.

     Sous **Canary runs (Exécutions de scripts Canary)**, vous pouvez choisir l'une des lignes pour voir les détails de ladite exécution.

     Sous le graphique, vous pouvez choisir **Steps**, **Screenshot**, **Logs** ou **HAR file** pour voir ces types de détails. Si le suivi actif est activé pour le canari, vous pouvez également choisir **Traces** pour consulter les informations de suivi des courses du canari.

     Les journaux des courses Canary sont stockés dans des compartiments S3 et dans des CloudWatch journaux.

     Les captures d'écran montrent comment vos clients voient vos pages web. Vous pouvez utiliser les fichiers HAR (fichiers d'archive HTTP) pour afficher des données détaillées sur les performances des pages web. Vous pouvez analyser la liste des demandes web et détecter des problèmes liés aux performances, notamment le temps de chargement d'un élément. Les fichiers journaux montrent l'enregistrement des interactions entre l'exécution d'un script Canary et la page web, et ils peuvent être utilisés pour identifier les détails des erreurs.

     Si le script Canary utilise l'exécution `syn-nodejs-2.0-beta` ou version ultérieure, vous pouvez trier les fichiers HAR par code de statut, taille de demande ou durée.

     L'onglet **Steps** (Étapes) affiche une liste des étapes du script Canary, le statut de chaque étape, le motif de l'échec, l'URL après l'exécution de l'étape, les captures d'écran et la durée de l'exécution de l'étape. Pour les scripts Canary d'API avec des étapes HTTP, vous pouvez afficher les étapes et les requêtes HTTP correspondantes si vous utilisez l'exécution `syn-nodejs-2.2` ou version ultérieure.

     Cliquez sur l'onglet **HTTP Requests (Requêtes HTTP)** pour afficher le journal de chaque demande HTTP effectuée par le script Canary. Vous pouvez afficher request/response les en-têtes, le corps de la réponse, le code d'état, les délais d'erreur et de performance (durée totale, durée de connexion TCP, durée de prise de contact TLS, durée du premier octet et durée de transfert du contenu). Toutes les requêtes HTTP qui utilisent le HTTP/HTTPS module intégré sont capturées ici.

     Par défaut, dans les scripts Canary d'API, l'en-tête de requête, l'en-tête de réponse, le corps de requête et le corps de réponse ne sont pas inclus dans le rapport pour des raisons de sécurité. Si vous choisissez de les inclure, les données sont stockées uniquement dans votre compartiment S3. Pour plus d'informations sur la manière d'inclure ces données dans le rapport, consultez [executeHttpStep(StepName, RequestOptions, [rappel], [StepConfig])](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_executeHttpStep).

     Les types de contenu du corps de réponse texte, HTML et JSON sont pris en charge. Les types de contenu tels que text/HTML, text/plain, application/JSON and application/x -amz-json-1.0 sont pris en charge. Les réponses compressées ne sont pas prises en charge. 
   + L'onglet **Surveillance** affiche des graphiques des CloudWatch statistiques publiées par ce canari. Pour plus d’informations sur ces métriques, consultez [CloudWatch statistiques publiées par canaries](CloudWatch_Synthetics_Canaries_metrics.md).

     Sous les CloudWatch graphiques publiés par le canari se trouvent des graphiques des métriques Lambda liées au code Lambda du canari.
   + L'onglet **Configuration** affiche des informations de configuration et de planification concernant le script Canary.
   + L'onglet **Groups (Groupes)** affiche les groupes auxquels ce script Canary est associé, le cas échéant.
   + L'onglet **Tags (Identifications)** affiche les identifications associées au script Canary.

# CloudWatch statistiques publiées par canaries
<a name="CloudWatch_Synthetics_Canaries_metrics"></a>

Les Canaries publient les métriques suivantes CloudWatch dans l'espace de `CloudWatchSynthetics` noms. Pour plus d'informations sur l'affichage CloudWatch des métriques, consultez[Affichage des métriques disponibles](viewing_metrics_with_cloudwatch.md).

**Note**  
Pour les scripts Canary multinavigateurs, les métriques par dimension de navigateur sont activées par défaut afin d’assurer une visibilité sur les performances dans différents navigateurs comme Chrome, Firefox et d’autres. Pour désactiver les métriques de navigateur, définissez `browserDimension` sur `false`.  
Pour les scripts Canary à navigateur unique, les métriques par dimension de navigateur sont désactivées par défaut afin d’éviter les doublons. Pour voir les métriques détaillées par navigateur, définissez `browserDimension` sur ` true`.


| Métrique | Description | 
| --- | --- | 
|   `2xx`   |  Le nombre de demandes réseau effectuées par le script Canary qui ont renvoyé des réponses OK, avec des codes de réponse compris entre 200 et 299. Cette métrique est signalée pour les scripts Canary d'interface utilisateur qui utilisent la version d'exécution ` syn-nodejs-2.0` ou ultérieure, ainsi que pour les scripts Canary d'API qui utilisent la version d'exécution `syn-nodejs-2.2` ou ultérieure. Dimensions valides : CanaryName, Navigateur Statistique valide : somme Unités : nombre  | 
|   `4xx`   |  Le nombre de demandes réseau effectuées par le script Canary qui ont renvoyé des réponses Error (Erreur), avec des codes de réponse compris entre 400 et 499. Cette métrique est signalée pour les scripts Canary d'interface utilisateur qui utilisent la version d'exécution ` syn-nodejs-2.0` ou ultérieure, ainsi que pour les scripts Canary d'API qui utilisent la version d'exécution `syn-nodejs-2.2` ou ultérieure. Dimensions valides : CanaryName, Navigateur Statistique valide : somme Unités : nombre  | 
|   `5xx`   |  Le nombre de demandes réseau effectuées par le script Canary qui ont renvoyé des réponses Fault (Panne), avec des codes de réponse compris entre 500 et 599. Cette métrique est signalée pour les scripts Canary d'interface utilisateur qui utilisent la version d'exécution ` syn-nodejs-2.0` ou ultérieure, ainsi que pour les scripts Canary d'API qui utilisent la version d'exécution `syn-nodejs-2.2` ou ultérieure. Dimensions valides : CanaryName, Navigateur Statistique valide : somme Unités : nombre  | 
|   `Duration`   |  La durée de l'exécution du script Canary, en millisecondes. Dimensions valides : CanaryName, Navigateur Statistique valide : moyenne Unités : millisecondes  | 
|   `DurationDryRun`   |  La durée des DryRun exécutions.  Dimensions valides : CanaryName, Navigateur Statistique valide : moyenne Unités : millisecondes  | 
|   `EphemeralStorageUsagePercent`   |  Pourcentage maximal du stockage éphémère utilisé par rapport au stockage total configuré. Cette métrique est collectée toutes les 10 secondes.  | 
|   `Failed`   |  Le nombre d'exécutions de scripts Canary qui ont échoué. Ces échecs sont liés au script Canary lui-même. Dimensions valides : CanaryName, navigateur Statistique valide : somme Unités : nombre  | 
|   `Failed requests`   |  Le nombre de demandes HTTP exécutées par le script Canary sur le site web cible qui ont échoué sans réponse. Dimensions valides : CanaryName, navigateur Statistique valide : somme Unités : nombre  | 
|   `RetryCount`   |  Nombre de fois où le script Canary a été relancé. Cette métrique n’est affichée qu’en cas de relances. Dimensions valides : CanaryName, navigateur Statistique valide : somme Unités : nombre  | 
|   `SuccessPercent`   |  Le pourcentage des exécutions de ce script Canary qui réussissent et ne trouvent aucun échec. Dimensions valides : CanaryName, navigateur Statistique valide : moyenne Unités : pourcentage  | 
|   `SuccessPercentDryRun`   |  Pourcentage de réussite des DryRun exécutions. Dimensions valides : CanaryName, navigateur Statistique valide : moyenne Unités : pourcentage  | 
|   `SuccessPercentWithRetries`   |  Pourcentage des exécutions du script Canary ayant réussi après toutes les relances. Dimensions valides : CanaryName, navigateur Statistique valide : moyenne Unités : pourcentage  | 
|   `VisualMonitoringSuccessPercent`   |  Le pourcentage de comparaisons visuelles qui correspondent aux captures d'écran de référence lors de l'exécution d'un script Canary. Dimensions valides : CanaryName, navigateur Statistique valide : moyenne Unités : pourcentage  | 
|   `VisualMonitoringTotalComparisons`   |  Le nombre total de comparaisons visuelles qui se sont produites lors de l'exécution d'un script Canary. Dimensions valides : CanaryName, navigateur Unités : nombre  | 

**Note**  
Les scripts Canary qui utilisent les méthodes `executeStep()` ou `executeHttpStep()` de la bibliothèque Synthetics publient également les métriques `SuccessPercent` et ` Duration` avec les dimensions `CanaryName` et `StepName` pour chaque étape.

 

# Modification ou suppression d'un canary
<a name="synthetics_canaries_deletion"></a>

Vous pouvez modifier ou supprimer un script Canary existant.

 **Modifier un canary** 

Lorsque vous modifiez un script Canary, même si vous ne modifiez pas sa planification, celle-ci est réinitialisée en fonction du moment où vous modifiez le script Canary. Par exemple, si vous avez un script Canary qui s'exécute toutes les heures et que vous le modifiez, le script Canary s'exécutera immédiatement après la fin des modifications, puis toutes les heures après cela.

**Pour modifier ou mettre à jour un script Canary**

1. Ouvrez la CloudWatch console à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Dans le volet de navigation, sélectionnez **Vigie applicative**, **Scripts Canary Synthetics**.

1. Sélectionnez le bouton à côté du nom du canari, puis choisissez **Actions**, **Modifier**.

1. (Facultatif) Si ce script Canary effectue une surveillance visuelle des captures d'écran et que vous souhaitez définir la prochaine exécution du script Canary comme référence, sélectionnez **Set next run as new baseline (Définir la prochaine exécution en tant que nouvelle référence)**.

1. (Facultatif) Si ce script Canary effectue une surveillance visuelle des captures d'écran et que vous souhaitez retirer une capture d'écran de la surveillance visuelle ou que vous souhaitez ignorer des parties de la capture d'écran lors des comparaisons visuelles, sous **Visual Monitoring (Surveillance visuelle)**, choisissez **Edit Baseline (Modifier la référence)**.

   La capture d'écran s'affiche et vous pouvez procéder de l'une des manières suivantes :
   + Pour empêcher l'utilisation de la capture d'écran lors de la surveillance visuelle, sélectionnez **Remove screenshot from visual test baseline (Retirer la capture d'écran de la référence du test visuel)**.
   + Pour désigner des parties de la capture d'écran à ignorer lors des comparaisons visuelles, cliquez et faites glisser pour dessiner des zones de l'écran à ignorer. Une fois que vous avez dessiné toutes les zones que vous souhaitez ignorer pendant les comparaisons, choisissez **Save (Enregistrer)**.

1. Sous **Éditeur de script**, dans **Version d’exécution**, sélectionnez la version d’exécution Synthetics que le script Canary doit utiliser. Pour plus d’informations sur les versions d’exécution Synthetics, consultez [Versions d’exécution Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library.html).

   Dans **Configuration du navigateur**, vous pouvez activer un navigateur pour tester le script Canary. Vous devez sélectionner au moins un navigateur.

1. Si vous le souhaitez, apportez d'autres modifications au script Canary, puis choisissez **Save (Enregistrer)**.

 **Supprimer un canary** 

Lorsque vous supprimez un canary, vous pouvez choisir de supprimer également d'autres ressources utilisées et créées par le canary. Si le `ProvisionedResourceCleanup` champ du canari est défini sur ` AUTOMATIC` ou `DeleteLambda` est spécifié comme `true` lorsque vous supprimez le canari, CloudWatch Synthetics supprimera automatiquement les fonctions et les couches Lambda utilisées par le canari.

Lorsque vous supprimez un canary, vous devez également supprimer les éléments suivants :
+ Fonctions Lambda et les couches utilisées par ce script Canary. Leur préfixe est `cwsyn- MyCanaryName`.
+ CloudWatch alarmes créées pour ce canari. Ces alertes portent un nom qui commence par ` Synthetics-Alarm-MyCanaryName`. Pour plus d'informations sur la suppression d'alertes, consultez [Modifier ou supprimer une CloudWatch alarme](Edit-CloudWatch-Alarm.md).
+ Objets et compartiments Amazon S3, tels que l'emplacement des résultats du script Canary et l'emplacement de l'artefact.
+ Rôles IAM créés pour le script Canary. Ceux-ci ont le nom ` role/service-role/CloudWatchSyntheticsRole-MyCanaryName`. 
+ Groupes de CloudWatch journaux dans les journaux créés pour le canari. Ces groupes de journaux portent les noms suivants :`/aws/lambda/cwsyn-MyCanaryName-randomId`. 

Avant de supprimer un script Canary, vous pouvez souhaiter afficher les détails de ce dernier et prendre note de ces informations. Ainsi, vous pouvez supprimer les ressources appropriées après avoir supprimé le script Canary.

**Pour supprimer un script Canary**

1. Ouvrez la CloudWatch console à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Dans le volet de navigation, sélectionnez **Vigie applicative**, **Scripts Canary Synthetics**.

1. Si le canary se trouve actuellement dans l'état `RUNNING`, vous devez l'arrêter. Seuls les canarys dans les états `STOPPED`, `READY(NOT_STARTED)` ou `ERROR` peuvent être supprimés.

   Pour arrêter le canari, sélectionnez le bouton à côté du nom du canari, puis choisissez **Actions**, **Arrêter**.

1. Sélectionnez le bouton à côté du nom du canari, puis choisissez **Actions**, **Supprimer**.

1. Choisissez si vous souhaitez également supprimer les autres ressources créées et utilisées par le canary. Les fonctions Lambda et les couches associées seront supprimées en même temps que le script Canary, mais vous pouvez aussi choisir de supprimer le rôle IAM et la politique IAM associés à ce script Canary.

   Saisissez **Delete** dans la zone et choisissez **Delete (Supprimer)**.

1. Supprimez les autres ressources utilisées par le script Canary et crées pour celui-ci, comme indiqué précédemment dans cette section.

# Démarrage, arrêt, suppression ou mise à jour de l'exécution de plusieurs canaris
<a name="synthetics_canaries_multi-action"></a>

Vous pouvez arrêter, démarrer, supprimer ou mettre à jour la durée d'exécution d'un maximum de cinq canaris en une seule action. Si vous mettez à jour le temps d'exécution d'un canary, il est mis à jour avec le dernier temps d'exécution disponible pour le langage et le cadre que le canary utilise.

Si vous sélectionnez plusieurs canaris et que seuls certains d'entre eux sont dans un état valable pour l'action que vous sélectionnez, l'action est exécutée uniquement sur les canaris où cette action est valide. Par exemple, si vous sélectionnez des canaris qui sont en cours d'exécution et d'autres qui ne le sont pas, et que vous choisissez de démarrer les canaris, ceux qui n'étaient pas encore en cours d'exécution démarreront, et ceux qui étaient déjà en cours d'exécution ne seront pas affectés.

Si aucun des canaris que vous sélectionnez n'est valide pour une action, cette action ne sera pas disponible dans le menu.

1. Ouvrez la CloudWatch console à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Dans le volet de navigation, sélectionnez **Vigie applicative**, **Scripts Canary Synthetics**.

1. Cochez les cases en regard des canaris que vous voulez arrêter, démarrer ou supprimer.

1. Choisissez **Actions**, puis sélectionnez **Start**, **Stop**, **Delete**, **Start Dry Run** ou **Update Runtime**.

   En outre, lorsque vous sélectionnez **Mettre à jour l’exécution**, vous pouvez d’abord effectuer un test à blanc de la mise à jour avant de valider la modification.

# Surveiller les événements liés aux canaris avec Amazon EventBridge
<a name="monitoring-events-eventbridge"></a>

Les règles relatives aux EventBridge événements Amazon peuvent vous avertir lorsque les canaris changent de statut ou terminent des courses. EventBridgefournit un near-real-time flux d'événements système décrivant les modifications apportées aux AWS ressources. CloudWatch *Synthetics envoie ces événements EventBridge à dans la mesure du possible.* Dans le meilleur des cas, CloudWatch Synthetics essaie d'envoyer tous les événements EventBridge à, mais dans de rares cas, il se peut qu'un événement ne soit pas organisé. EventBridge traite tous les événements reçus au moins une fois. En outre, les écouteurs d'événements peuvent ne pas recevoir les événements dans l'ordre dans lequel ces derniers se produisent.

**Note**  
Amazon EventBridge est un service de bus d'événements que vous pouvez utiliser pour connecter vos applications à des données provenant de diverses sources. Pour plus d'informations, consultez [Qu'est-ce qu'Amazon EventBridge ?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) dans le *guide de EventBridge l'utilisateur Amazon*.

CloudWatch Synthetics émet un événement lorsqu'un canari change d'état ou termine une course. Vous pouvez créer une EventBridge règle qui inclut un modèle d'événement correspondant à tous les types d'événements envoyés par CloudWatch Synthetics, ou qui ne correspond qu'à des types d'événements spécifiques. Lorsqu'un canari déclenche une règle, il EventBridge invoque les actions cibles définies dans la règle. Cela vous permet d'envoyer des notifications, de capturer des informations sur les événements et d'effectuer des actions correctives en réponse à un changement d'état ou à la fin de l'exécution d'un script Canary. Par exemple, vous pouvez créer des règles pour les cas d'utilisation suivants :
+ Réaliser un examen lors de l'échec de l'exécution d'un script Canary
+ Réaliser un examen lorsqu'un script Canary passe à l'état `ERROR`
+ Suivre le cycle de vie d'un script Canary
+ Contrôler la réussite ou l'échec de l'exécution d'un script Canary dans le cadre d'un flux de travail

## Exemples d'événements de CloudWatch Synthetics
<a name="synthetics-event-examples"></a>

Cette section répertorie des exemples d'événements de CloudWatch Synthetics. Pour plus d'informations sur le format des événements, consultez la section [Événements et modèles d'événements dans EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-event-patterns.html). 

 **Changement de statut d'un canary** 

Dans ce type d'événement, les valeurs de `current-state` et `previous-state` peuvent être les suivantes :

`CREATING` \$1 `READY` \$1 `STARTING` \$1 `RUNNING` \$1 `UPDATING` \$1 `STOPPING` \$1 `STOPPED` \$1 `ERROR`

```
{
                "version": "0",
                "id": "8a99ca10-1e97-2302-2d64-316c5dedfd61",
                "detail-type": "Synthetics Canary Status Change",
                "source": "aws.synthetics",
                "account": "123456789012",
                "time": "2021-02-09T22:19:43Z",
                "region": "us-east-1",
                "resources": [],
                "detail": {
                                "account-id": "123456789012",
                                "canary-id": "EXAMPLE-dc5a-4f5f-96d1-989b75a94226",
                                "canary-name": "events-bb-1",
                                "current-state": "STOPPED",
                                "previous-state": "UPDATING",
                                "source-location": "NULL",
                                "updated-on": 1612909161.767,
                                "changed-config": {
                                                "executionArn": {
                                                                "previous-value": "arn:aws:lambda:us-east-1:123456789012:function:cwsyn-events-bb-1-af3e3a05-dc5a-4f5f-96d1-989EXAMPLE:1",
                                                                "current-value": "arn:aws:lambda:us-east-1:123456789012:function:cwsyn-events-bb-1-af3e3a05-dc5a-4f5f-96d1-989EXAMPLE:2"
                                                },
                                                "vpcId": {
                                                                "current-value": "NULL"
                                                },
                                                "testCodeLayerVersionArn": {
                                                                "previous-value": "arn:aws:lambda:us-east-1:123456789012:layer:cwsyn-events-bb-1-af3e3a05-dc5a-4f5f-96d1-989EXAMPLE:1",
                                                                "current-value": "arn:aws:lambda:us-east-1:123456789012:layer:cwsyn-events-bb-1-af3e3a05-dc5a-4f5f-96d1-989EXAMPLE:2"
                                                }
                                },
                                "message": "Canary status has changed"
                }
}
```

 **Réussite de l'exécution d'un canary** 

```
{
                "version": "0",
                "id": "989EXAMPLE-f4a5-57a7-1a8f-d9cc768a1375",
                "detail-type": "Synthetics Canary TestRun Successful",
                "source": "aws.synthetics",
                "account": "123456789012",
                "time": "2021-02-09T22:24:01Z",
                "region": "us-east-1",
                "resources": [],
                "detail": {
                                "account-id": "123456789012",
                                "canary-id": "989EXAMPLE-dc5a-4f5f-96d1-989b75a94226",
                                "canary-name": "events-bb-1",
                                "canary-run-id": "c6c39152-8f4a-471c-9810-989EXAMPLE",
                                "artifact-location": "cw-syn-results-123456789012-us-east-1/canary/us-east-1/events-bb-1-ec3-28ddbe266797/2021/02/09/22/23-41-200",
                                "test-run-status": "PASSED",
                                "state-reason": "null",
                                "canary-run-timeline": {
                                                "started": 1612909421,
                                                "completed": 1612909441
                                },
                                "message": "Test run result is generated successfully"
                }
}
```

 **Échec de l'exécution d'un canary** 

```
{
                "version": "0",
                "id": "2644b18f-3e67-5ebf-cdfd-bf9f91392f41",
                "detail-type": "Synthetics Canary TestRun Failure",
                "source": "aws.synthetics",
                "account": "123456789012",
                "time": "2021-02-09T22:24:27Z",
                "region": "us-east-1",
                "resources": [],
                "detail": {
                                "account-id": "123456789012",
                                "canary-id": "af3e3a05-dc5a-4f5f-96d1-9989EXAMPLE",
                                "canary-name": "events-bb-1",
                                "canary-run-id": "0df3823e-7e33-4da1-8194-b04e4d4a2bf6",
                                "artifact-location": "cw-syn-results-123456789012-us-east-1/canary/us-east-1/events-bb-1-ec3-989EXAMPLE/2021/02/09/22/24-21-275",
                                "test-run-status": "FAILED",
                                "state-reason": "\"Error: net::ERR_NAME_NOT_RESOLVED \""
                                "canary-run-timeline": {
                                                "started": 1612909461,
                                                "completed": 1612909467
                                },
                                "message": "Test run result is generated successfully"
                }
}
```

Il est possible que les événements soient dupliqués ou hors service. Pour déterminer l'ordre des événements, utilisez la propriété `time`.

## Conditions préalables à la création de règles EventBridge
<a name="create-events-rule-prereqs"></a>

Avant de créer une EventBridge règle pour CloudWatch Synthetics, vous devez effectuer les opérations suivantes :
+ Familiarisez-vous avec les événements, les règles et les cibles dans EventBridge.
+ Créez et configurez les cibles invoquées par vos EventBridge règles. Les règles peuvent appeler de nombreux types de cibles, notamment :
  + Rubriques Amazon SNS
  + AWS Lambda fonctions
  + Flux Kinesis
  + Files d'attente Amazon SQS

Pour plus d'informations, consultez [Qu'est-ce qu'Amazon EventBridge ?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) et [Getting started with Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-getting-set-up.html) dans le *guide de EventBridge l'utilisateur Amazon*.

## Création d'une EventBridge règle (CLI)
<a name="create-events-rule-cli"></a>

Les étapes décrites dans l'exemple suivant créent une EventBridge règle qui publie une rubrique Amazon SNS lorsque le canari nommé `my-canary-name` `us-east-1` termine une exécution ou change d'état.

1. Créez la règle.

   ```
   aws events put-rule \
     --name TestRule \
     --region us-east-1 \ 
     --event-pattern "{\"source\": [\"aws.synthetics\"], \"detail\": {\"canary-name\": [\"my-canary-name\"]}}"
   ```

   Les propriétés qui sont omises dans le modèle sont ignorées.

1. Ajoutez la rubrique en tant que cible de règle.
   + *topic-arn*Remplacez-le par le nom de ressource Amazon (ARN) de votre rubrique Amazon SNS.

   ```
   aws events put-targets \
     --rule TestRule \
     --targets "Id"="1","Arn"="topic-arn"
   ```
**Note**  
Pour autoriser Amazon EventBridge à appeler votre sujet cible, vous devez ajouter une politique basée sur les ressources à votre sujet. Pour plus d'informations, consultez les [autorisations Amazon SNS](https://docs.aws.amazon.com/eventbridge/latest/userguide/resource-based-policies-eventbridge.html#sns-permissions) dans le guide de * EventBridge l'utilisateur Amazon*.

Pour plus d'informations, consultez la section [Événements et modèles d'événements EventBridge dans](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-event-patterns.html) le *guide de EventBridge l'utilisateur Amazon*.

# Effectuer des mises à jour sécurisées des scripts Canary
<a name="performing-safe-canary-upgrades"></a>

CloudWatch Synthetics Safe Canary Updates vous permet de tester les mises à jour sur vos canaris existants avant d'appliquer les modifications. Cette fonctionnalité vous aide à valider la compatibilité du script Canary avec les nouvelles versions d’exécution ainsi qu’avec d’autres modifications de configuration, comme les modifications de code ou de mémoire. Cela permet de réduire au minimum les risques de perturbations du suivi de surveillance en cas d’erreur lors des mises à jour.

Grâce aux mises à jour sécurisées des scripts Canary, vous pouvez tester les mises à jour de version d’exécution, vérifier les modifications de configuration, valider les modifications de code, réduire les risques d’erreur, maintenir une surveillance continue et réduire au minimum la durée d’indisponibilité.

**Topics**
+ [Conditions préalables](#performing-safe-canary-upgrades-prereq)
+ [Bonnes pratiques](#performing-safe-canary-upgrades-best-practices)
+ [Test d’un script Canary à l’aide d’un test à blanc](#performing-safe-canary-upgrades-getting-started)
+ [Limitations](#performing-safe-canary-upgrades-limitations)

## Conditions préalables
<a name="performing-safe-canary-upgrades-prereq"></a>

Assurez-vous que les prérequis sont remplis.
+ AWS compte avec CloudWatch autorisations synthétiques
+ Script Canary existant utilisant une version d’exécution prise en charge (consultez [Limitations](#performing-safe-canary-upgrades-limitations) pour les versions d’exécution compatibles)
+ Utilisation des versions d’exécution compatibles lors des tests à blanc (consultez [Limitations](#performing-safe-canary-upgrades-limitations) pour la liste des versions d’exécution compatibles)

## Bonnes pratiques
<a name="performing-safe-canary-upgrades-best-practices"></a>

Voici quelques bonnes pratiques à suivre lorsque vous exécutez un script Canary.
+ Effectuez un test à blanc avant de mettre à jour la version d’exécution
+ Effectuez des tests à blanc avant toute mise à jour en production du script Canary
+ Examinez les journaux et artefacts du script Canary après un test à blanc
+ Utilisez les tests à blanc pour valider les dépendances et la compatibilité des bibliothèques

## Test d’un script Canary à l’aide d’un test à blanc
<a name="performing-safe-canary-upgrades-getting-started"></a>

Vous pouvez tester la mise à jour du script Canary à l’aide des options suivantes :

 **Utilisation du flux de travail AWS Management Console's Edit** 

1. Va sur la CloudWatch console en synthétique.

1. Sélectionnez le script Canary que vous souhaitez mettre à jour.

1. Dans le menu déroulant **Actions**, sélectionnez **Modifier**.

   Mettez à jour le script Canary avec les modifications que vous voulez tester. Par exemple, modifier la version d’exécution ou modifier le code du script.

1. Sous **Script Canary**, sélectionnez **Démarrer un test à blanc** pour lancer immédiatement le test et en afficher les résultats, ou sélectionnez **Valider et enregistrer plus tard** en bas de la page pour lancer le test et consulter les résultats ultérieurement sur la page **Détails du script Canary**.

1. Une fois le test à blanc réussi, sélectionnez **Soumettre** pour valider les mises à jour de votre script Canary.

 **Utilisation du AWS Management Console pour mettre à jour les canaris par lots** 

1. Va sur la CloudWatch console en synthétique.

1. Accédez à la page de liste **Synthetics**.

1. Sélectionnez jusqu’à cinq scripts Canary dont vous souhaitez mettre à jour la version d’exécution.

1. Dans le menu déroulant **Actions**, sélectionnez **Mettre à jour la version d’exécution**.

1. Sélectionnez **Démarrer un test à blanc pour la nouvelle exécution** pour exécuter le test et valider vos modifications avant la mise à jour.

1. **Sur la page de liste des Synthetics, vous verrez un texte à côté de **la** version Runtime for the Canary qui affiche la progression du cycle à sec (ceci n'est affiché que pour les essais à sec impliquant une mise à jour d'exécution).**

   Une fois le test à blanc réussi, le texte **Lancer la mise à jour** s’affiche.

1. Sélectionnez **Lancer la mise à jour** pour valider la mise à jour de la version d’exécution.

1. Si le test à blanc échoue, le texte **Échec du test à blanc de mise à jour** s’affiche. Sélectionnez ce texte pour ouvrir le lien de débogage vers la page de détails du script Canary.

 **Utilisation de la AWS CLI ou du SDK** 

L’API lance le test à blanc pour le nom de script Canary fourni `MyCanary` et met à jour la version d’exécution vers `syn-nodejs-puppeteer-10.0`.

```
aws synthetics start-canary-dry-run \
    --name MyCanary \
    --runtime-version syn-nodejs-puppeteer-10.0
      
      // Or if you wanted to update other configurations:

aws synthetics start-canary-dry-run \
    --name MyCanary \
    --execution-role-arn arn:aws:iam::123456789012:role/NewRole
```

L'API renverra l'`DryRunId`intérieur du`DryRunConfigOutput`.

Appelez `GetCanary` avec le `DryRunId` fourni pour obtenir la configuration du test à blanc du script Canary ainsi qu’un champ supplémentaire `DryRunConfig` indiquant l’état du test à blanc, affiché sous forme de `LastDryRunExecutionStatus`.

```
aws synthetics get-canary \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

Pour plus de détails, utilisez `GetCanaryRuns` avec le `DryRunId` fourni pour extraire les informations d’exécution et les détails supplémentaires.

```
aws synthetics get-canary-runs \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

Après un test à blanc réussi, vous pouvez ensuite utiliser `UpdateCanary` avec le ` DryRunId` correspondant pour valider définitivement vos modifications.

```
aws synthetics update-canary \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

En cas d'échec pour quelque raison que ce soit (le résultat de GetCanaryRuns contiendra les détails), l'emplacement du résultat `GetCanaryRuns` contient un artefact contenant les journaux à déboguer. S’il n’y a aucun journal, cela signifie que le test à blanc n’a pas pu être créé. Vous pouvez valider en utilisant ` GetCanary`.

```
aws synthetics get-canary \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

L'*état *StateReason**, et * StateReasonCode*affiche l'état du cycle à sec.

 **En utilisant CloudFormation** 

Dans votre modèle de script Canary Synthetics, ajoutez le champ `DryRunAndUpdate`, qui accepte une valeur booléenne `true` ou `false`.

Lorsque la valeur est `true`, chaque mise à jour exécute automatiquement un test à blanc afin de valider les modifications avant de mettre à jour le script Canary. Lorsque le dry run échoue, Canary ne se met pas à jour et échoue au déploiement et CloudFormation au déploiement pour une raison valable. Pour déboguer ce problème, utilisez la [console AWS  Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Troubleshoot.html) ou, si vous utilisez une API, récupérez le `ArtifactS3Location` à l’aide de l’API `GetCanaryRuns`, puis téléchargez les fichiers `*-log.txt` afin d’examiner les journaux d’exécution du script Canary et identifier les erreurs. Après validation, modifiez le CloudFormation modèle et réessayez le déploiement ou utilisez l'API ci-dessus pour valider.

Lorsque la valeur est `false`, Synthetics n’exécute pas de test à blanc pour valider les modifications et applique directement vos mises à jour.

Pour plus d’informations sur la résolution des défaillances d’un script Canary, consultez [Dépannage d'un script Canary ayant échoué](CloudWatch_Synthetics_Canaries_Troubleshoot.md).

Exemple de modèle .

```
SyntheticsCanary:
    Type: 'AWS::Synthetics::Canary'
    Properties:
      Name: MyCanary
      RuntimeVersion: syn-nodejs-puppeteer-10.0
      Schedule: {Expression: 'rate(5 minutes)', DurationInSeconds: 3600}
      ...
      DryRunAndUpdate: true
```

## Limitations
<a name="performing-safe-canary-upgrades-limitations"></a>
+ Supporte les versions d'exécution : syn-nodejs-puppeteer -10.0\$1, syn-nodejs-playwright -2.0\$1, -5.1\$1 et syn-nodejs-3.0\$1 syn-python-selenium
+ Vous ne pouvez exécuter qu’un seul test à blanc à la fois par script Canary
+ Si un test à blanc échoue, il est impossible de mettre à jour le script Canary
+ Le test à blanc ne peut pas valider les modifications apportées au champ **Planification**

**Note**  
Lorsque vous lancez un test à blanc avec des modifications de code pour un script Canary Playwright, et que vous souhaitez mettre à jour le script sans fournir le `DryRunId` associé, vous devez spécifier explicitement les paramètres du code.