

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

# Monitoraggio sintetico (canary)
<a name="CloudWatch_Synthetics_Canaries"></a>

Puoi usare Amazon CloudWatch Synthetics per *creare* canaries, script configurabili eseguiti secondo una pianificazione, per monitorare i tuoi endpoint e. APIs I canary seguono gli stessi percorsi ed eseguono le stesse azioni di un cliente, il che ti consente di verificare continuamente la tua esperienza cliente anche quando non hai alcun traffico clienti sulle tue applicazioni. Con i canary puoi scoprire i problemi prima che vengano rilevati dai clienti.

I canary sono script scritti in Node.js, Python o Java. Creano funzioni Lambda nel tuo account che utilizzano Node.js, Python o Java come runtime. I canary funzionano su protocolli HTTP e HTTPS. I canarini usano livelli Lambda che contengono la libreria CloudWatch Synthetics. La libreria include implementazioni CloudWatch Synthetics per NodeJS, Python e Java.

I canary nei runtime Node.js e Python offrono l'accesso programmatico ai browser headless tramite Playwright, Puppeteer o Selenium Webdriver. Sono supportati più browser, tra cui Google Chrome headless e Mozilla Firefox. Per ulteriori informazioni su Playwright, consulta [Playwright](https://playwright.dev/). Per ulteriori informazioni su Puppeteer, consulta [Puppeteer](https://developer.chrome.com/docs/puppeteer/). Per ulteriori informazioni su Selenium, consulta [Selenium](https://www.selenium.dev/). I canary su Selenium supportano solo il browser Chrome. I canary in Java sono progettati per garantire la flessibilità nel monitoraggio di qualsiasi tipo di servizio o applicazione e non contengono supporto o framework per il browser.

I canary controllano la disponibilità e la latenza degli endpoint e possono archiviare i dati relativi al tempo di caricamento e le schermate dell'interfaccia utente. Monitorano il REST APIs e il contenuto del sito Web e possono verificare la presenza di modifiche non autorizzate dovute al phishing, all'iniezione di codice e al cross-site scripting. URLs

 CloudWatch Synthetics è integrato [con Application](CloudWatch-Application-Monitoring-Sections.md) Signals, che può scoprire e monitorare i servizi applicativi, i client, i canari Synthetics e le dipendenze dei servizi. Utilizza Application Signals per visualizzare un elenco o una mappa visiva dei tuoi servizi, visualizzare le metriche sanitarie in base agli obiettivi del livello di servizio (SLOs) e approfondire le tracce a raggi X correlate per una risoluzione dei problemi più dettagliata. Per vedere i canary in Application Signals, [attiva il tracciamento attivo X-Ray](CloudWatch_Synthetics_Canaries_tracing.md). I tuoi canary vengono visualizzati nella [mappa dell'applicazione](ServiceMap.md) connessa ai tuoi servizi e nella pagina dei [dettagli del servizio](ServiceDetail.md) relativa ai servizi che chiamano. 

Per una dimostrazione video dei canary, consulta quanto segue:
+  [Introduzione ad Amazon CloudWatch Synthetics](https://www.youtube.com/watch?v=MItluIsvfTo) 
+  [Dimostrazione di Amazon CloudWatch Synthetics](https://www.youtube.com/watch?v=hF3NM9j-u7I) 
+  [Crea canarie usando Amazon CloudWatch Synthetics](https://www.youtube.com/watch?v=DSx65wW7lr0) 
+  [Monitoraggio visivo con Amazon CloudWatch Synthetics](https://www.youtube.com/watch?v=_PCs-ucZz7E) 



Puoi eseguire un canary una volta o a intervalli regolari. I canary possono funzionare con una frequenza di una volta al minuto. Puoi utilizzare espressioni Cron e Rate per programmare i canary.

Per informazioni sui problemi di sicurezza da considerare prima di creare ed eseguire i canary, consulta [Considerazioni sulla sicurezza per Canary Synthetics](servicelens_canaries_security.md). 

Per impostazione predefinita, i canari creano diverse CloudWatch metriche nel namespace. `CloudWatchSynthetics` Questi parametri hanno `CanaryName` come dimensione. Anche i canary che utilizzano la funzione `executeStep()` o `executeHttpStep()` dalla libreria funzioni hanno `StepName` come dimensione. Per ulteriori informazioni sulla libreria di funzioni canary, consulta [Funzioni di libreria disponibili per gli script canary](CloudWatch_Synthetics_Canaries_Function_Library.md).

CloudWatch Synthetics si integra bene con la X-Ray Trace Map, che CloudWatch utilizza AWS X-Ray with per fornire end-to-end una panoramica dei vostri servizi per aiutarvi a individuare in modo più efficiente i punti deboli delle prestazioni e identificare gli utenti interessati. I canarini creati con CloudWatch Synthetics vengono visualizzati sulla mappa di tracciamento. Per ulteriori informazioni sul tracciamento con X-Ray, consulta [Mappa di tracciamento X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-console-servicemap.html). 

CloudWatch Synthetics è attualmente disponibile in tutte le regioni AWS commerciali e le regioni. GovCloud

**Nota**  
In Asia Pacifico (Osaka), non AWS PrivateLink è supportato. In Asia Pacifico (Jakarta), AWS PrivateLink e X-Ray non sono supportati.

**Topics**
+ [Ruoli e autorizzazioni richiesti per i canarini CloudWatch](CloudWatch_Synthetics_Canaries_Roles.md)
+ [Creazione di un Canary](CloudWatch_Synthetics_Canaries_Create.md)
+ [Gruppi](CloudWatch_Synthetics_Groups.md)
+ [Test di un canary in locale](CloudWatch_Synthetics_Debug_Locally.md)
+ [Risoluzione dei problemi di un canary fallito](CloudWatch_Synthetics_Canaries_Troubleshoot.md)
+ [Codice di esempio per gli script canary](CloudWatch_Synthetics_Canaries_Samples.md)
+ [Canary e tracciamento X-Ray](CloudWatch_Synthetics_Canaries_tracing.md)
+ [Esecuzione di un Canary su un VPC](CloudWatch_Synthetics_Canaries_VPC.md)
+ [Crittografia di artefatti canary](CloudWatch_Synthetics_artifact_encryption.md)
+ [Visualizzazione delle statistiche e dei dettagli dei Canary](CloudWatch_Synthetics_Canaries_Details.md)
+ [CloudWatch metriche pubblicate da canaries](CloudWatch_Synthetics_Canaries_metrics.md)
+ [Modifica o eliminazione di un canary](synthetics_canaries_deletion.md)
+ [Avvio, interruzione, eliminazione o aggiornamento del runtime di più canary](synthetics_canaries_multi-action.md)
+ [Monitoraggio degli eventi delle Canarie con Amazon EventBridge](monitoring-events-eventbridge.md)
+ [Esecuzione di aggiornamenti sicuri sul canary](performing-safe-canary-upgrades.md)

# Ruoli e autorizzazioni richiesti per i canarini CloudWatch
<a name="CloudWatch_Synthetics_Canaries_Roles"></a>

Sia gli utenti che creano e gestiscono i canary che i canary stessi devono disporre di determinate autorizzazioni.

# Ruoli e autorizzazioni richiesti per gli utenti che gestiscono i canarini CloudWatch
<a name="CloudWatch_Synthetics_Canaries_UserPermissions"></a>

Per visualizzare i dettagli dei canary e i risultati delle esecuzioni dei canary, è necessario accedere come utente con le policy `CloudWatchSyntheticsFullAccess` o ` CloudWatchSyntheticsReadOnlyAccess` collegate. Per leggere tutti i dati Synthetics nella console, sono necessarie anche le policy IAM `AmazonS3ReadOnlyAccess`e ` CloudWatchReadOnlyAccess`. Per visualizzare il codice sorgente utilizzato dai canary, è necessaria anche la policy `AWSLambda_ReadOnlyAccess`.

Per creare i canary, è necessario eseguire l'accesso come utente che dispone della policy ` CloudWatchSyntheticsFullAccess` o di un insieme di autorizzazioni simile. Per creare ruoli IAM per i canary, è necessaria anche la seguente istruzione sulle policy inline:

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

------

**Importante**  
Se si concedono a un utente le autorizzazioni ` iam:AttachRolePolicy`, `iam:CreateRole` e `iam:CreatePolicy`, questo disporrà dell'accesso amministrativo completo all'account AWS . Ad esempio, un utente con queste autorizzazioni può creare una policy che dispone di autorizzazioni complete per tutte le risorse e collegare tale policy a qualsiasi ruolo. Presta molta attenzione a chi concedi queste autorizzazioni.

Per informazioni su come collegare policy e concedere autorizzazioni a utenti, consulta [Modifica delle autorizzazioni per un utente IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) e [Per incorporare una policy inline per un utente o un ruolo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#embed-inline-policy-console).

# Ruoli e autorizzazioni richiesti per i canary
<a name="CloudWatch_Synthetics_Canaries_CanaryPermissions"></a>

Ogni canary deve essere associato a un ruolo IAM con determinate autorizzazioni collegate. Quando crei un canarino utilizzando la CloudWatch console, puoi scegliere che CloudWatch Synthetics crei un ruolo IAM per il canarino. In questo modo, il ruolo avrà le autorizzazioni necessarie.

Se desideri creare tu stesso il ruolo IAM o creare un ruolo IAM da utilizzare quando usi AWS CLI o APIs per creare un canary, il ruolo deve contenere le autorizzazioni elencate in questa sezione.

Tutti i ruoli IAM per i canary devono includere la seguente istruzione sulle policy di attendibilità.

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

****  

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

------

Inoltre, per il ruolo IAM del canary è necessaria una delle seguenti istruzioni.

 **Canary di base che non utilizza AWS KMS o non richiede l'accesso ad 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 che utilizza AWS KMS per crittografare gli artefatti dei canarini ma non necessita dell'accesso ad 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 che non utilizza AWS KMS ma necessita dell'accesso ad 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 che utilizza AWS KMS per crittografare gli artefatti dei canarini e necessita anche dell'accesso ad Amazon VPC** 

Se aggiorni un canary non VPC per iniziare a utilizzare un VPC, devi aggiornare il ruolo del canary per includere le autorizzazioni dell'interfaccia di rete elencate nella seguente policy.

------
#### [ 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 politiche gestite per CloudWatch Synthetics
<a name="CloudWatch_Synthetics_IAMManagedPolicies"></a>

Per aggiungere autorizzazioni a utenti, gruppi e ruoli, è più facile utilizzare le policy AWS gestite che scriverle da soli. La creazione di policy gestite dai clienti IAM che forniscono al team solo le autorizzazioni di cui ha bisogno richiede tempo e competenza. Per iniziare rapidamente, puoi utilizzare le nostre politiche AWS gestite. Queste politiche coprono casi d'uso comuni e sono disponibili nel tuo AWS account. Per ulteriori informazioni sulle policy AWS gestite, consulta [AWS Managed Policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) AWS managed policy nella IAM User Guide.

AWS i servizi mantengono e aggiornano le politiche AWS gestite. Non è possibile modificare le autorizzazioni nelle politiche AWS gestite. I servizi modificano occasionalmente le autorizzazioni in una policy gestita da AWS . Questo tipo di aggiornamento interessa tutte le identità (utenti, gruppi e ruoli) a cui è collegata la policy.

### CloudWatch Synthetics: aggiornamenti alle politiche gestite AWS
<a name="CloudWatch_Synthetics_IAMManagedPolicies_Updates"></a>

Visualizza i dettagli sugli aggiornamenti delle politiche AWS gestite per CloudWatch Synthetics da quando questo servizio ha iniziato a tenere traccia di queste modifiche. Per ricevere avvisi automatici sulle modifiche a questa pagina, iscriviti al feed RSS nella pagina della cronologia dei CloudWatch documenti. 


| Modifica | Descrizione | Data | 
| --- | --- | --- | 
|  Azioni ridondanti rimosse da **CloudWatchSyntheticsFullAccess**  |  CloudWatch Synthetics ha rimosso le azioni ` lambda:GetLayerVersionByArn` and `s3:PutBucketEncryption` ** CloudWatchSyntheticsFullAccess**dalla policy perché tali azioni erano ridondanti rispetto ad altre autorizzazioni della policy. Le operazioni rimosse non hanno fornito alcuna autorizzazione e non vi è alcuna modifica netta alle autorizzazioni concesse dalla policy.  | 12 marzo 2021 | 
|  CloudWatch Synthetics ha iniziato a tracciare le modifiche  |  CloudWatch Synthetics ha iniziato a tenere traccia delle modifiche per AWS le sue politiche gestite.  | 10 marzo 2021 | 

 **CloudWatchSyntheticsFullAccess** 

Ecco i contenuti della policy `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** 

Ecco i contenuti della policy `CloudWatchSyntheticsReadOnlyAccess`:

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

****  

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

------

# Limitazione di un utente alla visualizzazione dei canary specifici
<a name="CloudWatch_Synthetics_Canaries_Restricted"></a>

È possibile limitare la capacità di un utente di visualizzare le informazioni sui canary, in modo che possano visualizzare solo le informazioni sui canary specificati. Per fare ciò, utilizza una policy IAM con un istruzione ` Condition` simile alla seguente e collega questa policy a un utente IAM o ruolo IAM.

L'esempio seguente limita l'utente a visualizzare solo le informazioni su ` name-of-allowed-canary-1` e `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 supporta l'elenco di fino a cinque elementi nell'array. `synthetics:Names`

Puoi anche creare una policy che utilizza un \$1** come carattere jolly nei nomi canary che è necessario consentire, come nell'esempio seguente:

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

****  

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

------

Qualsiasi utente che ha effettuato l'accesso con una di queste politiche allegate non può utilizzare la CloudWatch console per visualizzare le informazioni sulle isole Canarie. [Possono visualizzare le informazioni sui canari solo per i canarini autorizzati dalla politica e solo utilizzando l'[DescribeCanaries](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_DescribeCanaries.html)API o il comando describe-canaries.](https://docs.aws.amazon.com/cli/latest/reference/synthetics/describe-canaries.html) AWS CLI 

# Creazione di un Canary
<a name="CloudWatch_Synthetics_Canaries_Create"></a>

**Importante**  
Assicurati di utilizzare Synthetics Canaries per monitorare solo gli endpoint APIs e dove hai la proprietà o le autorizzazioni. In base alle impostazioni di frequenza del canary, per questi endpoint può verificarsi un aumento del traffico.

Quando usi la CloudWatch console per creare un canarino, puoi usare un progetto fornito da CloudWatch per creare il tuo canarino oppure puoi scrivere il tuo script. Per ulteriori informazioni, consulta [Utilizzo dei blueprint dei canary](CloudWatch_Synthetics_Canaries_Blueprints.md).

Puoi anche creare un canarino usando CloudFormation uno script personalizzato per il canarino. Per ulteriori informazioni, consulta [ AWS::Synthetics::Canary](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-synthetics-canary.html)la Guida per l'*AWS CloudFormation utente*.

Se stai scrivendo il tuo script, puoi usare diverse funzioni che CloudWatch Synthetics ha integrato in una libreria. Per ulteriori informazioni, consulta [Versioni di runtime Synthetics](CloudWatch_Synthetics_Canaries_Library.md).

**Nota**  
Quando crei un canary, uno dei livelli creati è un livello Synthetics, preceduto dal prefisso ` Synthetics`. Questo livello è di proprietà dell'account del servizio Synthetics e contiene il codice di runtime.

**Come creare un canary**

1. Apri la CloudWatch console all'indirizzo. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)

1. Nel pannello di navigazione, scegli **Application Signals**, **Canary di Synthetics**.

   

1. Scegli **Create Canary** (Crea Canary).

1. Scegli una delle seguenti opzioni:
   + Per basare il canary su uno script di blueprint, scegli **Use a blueprint** (Usa un blueprint), quindi scegli il tipo di canary che desideri creare. Per ulteriori informazioni sulle attività di ciascun tipo di blueprint, consulta [Utilizzo dei blueprint dei canary](CloudWatch_Synthetics_Canaries_Blueprints.md).
   + Per caricare il tuo script Node.js per creare un Canary personalizzato, scegli **Upload a script** (Carica uno script).

     Puoi quindi trascinare lo script in **Script** o scegliere **Browse files** (Sfoglia file) per passare allo script nel file system.
   + Per importare lo script da un bucket S3, scegli **Import from S3** (Importa da S3). Quindi, in **Source location** (Posizione origine), digita il percorso completo al canary o scegli **Browse S3** (Sfoglia S3).

     È necessario disporre delle autorizzazioni `s3:GetObject` e `s3:GetObjectVersion` per il bucket S3 in uso. Il bucket deve trovarsi nella stessa regione AWS in cui stai creando il Canary.

1. In **Name** (Nome), immetti un nome per il Canary. Il nome viene utilizzato in molte pagine, pertanto è consigliabile assegnare un nome descrittivo che lo distingua da altri canary creati.

1. In **Application or endpoint URL** (URL applicazione o endpoint), immetti l'URL che il Canary deve testare. Questo URL deve includere il protocollo (ad esempio https://).

   Se si desidera che il canary esegua il test di un endpoint su un VPC, è inoltre necessario immettere le informazioni sul VPC più avanti in questa procedura. 

1. Se utilizzi il tuo script per il canary, in **Lambda handler** (Gestore Lambda), immetti il punto d'ingresso da cui avviare il canary. Per informazioni sul formato del gestore Lambda, consulta [Versioni di runtime Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library.html).

1. In **Editor script**, **Versione di runtime**, seleziona una versione di runtime Synthetics per eseguire il canary. Per informazioni sulle versioni di runtime Synthetics, consulta [Versioni di runtime Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library.html).

   In **Configurazione del browser**, puoi abilitare il browser per testare il canary. È necessario selezionare almeno un browser.

1. Se utilizzi variabili di ambiente nello script, scegli **Environment variables** (Variabili di ambiente) e specifica un valore per ciascuna variabile di ambiente definita nello script. Per ulteriori informazioni, consulta [Variabili di ambiente](CloudWatch_Synthetics_Canaries_WritingCanary_Nodejs_Pup.md#CloudWatch_Synthetics_Environment_Variables).

1. In **Schedule** (Pianifica), scegli se eseguire questo canary una volta, continuamente utilizzando un'espressione Rate o utilizzando un'espressione Cron.
   + Quando usi la CloudWatch console per creare un canarino che funzioni ininterrottamente, puoi scegliere una frequenza compresa tra una volta al minuto e una volta all'ora.
   + Per ulteriori informazioni sulla scrittura di un'espressione Cron per la pianificazione del canary, consulta [Pianificazione delle esecuzioni di canary usando cron](CloudWatch_Synthetics_Canaries_cron.md).

1. (Facoltativo) Per impostare un valore di timeout per il canary, scegli **Additional configuration** (Configurazione aggiuntiva), quindi specificare il valore di timeout. Non più breve di 15 secondi per consentire l'avvio a freddo Lambda e il tempo necessario per avviare la strumentazione canary.

1. In **Data retention** (Conservazione dei dati), specifica per quanto tempo conservare le informazioni relative a esecuzioni Canary non riuscite e riuscite. L'intervallo è 1-455 giorni.

   Questa impostazione influisce sulla gamma di informazioni restituite dalle [GetCanaryRuns](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_GetCanaryRuns.html)operazioni, nonché sulla gamma di informazioni visualizzate nella console Synthetics.

   Non influisce sui dati memorizzati nei bucket Amazon S3 o su registri o parametri pubblicati dal Canary.

   Indipendentemente dal periodo di conservazione dei dati dei canary, l'intervallo di informazioni visualizzato nella console presenta determinati limiti. Nella visuale home della console Synthetics, l'intervallo di tempo relativo e assoluto è limitato a sette giorni. Nella visuale della console Synthetics per un canary specifico, l'intervallo di tempo relativo è limitato a sette giorni e l'intervallo di tempo assoluto è limitato a 30 giorni.

1. In **Archiviazione di dati**, seleziona il bucket Amazon S3 da utilizzare per archiviare i dati delle esecuzioni canary. Il nome del bucket non può contenere un punto (.). Se lo lasci vuoto, verrà utilizzato o creato un bucket Amazon S3 predefinito.

1. (Facoltativo) Per impostazione predefinita, i canarini archiviano i propri artefatti su Amazon S3 e gli artefatti vengono crittografati quando sono inattivi utilizzando una chiave gestita. AWS AWS KMS È possibile utilizzare un'opzione di crittografia diversa scegliendo **Configurazione aggiuntiva** nella sezione **Archiviazione dati**. È quindi possibile scegliere il tipo di chiave da utilizzare per la crittografia. Per ulteriori informazioni, consulta [Crittografia di artefatti canary](CloudWatch_Synthetics_artifact_encryption.md). 

1. In **Access permissions** (Autorizzazioni di accesso), scegli se creare un nuovo ruolo IAM per eseguire il canary o usarne uno esistente.

   Se il ruolo è stato CloudWatch creato da Synthetics, include automaticamente tutte le autorizzazioni necessarie. Se si desidera creare personalmente il ruolo, consulta [Ruoli e autorizzazioni richiesti per i canary](CloudWatch_Synthetics_Canaries_CanaryPermissions.md) per ottenere informazioni sulle autorizzazioni necessarie.

   Se usi la CloudWatch console per creare un ruolo per un canarino quando crei il canarino, non puoi riutilizzare il ruolo per altri canarini, perché questi ruoli sono specifici per un solo canarino. È possibile utilizzare un ruolo esistente solo se è stato creato manualmente un ruolo che funziona per più canary.

   Per utilizzare un ruolo esistente, è necessario disporre dell' autorizzazione `iam:PassRole` per passare tale ruolo a Synthetics e Lambda. Devi anche avere l'autorizzazione `iam:GetRole`.

1. (Facoltativo) In **Allarmi**, scegliere se creare allarmi CloudWatch predefiniti per questo canary. Se scegli di creare allarmi, questi vengono creati con la seguente convenzione di denominazione: `Synthetics-Alarm-canaryName -index `

   `index` è un numero che rappresenta ogni allarme creato per questo canary. Il primo allarme ha un indice di 1, il secondo allarme ha un indice di 2 e così via.

1. Per fare in modo che questo canary verifichi un endpoint che si trova su un VPC, scegli **VPC settings** (Impostazioni VPC) e procedi come segue:

   1. Seleziona il VPC che ospita l'endpoint.

   1. Seleziona una o più sottoreti nel VPC. È necessario selezionare una sottorete privata perché l'istanza Lambda non può essere configurata per l'esecuzione in una sottorete pubblica quando non è possibile assegnare un indirizzo IP all'istanza Lambda durante l'esecuzione. Per ulteriori informazioni, consulta [Configurazione di una funzione Lambda per accedere alle risorse in un VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html).

   1. Seleziona uno o più gruppi di sicurezza nel VPC.

   1. **Per consentire il traffico in uscita per questo canarino, seleziona Consenti IPv6 traffico per sottoreti dual-stack. IPv6** Ciò consente a Canary di monitorare IPv6 gli endpoint solo e abilitati al dual stack. IPv6

      Puoi monitorare gli endpoint esterni al tuo VPC fornendo al canary l'accesso a Internet e configurando le sottoreti VPC in modo appropriato. Per ulteriori informazioni, consulta [Esecuzione di un Canary su un VPC](CloudWatch_Synthetics_Canaries_VPC.md).

   Se l'endpoint si trova su un VPC, devi abilitare il tuo canary a inviare informazioni ad CloudWatch Amazon S3. Per ulteriori informazioni, consulta [Esecuzione di un Canary su un VPC](CloudWatch_Synthetics_Canaries_VPC.md).

1. (Facoltativo) In **Tags** (Tag), aggiungere facoltativamente una o più coppie chiave/valore come tag per questo canary. I tag possono aiutarti a identificare e organizzare le tue AWS risorse e tenere traccia dei costi. AWS Per ulteriori informazioni, consulta [Assegnazione di tag alle risorse Amazon CloudWatch](CloudWatch-Tagging.md).

   Se vuoi che i tag che applichi al canary vengano applicati anche alla funzione Lambda utilizzata dal canary, scegli la funzione **Lambda** in **Replica dei tag**. Se scegli questa opzione, CloudWatch Synthetics manterrà sincronizzati i tag sul canarino e la funzione Lambda:
   + Synthetics applicherà gli stessi tag che specifichi qui sia al tuo canary che alla tua funzione Lambda.
   + Se successivamente aggiorni i tag del canary e mantieni selezionata questa opzione, Synthetics modificherà i tag sulla tua funzione Lambda affinché rimangano sincronizzati con il canary. 

1. (Facoltativo) In **Active tracing** (Tracciamento attivo) scegli se abilitare il tracciamento attivo con X-Ray per questo canary. Il tracciamento attivo è disponibile solo per i runtime Puppeteer e Java. Per ulteriori informazioni, consulta [Canary e tracciamento X-Ray](CloudWatch_Synthetics_Canaries_tracing.md).

## Risorse create per Canary
<a name="CloudWatch_Synthetics_Canaries_Resources_Created"></a>

Quando crei un canary, vengono create le seguenti risorse:
+ Un ruolo IAM con il nome `CloudWatchSyntheticsRole-canary-name -uuid` (se usi la CloudWatch console per creare il canarino e specifichi che deve essere creato un nuovo ruolo per il canarino)
+ Una policy IAM con il nome `CloudWatchSyntheticsPolicy- canary-name-uuid`.
+ Un bucket S3 con il nome `cw-syn-results-accountID -region`.
+ Allarmi con il nome `Synthetics-Alarm-MyCanaryName` (se specifichi gli allarmi da creare per il canary)
+ Funzioni Lambda e livelli, se utilizzi un piano per creare il Canary. Queste risorse hanno il prefisso `cwsyn-MyCanaryName`.
+ CloudWatch Registra i gruppi di log con il nome. `/aws/lambda/cwsyn-MyCanaryName -randomId`

# Utilizzo dei blueprint dei canary
<a name="CloudWatch_Synthetics_Canaries_Blueprints"></a>

Questa sezione fornisce dettagli su ciascuno dei blueprint dei canary e sulle attività per cui il blueprint è più adatto. I piani sono forniti per i seguenti tipi di Canary: 

**Topics**
+ [Monitoraggio dell'heartbeat](#CloudWatch_Synthetics_Canaries_Blueprints_Heartbeat)
+ [Canary API](#CloudWatch_Synthetics_Canaries_Blueprints_API)
+ [Controllo collegamento interrotto](#CloudWatch_Synthetics_Canaries_Blueprints_Broken_Links)
+ [Blueprint di monitoraggio visivo](#CloudWatch_Synthetics_Canaries_Blueprints_VisualTesting)
+ [Registratore di Canary](#CloudWatch_Synthetics_Canaries_Blueprints_Recorder)
+ [Generatore di flussi di lavoro GUI](#CloudWatch_Synthetics_Canaries_Blueprints_GUI_Workflow)
+ [Blueprint con controlli multipli](#CloudWatch_Synthetics_Canaries_Blueprints_Multichecks_Blueprint)
+ [Creazione di un blueprint con controlli multipli canary](CloudWatch_Synthetics_Canaries_MultiCheck_Blueprint.md)

Quando si utilizza un blueprint per creare un canary, mentre si compilano i campi nella console CloudWatch, l'area **Editor script** della pagina visualizza il canary che si sta creando come script Node.js. Puoi anche modificare il canary in quest'area per personalizzarlo ulteriormente.

## Monitoraggio dell'heartbeat
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Heartbeat"></a>

Gli script Hearbeat caricano l'URL specificato e memorizzano uno screenshot della pagina e un file di archivio HTTP (file HAR). Inoltre memorizzano i log degli accessi. URLs 

È possibile utilizzare i file HAR per visualizzare dati dettagliati sulle prestazioni delle pagine Web. Puoi analizzare l'elenco delle richieste Web e rilevare problemi di prestazioni, ad esempio il tempo di caricamento di un elemento.

Se il tuo canary utilizza la versione di runtime `syn-nodejs-puppeteer-3.1` o una versione successiva, puoi utilizzare il blueprint di monitoraggio del battito cardiaco per monitorarne più URLs e visualizzare lo stato, la durata, le schermate associate e il motivo dell'errore di ciascun URL nel riepilogo dei passaggi del rapporto Canary Run.

## Canary API
<a name="CloudWatch_Synthetics_Canaries_Blueprints_API"></a>

I canary API possono testare le funzioni di lettura e scrittura di base di una REST API. REST sta per *trasferimento di stato rappresentativo* ed è un insieme di regole che gli sviluppatori seguono durante la creazione di un'API. Una di queste regole afferma che un collegamento a un URL specifico deve restituire una parte di dati.

Canaries può funzionare con qualsiasi tipo di funzionalità APIs e testarne tutti i tipi. Ogni canary può effettuare più chiamate API.

Nei canari che utilizzano una versione runtime `syn-nodejs-2.2` o successiva, l'API Canary Blueprint supporta canary in più fasi che monitorano i passaggi HTTP. APIs Puoi testarne più APIs di uno in un unico canarino. Ogni passaggio è una richiesta separata che può accedere a un URL diverso, utilizzare intestazioni diverse e utilizzare regole diverse per l'acquisizione di intestazioni e corpi di risposta. Non catturando intestazioni e corpo della risposta, è possibile impedire la registrazione di dati sensibili. 

Ogni richiesta in un canary dell'API comprende le seguenti informazioni:
+ L'*endpoint*, ovvero l'URL richiesto.
+ Il *metodo*, che è il tipo di richiesta che viene inviata al server. REST APIs supporta le operazioni GET (lettura), POST (scrittura), PUT (aggiornamento), PATCH (aggiornamento) e DELETE (eliminazione).
+ Le *intestazioni*, che forniscono informazioni sia al client che al server. Vengono utilizzate per l'autenticazione e per fornire informazioni sul contenuto del corpo. Per un elenco di intestazioni valide, consulta [Intestazioni HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers).
+ I *dati* (o *corpo*), che contengono informazioni da inviare al server. Questo viene utilizzato solo per le richieste POST, PUT, PATCH o DELETE.

**Nota**  
I blueprint dei canary API non sono supportati dai runtime di Playwright.

Il blueprint del canary API supporta i metodi GET e POST. Quando utilizzi questo blueprint, devi specificare le intestazioni. Ad esempio, è possibile specificare **Authorization** come **chiave** e specificare i dati di autorizzazione necessari come **valore** per quella chiave.

Se stai testando una richiesta POST, specifichi anche il contenuto da pubblicare nel campo **Dati**.

 **Integrazione con API Gateway** 

Il blueprint API è integrato con Amazon API Gateway. Ciò ti consente di selezionare un'API Gateway API e lo stage dallo stesso AWS account e dalla stessa regione di Canary, oppure di caricare un modello Swagger da API Gateway per il monitoraggio delle API tra account e regioni diverse. Puoi quindi scegliere il resto dei dettagli nella console per creare il canary, invece di inserirli da zero. Per ulteriori informazioni su API Gateway, consulta [Che cos'è Amazon API Gateway?](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) 

 **Utilizzo di un'API privata** 

È possibile creare un canary che utilizzi un'API privata in Amazon API Gateway. Per ulteriori informazioni, consulta la pagina [Creazione di un'API privata in Amazon API Gateway?](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html)

## Controllo collegamento interrotto
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Broken_Links"></a>

Il controllo dei collegamenti interrotti raccoglie tutti i collegamenti all'interno dell'URL che si sta testando tramite `document.getElementsByTagName('a')`. Verifica solo fino al numero di collegamenti specificato e l'URL stesso viene conteggiato come primo collegamento. Ad esempio, se si desidera controllare tutti i collegamenti in una pagina contenente cinque collegamenti, è necessario specificare che il canary segua sei collegamenti.

I canary di controllo del collegamento interrotto creati utilizzando la versione runtime `syn-nodejs-2.0-beta` o versioni successive supportano le caratteristiche aggiuntive elencate di seguito:
+ Fornisce un report che include i collegamenti controllati, il codice di stato, il motivo dell'errore (se presente) e le schermate della pagina di origine e di destinazione.
+ Quando si visualizzano i risultati del canary, è possibile filtrarli per visualizzare solo i collegamenti interrotti e quindi correggere il collegamento in base al motivo dell'errore.
+ Questa versione cattura screenshot della pagina sorgente annotata per ogni collegamento ed evidenzia l'ancoraggio in cui è stato trovato il collegamento. I componenti nascosti non vengono annotati.
+ Puoi configurare questa versione per acquisire screenshot di entrambe le pagine di origine e di destinazione, solo pagine di origine o solo pagine di destinazione.
+ Questa versione risolve un problema nella versione precedente in cui lo script canary si interrompe dopo il primo collegamento interrotto anche quando più collegamenti vengono estratti dalla prima pagina.

**Nota**  
I blueprint del controllo dei collegamenti non funzionanti non sono supportati dai runtime di Playwright.

Se si desidera aggiornare un canary esistente attraverso `syn-1.0` per utilizzare il nuovo runtime, è necessario eliminare e ricreare il canary. L'aggiornamento di un canary esistente al nuovo runtime non rende disponibili queste funzionalità.

Un canary di controllo del collegamento interrotto rileva i seguenti tipi di errori di collegamento:
+ 404 Pagina non trovata
+ Nome host non valido
+ URL errato. Ad esempio, nell'URL manca una parentesi, ha barre aggiuntive o è il protocollo sbagliato.
+ Codice di risposta HTTP non valido.
+ Il server host restituisce risposte vuote senza contenuto e senza codice di risposta.
+ Le richieste HTTP vanno costantemente in timeout durante l'esecuzione del canary.
+ L'host elimina costantemente le connessioni perché non è configurato correttamente o è troppo occupato.

## Blueprint di monitoraggio visivo
<a name="CloudWatch_Synthetics_Canaries_Blueprints_VisualTesting"></a>

Il blueprint di monitoraggio visivo include il codice per confrontare gli screenshot acquisiti durante un'esecuzione del canary con gli screenshot acquisiti durante un'esecuzione del canary di riferimento. Se la discrepanza tra i due screenshot supera una percentuale di soglia, il canary fallisce. Il monitoraggio visivo è supportato nei canari con versione **syn-puppeteer-node-3.2** e versioni successive. Attualmente non è supportato nei canary che eseguono Python e Selenium, o che utilizzano i runtime Playwright.

Il blueprint di monitoraggio visivo include la seguente riga di codice nello script canary del blueprint predefinito, che consente il monitoraggio visivo.

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

La prima volta che il canary viene eseguito correttamente dopo che questa riga è stata aggiunta allo script, utilizza gli screenshot acquisiti durante l'esecuzione come riferimento per il confronto. Dopo la prima esecuzione del canarino, puoi usare la CloudWatch console per modificare il canarino per eseguire una delle seguenti operazioni:
+ Imposta l'esecuzione successiva del canary come nuovo riferimento.
+ Disegna dei limiti sullo screenshot di riferimento corrente per designare le aree dello screenshot da ignorare durante i confronti visivi.
+ Rimuovi uno screenshot dall'utilizzo per il monitoraggio visivo.

Per ulteriori informazioni sull'utilizzo della CloudWatch console per modificare un canarino, consulta. [Modifica o eliminazione di un canary](synthetics_canaries_deletion.md)

Puoi anche modificare la canary run utilizzata come linea di base utilizzando i `lastrun` parametri ` nextrun` o o specificando un ID Canary Run nell'API. [UpdateCanary](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_UpdateCanary.html)

Quando utilizzi il blueprint di monitoraggio visivo, immetti l'URL in cui desideri acquisire lo screenshot e specifica una soglia di differenza come percentuale. Dopo l'esecuzione di riferimento, le esecuzioni future del canary che rilevano una differenza visiva maggiore di quella soglia attivano un errore del canary. Dopo l'esecuzione di riferimento, puoi anche modificare il canary per “disegnare” i limiti sullo screenshot della linea di base che desideri ignorare durante il monitoraggio visivo.

La funzionalità di monitoraggio visivo è alimentata dal toolkit software ImageMagick open source. Per ulteriori informazioni, vedere [ ImageMagick](https://imagemagick.org/index.php).

## Registratore di Canary
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Recorder"></a>

Con il progetto Canary Recorder, è possibile utilizzare CloudWatch Synthetics Recorder per registrare le azioni di clic e digitazione su un sito Web e generare automaticamente uno script Node.js che può essere utilizzato per creare un canarino che segue gli stessi passaggi. CloudWatchSynthetics Recorder è un'estensione di Google Chrome fornita da Amazon. Il registratore di canary non è supportato per i canary che utilizzano il runtime Playwright.

**Crediti**[: Il CloudWatch Synthetics Recorder è basato sul registratore Headless.](https://github.com/checkly/headless-recorder)

Per ulteriori informazioni, consulta [Utilizzo del CloudWatch Synthetics Recorder per Google Chrome](CloudWatch_Synthetics_Canaries_Recorder.md).

## Generatore di flussi di lavoro GUI
<a name="CloudWatch_Synthetics_Canaries_Blueprints_GUI_Workflow"></a>

Il blueprint di GUI Workflow Builder verifica che le azioni possono essere eseguite nella pagina Web. Ad esempio, se si dispone di una pagina Web con un modulo di accesso, il canary può compilare i campi utente e password e inviare il modulo per verificare che la pagina Web funzioni correttamente.

Quando utilizzi un blueprint per creare questo tipo di canary, si specificano le azioni che si desidera che il canary esegua nella pagina Web. Le azioni che è possibile utilizzare sono le seguenti:
+ **Click** (Fai clic): seleziona l'elemento specificato e simula un utente che fa clic o sceglie l'elemento.

  Per specificare l'elemento in uno script Node.js, utilizza `[id=]` o ` a[class=]`.

  Per specificare l'elemento in uno script Python, utilizza `xpath //*[@id=]` o ` //*[@class=]`.
+ **Verify selector** (Verifica selettore): verifica che l'elemento specificato esista nella pagina Web. Questo test è utile per verificare che un'azione precedente ha permesso agli elementi corretti di popolare la pagina.

  Per specificare l'elemento per verificare uno script Node.js, utilizza `[id=]` o ` a[class=]`.

  Per specificare l'elemento per verificare uno script Python, utilizza `xpath //*[@id=]` o `//*[class=]`.
+ **Verify text** (Verifica testo): verifica che la stringa specificata sia contenuta all'interno dell'elemento di destinazione. Questo test è utile per verificare che un'azione precedente abbia portato alla visualizzazione del testo corretto.

  Per specificare l'elemento un uno script Node.js, utilizza un formato ad esempio ` div[@id=]//h1`, perché questa azione utilizza la funzione `waitForXPath` in Puppeteer.

  Per specificare l'elemento in uno script Python, utilizza il formato xpath ad esempio ` //*[@id=] ` o //\$1[@class=] perché questa azione utilizza la funzione `implicitly_wait` in Selenium.
+ **Input text** (Testo di input): scrive il testo specificato nell'elemento di destinazione.

  Per specificare l'elemento per verificare uno script Node.js, utilizza `[id=]` o ` a[class=]`.

  Per specificare l'elemento per verificare uno script Python, utilizza `xpath //*[@id=]` o `//*[@class=]`.
+ **Click with navigation** (Fai clic con la navigazione): attende il caricamento dell'intera pagina dopo aver scelto l'elemento specificato. Questo è molto utile quando è necessario ricaricare la pagina.

  Per specificare l'elemento in uno script Node.js, utilizza `[id=]` o ` a[class=]`.

  Per specificare l'elemento in uno script Python, utilizza `xpath //*[@id=]` o ` //*[@class=]`.

Ad esempio, il blueprint riportato di seguito utilizza Node.js. Fa clic sul pulsante **firstButton** nell'URL specificato, verifica che venga visualizzato il selettore previsto con il testo previsto, immette il nome `Test_Customer` nel campo **Name** (Nome), fa clic sul pulsante **Login** (Accedi) e verifica quindi che l'accesso abbia esito positivo controllando il testo di **benvenuto** nella pagina successiva.

![\[La pagina di creazione del canary nella console, con i campi compilati per il blueprint del flusso di lavoro GUI.\]](http://docs.aws.amazon.com/it_it/AmazonCloudWatch/latest/monitoring/images/canary_create_gui_workflow.PNG)


I canary del flusso di lavoro GUI che utilizzano i seguenti runtime forniscono anche un riepilogo dei passaggi eseguiti per ogni esecuzione del canary. Puoi utilizzare le schermate e il messaggio di errore associati a ogni passaggio per trovare la causa principale dell'errore.
+ `syn-nodejs-2.0` o versione successiva
+ `syn-python-selenium-1.0` o versione successiva

## Blueprint con controlli multipli
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Multichecks_Blueprint"></a>

Il modello Multi check semplifica la creazione di canarini. Riduce i costi utilizzando una semplice configurazione JSON che fornisce out-of-the-box funzionalità per eseguire controlli HTTP, DNS, SSL e TCP. È possibile configurare fino a 10 controlli. Configura ogni controllo come un passaggio numerico che viene eseguito in sequenza, per una chiara comprensione del flusso delle canarie.

I blueprint multi-check supportano:
+ Richieste HTTP di base, richieste TCP, convalida dei record DNS e monitoraggio dei certificati SSL
+ Metodi di autenticazione HTTP come Basic, API Key e Sigv4 integrati con Secrets Manager OAuth
+ Asserzioni per ogni controllo

Per ulteriori informazioni, consulta [Creazione di un Canary](CloudWatch_Synthetics_Canaries_Create.md).

# Creazione di un blueprint con controlli multipli canary
<a name="CloudWatch_Synthetics_Canaries_MultiCheck_Blueprint"></a>

Il blueprint multi check di Amazon CloudWatch Synthetics ti aiuta a creare un canary Synthetics fornendo una semplice configurazione JSON. Puoi risparmiare sui costi raggruppando fino a 10 diversi tipi di controlli in modo sequenziale basato su fasi. HTTP/DNS/SSL/TCP Ogni controllo include asserzioni che forniscono una verifica di base rispetto al risultato di un controllo.

Multi check canaries è progettato per casi d'uso semplici che richiedono solo controlli di base senza un browser headless. Per casi d'uso più complessi, consulta gli altri tipi di canarino forniti da Amazon CloudWatch Synthetics.

**Topics**
+ [Prerequisiti](#CloudWatch_Synthetics_MultiCheck_Prerequisites)
+ [Limitazioni](#CloudWatch_Synthetics_MultiCheck_Limitations)
+ [Struttura del pacchetto, schema JSON e impostazioni di configurazione](#CloudWatch_Synthetics_MultiCheck_Packaging)
+ [Creazione di un canarino a controllo multiplo in Console di gestione AWS](#CloudWatch_Synthetics_MultiCheck_Console)
+ [Creazione di un canarino a controllo multiplo usando Synthetics AWS APIs](#CloudWatch_Synthetics_MultiCheck_API)
+ [Creazione di un canarino a controllo multiplo in CloudFormation](#CloudWatch_Synthetics_MultiCheck_CloudFormation)
+ [Configurazione di autenticazione](#CloudWatch_Synthetics_MultiCheck_Authentication)
+ [Risoluzione dei problemi](#CloudWatch_Synthetics_MultiCheck_Troubleshooting)

## Prerequisiti
<a name="CloudWatch_Synthetics_MultiCheck_Prerequisites"></a>
+ È necessario utilizzare syn-nodejs-3.0\$1 per creare un canarino a controllo multiplo
+ Quando si utilizza la configurazione di Authentication and Secrets Manager, è necessario assicurarsi che il canary [ ExecutionRoleArn](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_CreateCanary.html)consenta le autorizzazioni per accedere a questi segreti
+ Quando si utilizza Authentication for Sigv4, è necessario assicurarsi che il canarino [ ExecutionRoleArn](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_CreateCanary.html)consenta le autorizzazioni per accedere al ruolo correlato

## Limitazioni
<a name="CloudWatch_Synthetics_MultiCheck_Limitations"></a>
+ Le dimensioni delle risposte HTTP non possono essere superiori a 1 MB
+ Massimo 10 variabili definite.
+ Quando si utilizza JSON RFC, Checks JSON potrebbe avere campi duplicati, tuttavia verrà utilizzato solo l'ultimo campo sequenziale.
+ In Console di gestione AWS, un canarino a controllo multiplo mostrerà per impostazione predefinita le metriche delle fasi di controllo multiplo per identificare prontamente la disponibilità di ogni controllo. Quando i controlli vengono rimossi, questo grafico può continuare a mostrare i controlli nel grafico di disponibilità fino a quando la metrica non smette di essere attiva per almeno 3 ore

## Struttura del pacchetto, schema JSON e impostazioni di configurazione
<a name="CloudWatch_Synthetics_MultiCheck_Packaging"></a>

La configurazione JSON Checks che verrà utilizzata per il canarino deve essere denominata. ` blueprint-config.json` La configurazione deve seguire [lo schema](https://github.com/aws-samples/synthetics-canary-local-debugging-sample/tree/main) e seguire le istruzioni riportate di seguito. [Scrittura di una configurazione JSON per il blueprint Node.js multi Checks](CloudWatch_Synthetics_WritingCanary_Multichecks.md)

Comprimili `blueprint-config.json` in un file ZIP e inseriscili in uno dei seguenti flussi di lavoro di creazione. Quando esiste una `synthetics.json` configurazione, anche questa viene compressa nello stesso file ZIP. Di seguito è riportato un esempio di file zip chiamato`multi-checks.zip`.

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

## Creazione di un canarino a controllo multiplo in Console di gestione AWS
<a name="CloudWatch_Synthetics_MultiCheck_Console"></a>

1. Apri la console Amazon CloudWatch synthetics.

1. Scegli **Create Canary** (Crea Canary).

1. **In **Usa un blueprint**, scegli controlli multipli.**

   **In **Configure Checks**, vedrai due schede, **Checks** e Canary configuration.**

1. Seleziona la versione di runtime **syn-nodejs-3.0** o successiva.

1. Segui la procedura riportata di seguito [Scrittura di una configurazione JSON per il blueprint Node.js multi Checks](CloudWatch_Synthetics_WritingCanary_Multichecks.md) per descrivere il controllo che desideri eseguire. In alternativa, la console fornisce una configurazione JSON predefinita su cui basarsi.

1. Scegli **Create Canary** (Crea Canary).

## Creazione di un canarino a controllo multiplo usando Synthetics AWS APIs
<a name="CloudWatch_Synthetics_MultiCheck_API"></a>

Usa l'`CreateCanary`API e, all'interno del `Code` parametro, fornisci field/value `BlueprintTypes="multi-checks"` invece di. ` Handler` Quando `Handler` vengono specificati entrambi `BlueprintTypes` e, `ValidationException` viene visualizzato un. La versione di runtime fornita deve essere `syn-nodejs-3.0` o successiva.

```
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" \
    ...
```

## Creazione di un canarino a controllo multiplo in CloudFormation
<a name="CloudWatch_Synthetics_MultiCheck_CloudFormation"></a>

Nel tuo CloudFormation modello per un canarino a controllo multiplo, all'interno del `Code` parametro, fornisci invece di. field/value `BlueprintTypes="multi-checks"` ` Handler` Quando `Handler` vengono specificati entrambi `BlueprintTypes` e, `ValidationException` viene visualizzato un. La versione di runtime fornita deve essere`syn-nodejs-3.0 or later`. 

Un modello di esempio:

```
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"]
      ...
```

## Configurazione di autenticazione
<a name="CloudWatch_Synthetics_MultiCheck_Authentication"></a>

Quando il tuo canary invia richieste HTTP a un endpoint autenticato, puoi configurare i passaggi del tuo blueprint canary in modo da utilizzare uno dei quattro tipi di autenticazione: Basic, API Key, Client Credentials e SigV4. OAuth Invece di impostare personalmente le intestazioni delle richieste, è possibile specificare un tipo di autenticazione nella definizione del blueprint e Synthetics segue il tipo di autenticazione specificato per popolare i componenti della richiesta HTTP con le informazioni di autenticazione fornite.

È possibile specificare un tipo di autenticazione nella fase del progetto con la sezione Autenticazione. Specificate lo schema di autenticazione che desiderate utilizzare, le proprietà richieste per lo schema di autenticazione scelto e Synthetics utilizza le informazioni fornite per costruire un'intestazione di autenticazione per la vostra richiesta HTTP.

Poiché l'archiviazione di segreti (come password o chiavi API) in testo semplice è un problema di sicurezza, Synthetics supporta l'integrazione con. Gestione dei segreti AWS Quando desideri autenticare una richiesta HTTP in un canary blueprint Synthetics, puoi fare riferimento al segreto che memorizza le tue informazioni di autenticazione e Synthetics si occupa del recupero del segreto e della memorizzazione nella cache del tuo canary. Questo approccio fornisce segreti a Synthetics mantenendo i segreti archiviati in modo sicuro, senza specificarli in testo semplice nella configurazione del blueprint.

[Per ulteriori informazioni su Gestione dei segreti AWS, consulta What is? Gestione dei segreti AWS](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)

### Autenticazione Base
<a name="CloudWatch_Synthetics_MultiCheck_BasicAuth"></a>

Synthetics implementa lo schema di autenticazione HTTP di base definito in RFC 7617. Di seguito è riportato il procedimento:
+ Una coppia di nome utente e password viene fornita dalla configurazione del blueprint.
+ Lo user-pass viene creato concatenando il nome utente, un singolo carattere con due punti («:») e la password.
+ Lo user-pass è codificato in UTF-8, quindi convertito in una stringa con codifica base64.
+ Questo user-pass con codifica base64 viene fornito nell'intestazione «Authorization» con il seguente formato: Authorization: Basic \$1base64-\$1 encoded-user-pass

Ad esempio, se l'agente utente desidera inviare l'ID utente «Aladdin» e la password «open sesame», utilizza il seguente campo di intestazione: Authorization: Basic ftZq== QWxh ZGRpbjpvc GVu IHNlc2

Configurazione di esempio:

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

### Autenticazione con chiave API
<a name="CloudWatch_Synthetics_MultiCheck_APIKeyAuth"></a>

Puoi fornire una chiave API per autenticare le tue richieste HTTP. Quando utilizzi l'autenticazione tramite chiave API, la chiave API fornita viene inserita nell'intestazione HTTP «X-API-Key». Se disponi di una risorsa personalizzata che cerca le intestazioni delle chiavi API in un'intestazione diversa da questa, puoi facoltativamente specificare un nome di intestazione diverso in cui Synthetics inserisca la chiave API.

Configurazione di esempio:

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

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

AWS SigV4 (Signature Version 4) è il protocollo di AWS firma per aggiungere informazioni di autenticazione alle richieste API. AWS Per effettuare una richiesta autenticata con SigV4, devi specificare la regione e il servizio a cui stai effettuando le richieste, oltre a un ARN (AWS Resource Name) che identifichi un ruolo IAM che desideri che il canarino assuma quando effettua questa richiesta SigV4. Synthetics assume il ruolo IAM fornito in ROLearn e lo utilizza per autenticare la richiesta API. AWS 

Configurazione di esempio:

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

#### Considerazioni su SIGv4
<a name="CloudWatch_Synthetics_MultiCheck_SigV4Considerations"></a>

Affinché Synthetics assuma il ruolo che hai fornito nella sezione di autenticazione SigV4, la politica di fiducia allegata a quel ruolo deve essere configurata per consentire al canarino di assumere il ROLearn fornito. Il AWS principale di cui ti devi fidare è il ruolo che il tuo canarino ha assunto. AWS STS Prende il formato ` aws:sts::{account_running_the_canary}:assumed-role/<canary_name>/<assumed_role_name>` arn:.

Ad esempio, se hai un canarino in esecuzione nell'account 0123456789012, chiamato test-canary, e il ruolo che ha assunto è stato nominato canary-assume-role, la policy di fiducia deve includere questa dichiarazione affinché il canary assuma correttamente l'autenticazione ROLearn for SigV4:

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

### OAuth credenziali del client
<a name="CloudWatch_Synthetics_MultiCheck_OAuthAuth"></a>

Synthetics implementa OAuth il tipo di concessione Client Credentials come definito nella sezione 4.4 di RFC 6479. Se desideri effettuare una richiesta HTTP a un endpoint autenticato con un token Bearer emesso da un endpoint OAuth token, Synthetics può richiedere e gestire un token bearer per tuo conto. Quando si utilizza lo OAuth schema, Synthetics esegue le seguenti operazioni:
+ Utilizza lo schema di autenticazione Basic con ClientID e ClientSecret per autenticare una richiesta al TokenUrl, l'endpoint che emette i token al portatore
+ Se fornisci i parametri facoltativi scope, audience e resource, questi vengono inclusi nella richiesta del token
+ Utilizza il token di accesso restituito da TokenURL per autenticare la richiesta HTTP
+ Memorizza in modo sicuro il token di aggiornamento restituito dal TokenUrl per future richieste di token

Configurazione di esempio:

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

#### OAuth considerazioni
<a name="CloudWatch_Synthetics_MultiCheck_OAuthConsiderations"></a>

Synthetics OAuth aggiorna i token quando viene restituita una risposta 401 o 407.

### Gestione dei segreti AWS integrazione
<a name="CloudWatch_Synthetics_MultiCheck_SecretsManager"></a>

Per evitare di archiviare valori segreti (come password o chiavi API) in testo semplice, Synthetics fornisce un'integrazione con. Gestione dei segreti AWSÈ possibile fare riferimento a un intero valore segreto nella configurazione del blueprint con il formato ` ${aws_SECRET:<secret_name>}` o fare riferimento a una chiave particolare. ` ${aws_SECRET:<secret_name>:<secret_key>}`

Ad esempio, se hai un segreto chiamato login/basic-auth-credentials, memorizzi un nome utente e una password con la seguente struttura JSON:

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

È possibile fare riferimento al nome utente e alla password nella configurazione del blueprint come segue e Synthetics gestisce il recupero del valore segreto e l'utilizzo delle sue chiavi per autenticare la richiesta:

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

Per consentire a Synthetics di recuperare il segreto specificato, il ruolo ARN assunto dal canarino deve avere SecretsManager: permessi. GetSecretValue Se il segreto viene crittografato utilizzando una chiave gestita dal cliente anziché la chiave gestita AWS/secretsmanager, sono necessarie anche le autorizzazioni di AWS decriptazione per quella chiave. kms:

Autorizzazioni di esempio:

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

## Risoluzione dei problemi
<a name="CloudWatch_Synthetics_MultiCheck_Troubleshooting"></a>

### Errori comuni di risoluzione dei problemi
<a name="CloudWatch_Synthetics_MultiCheck_Common_Failures"></a>

Il codice sottostante per il blueprint a controllo multiplo è scritto in Typescript. [Consulta la pagina di risoluzione dei problemi di Canary per gli errori più comuni: Risoluzione dei problemi di un canarino fallito.](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Troubleshoot.html)

### Errori di sintassi di configurazione di JSON check
<a name="CloudWatch_Synthetics_MultiCheck_JSON_Errors"></a>

In caso di errori sintattici relativi alla configurazione di controllo JSON di Canary, Console di gestione AWS verrà fornito un motivo di errore quando si tenta di creare il canarino. Se state creando un canarino utilizzando un'API oppure CloudFormation, vedrete l'errore quando il canarino viene eseguito per la prima volta. Si consiglia di utilizzare il flusso di lavoro Safe Canary Updates per Multi-Check Canary. Per ulteriori informazioni, vedere [Esecuzione degli aggiornamenti di safe canary.](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/performing-safe-canary-upgrades.html)

### Errori di rete o di timeout
<a name="CloudWatch_Synthetics_MultiCheck_Network_Failures"></a>

Per eventuali errori intermittenti o costanti legati ai timeout e alle connessioni di rete (ad esempio, ENOTFOUND, ECONNRESET), valuta la possibilità di attivare i ` DEBUG` log in modo che l'esecuzione seguente fornisca maggiori dettagli aggiuntivi sul motivo dell'esito negativo dei controlli. A tale scopo, fornite la variabile d'ambiente CW\$1SYNTHETICS\$1LOG\$1LEVEL: «DEBUG».

Se ci sono ancora errori di cui non riesci a eseguire il debug, prova a contattare AWS Support o a verificare se uno degli altri tipi di Canary forniti da Synthetics si avvicina di più al tuo caso d' CloudWatchuso.

# Utilizzo del CloudWatch Synthetics Recorder per Google Chrome
<a name="CloudWatch_Synthetics_Canaries_Recorder"></a>

Amazon fornisce un CloudWatch Synthetics Recorder per aiutarti a creare canarini più facilmente. Il registratore è un'estensione di Google Chrome.

Il registratore registra le operazioni di clic e digitazione su un sito Web e genera automaticamente uno script Node.js che è possibile utilizzare per creare un canary che segue gli stessi passaggi.

Dopo aver avviato la registrazione, CloudWatch Synthetics Recorder rileva le tue azioni nel browser e le converte in uno script. È possibile sospendere e riprendere la registrazione in base alle esigenze. Quando si interrompe la registrazione, il registratore produce uno script Node.js delle operazioni, che è possibile copiare facilmente con il comando **Copy to Clipboard** (Copia negli appunti). È quindi possibile utilizzare questo script per creare un canarino in CloudWatch Synthetics. 

**Crediti**[: Il CloudWatch Synthetics Recorder è basato sul registratore Headless.](https://github.com/checkly/headless-recorder)

## Installazione dell'estensione CloudWatch Synthetics Recorder per Google Chrome
<a name="CloudWatch_Synthetics_Canaries_Recorder-install"></a>

**Per utilizzare il CloudWatch Synthetics Recorder, puoi iniziare a creare un canarino e scegliere il progetto Canary Recorder.** Se lo fai quando non hai ancora scaricato il registratore, la console CloudWatch Synthetics fornisce un link per scaricarlo.

In alternativa, puoi eseguire questa procedura per scaricare e installare direttamente il registratore.

**Per installare il CloudWatch Synthetics Recorder**

1. Utilizzando Google Chrome, vai a questo sito Web: [ https://chrome.google.com/webstore/detail/cloudwatch-synthetics-rec/bhdnlmmgiplmbcdmkkdfplenecpegfno](https://chrome.google.com/webstore/detail/cloudwatch-synthetics-rec/bhdnlmmgiplmbcdmkkdfplenecpegfno)

1. Scegli **Add to Chrome** (Aggiungi a Chrome), quindi scegli **Add extension** (Aggiungi estensione).

## Utilizzo del CloudWatch Synthetics Recorder per Google Chrome
<a name="CloudWatch_Synthetics_Canaries_Recorder-using"></a>

**Per utilizzare CloudWatch Synthetics Recorder per aiutarti a creare un canarino, puoi **scegliere Crea canarino nella console, quindi **scegliere**** Usa un CloudWatch progetto, Canary Recorder.** Per ulteriori informazioni, consulta [Creazione di un Canary](CloudWatch_Synthetics_Canaries_Create.md). 

In alternativa, puoi utilizzare il registratore per registrare i passaggi senza utilizzarli immediatamente per creare un canary.

**Per utilizzare il CloudWatch Synthetics Recorder per registrare le azioni dell'utente su un sito Web**

1. Passa alla pagina che desideri monitorare.

1. Scegli l'icona delle estensioni di Chrome, quindi scegli **CloudWatchSynthetics Recorder**.

1. Scegli **Start Recording** (Avvia registrazione).

1. Esegui i passaggi che vuoi\$1 registrare. **Per mettere in pausa la registrazione, scegli Pausa.**

1. Al termine della registrazione del flusso di lavoro, scegli **Stop recording** (Interrompi la registrazione).

1. Scegli **Copy to clipboard** (Copia negli appunti) per copiare lo script generato negli appunti. Oppure, se si desidera ricominciare da capo, scegli **New recording** (Nuova registrazione).

1. Per creare un canary con lo script copiato, puoi incollare lo script copiato nell'editor inline del blueprint del registratore o salvarlo in un bucket Amazon S3 e importarlo da lì.

1. Se non crei immediatamente un canary, puoi salvare lo script registrato in un file.

## Limitazioni note del CloudWatch Synthetics Recorder
<a name="CloudWatch_Synthetics_Canaries_Recorder-limitations"></a>

Il CloudWatch Synthetics Recorder per Google Chrome presenta attualmente le seguenti limitazioni.
+ Gli elementi HTML che non lo sono IDs utilizzeranno selettori CSS. Questo può interrompere i canary se la struttura della pagina Web cambia in seguito. Abbiamo in programma di fornire alcune opzioni di configurazione (ad esempio l'uso di data-id) in una versione futura del registratore. 
+ Il registratore non supporta azioni quali doppio clic o copia/incolla e non supporta combinazioni di tasti ad esempio CMD\$10. 
+ Per verificare la presenza di un elemento o di un testo nella pagina, gli utenti devono aggiungere asserzioni dopo la generazione dello script. Il registratore non supporta la verifica di un elemento senza eseguire alcuna operazione su tale elemento. Questo è simile alle opzioni “Verify text” (Verifica testo) o “Verify element” (Verifica elemento) nel generatore di flussi di lavoro del canary. Abbiamo in programma di aggiungere il supporto delle asserzioni in una versione futura del registratore. 
+ Il registratore registra tutte le operazioni nella scheda in cui viene avviata la registrazione. Non registra i popup (ad esempio, per consentire il tracciamento della posizione) o la navigazione a pagine diverse dai popup. 

# Versioni di runtime Synthetics
<a name="CloudWatch_Synthetics_Canaries_Library"></a>

Quando crei o aggiorni un Canary, scegli una versione di runtime Synthetics per il Canary. Un runtime Synthetics è una combinazione del codice Synthetics che chiama il gestore di script e dei livelli Lambda delle dipendenze in bundle.

CloudWatch Synthetics attualmente supporta i runtime che utilizzano i linguaggi Node.js, Python o Java. I framework supportati sono Puppeteer, Playwright e Selenium.

Ti consigliamo di utilizzare sempre la versione di runtime più recente per i Canary in modo da poter utilizzare le funzionalità e gli aggiornamenti più recenti apportati alla libreria Synthetics.

**Nota**: ogni volta che esegui un canary per utilizzare la nuova versione del runtime Synthetics, anche tutte le funzioni della libreria Synthetics utilizzate dal tuo canary vengono spostate automaticamente nella stessa versione di NodeJS supportata dal runtime Synthetics.

**Topics**
+ [Versioni di runtime che utilizzano Java](CloudWatch_Synthetics_Library_Java.md)
+ [Versioni runtime che utilizzano Node.js e Playwright](CloudWatch_Synthetics_Library_nodejs_playwright.md)
+ [Versioni runtime che utilizzano Node.js e Puppeteer](CloudWatch_Synthetics_Library_nodejs_puppeteer.md)
+ [Versioni di runtime che utilizzano Python e Selenium Webdriver](CloudWatch_Synthetics_Library_python_selenium.md)
+ [Versioni di runtime che utilizzano Node.js](CloudWatch_Synthetics_Library_Nodejs.md)
+ [Le versioni di runtime supportano la politica](CloudWatch_Synthetics_Runtime_Support_Policy.md)
+ [Aggiornamento delle versioni di runtime](CloudWatch_Synthetics_Runtime_Version_Update.md)

# Versioni di runtime che utilizzano Java
<a name="CloudWatch_Synthetics_Library_Java"></a>

La sezione seguente contiene informazioni sulle versioni di runtime di CloudWatch Synthetics per Java. Questo runtime non include alcun browser o framework.

La convenzione di denominazione per queste versioni di runtime è `syn-language -majorversion.minorversion`. 

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

**Principali dipendenze**:
+ AWS Lambda runtime Java 2.1

 **Funzionalità** 
+ *CloudWatch Integrazione dei log*: puoi interrogare e filtrare i log tramite la console Synthetics CloudWatch . Ogni messaggio di log contiene ` canaryRunId` univoci, semplificando la ricerca dei log relativi a una determinata esecuzione canary.
+ *Metriche*: puoi monitorare la percentuale e la durata di successo di Canary Run tramite le metriche. CloudWatch Puoi anche configurare gli allarmi per essere avvisato quando i canary rilevano problemi.
+ *Artefatti canary*: ogni esecuzione canary carica un report dettagliato corrispondente all'esecuzione e alle fasi della stessa, a cui è possibile accedere tramite Amazon S3.
+ *Supporto per le tracce*: è possibile emettere tracce per tutte le richieste fatte dal canary tramite X-Ray. Ogni esecuzione canary è associata a un ID di traccia.

# Versioni runtime che utilizzano Node.js e Playwright
<a name="CloudWatch_Synthetics_Library_nodejs_playwright"></a>

Le seguenti sezioni contengono informazioni sulle versioni di runtime di CloudWatch Synthetics per Node.js e Playwright. Playwright è una libreria open source per l'automazione dei test sui browser. [Per ulteriori informazioni su Playwright, vedere https://playwright.dev/](https://playwright.dev) 

La convenzione di denominazione per queste versioni di runtime è `syn-language -framework-majorversion. minorversion`. 

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

**Importante**  
A partire da `syn-nodejs-playwright-5.1` Synthetics e versioni successive, il runtime Synthetics utilizza il nuovo spazio dei nomi. Esegui la migrazione dello script Canary per utilizzare il nuovo namespace. Lo spazio dei nomi legacy verrà dichiarato obsoleto in una versione futura.  
amzn/synthetics-playwright → @aws/synthetics@ -drammaturgo

**Principali dipendenze**:
+ AWS Lambda runtime Node.js 22.x
+ Playwright versione 1.58.2
+ Playwright/test versione 1.58.2
+ Versione Chromium 145.0.7632.77
+ Firefox versione 146.0.1

 **Modifiche nella versione -6.0 syn-nodejs-playwright** 
+ Patch di sicurezza applicate e versioni aggiornate di Playwright e browser. 

Per ulteriori informazioni, consulta gli argomenti seguenti:
+  [Log delle modifiche di Playwright ](https://playwright.dev/docs/release-notes) 
+  [Documentazione di riferimento all'API Playwright](https://playwright.dev/docs/api/class-playwright) 

## Versioni di runtime precedenti per Node.js e Playwright
<a name="Previousversions-nodejs-playwright"></a>

Le seguenti versioni di runtime precedenti per Node.js e Playwright sono ancora supportate. 

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

**Principali dipendenze**:
+ AWS Lambda runtime Node.js 22.x
+ Playwright versione 1.57.0
+ Playwright/test versione 1.57.0
+ Versione Chromium 143.0.7499.169
+ Firefox versione 142.0.1

 **Modifiche nella versione -5.1 syn-nodejs-playwright** 
+ Migrazione dello spazio dei nomi in runtime Synthetics. 
+ [La definizione del tipo è disponibile nel registro npm.](https://www.npmjs.com/package/@aws/synthetics-playwright) Assicurati che la versione del pacchetto di definizione del tipo corrisponda alla versione di runtime del tuo canarino.

Per ulteriori informazioni, consulta gli argomenti seguenti:
+  [Log delle modifiche di Playwright ](https://playwright.dev/docs/release-notes) 
+  [Documentazione di riferimento all'API Playwright](https://playwright.dev/docs/api/class-playwright) 

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

**Principali dipendenze**:
+ AWS Lambda runtime Node.js 22.x
+ Playwright versione 1.57.0
+ Playwright/test versione 1.57.0
+ Versione Chromium 143.0.7499.4
+ Firefox versione 142.0.1

 **Modifiche nella versione -5.0 syn-nodejs-playwright** 
+ Patch di sicurezza applicate e versioni aggiornate di Playwright e browser. 

Per ulteriori informazioni, consulta gli argomenti seguenti:
+  [Log delle modifiche di Playwright ](https://playwright.dev/docs/release-notes) 
+  [Documentazione di riferimento all'API Playwright](https://playwright.dev/docs/api/class-playwright) 

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

**Principali dipendenze**:
+ AWS Lambda runtime Node.js 22.x
+ Playwright versione 1.55.0
+ Playwright/test versione 1.55.0
+ Versione Chromium 140.0.7339.16
+ Firefox versione 141.0

 **Modifiche nella versione -4.0 syn-nodejs-playwright** 
+ Patch di sicurezza applicate e versioni aggiornate di Playwright e browser. 

Per ulteriori informazioni, consulta gli argomenti seguenti:
+  [Log delle modifiche di Playwright ](https://playwright.dev/docs/release-notes) 
+  [Documentazione di riferimento all'API Playwright](https://playwright.dev/docs/api/class-playwright) 

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

**Principali dipendenze**:
+ AWS Lambda runtime Node.js 20.x
+ Playwright versione 1.53.0
+ Playwright/test versione 1.53.0
+ Chromium versione 138.0.7204.168

 **Modifiche in -3.0 syn-nodejs-playwright** 
+ Supporto multi-browser: ora puoi eseguire canary nodejs puppeteer su Firefox o su Chrome
+ Supporto per il monitoraggio visivo

Per ulteriori informazioni, consulta gli argomenti seguenti:
+  [Log delle modifiche di Playwright ](https://playwright.dev/docs/release-notes) 
+  [Documentazione di riferimento all'API Playwright](https://playwright.dev/docs/api/class-playwright) 

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

**Principali dipendenze**:
+ AWS Lambda runtime Node.js 20.x
+ Playwright versione 1.49.1
+ Playwright/test versione 1.49.1
+ Chromium versione 131.0.6778.264

 **Modifiche syn-nodejs-playwright in -2.0** 
+ La mancata corrispondenza tra la durata totale e la somma dei tempi per una determinata richiesta nel file HAR è stata corretta.
+ Supporta il processo di test per il canary, consentendo esecuzioni ad hoc o l'esecuzione di un aggiornamento sicuro del canary.

Per ulteriori informazioni, consulta gli argomenti seguenti:
+  [Log delle modifiche di Playwright ](https://playwright.dev/docs/release-notes) 
+  [Documentazione di riferimento all'API Playwright](https://playwright.dev/docs/api/class-playwright) 

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

**Principali dipendenze**:
+ AWS Lambda runtime Node.js 20.x
+ Playwright versione 1.44.1
+ Playwright/test versione 1.44.1
+ Chromium versione 126.0.6478.126

**Funzionalità:**
+ **PlayWright supporto** — È possibile scrivere script canary utilizzando il framework di automazione Playwright. Puoi utilizzare i tuoi script Playwright esistenti per eseguirli come canary e arricchirli con le funzionalità di monitoraggio di AWS . 
+ **CloudWatch Integrazione dei log**: puoi interrogare e filtrare i log tramite la console Synthetics CloudWatch . Ogni messaggio di log contiene `canaryRunId` univoci, semplificando la ricerca dei log relativi a una determinata esecuzione canary. 
+ **Metriche e artefatti canarini**: puoi monitorare la velocità di passaggio di Canary Run attraverso le CloudWatch metriche e configurare allarmi per avvisarti quando i canarini rilevano problemi. 
+ **Associazione di schermate e passaggi**: puoi acquisire schermate utilizzando la funzionalità nativa di Playwright per visualizzare le fasi di uno script canary ad ogni esecuzione. Le schermate vengono automaticamente associate ai passaggi del canary e caricate nei bucket Amazon S3. 
+ **Schede multiple**: puoi creare canary che aprono più schede del browser e accedere alle schermate da ciascuna scheda. Su Synthetics puoi creare flussi di lavoro utente a più schede e a più passaggi. 

# Versioni runtime che utilizzano Node.js e Puppeteer
<a name="CloudWatch_Synthetics_Library_nodejs_puppeteer"></a>

La prima versione di runtime per Node.js e Puppeteer è stata denominata `syn-1.0`. Le versioni di runtime successive hanno la convenzione di denominazione `syn-language -majorversion.minorversion`. Iniziando con `syn-nodejs-puppeteer-3.0`, la convenzione di denominazione è `syn- language-framework-majorversion .minorversion` 

Un ulteriore suffisso `-beta` indica che la versione di runtime è attualmente in una versione di anteprima beta.

Le versioni di runtime con lo stesso numero di versione principale sono sempre compatibili con le versioni precedenti. 

Il codice Lambda in un Canary è configurato per avere una memoria massima di 1 GB. Ogni esecuzione di Canary esegue il timeout dopo il valore di timeout configurato. Se non viene specificato alcun valore di timeout per un canarino, CloudWatch sceglie un valore di timeout basato sulla frequenza del canarino. Se si configura un valore di timeout, non è inferiore a 15 secondi per consentire l'avvio a freddo Lambda e il tempo necessario per avviare la strumentazione canary.

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

`syn-nodejs-puppeteer-15.0` è il runtime Synthetics più recente per Node.js e Puppeteer. 

**Importante**  
A partire da `syn-nodejs-puppeteer-13.1` Synthetics e versioni successive, il runtime Synthetics utilizza il nuovo spazio dei nomi. Si prega di migrare lo script canary per utilizzare nuovi namespace. I namespace legacy verranno dichiarati obsoleti in una versione futura.  
Synthetics → @aws /synthetics-puppeteer
SyntheticsLink → @aws /synthetics-link
SyntheticsLogger → @aws /synthetics-logger
SyntheticsLogHelper → @aws/synthetics-log-helper
BrokenLinkCheckerReport → @aws/synthetics-broken-link-checker-rapporto

**Importante**  
Il `syn-nodejs-puppeteer-11.0` runtime di Synthetics e le versioni successive supportano solo le seguenti sostituzioni di configurazione a livello di fase:  
 `screenshotOnStepStart` 
 `screenshotOnStepSuccess` 
 `screenshotOnStepFailure` 
 `stepSuccessMetric` 
 `stepDurationMetric` 
 `continueOnStepFailure/continueOnHttpStepFailure` 
 `stepsReport` 

Per ulteriori informazioni, consulta gli argomenti seguenti:
+  [Log delle modifiche di Puppeteer](https://pptr.dev/CHANGELOG#24375-2026-02-19) 
+  [Documentazione di riferimento all'API Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.37.5/docs/api/index.md) 

**Principali dipendenze**:
+ Lambda Runtime Node.js 22.x
+ Puppeteer-core versione 24.37.5
+ Versione Chromium 145.0.7632.77
+ Firefox versione 147.0.4

 **Modifiche nella versione -15.0 syn-nodejs-puppeteer** 
+ Patch di sicurezza applicate e versioni aggiornate di Puppeteer e browser.
+ Risolto un bug che non continueOnHttp StepFailure veniva rispettato, a causa del quale le esecuzioni di Canary venivano erroneamente contrassegnate come riuscite nonostante si verificassero errori nella fase HTTP.

## Versioni di runtime precedenti per Node.js e Puppeteer
<a name="Previousversions-nodejs-puppeteer"></a>

Le seguenti versioni di runtime precedenti per Node.js e Puppeteer sono ancora supportate. 

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

Per ulteriori informazioni, consulta gli argomenti seguenti:
+  [Log delle modifiche di Puppeteer](https://pptr.dev/CHANGELOG#24340-2025-12-19) 
+  [Documentazione di riferimento all'API Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.34.0/docs/api/index.md) 

**Principali dipendenze**:
+ Lambda Runtime Node.js 22.x
+ Puppeteer-core versione 24.34.0
+ Versione Chromium 143.0.7499.169
+ Firefox versione 146.x

 **Modifiche nella versione -14.0 syn-nodejs-puppeteer** 
+ Patch di sicurezza applicate e versioni aggiornate di Puppeteer e browser.

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

`syn-nodejs-puppeteer-13.1` è il runtime Synthetics più recente per Node.js e Puppeteer. 

Per ulteriori informazioni, consulta gli argomenti seguenti:
+  [Log delle modifiche di Puppeteer](https://pptr.dev/CHANGELOG#24250-2025-10-15) 
+  [Documentazione di riferimento all'API Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**Principali dipendenze**:
+ Lambda Runtime Node.js 22.x
+ Puppeteer-core versione 24.25.0
+ Versione Chromium 142.0.7444.175
+ Firefox versione 145.x

 **Modifiche nella versione -13.1 syn-nodejs-puppeteer** 
+ Migrazione dello spazio dei nomi in runtime Synthetics.
+ Le definizioni dei tipi sono disponibili nel registro npm. Assicurati che la versione del pacchetto di definizione del tipo corrisponda alla versione runtime del tuo canary.
  +  [@aws /synthetics-puppeteer](https://www.npmjs.com/package/@aws/synthetics-puppeteer) 
  +  [@aws /link sintetico](https://www.npmjs.com/package/@aws/synthetics-link) 
  +  [@aws/-rapporto synthetics-broken-link-checker](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 /logger sintetico](https://www.npmjs.com/package/@aws/synthetics-logger) 

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

Per ulteriori informazioni, consulta gli argomenti seguenti:
+  [Log delle modifiche di Puppeteer](https://pptr.dev/CHANGELOG#24250-2025-10-15) 
+  [Documentazione di riferimento all'API Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**Principali dipendenze**:
+ Lambda Runtime Node.js 22.x
+ Puppeteer-core versione 24.25.0
+ Versione Chromium 142.0.7444.175
+ Firefox versione 145.x

 **Modifiche in -13.0 syn-nodejs-puppeteer** 
+ Patch di sicurezza applicate e versioni aggiornate di Puppeteer e browser.
+ Correzione di bug: risolto il problema di arresto intermittente dell'estensione di runtime causato dall'accesso simultaneo alla mappa

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

Per ulteriori informazioni, consulta gli argomenti seguenti:
+  [Log delle modifiche di Puppeteer](https://pptr.dev/CHANGELOG#24221-2025-09-23) 
+  [Documentazione di riferimento all'API Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.22.1/docs/api/index.md) 

**Principali dipendenze**:
+ Lambda Runtime Node.js 22.x
+ Puppeteer-core versione 24.22.1
+ Versione Chromium 140.0.7339.185
+ Firefox versione 143.0.1

 **Modifiche nella versione -12.0 syn-nodejs-puppeteer** 
+ Patch di sicurezza applicate e versioni aggiornate di Puppeteer e browser.
+ Correzione di bug per la redazione delle intestazioni con restrizioni: è stato risolto un problema per cui in alcune situazioni le intestazioni con restrizioni non venivano oscurate in (). executeHttpStep Il comportamento è ora coerente con Puppeteer 10.0.
+ Correzione di bug per la includeResponseBody configurazione: è stato risolto un problema per cui la generazione di file HAR poteva applicare erroneamente l'impostazione di includeResponseBody configurazione in determinate situazioni. HAR ora assicura che i corpi di risposta siano esclusi quando l'impostazione è configurata.
+ Ciclo di vita di acquisizione delle richieste risolto: è stato risolto un problema per cui in alcune situazioni l'acquisizione delle richieste HTTP poteva causare un'aggregazione continua delle richieste. La registrazione ora termina correttamente dopo l'esecuzione di ogni passaggio.

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

Per ulteriori informazioni, consulta gli argomenti seguenti:
+  [Log delle modifiche di Puppeteer](https://pptr.dev/CHANGELOG) 
+  [Documentazione di riferimento all'API Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**Principali dipendenze**:
+ Runtime Lambda Node.js 20.x
+ Puppeteer-core versione 24.15.0
+ Chromium versione 138.0.7204.168

 **Modifiche in syn-nodejs-puppeteer -11.0** 
+ Supporto multi-browser: ora puoi eseguire canary Node.js Puppeteer su Firefox o su Chrome
+ Creazione di pacchetti semplificata: inserisci gli script direttamente nella directory root senza utilizzare la struttura di directory Node.js/node\$1modules.
+ Integrazione di screenshot: acquisisci screenshot utilizzando le funzioni native di Puppeteer per visualizzare le fasi dello script canary. Synthetics associa automaticamente gli screenshot ai passaggi del canary e li carica su Amazon S3
+ Interrogazione avanzata dei log: interroga e filtra i log tramite la CloudWatch console Insights. Ogni messaggio di log include un `canaryRunId` univoco per facilitare la ricerca
+ Supporto per i file di configurazione: definisci e aggiorna le impostazioni di Synthetics utilizzando un file synthetics.json. Questa separazione della configurazione dalla logica degli script migliora la manutenzione e la riusabilità
+ Supporto per più schede: crea canary che aprono più schede del browser e accedono alle schermate da ciascuna scheda. Crea flussi di lavoro utente a più schede e a più passaggi su Synthetics
+ Correzioni di sicurezza
+ Correzioni di bug nel monitoraggio visivo
+ Aggiunto supporto per la registrazione JSON strutturata con livelli di registro configurabili: i log vengono ora emessi in formato JSON per facilitare l'analisi e l'interrogazione. CloudWatch Il livello di log è configurabile (ad esempio, DEBUG, INFO, TRACE) tramite variabili di ambiente, consentendo agli utenti di controllare la verbosità in base alle proprie esigenze
+ Supporto per la sintassi ES

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

Per ulteriori informazioni, consulta gli argomenti seguenti:
+  [Log delle modifiche di Puppeteer](https://pptr.dev/CHANGELOG) 
+  [Documentazione di riferimento all'API Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**Principali dipendenze**:
+ Runtime Lambda Node.js 20.x
+ Puppeteer-core versione 24.2.0
+ Versione Chromium 131.0.6778.264

 **Modifiche syn-nodejs-puppeteer in -10.0** 
+ Il bug relativo alla chiusura del browser che richiedeva troppo tempo è stato corretto.
+ Supporta il processo di test per il canary, consentendo esecuzioni ad hoc o l'esecuzione di un aggiornamento sicuro del canary.

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

**Principali dipendenze**:
+ Runtime Lambda Node.js 20.x
+ Puppeteer-core versione 22.12.1
+ Chromium versione 126.0.6478.126

**Modifiche in syn-nodejs-puppeteer -9.1** - Sono state corrette le correzioni di bug relative agli intervalli di date e alle richieste in sospeso nei file HAR.

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

**Principali dipendenze**:
+ Runtime Lambda Node.js 20.x
+ Puppeteer-core versione 22.12.1
+ Chromium versione 126.0.6478.126

**Modifiche in syn-nodejs-puppeteer -9.0** — La correzione del bug per abilitare le funzionalità di monitoraggio visivo è stata corretta.

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

**avvertimento**  
A causa di un bug, il runtime `syn-nodejs-puppeteer-8.0` non supporta il monitoraggio visivo nei canary. Esegui l'aggiornamento a [syn-nodejs-puppeteer-9,0](#CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-9.0) per correggere i bug relativi al monitoraggio visivo.

**Importante**  
I runtime Lambda Node.js 18 e versioni successive utilizzano AWS SDK per V3. JavaScript [Se devi migrare un canary da un runtime precedente, segui il 3 Migration Workshop su. aws-sdk-js-v](https://github.com/aws-samples/aws-sdk-js-v3-workshop) GitHub Per ulteriori informazioni sull' AWS SDK per la JavaScript versione 3, consulta [questo](https://aws.amazon.com/blogs/developer/modular-aws-sdk-for-javascript-is-now-generally-available/) post del blog.

**Principali dipendenze**:
+ Runtime Lambda Node.js 20.x
+ Puppeteer-core versione 22.10.0
+ Versione Chromium 125.0.6422.112

**Aggiornamenti in syn-nodejs-puppeteer -8.0:**
+  **Supporto per autenticazione a due fattori** 
+ **Le correzioni di bug** relative alla perdita di dati da parte di alcuni client di servizio nelle risposte Node.js SDK V3 sono state apportate.

## Versioni di runtime rese obsolete per Node.js e Puppeteer
<a name="CloudWatch_Synthetics_nodejs-puppeteer-Deprecated"></a>

I seguenti runtime per Node.js e Puppeteer sono stati resi obsoleti. Per informazioni sulle date di obsolescenza del runtime, consulta [CloudWatch Date di deprecazione del runtime di Synthetics](CloudWatch_Synthetics_Runtime_Support_Policy.md#runtime_deprecation_dates).

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

**Principali dipendenze**:
+ Runtime Lambda Node.js 18.x
+ Puppeteer-core versione 21.9.0
+ Chromium versione 121.0.6167.139

**Dimensioni codice**:

La dimensione del codice e delle dipendenze che è possibile inserire in questo runtime è di 80 MB.

**Aggiornamenti in syn-nodejs-puppeteer -7.0:**
+ **Versioni aggiornate delle librerie in bundle in Puppeteer e Chromium**: le dipendenze Puppeteer e Chromium vengono aggiornate alle nuove versioni.
**Importante**  
Il passaggio da Puppeteer 19.7.0 a Puppeteer 21.9.0 introduce modifiche importanti per quanto riguarda test e filtri. Per ulteriori informazioni, consulta le sezioni **BREAKING CHANGES** in [puppeteer: v20.0.0](https://github.com/puppeteer/puppeteer/releases/tag/puppeteer-v20.0.0) e [puppeteer-core: v21.0.0](https://github.com/puppeteer/puppeteer/releases/tag/puppeteer-core-v21.0.0).

 **Aggiornamento consigliato a AWS SDK v3** 

Il runtime Lambda nodejs18.x non supporta SDK v2. AWS Ti consigliamo vivamente di migrare a SDK v3. AWS 

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

**Principali dipendenze**:
+ Runtime Lambda Node.js 18.x
+ Puppeteer-core versione 19.7.0
+ Chromium versione 111.0.5563.146

**Modifiche in -6.2: syn-nodejs-puppeteer**
+  **Versioni aggiornate delle librerie in bundle in Chromium** 
+ **Monitoraggio temporaneo dell'archiviazione**: questo runtime aggiunge il monitoraggio temporaneo dell'archiviazione negli account dei clienti.
+  **Correzioni di bug** 

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

**Principali dipendenze**:
+ Runtime Lambda Node.js 18.x
+ Puppeteer-core versione 19.7.0
+ Chromium versione 111.0.5563.146

**Aggiornamenti in -6.1: syn-nodejs-puppeteer**
+ **Miglioramenti della stabilità**: aggiunta la logica di ripetizione automatica per la gestione degli errori di avvio intermittenti di Puppeteer.
+ **Aggiornamenti delle dipendenze**: aggiornamenti di alcuni pacchetti di dipendenza di terze parti.
+ **Canary senza autorizzazioni Amazon S3**: correzioni di bug, in modo che i canary che non dispongono di autorizzazioni Amazon S3 possano funzionare ugualmente. Questi canary senza autorizzazioni Amazon S3 non saranno in grado di caricare screenshot o altri artefatti in Amazon S3. Per ulteriori informazioni sulle autorizzazioni per i canary, consulta [Ruoli e autorizzazioni richiesti per i canary](CloudWatch_Synthetics_Canaries_CanaryPermissions.md).

**Importante**  
IMPORTANTE: l' AWS SDK incluso per la dipendenza JavaScript v2 verrà rimosso e aggiornato per utilizzare AWS SDK per JavaScript v3 in una futura versione di runtime. Quando ciò accade, puoi aggiornare i riferimenti al codice del canary. In alternativa, puoi continuare a fare riferimento e utilizzare l' AWS SDK incluso per la dipendenza JavaScript v2 aggiungendolo come dipendenza al file zip del codice sorgente.

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

**Principali dipendenze**:
+ Runtime Lambda Node.js 18.x
+ Puppeteer-core versione 19.7.0
+ Chromium versione 111.0.5563.146

**Aggiornamenti in -6.0: syn-nodejs-puppeteer**
+ **Aggiornamento della dipendenza**: la dipendenza Node.js è aggiornata alla versione 18.x.
+ **Supporto della modalità di intercettazione**: il supporto della modalità di intercettazione cooperativa Puppeteer è stato aggiunto alla libreria di runtime di canary Synthetics.
+ **Modifica del comportamento di tracciamento**: il comportamento di tracciamento predefinito è stato modificato per tracciare solo le richieste di recupero e xhr senza più tracciare le richieste di risorse. È possibile abilitare il tracciamento delle richieste di risorse configurando l'opzione `traceResourceRequests`.
+ **Metrica della durata perfezionata**: la ` Duration` metrica ora esclude il tempo operativo utilizzato da Canary per caricare artefatti, scattare schermate e generare metriche. CloudWatch `Duration`i valori delle metriche vengono riportati a CloudWatch e puoi anche visualizzarli nella console Synthetics.
+ **Correzione di bug:** cancella il core dump generato quando Chromium si blocca durante un'esecuzione di un canary.

**Importante**  
IMPORTANTE: l' AWS SDK incluso per la dipendenza JavaScript v2 verrà rimosso e aggiornato per utilizzare AWS SDK per JavaScript v3 in una futura versione di runtime. Quando ciò accade, puoi aggiornare i riferimenti al codice del canary. In alternativa, puoi continuare a fare riferimento e utilizzare l' AWS SDK incluso per la dipendenza JavaScript v2 aggiungendolo come dipendenza al file zip del codice sorgente.

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

**Principali dipendenze**:
+ Runtime Lambda Node.js 16.x
+ Puppeteer-core versione 19.7.0
+ Chromium versione 111.0.5563.146

**Aggiornamenti in -5.2: syn-nodejs-puppeteer**
+  **Versioni aggiornate delle librerie in bundle in Chromium** 
+  **Correzioni di bug** 

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

**Principali dipendenze**:
+ Runtime Lambda Node.js 16.x
+ Puppeteer-core versione 19.7.0
+ Chromium versione 111.0.5563.146

**Correzioni di bug** in -5.1: syn-nodejs-puppeteer
+ **Correzione di bug**: questo runtime corregge un bug in ` syn-nodejs-puppeteer-5.0` dove i file HAR creati dai canary non avevano le intestazioni di richiesta.

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

**Principali dipendenze**:
+ Runtime Lambda Node.js 16.x
+ Puppeteer-core versione 19.7.0
+ Chromium versione 111.0.5563.146

**Aggiornamenti in -5.0: syn-nodejs-puppeteer**
+ **Aggiornamento della dipendenza**: la versione di Puppeteer-core è aggiornata alla 19.7.0. La versione Chromium è aggiornata a 111.0.5563.146.

**Importante**  
La nuova versione di Puppeteer-core non è compatibile con le versioni precedenti di Puppeteer. Alcune delle modifiche apportate a questa versione possono causare il fallimento dei canary esistenti che utilizzano funzioni Puppeteer obsolete. Per ulteriori informazioni, consulta le ultime modifiche nei log delle modifiche per le versioni di Puppeteer-core da 19.7.0 a 6.0 nei [log delle modifiche di 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>

**Principali dipendenze**:
+ Runtime Lambda Node.js 16.x
+ Puppeteer-core versione 5.5.0
+ Chromium versione 92.0.4512

**Aggiornamenti in -4.0: syn-nodejs-puppeteer**
+ **Aggiornamento della dipendenza**: la dipendenza Node.js è aggiornata alla versione 16.x.

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

**Importante**  
Questa versione di runtime è stata resa obsoleta l'8 gennaio 2024. Per ulteriori informazioni, consulta [Le versioni di runtime supportano la politica](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Principali dipendenze**:
+ Runtime Lambda Node.js 14.x
+ Puppeteer-core versione 5.5.0
+ Chromium versione 92.0.4512

**Aggiornamenti in -3.9: syn-nodejs-puppeteer**
+ **Aggiornamenti delle dipendenze**: aggiorna alcuni pacchetti di dipendenza di terze parti.

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

**Importante**  
Questa versione di runtime è stata resa obsoleta l'8 gennaio 2024. Per ulteriori informazioni, consulta [Le versioni di runtime supportano la politica](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Principali dipendenze**:
+ Runtime Lambda Node.js 14.x
+ Puppeteer-core versione 5.5.0
+ Chromium versione 92.0.4512

**Aggiornamenti in -3.8: syn-nodejs-puppeteer**
+ **Pulizia del profilo**: i profili Chromium vengono ora puliti dopo ogni esecuzione iella canary.

**Correzioni di bug in -3.8 syn-nodejs-puppeteer**:
+ **Correzioni di bug**: in precedenza, il monitoraggio visivo per le canary talvolta non funzionava correttamente dopo un'esecuzione senza screenshot. Questo problema è stato risolto.

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

**Importante**  
Questa versione di runtime è stata resa obsoleta l'8 gennaio 2024. Per ulteriori informazioni, consulta [Le versioni di runtime supportano la politica](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Principali dipendenze**:
+ Runtime Lambda Node.js 14.x
+ Puppeteer-core versione 5.5.0
+ Chromium versione 92.0.4512

**Aggiornamenti in -3.7: syn-nodejs-puppeteer**
+ **Miglioramento della registrazione**: il canary carica i registri su Amazon S3 anche in caso di timeout o arresti anomali.
+ **Dimensione ridotta per il livello Lambda**: la dimensione del livello Lambda utilizzato per i canary è del 34% inferiore.

**Correzioni di bug in -3.7 syn-nodejs-puppeteer**:
+ **Correzioni di bug**: i caratteri giapponesi, cinesi semplificati e cinesi tradizionali vengono visualizzati correttamente.

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

**Importante**  
Questa versione di runtime è stata resa obsoleta l'8 gennaio 2024. Per ulteriori informazioni, consulta [Le versioni di runtime supportano la politica](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Principali dipendenze**:
+ Runtime Lambda Node.js 14.x
+ Puppeteer-core versione 5.5.0
+ Chromium versione 92.0.4512

**Aggiornamenti in -3.6: syn-nodejs-puppeteer**
+ **Timestamp più precisi**: l'ora di inizio e l'ora di fine delle corse di canary sono ora precisi al millisecondo.

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

**Importante**  
Questa versione di runtime è stata resa obsoleta l'8 gennaio 2024. Per ulteriori informazioni, consulta [Le versioni di runtime supportano la politica](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Principali dipendenze**:
+ Runtime Lambda Node.js 14.x
+ Puppeteer-core versione 5.5.0
+ Chromium versione 92.0.4512

**Aggiornamenti in -3.5: syn-nodejs-puppeteer**
+ **Dependencies aggiornate**— Le uniche nuove funzionalità di questo runtime sono le dipendenze aggiornate.

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

**Importante**  
Questa versione di runtime è stata dichiarata obsoleta il 13 novembre 2022. Per ulteriori informazioni, consulta [Le versioni di runtime supportano la politica](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Principali dipendenze**:
+ Runtime Lambda Node.js 12.x
+ Puppeteer-core versione 5.5.0
+ Chromium versione 88.0.4298.0

**Aggiornamenti in -3.4: syn-nodejs-puppeteer**
+ **Funzione di gestore personalizzato**: ora puoi usare una funzione di gestore personalizzato per gli script del tuo canary. I tempi di esecuzione precedenti hanno richiesto che il punto di ingresso dello script includesse `.handler`. 

  Puoi inoltre inserire gli script del canary in qualsiasi cartella e passare il nome della cartella nel gestore. Ad esempio, è possibile utilizzare `MyFolder/MyScriptFile.functionname` come punto di ingresso.
+ **Informazioni sul file HAR esteso**: ora puoi visualizzare richieste errate, in sospeso e incomplete nei file HAR prodotti dai canary.

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

**Importante**  
Questa versione di runtime è stata dichiarata obsoleta il 13 novembre 2022. Per ulteriori informazioni, consulta [Le versioni di runtime supportano la politica](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Principali dipendenze**:
+ Runtime Lambda Node.js 12.x
+ Puppeteer-core versione 5.5.0
+ Chromium versione 88.0.4298.0

**Aggiornamenti in -3.3: syn-nodejs-puppeteer**
+ **Altre opzioni per la crittografia degli artefatti**: per i canarini che utilizzano questo runtime o versioni successive, invece di utilizzare una chiave AWS gestita per crittografare gli artefatti che Canary archivia in Amazon S3, puoi scegliere di utilizzare AWS KMS una chiave gestita dal cliente o una chiave gestita da Amazon S3. Per ulteriori informazioni, consulta [Crittografia di artefatti canary](CloudWatch_Synthetics_artifact_encryption.md). 

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

**Importante**  
Questa versione di runtime è stata dichiarata obsoleta il 13 novembre 2022. Per ulteriori informazioni, consulta [Le versioni di runtime supportano la politica](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Principali dipendenze**:
+ Runtime Lambda Node.js 12.x
+ Puppeteer-core versione 5.5.0
+ Chromium versione 88.0.4298.0

** syn-nodejs-puppeteerAggiornamenti** in -3.2:
+ **monitoraggio visivo con screenshot**: i canary che utilizzano questo runtime o versioni successive possono confrontare uno screenshot scattato durante un'esecuzione con una versione di riferimento dello stesso screenshot. Se gli screenshot sono più diversi da una soglia percentuale specificata, il canary fallisce. Per ulteriori informazioni, consulta [Monitoraggio visivo](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsLogger_VisualTesting) o [Blueprint di monitoraggio visivo](CloudWatch_Synthetics_Canaries_Blueprints.md#CloudWatch_Synthetics_Canaries_Blueprints_VisualTesting). 
+ **Nuove funzioni relative ai dati sensibili**: puoi impedire la visualizzazione di dati sensibili nei registri e nei report dei canary. Per ulteriori informazioni, consulta [SyntheticsLogHelper classe](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsLogHelper).
+ **Funzione obsolete**: la classe ` RequestResponseLogHelper` è stata resa obsoleta da altre nuove opzioni di configurazione. Per ulteriori informazioni, consulta [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>

**Importante**  
Questa versione di runtime è stata dichiarata obsoleta il 13 novembre 2022. Per ulteriori informazioni, consulta [Le versioni di runtime supportano la politica](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Principali dipendenze**:
+ Runtime Lambda Node.js 12.x
+ Puppeteer-core versione 5.5.0
+ Chromium versione 88.0.4298.0

**Aggiornamenti in -3.1: syn-nodejs-puppeteer**
+ **Possibilità di configurare le CloudWatch metriche**: con questo runtime, puoi disabilitare le metriche che non ti servono. Altrimenti, i canarini pubblicano diverse CloudWatch metriche per ogni corsa canaria.
+ **Collegamento dello screenshot**: puoi collegare uno screenshot a un passaggio del canary dopo che il passaggio è stato completato. Per farlo, procedi nello screenshot tramite il metodo **takeScreenshot** usando il nome del passaggio a cui vuoi associare lo screenshot. Ad esempio, potresti voler eseguire un passaggio, aggiungere un tempo di attesa e quindi eseguire lo screenshot.
+ **Heartbeat Monitor blueprint è in grado di monitorarne più** di uno URLs: puoi utilizzare il blueprint di monitoraggio del battito cardiaco presente nella CloudWatch console per monitorarne più di uno URLs e visualizzare lo stato, la durata, le schermate associate e il motivo dell'errore di ciascun URL nel riepilogo dei passaggi del rapporto Canary Run.

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

**Importante**  
Questa versione di runtime è stata dichiarata obsoleta il 13 novembre 2022. Per ulteriori informazioni, consulta [Le versioni di runtime supportano la politica](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Principali dipendenze**:
+ Runtime Lambda Node.js 12.x
+ Puppeteer-core versione 5.5.0
+ Chromium versione 88.0.4298.0

**Aggiornamenti in -3.0: syn-nodejs-puppeteer**
+ **Dipendenze aggiornate**: questa versione utilizza Puppeteer versione 5.5.0, Node.js 12.x e Chromium 88.0.4298.0.
+ **Accesso al bucket tra più regioni**: ora puoi specificare un bucket S3 in un'altra regione come bucket in cui il canary memorizza i file di log, gli screenshot e i file HAR.
+ **Nuove funzioni disponibili**: questa versione aggiunge funzioni di libreria per recuperare il nome del canary e la versione di runtime di Synthetics.

  Per ulteriori informazioni, consulta [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>

Questa sezione contiene informazioni relative alla versione di runtime `syn-nodejs-2.2`.

**Importante**  
Questa versione di runtime è stata resa obsoleta il 28 maggio 2021. Per ulteriori informazioni, consulta [Le versioni di runtime supportano la politica](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Principali dipendenze**:
+ Runtime Lambda Node.js 10.x
+ Puppeteer-core versione 3.3.0
+ Chromium versione 83.0.4103.0

**Modifiche in syn-nodejs-2.2**:
+ **Monitora i tuoi canarini seguendo le fasi HTTP: ora puoi testarne** più di uno in un unico canarino. APIs Ogni API viene testata come passaggio HTTP separato e CloudWatch Synthetics monitora lo stato di ogni passaggio utilizzando le metriche dei passaggi e il rapporto sui passaggi Synthetics. CloudWatch CloudWatch Synthetics ` SuccessPercent` crea `Duration` e metrica per ogni passaggio HTTP.

  Questa funzionalità è implementata dalla funzione **executeHttpStep(StepName, RequestOptions, callback, stepConfig**). Per ulteriori informazioni, consulta [executeHttpStep(StepName, RequestOptions, [callback], [StepConfig])](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_executeHttpStep).

  Il blueprint del canary API viene aggiornato per utilizzare questa nuova funzionalità.
+ **Segnalazione delle richieste HTTP**: ora puoi visualizzare report dettagliati sulle richieste HTTP che raccolgono dettagli come request/response intestazioni, corpo della risposta, codice di stato, tempi di errore e prestazioni, tempo di connessione TCP, tempo di handshake TLS, tempo del primo byte e tempo di trasferimento del contenuto. Tutte le richieste HTTP che utilizzano il HTTP/HTTPS modulo sottostante vengono acquisite qui. Le intestazioni e il corpo della risposta non vengono acquisiti per impostazione predefinita, ma possono essere attivati impostando le opzioni di configurazione.
+ **Configurazione globale e a livello di fase: puoi impostare le configurazioni CloudWatch Synthetics a livello globale, che vengono applicate a tutti i passaggi** di Canaries. È inoltre possibile sovrascrivere queste configurazioni a livello di fase passando coppie di configurazione key/value per abilitare o disabilitare determinate opzioni.

  Per ulteriori informazioni, consulta [SyntheticsConfiguration classe](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsConfiguration).
+ **Continuazione della configurazione di errore di fase**: puoi scegliere di continuare l'esecuzione del canary quando una fase non va a buon fine. Per la funzione ` executeHttpStep`, questa funzione è abilitata per impostazione predefinita. Puoi impostare questa opzione una volta a livello globale o impostarla in modo diverso per fase. 

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

**Importante**  
Questa versione di runtime è stata resa obsoleta il 28 maggio 2021. Per ulteriori informazioni, consulta [Le versioni di runtime supportano la politica](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Principali dipendenze**:
+ Runtime Lambda Node.js 10.x
+ Puppeteer-core versione 3.3.0
+ Chromium versione 83.0.4103.0

**Aggiornamenti in syn-nodejs-2.1**
+ **Comportamento dello screenshot configurabile**: offre la possibilità di disattivare l'acquisizione di screenshot da parte dei canary dell'interfaccia utente. Nei canary che utilizzano versioni di runtime precedenti, i canary dell'interfaccia utente acquisiscono sempre screenshot prima e dopo ogni fase. Con `syn-nodejs-2.1`, questo comportamento è configurabile. La disattivazione degli screenshot può ridurre i costi di stoccaggio di Amazon S3 e può aiutarti a rispettare le normative HIPAA. Per ulteriori informazioni, consulta [SyntheticsConfiguration classe](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsConfiguration).
+ **Personalizzazione dei parametri di avvio di Google Chrome**: ora puoi configurare gli argomenti utilizzati quando un canary avvia una finestra del browser Google Chrome. Per ulteriori informazioni, consulta [launch(options)](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_LaunchOptions).

Può verificarsi un piccolo aumento della durata del canary quando utilizzi syn-nodejs-2.0 o versioni successive, rispetto alle versioni di runtime precedenti del canary.

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

**Importante**  
Questa versione di runtime è stata resa obsoleta il 28 maggio 2021. Per ulteriori informazioni, consulta [Le versioni di runtime supportano la politica](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Principali dipendenze**:
+ Runtime Lambda Node.js 10.x
+ Puppeteer-core versione 3.3.0
+ Chromium versione 83.0.4103.0

**Aggiornamenti in syn-nodejs-2.0**:
+ **Dipendenze aggiornate**: questa versione di runtime utilizza Puppeteer-core versione 3.3.0 e Chromium 83.0.4103.0
+ **Supporto del tracciamento attivo di X-Ray.** Quando un canarino ha il tracciamento abilitato, vengono inviate tracce X-Ray per tutte le chiamate effettuate dal canarino che utilizzano il browser, l' AWS SDK o i moduli HTTP o HTTPS. I canary con tracciamento abilitato vengono visualizzati sulla mappa di tracciamento X-Ray, anche quando non inviano richieste ad altri servizi o applicazioni che hanno il tracciamento abilitato. Per ulteriori informazioni, consulta [Canary e tracciamento X-Ray](CloudWatch_Synthetics_Canaries_tracing.md).
+ **Synthetics** Reporting: per ogni corsa di Canary CloudWatch , Synthetics crea un ` SyntheticsReport-PASSED.json` rapporto ` SyntheticsReport-FAILED.json` denominato o che registra dati come ora di inizio, ora di fine, stato e guasti. Registra inoltre lo PASSED/FAILED stato di ogni fase dello script Canary, nonché gli errori e gli screenshot acquisiti per ogni passaggio.
+ **Report sul controllo del collegamento interrotto**: la nuova versione del controllo del collegamento interrotto incluso in questo runtime crea un report che include i collegamenti controllati, il codice di stato, il motivo dell'errore (se presente) e gli screenshot della pagina di origine e di destinazione.
+ **Nuove CloudWatch metriche**: Synthetics pubblica metriche `2xx` denominate`4xx`,, `5xx` e nel namespace. `RequestFailed` `CloudWatchSynthetics` Questi parametri mostrano il numero di 200, 400, 500 e errori di richiesta nelle esecuzioni di canary. Con questa versione di runtime, questi parametri vengono segnalati solo per i canary dell'interfaccia utente e non vengono segnalati per i canary delle API. Vengono segnalati anche per i canary delle API a partire dalla versione di runtime ` syn-nodejs-puppeteeer-2.2`.
+ **File HAR ordinabili**: ora puoi ordinare i file HAR in base al codice di stato, alle dimensioni della richiesta e alla durata.
+ **Timestamp delle metriche**: le CloudWatch metriche vengono ora riportate in base all'ora di invocazione Lambda anziché all'ora di fine dell'esecuzione Canary.

**Correzioni di bug in syn-nodejs-2.0**:
+ Risolto il problema di errori di caricamento degli artefatti del canary che non venivano segnalati. Tali errori sono ora emersi come errori di esecuzione.
+ Risolto il problema di richieste reindirizzate (3xx) che venivano registrate in modo errato come errori.
+ Risolto il problema della numerazione degli screenshot a partire da 0. Ora dovrebbero iniziare con 1.
+ Risolto il problema di screenshot confusi per caratteri cinesi e giapponesi.

Può verificarsi un piccolo aumento della durata del canary quando utilizzi syn-nodejs-2.0 o versioni successive, rispetto alle versioni di runtime precedenti del canary.

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

**Importante**  
Questa versione di runtime è stata resa obsoleta l'8 febbraio 2021. Per ulteriori informazioni, consulta [Le versioni di runtime supportano la politica](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Principali dipendenze**:
+ Runtime Lambda Node.js 10.x
+ Puppeteer-core versione 3.3.0
+ Chromium versione 83.0.4103.0

**Modifiche in syn-nodejs-2.0-beta**:
+ **Dipendenze aggiornate**: questa versione di runtime utilizza Puppeteer-core versione 3.3.0 e Chromium 83.0.4103.0
+ **Synthetics** Reporting: per ogni corsa di Canary CloudWatch , Synthetics crea un ` SyntheticsReport-PASSED.json` rapporto ` SyntheticsReport-FAILED.json` denominato o che registra dati come ora di inizio, ora di fine, stato e guasti. Registra inoltre lo PASSED/FAILED stato di ogni fase dello script Canary, nonché gli errori e gli screenshot acquisiti per ogni passaggio.
+ **Report sul controllo del collegamento interrotto**: la nuova versione del controllo del collegamento interrotto incluso in questo runtime crea un report che include i collegamenti controllati, il codice di stato, il motivo dell'errore (se presente) e gli screenshot della pagina di origine e di destinazione.
+ **Nuove CloudWatch metriche**: Synthetics pubblica metriche `2xx` denominate`4xx`,, `5xx` e nel namespace. `RequestFailed` `CloudWatchSynthetics` Questi parametri mostrano il numero di 200, 400, 500 e errori di richiesta nelle esecuzioni di canary. Questi parametri vengono segnalati solo per i canary dell'interfaccia utente e non vengono segnalati per i canary delle API.
+ **File HAR ordinabili**: ora puoi ordinare i file HAR in base al codice di stato, alle dimensioni della richiesta e alla durata.
+ **Timestamp delle metriche**: le CloudWatch metriche vengono ora riportate in base all'ora di invocazione Lambda anziché all'ora di fine dell'esecuzione Canary.

**Correzioni di bug in syn-nodejs-2.0-beta**:
+ Risolto il problema di errori di caricamento degli artefatti del canary che non venivano segnalati. Tali errori sono ora emersi come errori di esecuzione.
+ Risolto il problema di richieste reindirizzate (3xx) che venivano registrate in modo errato come errori.
+ Risolto il problema della numerazione degli screenshot a partire da 0. Ora dovrebbero iniziare con 1.
+ Risolto il problema di screenshot confusi per caratteri cinesi e giapponesi.

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

La prima versione di runtime di Synthetics è `syn-1.0`.

**Principali dipendenze**:
+ Runtime Lambda Node.js 10.x
+ Puppeteer-core versione 1.14.0
+ La versione Chromium che corrisponde a Puppeteer-core 1.14.0

# Versioni di runtime che utilizzano Python e Selenium Webdriver
<a name="CloudWatch_Synthetics_Library_python_selenium"></a>

Le seguenti sezioni contengono informazioni sulle versioni di runtime di CloudWatch Synthetics per Python e Selenium Webdriver. Selenium è uno strumento open source di automazione del browser. [Per ulteriori informazioni su Selenium, vedere www.selenium.dev/](https://www.selenium.dev)

Per le funzionalità e i metodi supportati dal runtime di Synthetics sul framework Selenium, consulta [Classi e funzioni delle librerie Python e Selenium che si applicano solo ai canary dell'interfaccia utente](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library_Python.html#CloudWatch_Synthetics_Library_Python_UIcanaries) e la [documentazione di riferimento all'API Selenium](https://www.selenium.dev/selenium/docs/api/py/api.html).

La convenzione di denominazione per queste versioni di runtime è `syn-language -framework-majorversion. minorversion`.

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

La versione 10.0 è il più recente runtime CloudWatch Synthetics per Python e Selenium.

**Principali dipendenze**:
+ Python 3.11
+ Selenium 4.32.0
+ Versione Chromium 145.0.7632.77

**Modifiche syn-python-selenium in -10.0** 
+ Patch di sicurezza applicate e versioni aggiornate del browser.

Per ulteriori informazioni, consulta gli argomenti seguenti:
+  [Log delle modifiche di Selenium](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Documentazione su Selenium](https://www.selenium.dev/selenium/docs/api/py/api.html) 

## Versioni di runtime precedenti per Python e Selenium
<a name="Previousversions-python-selenium"></a>

Le seguenti versioni di runtime precedenti per Python e Selenium sono ancora supportate. 

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

**Principali dipendenze**:
+ Python 3.11
+ Selenium 4.32.0
+ Versione Chromium 143.0.7499.169

**Modifiche syn-python-selenium in -9.0** 
+ Patch di sicurezza applicate e versioni aggiornate del browser.

Per ulteriori informazioni, consulta gli argomenti seguenti:
+  [Log delle modifiche di Selenium](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Documentazione su 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 versione 8.0 è il più recente runtime CloudWatch Synthetics per Python e Selenium.

**Principali dipendenze**:
+ Python 3.11
+ Selenium 4.32.0
+ Versione Chromium 142.0.7444.175

**Modifiche syn-python-selenium in -8.0** 
+ Patch di sicurezza applicate e versioni aggiornate di Selenium e del browser.
+ Modificato il livello di registro delle richieste di rete HAR non riuscite da ERROR a INFO.

Per ulteriori informazioni, consulta gli argomenti seguenti:
+  [Log delle modifiche di Selenium](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Documentazione su 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>

**Principali dipendenze**:
+ Python 3.11
+ Selenium 4.32.0
+ Chromium versione 138.0.7204.168

 ** syn-python-seleniumModifiche in -7.0** 
+ Patch di sicurezza applicate e versioni aggiornate di Selenium e del browser.

Per ulteriori informazioni, consulta gli argomenti seguenti:
+  [Log delle modifiche di Selenium](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Documentazione su 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>

**Principali dipendenze**:
+ Python 3.11
+ Selenium 4.21.0
+ Versione Chromium 131.0.6778.264

 **Modifiche nella syn-python-selenium versione -6.0** 
+ Aggiornamento da Python 3.9 a Python 3.11.

Per ulteriori informazioni, consulta gli argomenti seguenti:
+  [Log delle modifiche di Selenium](https://www.selenium.dev/blog/2024/selenium-4-21-released/) 
+  [Documentazione su 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>

**Principali dipendenze**:
+ Python 3.9
+ Selenium 4.21.0
+ Versione Chromium 131.0.6778.264

 **Modifiche syn-python-selenium in -5.1** 
+ Aggiornamenti minori sull'emissione di metriche.
+ Supporta il processo di test per il canary, consentendo esecuzioni ad hoc o l'esecuzione di un aggiornamento sicuro del canary.

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

**Principali dipendenze**:
+ Python 3.9
+ Selenium 4.21.0
+ Versione Chromium 131.0.6778.264

**Modifiche syn-python-selenium in -5.0:**
+ Nuovo tentativo automatico se il browser non si avvia.

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

**Principali dipendenze**:
+ Python 3.9
+ Selenium 4.15.1
+ Chromium versione 126.0.6478.126

**Modifiche in -4.1: syn-python-selenium**
+ **Risolve una vulnerabilità di sicurezza**: questo runtime contiene un aggiornamento per risolvere la vulnerabilità [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>

**Principali dipendenze**:
+ Python 3.9
+ Selenium 4.15.1
+ Chromium versione 126.0.6478.126

**Modifiche in -4.0: syn-python-selenium**
+ **Correzioni di bug** per errori nella registrazione del parser HAR.

## Versioni di runtime rese obsolete per Python e Selenium
<a name="Deprecated-python-selenium"></a>

Le seguenti versioni di runtime precedenti per Python e Selenium sono state rese obsolete. Per informazioni sulle date di obsolescenza del runtime, consulta [CloudWatch Date di deprecazione del runtime di Synthetics](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>

**Principali dipendenze**:
+ Python 3.8
+ Selenium 4.15.1
+ Chromium versione 121.0.6167.139

**Modifiche nella versione -3.0: syn-python-selenium**
+ **Versioni aggiornate delle librerie in bundle in Chromium**: la dipendenza di Chromium è stata aggiornata a una nuova versione.

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

**Principali dipendenze**:
+ Python 3.8
+ Selenium 4.15.1
+ Chromium versione 111.0.5563.146

**Modifiche in -2.1: syn-python-selenium**
+ **Versioni aggiornate delle librerie in bundle in Chromium**: le dipendenze di Chromium e Selenium sono state aggiornate alle nuove versioni.

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

**Principali dipendenze**:
+ Python 3.8
+ Selenium 4.10.0
+ Chromium versione 111.0.5563.146

**Modifiche in -2.0: syn-python-selenium**
+ **Dipendenze aggiornate**: le dipendenze Chromium e Selenium sono aggiornate alle nuove versioni.

**Correzioni di bug in -2.0 syn-python-selenium**:
+ **Timestamp aggiunto**: è stato aggiunto un timestamp ai log del canary.
+ **Riutilizzo della sessione**: è stato corretto un bug che impediva ai canary di riutilizzare la sessione della precedente esecuzione canary.

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

**Principali dipendenze**:
+ Python 3.8
+ Selenium 3.141.0
+ Chromium versione 92.0.4512.0

**Modifiche in -1.3: syn-python-selenium**
+ **Timestamp più precisi**: l'ora di inizio e l'ora di fine delle corse di canary sono ora precisi al millisecondo.

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

**Principali dipendenze**:
+ Python 3.8
+ Selenium 3.141.0
+ Chromium versione 92.0.4512.0
+ **Dependencies aggiornate**— Le uniche nuove funzionalità di questo runtime sono le dipendenze aggiornate.

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

**Principali dipendenze**:
+ Python 3.8
+ Selenium 3.141.0
+ Chromium versione 83.0.4103.0

**Funzionalità:**
+ **Funzione di gestore personalizzato**: ora puoi usare una funzione di gestore personalizzato per gli script del tuo canary. I tempi di esecuzione precedenti hanno richiesto che il punto di ingresso dello script includesse `.handler`. 

  Puoi inoltre inserire gli script del canary in qualsiasi cartella e passare il nome della cartella nel gestore. Ad esempio, è possibile utilizzare `MyFolder/MyScriptFile.functionname` come punto di ingresso.
+ **Opzioni di configurazione per l'aggiunta di parametri e configurazioni di errori di passaggio**: queste opzioni erano già disponibili nei tempi di esecuzione per i canary Node.js. Per ulteriori informazioni, consulta [SyntheticsConfiguration classe](CloudWatch_Synthetics_Canaries_Library_Python.md#CloudWatch_Synthetics_Library_SyntheticsConfiguration_Python).
+ **Argomenti personalizzati in Chrome**: ora puoi aprire un browser in modalità di navigazione in incognito o passare alla configurazione del server proxy. Per ulteriori informazioni, consulta [Chrome()](CloudWatch_Synthetics_Canaries_Library_Python.md#CloudWatch_Synthetics_Library_Python_Chrome).
+ **Bucket di artefatti tra regioni**: un canary può archiviare i propri artefatti in un bucket Amazon S3 in un'altra regione.
+ **Correzioni di bug, inclusa una correzione per il problema `index.py`**: con i tempi di esecuzione precedenti, un file canary denominato ` index.py` ha causato eccezioni perché era in conflitto con il nome del file della libreria. Questo problema è stato risolto.

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

**Principali dipendenze**:
+ Python 3.8
+ Selenium 3.141.0
+ Chromium versione 83.0.4103.0

**Funzionalità:**
+ **Supporto per Selenium**: puoi scrivere script canary utilizzando il framework di test Selenium. Puoi trasferire i tuoi script Selenium da altrove in Synthetics con modifiche minime e CloudWatch funzioneranno con i servizi. AWS 

# Versioni di runtime che utilizzano Node.js
<a name="CloudWatch_Synthetics_Library_Nodejs"></a>

La sezione seguente contiene informazioni sulle versioni di runtime di CloudWatch Synthetics per Node.js. Questo runtime non include alcun browser o framework.

La convenzione di denominazione per queste versioni di runtime è `syn-language -majorversion.minorversion`.

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

**Importante**  
A partire da `syn-nodejs-3.1` Synthetics e versioni successive, il runtime Synthetics utilizza il nuovo spazio dei nomi. Esegui la migrazione dello script Canary per utilizzare il nuovo namespace. Lo spazio dei nomi legacy verrà dichiarato obsoleto in una versione futura.  
amzn/synthetics-core → @aws/synthetics@ -core

**Principali dipendenze**:
+ AWS Lambda runtime Node.js 22.x

 **Modifiche in syn-nodejs-4.1** 
+ Esegui l'aggiornamento alla versione 5.5.7 `fast-xml-parser` per risolvere i seguenti problemi: CVEs
  + CVE-2026-25128
  + CVE-2026-25896
  + CVE-2026-26278
  + CVE-2026-27942
  + CVE-2026-33036

## Versioni di runtime precedenti per Node.js
<a name="Previousversions-nodejs"></a>

Le seguenti versioni precedenti di runtime di Node.js sono ancora supportate. 

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

**Principali dipendenze**:
+ AWS Lambda runtime Node.js 22.x

 **Modifiche in syn-nodejs-4.0** 
+ Patch di sicurezza applicate. 

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

**Importante**  
A partire da `syn-nodejs-3.1` Synthetics e versioni successive, il runtime Synthetics utilizza il nuovo spazio dei nomi. Esegui la migrazione dello script Canary per utilizzare il nuovo namespace. Lo spazio dei nomi legacy verrà dichiarato obsoleto in una versione futura.  
amzn/synthetics-core → @aws/synthetics@ -core

**Principali dipendenze**:
+ AWS Lambda runtime Node.js 20.x

 **Modifiche in syn-nodejs-3.1** 
+ Migrazione dello spazio dei nomi in runtime Synthetics. 
+ [La definizione del tipo è disponibile nel registro npm.](https://www.npmjs.com/package/@aws/synthetics-core) Assicurati che la versione del pacchetto di definizione del tipo corrisponda alla versione di runtime del tuo canarino.

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

**Principali dipendenze**:
+ AWS Lambda runtime Node.js 20.x

 **Modifiche in syn-nodejs-3.0** 
+ Support per il blueprint multi-check. 

# Le versioni di runtime supportano la politica
<a name="CloudWatch_Synthetics_Runtime_Support_Policy"></a>

Le versioni runtime di Synthetics sono soggette ad aggiornamenti di manutenzione e sicurezza. Quando un componente di una versione runtime non è più supportato, la versione runtime di Synthetics viene resa obsoleta.

Non è possibile creare nuovi canary utilizzando versioni runtime obsolete. I canary che utilizzano runtime obsoleti continueranno a funzionare. Puoi interrompere, avviare ed eliminare questi Canary. Puoi aggiornare un canary esistente che utilizza versioni runtime obsolete aggiornando il canary per utilizzare una versione di runtime supportata.

CloudWatch Synthetics ti avvisa via e-mail se hai canari che utilizzano runtime programmati per essere obsoleti nei prossimi 60 giorni. Ti consigliamo di eseguire la migrazione dei canary a una versione runtime supportata per trarre vantaggio dai nuovi miglioramenti alle funzionalità, alla sicurezza e alle prestazioni inclusi nelle versioni più recenti. 

## CloudWatch Date di deprecazione del runtime di Synthetics
<a name="runtime_deprecation_dates"></a>

La tabella seguente elenca la data di deprecazione di ogni runtime Synthetics obsoleto. CloudWatch 


| Versione di runtime | Data di deprecazione | 
| --- | --- | 
|   `syn-python-selenium-5.1`   |  3 febbraio 2026  | 
|   `syn-python-selenium-5.0`   |  3 febbraio 2026  | 
|   `syn-python-selenium-4.1`   |  3 febbraio 2026  | 
|   `syn-python-selenium-4.0`   |  3 febbraio 2026  | 
|   `syn-nodejs-puppeteer-7.0`   |  22 gennaio 2026  | 
|   `syn-nodejs-puppeteer-6.2`   |  22 gennaio 2026  | 
|   `syn-nodejs-puppeteer-5.2`   |  22 gennaio 2026  | 
|   `syn-python-selenium-3.0`   |  22 gennaio 2026  | 
|   `syn-python-selenium-2.1`   |  22 gennaio 2026  | 
|   `syn-nodejs-puppeteer-6.1`   |  8 marzo 2024  | 
|   `syn-nodejs-puppeteer-6.0`   |  8 marzo 2024  | 
|   `syn-nodejs-puppeteer-5.1`   |  8 marzo 2024  | 
|   `syn-nodejs-puppeteer-5.0`   |  8 marzo 2024  | 
|   `syn-nodejs-puppeteer-4.0`   |  8 marzo 2024  | 
|   `syn-nodejs-puppeteer-3.9`   |  8 gennaio 2024  | 
|   `syn-nodejs-puppeteer-3.8`   |  8 gennaio 2024  | 
|   `syn-python-selenium-2.0`   |  8 marzo 2024  | 
|   `syn-python-selenium-1.3`   |  8 marzo 2024  | 
|   `syn-python-selenium-1.2`   |  8 marzo 2024  | 
|   `syn-python-selenium-1.1`   |  8 marzo 2024  | 
|   `syn-python-selenium-1.0`   |  8 marzo 2024  | 
|   `syn-nodejs-puppeteer-3.7`   |  8 gennaio 2024  | 
|   `syn-nodejs-puppeteer-3.6`   |  8 gennaio 2024  | 
|   `syn-nodejs-puppeteer-3.5`   |  8 gennaio 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 maggio 2021  | 
|   `syn-nodejs-2.1`   |  28 maggio 2021  | 
|   `syn-nodejs-2.0`   |  28 maggio 2021  | 
|   `syn-nodejs-2.0-beta`   |  8 febbraio 2021  | 
|   `syn-1.0`   |  28 maggio 2021  | 

# Aggiornamento delle versioni di runtime
<a name="CloudWatch_Synthetics_Runtime_Version_Update"></a>

Puoi aggiornare la versione di runtime di Canary utilizzando la CloudWatch console AWS CloudFormation, o l'SDK. AWS CLI AWS **Quando usi la CloudWatch console, puoi aggiornare fino a cinque canarini contemporaneamente selezionandoli nella pagina dell'elenco dei canarini e quindi scegliendo **Azioni**, Aggiorna Runtime.**

Puoi verificare l'aggiornamento testandolo prima di eseguire l'aggiornamento in fase di esecuzione. Quando aggiorni le versioni di runtime, scegli le opzioni **Start Dry Run** o **Convalida e salva le opzioni successive** nella CloudWatch console per creare una versione a secco del canary originale insieme a tutte le modifiche apportate alla configurazione. Il processo di test aggiornerà ed eseguirà il canary per verificare se l'aggiornamento del runtime è sicuro per il canary. Dopo aver verificato il canary con la nuova versione di runtime, puoi aggiornare la versione di runtime del tuo canary. Per ulteriori informazioni, consulta [Esecuzione di aggiornamenti sicuri sul canary](performing-safe-canary-upgrades.md).

In alternativa, puoi verificare l'aggiornamento clonando prima il canarino utilizzando la CloudWatch console e aggiornando la versione di runtime. Questo crea un altro canary che è un clone del tuo canary originale. Dopo aver verificato il canary con la nuova versione di runtime, puoi aggiornare la versione di runtime del canary originale ed eliminare il canary clone.

 Puoi anche aggiornare più canary utilizzando uno script di aggiornamento. Per ulteriori informazioni, consulta [Script di aggiornamento del runtime del canary](#CloudWatch_Synthetics_Canaries_upgrade_script).

Se aggiorni un canary e l'operazione non va a buon fine, consulta [Risoluzione dei problemi di un canary fallito](CloudWatch_Synthetics_Canaries_Troubleshoot.md).

## Script di aggiornamento del runtime del canary
<a name="CloudWatch_Synthetics_Canaries_upgrade_script"></a>

Per aggiornare uno script canary a una versione di runtime supportata, utilizza lo script seguente.

```
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));
}
```

# Scrivere uno script canary
<a name="CloudWatch_Synthetics_Canaries_WritingCanary"></a>

Le sezioni seguenti spiegano come scrivere uno script canarino e come integrare un canary con altri AWS servizi e con dipendenze e librerie esterne.

**Topics**
+ [Scrittura di uno script canary utilizzando il runtime Java](Synthetics_WritingCanary_Java.md)
+ [Scrittura di uno script canary Node.js utilizzando il runtime Playwright](Synthetics_WritingCanary_Nodejs_Playwright.md)
+ [Scrittura di uno script canary Node.js utilizzando il runtime Puppeteer](CloudWatch_Synthetics_Canaries_WritingCanary_Nodejs_Pup.md)
+ [Scrivere uno script canary Python](CloudWatch_Synthetics_Canaries_WritingCanary_Python.md)
+ [Scrittura di una configurazione JSON per il blueprint Node.js multi Checks](CloudWatch_Synthetics_WritingCanary_Multichecks.md)

# Scrittura di uno script canary utilizzando il runtime Java
<a name="Synthetics_WritingCanary_Java"></a>

**Topics**
+ [Struttura del progetto Java per un canary](#Synthetics_canary_Java_package)
+ [Impacchettamento del progetto per un canary](#Synthetics_canary_Java_package_canary)
+ [Nome del gestore](#Synthetics_canary_Java_handler)
+ [CloudWatch Configurazioni Synthetics](#Synthetics_canary_Java_config)
+ [CloudWatch Variabili di ambiente Synthetics](#Synthetics_canary_Java_variables)

## Struttura del progetto Java per un canary
<a name="Synthetics_canary_Java_package"></a>

Per creare un canary in Java, è necessario scrivere il codice, compilarlo e implementare gli artefatti compilati su Synthetics. È possibile inizializzare un progetto Java Lambda in vari modi. Ad esempio, puoi utilizzare una configurazione di progetto Java standard nel tuo IDE preferito, come IntelliJ IDEA o Visual Studio Code. In alternativa, è possibile creare manualmente la struttura di file richiesta.

Un progetto Java Synthetics contiene la seguente struttura generale:

```
/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
```

Puoi usare Maven o Gradle per creare il tuo progetto e gestire le dipendenze.

Nella struttura precedente, la classe `ExampleCanary` è il punto di ingresso o il gestore per il canary.

 **Esempio di classe canary in Java** 

Questo esempio prevede che un canarino effettui una richiesta get a un URL memorizzato nella variabile di ambiente *TESTING\$1URL* Lambda. Il canary non utilizza nessuno dei metodi forniti dal runtime 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);
      }
  }
}
```

È fortemente consigliata la suddivisione in moduli dei canary utilizzando la funzione di libreria `executeStep` fornita da Synthetics. Il canarino effettua `get` chiamate a due variabili separate URLs , provenienti da e di ambiente. URL1 URL2 

**Nota**  
Per utilizzare la funzionalità `executeStep`, il metodo del gestore per il canary dovrebbe contemplare un parametro di tipo Synthetics come mostrato di seguito. 

```
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();
  }
}
```

## Impacchettamento del progetto per un canary
<a name="Synthetics_canary_Java_package_canary"></a>

Synthetics accetta il codice per un canary java in formato *zip*. Lo zip è composto dai file di classe per il codice canary, dai jar per eventuali dipendenze di terze parti e dal file di configurazione Synthetics.

Uno zip Java Synthetics contiene la seguente struttura generale.

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

Per creare questo zip dalla struttura del progetto precedente, puoi usare gradle (build.gradle) o maven (pom.xml). Ecco un esempio.

[Per informazioni sulle dipendenze o sulle interfacce in fase di compilazione per la libreria Synthetics, vedere il README in -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"
}
```

## Nome del gestore
<a name="Synthetics_canary_Java_handler"></a>

Il nome del gestore è il punto di ingresso per il canary. Per il runtime Java, il gestore ha il seguente formato.

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

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

È possibile configurare il comportamento del runtime Java Synthetics fornendo un file di configurazione JSON facoltativo denominato `synthetics.json`. Questo file deve essere incluso nella directory root dell'archivio zip del pacchetto. Sebbene un file di configurazione sia facoltativo, se non viene fornito un file di configurazione o manca una chiave di configurazione, CloudWatch utilizza le impostazioni predefinite.

Di seguito sono riportati i valori di configurazione supportati e i relativi valori predefiniti.

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

 **Configurazioni di passaggio** 
+ *continueOnStepFallimento*: determina se uno script deve continuare anche dopo che un passaggio è fallito. Il valore predefinito è false.
+ *stepSuccessMetric*: determina se viene emessa la metrica ` SuccessPercent` di un passaggio. La `SuccessPercent` metrica per un passaggio è *100* per l'esecuzione di Canary se l'operazione ha esito positivo e *0* se la fase fallisce. Il valore predefinito è *true*.
+ *stepDurationMetric*— Determina se viene emessa la metrica della *durata* di un passaggio. La metrica *Duration* viene emessa come durata, in millisecondi, dell'esecuzione del passaggio. *L'impostazione predefinita è true.*

 **Configurazioni di registrazione** 

Si applica ai log generati da CloudWatch Synthetics. Controlla la verbosità dei log di richieste e risposte.
+ *logRequest*: specifica se registrare ogni richiesta nei log del canary. Il valore predefinito è false.
+ *logResponse*: specifica se registrare ogni risposta nei log del canary. Il valore predefinito è false.

 **Configurazioni delle metriche HTTP** 

Configurazioni per le metriche relative al conteggio delle richieste di rete con codici di stato HTTP diversi, emesse da Synthetics CloudWatch per questo canarino.
+ *metric\$12xx — Speciifica se emettere la metrica 2xx* *(con la dimensione) per questo canarino.* CanaryName Il valore predefinito è *true*.
+ *metric\$14xx — Speciifica se emettere la metrica 4xx* *(con la dimensione) per questo canarino.* CanaryName Il valore predefinito è *true*.
+ *metric\$15xx — Speciifica se emettere la metrica 5xx* *(con la dimensione) per questo canarino.* CanaryName Il valore predefinito è *true*.
+ *Aggregated2xxMetric: specifica se emettere la metrica* *2xx (senza la dimensione) per questo canarino.* CanaryName Il valore predefinito è *true*.
+ *Aggregated4xxMetric: specifica se emettere la metrica 4xx* *(senza la dimensione) per questo canarino.* CanaryName Il valore predefinito è *true*.
+ *Aggregated5xxMetric: specifica se emettere la metrica 5xx* *(senza la dimensione) per questo canarino.* CanaryName Il valore predefinito è *true*.

 **Configurazioni delle metriche del canary** 

Configurazioni per altre metriche emesse da Synthetics. CloudWatch 
+ *failedCanaryMetric*Network Access Analyzer specifica se emettere la metrica *Failed* (con la dimensione) per questo canarino. CanaryName Il valore predefinito è *true*.
+ *aggregatedFailedCanaryMetrica*: specifica se emettere la metrica *Failed (senza* la dimensione) per questo canarino. CanaryName Il valore predefinito è *true*.

## CloudWatch Variabili di ambiente Synthetics
<a name="Synthetics_canary_Java_variables"></a>

È possibile configurare il livello e il formato di registrazione utilizzando le variabili di ambiente.

 **Formato dei log** 

Il CloudWatch runtime Java Synthetics CloudWatch crea registri per ogni esecuzione di Canary. I log sono scritti in formato JSON per facilitare le interrogazioni. Facoltativamente, è possibile modificare il formato del log in *TEXT*.
+ *Nome della variabile di ambiente*: CW\$1SYNTHETICS\$1LOG\$1FORMAT
+ *Valori supportati*: JSON, TEXT
+ *Impostazione predefinita*: JSON

 **Livelli di log** 
+ *Nome della variabile di ambiente*: CW\$1SYNTHETICS\$1LOG\$1LEVEL
+ *Valori supportati*: TRACE, DEBUG, INFO, WARN, ERROR, FATAL
+ *Impostazione predefinita*: INFO

Oltre alle variabili di ambiente di cui sopra, ne è stata aggiunta una predefinita per il runtime Java, la variabile di ambiente `AWS_LAMBDA-EXEC_WRAPPER` per la tua funzione, e il valore è impostato su `/opt/synthetics-otel-instrument`. Questa variabile di ambiente modifica il comportamento di startup della funzione per la telemetria. Se questa variabile di ambiente esiste già, assicurati che sia impostata sul valore richiesto.

# Scrittura di uno script canary Node.js utilizzando il runtime Playwright
<a name="Synthetics_WritingCanary_Nodejs_Playwright"></a>

**Topics**
+ [Creazione di pacchetti dei file canary Node.js per il runtime di Playwright](#Synthetics_canary_Nodejs_Playwright_package)
+ [Modifica di uno script Playwright esistente da utilizzare come canarino Synthetics CloudWatch](#CloudWatch_Synthetics_canary_edit_Playwright_script)
+ [CloudWatch Configurazioni Synthetics](#Synthetics_canary_configure_Playwright_script)

## Creazione di pacchetti dei file canary Node.js per il runtime di Playwright
<a name="Synthetics_canary_Nodejs_Playwright_package"></a>

 Il tuo script canary comprende un file `.js` (sintassi CommonJS) o `.mjs` (sintassi ES) contenente il codice del gestore Synthetics, insieme a tutti i pacchetti e moduli aggiuntivi da cui dipende il codice. Gli script creati in formato ES (ECMAScript) devono utilizzare .mjs come estensione o includere un file package.json con il set di campi «type»: «module». A differenza di altri runtime come Node.js Puppeteer, non è necessario salvare gli script in una struttura di cartelle specifica. Puoi direttamente creare pacchetti dei tuoi script. Utilizza il tuo strumento di compressione `zip` preferito per creare un file `.zip` con il file gestore nella directory root. Se il tuo script canary dipende da pacchetti o moduli aggiuntivi non inclusi nel runtime Synthetics, puoi aggiungere queste dipendenze al tuo file `.zip`. A tale scopo, puoi installare le librerie richieste dalla tua funzione nella directory `node_modules` eseguendo il comando `npm install`. I seguenti comandi della CLI di esempio creano un file `.zip` denominato `my_deployment_package.zip`, contenente il file `index.js` o `index.mjs` (gestore Synthetics) e le relative dipendenze. Nell'esempio, installi le dipendenze utilizzando il gestore di pacchetti `npm`.

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

Crea un file `.zip` dei contenuti della cartella di progetto della directory root. Utilizza l'opzione `r` (ricorsiva), come illustrato nell'esempio seguente, per assicurarti che `zip` comprima le sottocartelle.

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

Aggiungi un file di configurazione Synthetics per configurare il comportamento di Synthetics. CloudWatch Puoi creare un file `synthetics.json` e salvarlo nello stesso percorso del punto di ingresso o del file del gestore.

Facoltativamente, puoi anche archiviare il file del punto di ingresso in una struttura di cartelle a tua scelta. Tuttavia, assicurati che il percorso della cartella sia specificato nel nome del gestore.

 **Nome del gestore** 

Assicurati di impostare il punto di ingresso dello script del tuo canary (gestore) in modo che ` myCanaryFilename.functionName` corrisponda al nome del file del punto di ingresso dello script. Facoltativamente, puoi anche archiviare il canary in una cartella separata, ad esempio ` myFolder/my_canary_filename.mjs`. Se lo archivi in una cartella separata, definisci il percorso nel punto di ingresso dello script, ad esempio ` myFolder/my_canary_filename.functionName`.

## Modifica di uno script Playwright esistente da utilizzare come canarino Synthetics CloudWatch
<a name="CloudWatch_Synthetics_canary_edit_Playwright_script"></a>

Puoi modificare uno script esistente per Node.js e Playwright da utilizzare come canary. Per ulteriori informazioni su Playwright, consulta la documentazione [Playwright library](https://playwright.dev/docs/api/class-playwright). 

Puoi utilizzare il seguente script Playwright salvato nel file ` 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();
```

Converti lo script seguendo i passaggi di seguito:

1. Creare ed esportare una funzione `handler`. Il gestore è la funzione del punto di ingresso per lo script. Puoi scegliere qualsiasi nome per la funzione del gestore, ma la funzione utilizzata nel tuo script dovrebbe essere la stessa nel gestore del tuo canary. Se il nome del tuo script è `exampleCanary.mjs`, e il nome della funzione del gestore è `myhandler`, il tuo gestore canary è denominato `exampleCanary.myhandler`. Nell'esempio seguente, il nome della funzione del gestore è `handler`.

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

1. Importa il `Synthetics Playwright module` come dipendenza.

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

1. Avvia un browser utilizzando la funzione `Launch` di Synthetics.

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

1. Crea una nuova pagina Playwright utilizzando la funzione `newPage` di Synthetics.

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

Il tuo script è ora pronto per essere eseguito come canary di Synthetics. Di seguito è riportato lo script aggiornato:

 ** ES6 Formato dello script aggiornato** 

Il file di script salvato con un'estensione `.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 aggiornato in formato CommonJS** 

Il file di script salvato con un'estensione `.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 Configurazioni Synthetics
<a name="Synthetics_canary_configure_Playwright_script"></a>

Puoi configurare il comportamento del runtime Synthetics Playwright fornendo un file di configurazione JSON facoltativo denominato `synthetics.json`. Questo file dovrebbe essere incluso nella stessa posizione del file gestore. Sebbene un file di configurazione sia facoltativo, se non viene fornito un file di configurazione o manca una chiave di configurazione, vengono utilizzati i valori predefiniti. CloudWatch 

 **Creazione di un pacchetto del file di configurazione** 

Di seguito sono riportati i valori di configurazione supportati e i relativi valori predefiniti.

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

 **Configurazioni di passaggio** 
+ `screenshotOnStepStart`: determina se Synthetics deve acquisire uno screenshot prima dell'inizio del passaggio. Il valore predefinito è `true`. 
+ `screenshotOnStepSuccess`: determina se Synthetics deve acquisire uno screenshot dopo che un passaggio ha avuto esito positivo. Il valore predefinito è `true`. 
+ `screenshotOnStepFailure`: determina se Synthetics deve acquisire uno screenshot dopo che un passaggio ha avuto esito negativo. Il valore predefinito è `true`. 
+ `continueOnStepFailure`: determina se uno script deve continuare anche dopo un passaggio non riuscito. Il valore predefinito è `false`. 
+ `stepSuccessMetric`: determina se viene emessa la metrica ` SuccessPercent` di un passaggio. La metrica `SuccessPercent` per un passaggio vale `100` per l'esecuzione canary se il passaggio ha esito positivo, mentre `0` se ha esito negativo. Il valore predefinito è `true`. 
+ `stepDurationMetric`: determina se viene emessa la metrica `Duration` di un passaggio. La metrica `Duration` viene emessa come durata, in millisecondi, dell'esecuzione del passaggio. Il valore predefinito è `true`.

 **Configurazioni dei report** 

Include tutti i report generati da CloudWatch Synthetics, come un file HAR e un rapporto sui passaggi di Synthetics. Anche i campi di redazione dei dati sensibili `restrictedHeaders` e `restrictedUrlParameters` si applicano ai log generati da Synthetics. 
+ `includeRequestHeaders`: indica se includere le intestazioni della richiesta nel report. Il valore predefinito è `false`. 
+ `includeResponseHeaders`: indica se includere le intestazioni della risposta nel report. Il valore predefinito è `false`.
+ `includeUrlPassword`: indica se includere una password visualizzata nell'URL. Per impostazione predefinita, le password che compaiono in URLs vengono cancellate dai log e dai report, per impedire la divulgazione di dati sensibili. Il valore predefinito è `false`. 
+ `includeRequestBody`: indica se includere il corpo della richiesta nel report. Il valore predefinito è `false`. 
+ `includeResponseBody`: indica se includere il corpo della risposta nel report. Il valore predefinito è `false`. 
+ `restrictedHeaders`: un elenco di valori di intestazione da ignorare, se le intestazioni sono incluse. Questo vale sia per le intestazioni della richiesta che della risposta. Ad esempio, puoi nascondere le tue credenziali inserendo `includeRequestHeaders` come true e `restrictedHeaders` come `['Authorization']`. 
+ `restrictedUrlParameters`: un elenco di parametri del percorso dell'URL o della query da oscurare. Questo vale per quelle URLs che appaiono nei log, nei report e negli errori. Il parametro prevede la distinzione tra lettere maiuscole e minuscole. Puoi passare un asterisco (`*`) come valore per oscurare tutti i valori dei parametri del percorso dell'URL e delle query. L'impostazione predefinita è una matrice vuota. 
+ `har`: determina se deve essere generato un archivio HTTP (HAR). Il valore predefinito è `true`.

Di seguito è riportato un esempio di file di configurazioni del 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
```

 **Configurazioni di registrazione** 

Si applica ai log generati da CloudWatch Synthetics. Controlla la verbosità dei log di richieste e risposte.
+ `logRequest`: indica se registrare ogni richiesta nei log del canary. Per i canary dell'interfaccia utente, registra ogni richiesta inviata dal browser. Il valore predefinito è ` false`. 
+ `logResponse`: indica se registrare ogni risposta nei log del canary. Per i canary dell'interfaccia utente, registra ogni risposta ricevuta dal browser. Il valore predefinito è ` false`. 
+ `logRequestBody`: indica se registrare i corpi delle richieste insieme alle richieste nei log dei canary. Questa configurazione si applica solo se `logRequest` è true. Il valore predefinito è `false`. 
+ `logResponseBody`: indica se registrare i corpi delle risposte insieme alle richieste nei log dei canary. Questa configurazione si applica solo se `logResponse` è true. Il valore predefinito è `false`. 
+ `logRequestHeaders`: indica se registrare le intestazioni delle richieste insieme alle richieste nei log dei canary. Questa configurazione si applica solo se ` logRequest` è true. Il valore predefinito è `false`. 
+ `logResponseHeaders`: indica se registrare le intestazioni delle risposte insieme alle risposte nei log dei canary. Questa configurazione si applica solo se ` logResponse` è true. Il valore predefinito è `false`. 

 **Configurazioni delle metriche HTTP** 

Configurazioni per le metriche relative al conteggio delle richieste di rete con codici di stato HTTP diversi, emesse da Synthetics CloudWatch per questo canarino.
+ `metric_2xx`: indica se emettere la metrica `2xx` (con la dimensione `CanaryName`) per questo canary. Il valore predefinito è ` true`. 
+ `metric_4xx`: indica se emettere la metrica `4xx` (con la dimensione `CanaryName`) per questo canary. Il valore predefinito è ` true`. 
+ `metric_5xx`: indica se emettere la metrica `5xx` (con la dimensione `CanaryName`) per questo canary. Il valore predefinito è ` true`. 
+ `failedRequestsMetric`: indica se emettere la metrica ` failedRequests` (con la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`. 
+ `aggregatedFailedRequestsMetric`: indica se emettere la metrica ` failedRequests` (senza la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`. 
+ `aggregated2xxMetric`: indica se emettere la metrica `2xx` (senza la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`. 
+ `aggregated4xxMetric`: indica se emettere la metrica `4xx` (senza la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`. 
+ `aggregated5xxMetric`: indica se emettere la metrica `5xx` (senza la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`. 

 **Configurazioni delle metriche del canary** 

Configurazioni per altre metriche emesse da Synthetics. CloudWatch 
+ `failedCanaryMetric`: indica se emettere la metrica `Failed` (con la dimensione `CanaryName`) per questo canary. Il valore predefinito è ` true`. 
+ `aggregatedFailedCanaryMetric`: indica se emettere la metrica ` Failed` (senza la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`. 

 **Altre configurazioni** 
+ `userAgent`: una stringa da aggiungere all'agente utente. L'agente utente è una stringa inclusa nell'intestazione della richiesta e identifica il browser nei siti Web visitati quando si utilizza il browser headless. CloudWatch Synthetics aggiunge automaticamente. `CloudWatchSynthetics/canary-arn to the user agent` La configurazione specificata viene aggiunta all'agente utente generato. Il valore predefinito dell'agente utente da aggiungere è una stringa vuota (`""`).

### CloudWatch Variabili di ambiente Synthetics
<a name="Synthetics_canary_Nodejs_Playwright_script"></a>

Configura il livello e il formato di registrazione utilizzando le variabili di ambiente.

 **Formato dei log** 

Il runtime CloudWatch Synthetics Playwright CloudWatch crea registri per ogni corsa canaria. I log sono scritti in formato JSON per facilitare le interrogazioni. Facoltativamente, puoi modificare il formato del log in `TEXT`.
+ `Environment variable name`: CW\$1SYNTHETICS\$1LOG\$1FORMAT 
+ `Supported values`: JSON, TEXT 
+ `Default`: JSON 

 **Livelli di log** 

Sebbene l'attivazione della modalità `Debug` aumenti la verbosità, può essere utile per la risoluzione dei problemi.
+ `Environment variable name`: CW\$1SYNTHETICS\$1LOG\$1LEVEL
+ `Supported values`: TRACE, DEBUG, INFO, WARN, ERROR, FATAL 
+ `Default`: INFO

# Scrittura di uno script canary Node.js utilizzando il runtime Puppeteer
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Nodejs_Pup"></a>

**Topics**
+ [Creare un canarino CloudWatch Synthetics da zero](#CloudWatch_Synthetics_Canaries_write_from_scratch)
+ [Creazione di pacchetti dei file canary](#CloudWatch_Synthetics_Canaries_package)
+ [Modifica di uno script Puppeteer esistente da utilizzare come canary di Synthetics](#CloudWatch_Synthetics_Canaries_modify_puppeteer_script)
+ [Variabili di ambiente](#CloudWatch_Synthetics_Environment_Variables)
+ [Integrazione del tuo canarino con altri servizi AWS](#CloudWatch_Synthetics_Canaries_AWS_integrate)
+ [Forzare il canary a utilizzare un indirizzo IP statico](#CloudWatch_Synthetics_Canaries_staticIP)

## Creare un canarino CloudWatch Synthetics da zero
<a name="CloudWatch_Synthetics_Canaries_write_from_scratch"></a>

Ecco un esempio minimo di script Synthetics canary. Questo script passa come esecuzione riuscita e restituisce una stringa. Per vedere come appare un canary fallito, passare `let fail = false;` a `let fail = true;`. 

È necessario definire una funzione di punto di ingresso per lo script canary. Per vedere come i file vengono caricati nella posizione Amazon S3 specificata come `ArtifactS3Location` del canary, crea questi file nella cartella `/tmp`. Tutti gli artefatti canary devono essere archiviati nella directory `/tmp`, perché è l'unica scrivibile. Assicurati che il percorso dello screenshot sia impostato su `/tmp` per tutti gli screenshot o gli altri file creati dallo script. Synthetics carica automaticamente i file nella directory ` /tmp` in un bucket S3.

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

Dopo l'esecuzione dello script, le metriche di pass/fail stato e durata vengono pubblicate CloudWatch e i file sottostanti `/tmp` vengono caricati in un bucket 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();
};
```

Successivamente, espanderemo lo script per utilizzare la registrazione di Synthetics ed effettuare una chiamata utilizzando l'SDK. AWS A scopo dimostrativo, questo script creerà un client Amazon DynamoDB ed effettuerà una chiamata all'API ListTables DynamoDB. Registra la risposta alla richiesta e i registri passano o falliscono in base all'esito positivo della richiesta.

```
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();
};
```

## Creazione di pacchetti dei file canary
<a name="CloudWatch_Synthetics_Canaries_package"></a>

 **Per -11.0 e versioni successive syn-nodejs-puppeteer** 

 La vecchia struttura di imballaggio (per syn-nodejs-puppeteer -10.0 e versioni precedenti) è ancora supportata nelle versioni più recenti.

Crea uno script utilizzando una delle seguenti opzioni:
+ File .js (sintassi CommonJS)
+ File .mjs (sintassi dei moduli ES)

Per i moduli ES, utilizza una delle opzioni seguenti:
+ File .js (sintassi CommonJS)
+ File .mjs (sintassi dei moduli ES)

La struttura del pacchetto è definita di seguito:
+ File gestore a livello di root (index.js/index.mjs)
+ File di configurazione facoltativo (synthetics.json)
+ Dipendenze aggiuntive in node\$1modules (se necessario)

Esempio di struttura di impacchettamento:

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

Per impacchettare, segui i seguenti passaggi:

1. Installa le dipendenze (se presenti).

   ```
   npm install
   ```

1. Crea un pacchetto .zip.

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

 **Per syn-nodejs-puppeteer -11.0 e versioni precedenti** 

Quando si utilizza Amazon S3 è richiesta la seguente struttura:

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

 **Per aggiungere un supporto opzionale per sottocartelle in syn-nodejs-puppeteer -3.4\$1:** 

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

**Nota**  
Il percorso del gestore nella configurazione deve corrispondere alla posizione del file.

 **Nome del gestore** 

Assicurati di impostare il punto di ingresso dello script del tuo canary (gestore) in modo che ` myCanaryFilename.functionName` corrisponda al nome del file del punto di ingresso dello script. Se utilizzi un runtime precedente a `syn-nodejs-puppeteer-3.4`, `functionName` deve corrispondere a `handler`. Se utilizzi un tempo ` syn-nodejs-puppeteer-3.4` o successivo, puoi scegliere qualsiasi nome di funzione come gestore. Se utilizzi un tempo `syn-nodejs-puppeteer-3.4` o successivo, puoi anche memorizzare il canary in una cartella separata, ad esempio ` nodejs/node_modules/myFolder/my_canary_filename`. Se lo archivi in una cartella separata, definisci il percorso nel punto di ingresso dello script, ad esempio ` myFolder/my_canary_filename.functionName`.

## Modifica di uno script Puppeteer esistente da utilizzare come canary di Synthetics
<a name="CloudWatch_Synthetics_Canaries_modify_puppeteer_script"></a>

Questa sezione spiega come prendere script Puppeteer e modificarli per essere eseguiti come script canary Synthetics. Per ulteriori informazioni su Puppeteer, consulta [Puppeteer API v1.14.0](https://github.com/puppeteer/puppeteer/blob/v1.14.0/docs/api.md). 

Inizieremo con questo esempio di 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();
})();
```

Le fasi di conversione sono le seguenti:
+ Creare ed esportare una funzione `handler`. Il gestore è la funzione del punto di ingresso per lo script. Se utilizzi un runtime precedente a ` syn-nodejs-puppeteer-3.4`, la funzione del gestore deve essere denominata `handler`. Se utilizzi un tempo `syn-nodejs-puppeteer-3.4` o successivo, la funzione può avere un nome qualsiasi, purché corrisponda a quello utilizzato nello script. Inoltre, se utilizzi un tempo `syn-nodejs-puppeteer-3.4` o successivo, puoi archiviare gli script in qualsiasi cartella e definire quest'ultima nel nome del gestore.

  ```
  const basicPuppeteerExample = async function () {};
  
  exports.handler = async () => {
      return await basicPuppeteerExample();
  };
  ```
+ Usa la dipendenza `Synthetics`.

  ```
  var synthetics = require('@aws/synthetics-puppeteer');
  ```
+ Utilizzare la funzione `Synthetics.getPage` per ottenere un oggetto `Page` Puppeteer.

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

  **L'oggetto page restituito dalla funzione Synthetics.getPage ha page.on e gli eventi sono strumentati per la registrazione.** `request` `response` ` requestfailed` Synthetics imposta anche la generazione di file HAR per le richieste e le risposte nella pagina e aggiunge l'ARN canary alle intestazioni user-agent delle richieste in uscita nella pagina.

Lo script è ora pronto per essere eseguito come Canary di Synthetics. Ecco lo script aggiornato:

```
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();
};
```

## Variabili di ambiente
<a name="CloudWatch_Synthetics_Environment_Variables"></a>

Quando crei canary puoi utilizzare le variabili di ambiente. Ciò consente di scrivere un singolo script canary e quindi utilizzare tale script con valori diversi per creare rapidamente più canary che hanno un'attività simile.

Ad esempio, supponiamo che l'organizzazione disponga di endpoint quali `prod`, ` dev` e `pre-release` per le diverse fasi dello sviluppo del software ed è necessario creare canary per testare ciascuno di questi endpoint. È possibile scrivere un singolo script canary che testi il software e quindi specificare valori diversi per la variabile di ambiente dell'endpoint quando crei ciascuno dei tre canary. Quindi, quando crei un canary, si specificano lo script e i valori da utilizzare per le variabili di ambiente.

I nomi delle variabili di ambiente possono contenere lettere, numeri e il carattere di sottolineatura. Devono iniziare con una lettera e avere almeno due caratteri. La dimensione totale delle variabili di ambiente non può superare i 4 KB. Non è possibile specificare alcuna variabile di ambiente riservato Lambda come nomi per le variabili di ambiente. Per ulteriori informazioni sulle variabili di ambiente riservate, consulta [Variabili di ambiente di runtime](https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html#configuration-envvars-runtime).

**Importante**  
Le chiavi e i valori delle variabili di ambiente vengono crittografati quando sono inattivi utilizzando chiavi proprietarie. AWS AWS KMS Tuttavia, le variabili di ambiente non vengono crittografate lato client. Non archiviare informazioni sensibili al loro interno.

Lo script di esempio seguente utilizza due variabili di ambiente. Questo script è per un canary che controlla se una pagina Web è disponibile. Utilizza variabili di ambiente per parametrizzare sia l'URL che controlla sia il livello di registro Synthetics CloudWatch che utilizza. 

La seguente funzione imposta `LogLevel` al valore della variabile di ambiente ` LOG_LEVEL`.

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

Questa funzione imposta `URL` al valore della variabile di ambiente `URL`.

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

Questo è lo script completo. Quando crei un canary utilizzando questo script, si specificano i valori per le variabili di ambiente `LOG_LEVEL` e `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();
};
```

### Passare le variabili di ambiente allo script
<a name="CloudWatch_Synthetics_Canaries_pass_variables"></a>

Per passare le variabili di ambiente allo script quando crei un canary nella console, specifica le chiavi e i valori delle variabili di ambiente nella finestra **Environment variables** (Variabili di ambiente) della console. Per ulteriori informazioni, consulta [Creazione di un Canary](CloudWatch_Synthetics_Canaries_Create.md).

Per passare le variabili di ambiente tramite l'API oppure AWS CLI, usa il ` EnvironmentVariables` parametro nella sezione. `RunConfig` Di seguito è riportato un AWS CLI comando di esempio che crea un canarino che utilizza due variabili di ambiente con le chiavi `Environment` e`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"
}'
```

## Integrazione del tuo canarino con altri servizi AWS
<a name="CloudWatch_Synthetics_Canaries_AWS_integrate"></a>

Tutti i canarini possono utilizzare la AWS libreria SDK. Puoi usare questa libreria quando scrivi il tuo canarino per integrare il canarino con altri servizi. AWS 

Per fare ciò, è necessario aggiungere il seguente codice al tuo canary. Per questi esempi, Gestione dei segreti AWS viene utilizzato come servizio con cui il canarino si sta integrando.
+ Importa l'SDK. AWS 

  ```
  const AWS = require('aws-sdk');
  ```
+ Crea un client per il AWS servizio con cui ti stai integrando.

  ```
  const secretsManager = new AWS.SecretsManager();
  ```
+ Utilizzare il client per effettuare chiamate API a tale servizio.

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

Il seguente frammento di codice di script canary mostra un esempio di integrazione con Secrets Manager in modo più dettagliato.

```
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();
};
```

## Forzare il canary a utilizzare un indirizzo IP statico
<a name="CloudWatch_Synthetics_Canaries_staticIP"></a>

Puoi configurare un canary in modo che utilizzi un indirizzo IP statico.

**Per forzare un canary a utilizzare un indirizzo IP statico**

1. Crea un nuovo VPC. Per ulteriori informazioni, vedi [Utilizzo del DNS con VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html).

1. Crea un nuovo gateway Internet. Per ulteriori informazioni, consulta la pagina relativa all'[Aggiunta di un gateway Internet al VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html#working-with-igw).

1. Crea una sottorete pubblica all'interno del tuo nuovo VPC.

1. Aggiungi una nuova tabella di routing al VPC.

1. Aggiungi un routing nella nuova tabella di routing, che va da `0.0.0.0/0` al gateway Internet.

1. Associa la nuova tabella di routing alla sottorete pubblica.

1. Crea un indirizzo IP elastico. Per ulteriori informazioni, consulta [Indirizzi IP elastici](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html).

1. Crea un nuovo gateway NAT e assegnalo alla sottorete pubblica e all'indirizzo IP elastico.

1. Per creare una sottorete privata all'interno del VPC.

1. Aggiungere un routing alla tabella di tabella di routing predefinita del VPC, che va da `0.0.0.0/0` al gateway NAT

1. Crea il tuo canary. 

# Scrivere uno script canary Python
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Python"></a>

Questo script passa come esecuzione riuscita e restituisce una stringa. Per vedere come appare un canary fallito, passare “fail = False” a “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()
```

## Impacchettamento dei file canary Python
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Python_package"></a>

Se disponi di più di un file .py o lo script ha una dipendenza, puoi raggrupparli tutti in un unico file ZIP. Se utilizzi il runtime `syn-python-selenium-1.1`, il file ZIP deve contenere il file del canary principale con estensione py all'interno di una cartella `python`, ad esempio `python/my_canary_filename.py`. Se utilizzi un tempo ` syn-python-selenium-1.1` o successivo, puoi utilizzare una cartella diversa, ad·esempio `python/myFolder/my_canary_filename.py`.

Questo file ZIP deve contenere tutte le cartelle e i file necessari, ma gli altri file non devono essere presenti nella cartella `python`.

Assicurati di impostare il punto di ingresso dello script del tuo canary in modo che ` my_canary_filename.functionName` corrisponda al nome del file e al nome della funzione del punto di ingresso dello script. Se utilizzi il runtime `syn-python-selenium-1.0`, `functionName` deve corrispondere·a `handler`. Se utilizzi un tempo ` syn-python-selenium-1.1` o successivo, questa limitazione del nome del gestore non si applica e puoi anche archiviare il canary in una cartella separata, ad esempio ` python/myFolder/my_canary_filename.py`. Se lo archivi in una cartella separata, definisci il percorso nel punto di ingresso dello script, ad esempio ` myFolder/my_canary_filename.functionName`. 

## Modifica di uno script Selenium esistente da utilizzare come canary di Synthetics
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Python_Selenium"></a>

Puoi modificare rapidamente uno script esistente per Python e Selenium da utilizzare come canary. [Per ulteriori informazioni su Selenium, vedere www.selenium.dev/.](https://www.selenium.dev/)

Per questo esempio, inizieremo con il seguente script Selenium:

```
from selenium import webdriver

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

basic_selenium_script()
```

Le fasi di conversione sono le seguenti.

**Per convertire uno script selenio da usare come canary**

1. Modifica l'istruzione `import` per utilizzare Selenium dal modulo ` aws_synthetics`:

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

   Il modulo Selenium di `aws_synthetics` assicura che il canarino possa emettere metriche e registri, generare un file HAR e funzionare con altre funzionalità di Synthetics. CloudWatch 

1. Crea una funzione del gestore e chiama il tuo metodo Selenium. Il gestore è la funzione del punto di ingresso per lo script.

   Se utilizzi un tempo `syn-python-selenium-1.0`, la funzione del gestore deve essere denominata `handler`. Se utilizzi un tempo `syn-python-selenium-1.1` o successivo, la funzione può avere un nome qualsiasi, purché corrisponda a quello utilizzato nello script. Inoltre, se utilizzi un tempo `syn-python-selenium-1.1` o successivo, puoi archiviare gli script in qualsiasi cartella e definire quest'ultima nel nome del gestore.

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

Lo script è ora aggiornato per essere un canarino CloudWatch Synthetics. Ecco lo script aggiornato:

`webdriver`È un'istanza della classe [ SyntheticsWebDriver](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library_Python.html#CloudWatch_Synthetics_Library_Python_SyntheticsWebDriver)e il browser restituito da `webdriver.Chrome()` è un'istanza di. [ 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()
```

## Modifica di uno script Puppeteer Synthetics esistente per autenticare certificati non standard
<a name="Canaries_Non-Standard_Certificates"></a>

Un caso d'uso importante per i canary di Synthetics è il monitoraggio dei propri endpoint. Se vuoi monitorare un endpoint che non è ancora pronto per il traffico esterno, questo tipo di monitoraggio può talvolta implicare l'assenza di un certificato valido firmato da un'autorità di certificazione terza e affidabile.

Due possibili soluzioni a questo scenario sono le seguenti:
+ Per autenticare un certificato client, consulta [Come convalidare l'autenticazione utilizzando Amazon Synthetics CloudWatch ](https://aws.amazon.com/blogs/mt/how-to-validate-authentication-using-amazon-cloudwatch-synthetics-part-2/) — Parte 2.
+ Per autenticare un certificato autofirmato, consulta [Come convalidare l'autenticazione con certificati autofirmati](https://aws.amazon.com/blogs/mt/how-to-validate-authentication-with-self-signed-certificates-in-amazon-cloudwatch-synthetics/) in Amazon Synthetics CloudWatch

Non sei limitato a queste due opzioni quando usi i canarini CloudWatch Synthetics. Puoi estendere queste funzionalità e aggiungere la tua logica aziendale ampliando il codice canary.

**Nota**  
I canary Synthetics in esecuzione su runtime Python hanno nativamente il flag ` --ignore-certificate-errors` abilitato, quindi non dovrebbero avere problemi a raggiungere siti con configurazioni di certificati non standard.

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

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

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

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

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


**Proprietà dello schema**  

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

 **Esempio** 

```
{
  "globalSettings": {
    "stepTimeout": 30000,
    "userAgent": "CloudWatch-Synthetics-Advanced/1.0"
  },
  "variables": {
    "baseUrl": "https://api.example.com",
    "apiVersion": "v1"
  },
  "steps": {
    "1": {
      "stepName": "healthCheck",
      "checkerType": "HTTP",
      "url": "${baseUrl}/health",
      "httpMethod": "GET"
    }
  }
}
```

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

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

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

 **Proprietà** 


**Proprietà di impostazione globali**  

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

 **Esempio** 

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

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

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

 **Proprietà delle variabili** 


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

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

 **Esempio** 

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

 **Utilizzo della configurazione** 

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

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

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

 *Proprietà comuni dei passaggi* 


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

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

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

 *Esempio* 

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

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

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

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

 **Proprietà richieste** 


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

 **Proprietà opzionali** 


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

 **Esempio** 

```
{
  "stepName": "createUser",
  "checkerType": "HTTP",
  "url": "https://api.example.com/users",
  "httpMethod": "POST",
  "timeout": 15000,
  "headers": {
    "Content-Type": "application/json",
    "X-API-Version": "v1"
  },
  "body": "{\"name\":\"John Doe\",\"email\":\"john@example.com\"}",
  "authentication": {
    "type": "API_KEY",
    "apiKey": "${AWS_SECRET:api-credentials}",
    "headerName": "X-API-Key"
  },
  "assertions": [
    {
      "type": "STATUS_CODE",
      "operator": "EQUALS",
      "value": 201
    }
  ]
}
```

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

Convalida la risoluzione DNS e registra le informazioni.

 **Proprietà richieste** 


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

 **Proprietà opzionali** 


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

 **Esempio** 

```
{
  "stepName": "dnsResolution",
  "checkerType": "DNS",
  "domain": "example.com",
  "recordType": "A",
  "nameserver": "8.8.8.8",
  "timeout": 10000,
  "assertions": [
    {
      "type": "RECORD_VALUE",
      "operator": "CONTAINS",
      "value": "192.168"
    }
  ]
}
```

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

Monitora lo stato e la configurazione dei certificati SSL.

 **Proprietà richieste** 


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

 **Proprietà opzionali** 


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

 **Esempio** 

```
{
  "stepName": "sslCertCheck",
  "checkerType": "SSL",
  "hostname": "secure.example.com",
  "port": 443,
  "sni": true,
  "verifyHostname": true,
  "assertions": [
    {
      "type": "CERTIFICATE_EXPIRY",
      "operator": "GREATER_THAN",
      "value": 30,
      "unit": "DAYS"
    }
  ]
}
```

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

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

 **Proprietà richieste** 


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

 **Proprietà opzionali** 


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

 **Esempio** 

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

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

 **Nessuna autenticazione** 

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

 **Autenticazione Base** 


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

 **Esempio** 

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

 **Autenticazione con chiave API** 


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

 **Esempio** 

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

 **OAuth credenziali del client** 


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

 **Esempio** 

```
{
  "type": "OAUTH_CLIENT_CREDENTIALS",
  "tokenUrl": "https://auth.example.com/oauth/token",
  "clientId": "${AWS_SECRET:oauth-creds:client_id}",
  "clientSecret": "${AWS_SECRET:oauth-creds:client_secret}",
  "scope": "read write",
  "tokenCacheTtl": 7200
}
```

 **AWS Firma (versione 4)** 


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

 **Esempio** 

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

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

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

 **asserzioni del codice di stato** 


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

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

 **Asserzioni sul tempo di risposta** 


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

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

 **Asserzioni della testa** 


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

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

 **Asserzioni corporee** 


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

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

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

 **Registra asserzioni di valore** 


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

 **Registra le asserzioni relative al conteggio** 


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

 **Affermazioni autorevoli** 


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

 **Asserzioni TTL** 


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

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

 **Affermazioni sulla scadenza dei certificati** 


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

 **Affermazioni relative all'oggetto del certificato** 


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

 **Dichiarazioni dell'emittente del certificato** 


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

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

 **Asserzioni di successo della connessione** 


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

 **Asserzioni di dati di risposta** 


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

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

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

 **Proprietà di estrazione** 


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

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

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

 **Tipi di estrazione** 

```
{
  "name": "userId",
  "type": "BODY",
  "path": "$.user.id"
}
```

```
{
  "stepName": "loginAndExtract",
  "checkerType": "HTTP",
  "url": "https://api.example.com/login",
  "httpMethod": "POST",
  "body": "{\"username\":\"test\",\"password\":\"pass\"}",
  "extractors": [
    {
      "name": "textVariable",
      "type": "BODY",
      "path": "$.myvalue"
    }
  ]
},
{
  "stepName": "substituteVariable",
  "checkerType": "HTTP",
  "url": "https://api.example.com/get/${textVariable}",
  "httpMethod": "GET",
  "assertions": [
    {
    "type": "BODY",
    "target": "JSON",
    "path": "$.users[0].name",
    "operator": "EQUALS",
    "value": "${textVariable}"
    }
  ]
}
```

# Funzioni di libreria disponibili per gli script canary
<a name="CloudWatch_Synthetics_Canaries_Function_Library"></a>

CloudWatch Synthetics include diverse classi e funzioni integrate che è possibile chiamare durante la scrittura di script Node.js da utilizzare come canarini.

Alcune si applicano sia ai canary UI che alle API. Altri si applicano solo ai canary dell'interfaccia utente. Un canary dell'interfaccia utente è un canary che utilizza la funzione `getPage()` e utilizza Puppeteer come driver Web per navigare e interagire con le pagine Web.

**Nota**  
Ogni volta che aggiorni un canary per utilizzare una nuova versione del runtime Synthetics, tutte le funzioni della libreria Synthetics utilizzate dal canary vengono aggiornate automaticamente alla stessa versione di NodeJS supportata dal runtime Synthetics.

**Topics**
+ [Funzioni di libreria disponibili per Node.js canary](Library_function_Nodejs.md)
+ [Funzioni di libreria disponibili per canary Java](CloudWatch_Synthetics_Canaries_Java.md)
+ [Funzioni di libreria disponibili per gli script canary Node.js che utilizzano Playwright](CloudWatch_Synthetics_Canaries_Nodejs_Playwright.md)
+ [Funzioni di libreria disponibili per gli script canary Node.js utilizzando Puppeteer](CloudWatch_Synthetics_Canaries_Library_Nodejs.md)
+ [Funzioni di libreria disponibili per gli script canary Python che usano Selenium](CloudWatch_Synthetics_Canaries_Library_Python.md)

# Funzioni di libreria disponibili per Node.js canary
<a name="Library_function_Nodejs"></a>

Questa sezione descrive le funzioni di libreria disponibili per gli script Canary che utilizzano il runtime Node.js.

**Topics**
+ [addExecutionError(ErrorMessage, es.);](#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, [ functionToExecuteStepConfig])](#Library_function_Nodejs_executestep_Nodecanary)
+ [executeHttpStep(StepName, RequestOptions, [callback], [StepConfig])](#Library_function_Nodejs_executeHttpStep)

## addExecutionError(ErrorMessage, es.);
<a name="Library_function_Nodejs_addExecutionError_Nodecanary"></a>

`errorMessage` descrive l'errore e `ex` è l'eccezione che si verifica

Puoi utilizzare `addExecutionError` per impostare gli errori di esecuzione per il tuo canary. Fa fallire il canary senza interrompere l'esecuzione dello script. Inoltre, non influisce sui tuoi parametri `successPercent`.

È necessario tenere traccia degli errori come errori di esecuzione solo se non sono importanti per indicare il successo o il fallimento dello script canary.

Di seguito è illustrato un esempio dell'uso dell'elemento `addExecutionError`. Stai monitorando la disponibilità del tuo endpoint e acquisendo screenshot dopo che la pagina è stata caricata. Poiché l'errore di acquisizione di uno screenshot non determina la disponibilità dell'endpoint, puoi rilevare eventuali errori riscontrati durante l'acquisizione di screenshot e aggiungerli come errori di esecuzione. I parametri di disponibilità indicheranno comunque che l'endpoint è attivo e funzionante, ma lo stato del canary verrà contrassegnato come non riuscito. Il seguente blocco di codice di esempio rileva tale errore e lo aggiunge come errore di esecuzione.

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

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

Restituisce il nome del canary.

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

Restituisce l'ARN del canary.

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

Restituisce l'agente utente personalizzato del canary.

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

Questa funzione è disponibile nella versione runtime `syn-nodejs-3.0` e successive. Restituisce la versione di runtime di Synthetics del canary. Ad esempio, il valore restituito potrebbe essere `syn-nodejs-3.0`.

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

Recupera il livello di log corrente per la libreria Synthetics. I valori possibili sono i seguenti:
+ `0`: Debug
+ `1`: Info
+ `2`: Warn
+ `3`: Error

Esempio:

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

## setLogLevel();
<a name="Library_function_Nodejs_setLogLevel_Nodecanary"></a>

Imposta il livello di log per la libreria Synthetics. I valori possibili sono i seguenti:
+ `0`: Debug
+ `1`: Info
+ `2`: Warn
+ `3`: Error

Esempio:

```
synthetics.setLogLevel(0);
```

## ExecuteStep (StepName, [ functionToExecuteStepConfig])
<a name="Library_function_Nodejs_executestep_Nodecanary"></a>

Esegue il passaggio fornito, avvolgendolo con le metriche di durata. start/pass/fail logging and pass/fail

La funzione `executeStep` svolge anche le operazioni seguenti:
+ Registra l'inizio del passaggio
+ Avvia un timer
+ Esegue la funzione fornita
+ Quando la funzione ritorna normalmente, conta come passaggio. Se la funzione viene generata, viene considerata fallita
+ Termina il timer
+ Registra se il passaggio è riuscito o non è riuscito
+ Emette la `stepName SuccessPercent` metrica, 100 per il passaggio o 0 per l'errore
+ Emette il`stepName Duration metric`, con un valore basato sull'ora di inizio e di fine del passo
+ Restituisce ciò che ha functionToExecute restituito o rigetta ciò che ha lanciato ` functionToExecute`
+ Aggiunge un riepilogo dell'esecuzione delle fasi al rapporto di Canary

 **Esempio** 

```
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, [callback], [StepConfig])
<a name="Library_function_Nodejs_executeHttpStep"></a>

Esegue la richiesta HTTP fornita come fase e pubblica `SuccessPercent` (pass/fail) e parametri `Duration`.

**executeHttpStep**utilizza automaticamente funzioni native HTTP o HTTPS, a seconda del protocollo specificato nella richiesta.

Questa funzione aggiunge anche un riepilogo dell'esecuzione delle fasi al report del canary. Il riepilogo include dettagli su ogni richiesta HTTP, ad esempio:
+ Ora di inizio
+ Ora di fine
+ Stato (PASSED/FAILED)
+ Motivo dell'errore, se non è riuscita
+ dettagli della chiamata HTTP come request/response header, body, codice di stato, messaggio di stato e tempi delle prestazioni. 

**Topics**
+ [Parameters](#Library_function_Nodejs_executeHttpStep_parameters_Nodecanary)
+ [Esempi di utilizzo executeHttpStep](#Library_function_Nodejs_executeHttpStep_examples_Nodecanary)

### Parameters
<a name="Library_function_Nodejs_executeHttpStep_parameters_Nodecanary"></a>

 **StepName () *String*** 

Specifica il nome della fase. Questo nome viene utilizzato anche per pubblicare le CloudWatch metriche relative a questo passaggio.

 **requestOptions () *Object or String*** 

Il valore di questo parametro può essere un URL, una stringa URL o un oggetto. Se si tratta di un oggetto, deve essere un insieme di opzioni configurabili per effettuare una richiesta HTTP. Supporta tutte le opzioni in [ http.request(options[, callback])](https://nodejs.org/api/http.html#http_http_request_options_callback) nella documentazione di Node.js.

Oltre a queste opzioni Node.js, **requestOptions** supporta il parametro aggiuntivo `body`. Puoi utilizzare il parametro `body` per trasferire i dati come corpo della richiesta.

 **richiamata () *response*** 

(Facoltativo) Questa è una funzione utente che viene richiamata con la risposta HTTP. La risposta è del tipo [Class: http. IncomingMessage](https://nodejs.org/api/http.html#http_class_http_incomingmessage).

 **StepConfig () *object*** 

(Facoltativo) Utilizza questo parametro per sostituire le configurazioni Synthetics globali con una configurazione diversa per questa fase.

### Esempi di utilizzo executeHttpStep
<a name="Library_function_Nodejs_executeHttpStep_examples_Nodecanary"></a>

La seguente serie di esempi si basa l'uno sull'altro per illustrare i vari usi di questa opzione.

Questo primo esempio configura i parametri della richiesta. Puoi passare un URL come **RequestOptions:**

```
let requestOptions = 'https://www.amazon.com';
```

Oppure puoi trasferire una serie di opzioni:

```
let requestOptions = {
        'hostname': 'myproductsEndpoint.com',
        'method': 'GET',
        'path': '/test/product/validProductName',
        'port': 443,
        'protocol': 'https:'
    };
```

L'esempio seguente crea una funzione di callback che accetta una risposta. Per impostazione predefinita, se non si specifica il **callback**, CloudWatch Synthetics verifica che lo stato sia compreso tra 200 e 299 inclusi.

```
// 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'esempio successivo crea una configurazione per questo passaggio che sovrascrive la configurazione globale di Synthetics CloudWatch . La configurazione della fase in questo esempio consente le intestazioni della richiesta, le intestazioni della risposta, il corpo della richiesta (dopo i dati) e il corpo della risposta nel report e di limitare i valori di intestazione “X-Amz-Security-Token” e “Authorization”. Per impostazione predefinita, questi valori non vengono inclusi nel report per motivi di sicurezza. Se scegli di includerli, i dati vengono archiviati solo nel bucket 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
};
```

Questo ultimo esempio passa la richiesta a **executeHttpStep**e assegna un nome alla fase.

```
await synthetics.executeHttpStep('Verify GET products API', requestOptions, callback, stepConfig);
```

**Con questo set di esempi, CloudWatch Synthetics aggiunge i dettagli di ogni passaggio del rapporto e produce metriche per ogni passaggio utilizzando StepName.**

 Vedrai i parametri `successPercent` e `duration` per la fase `Verify GET products API`. Puoi monitorare le prestazioni delle API monitorando i parametri per le fasi delle chiamate API. 

Per uno script completo di esempio che utilizza queste funzioni, consulta [Canary dell'API in più fasi](CloudWatch_Synthetics_Canaries_Samples.md#CloudWatch_Synthetics_Canaries_Samples_APIsteps).

# Funzioni di libreria disponibili per canary Java
<a name="CloudWatch_Synthetics_Canaries_Java"></a>

La funzione `executeStep` viene utilizzata per suddividere in moduli il codice del canary ed eseguirlo in più fasi. In CloudWatch Synthetics, una fase di Synthetics è un modo per suddividere lo script canary in una serie di azioni chiaramente definite, che consentono di monitorare separatamente diverse parti del percorso applicativo. Per ogni passaggio, CloudWatch Synthetics esegue le seguenti operazioni:
+ Per ogni esecuzione canary viene creato un report che include un riepilogo dei dettagli relativi all'esecuzione di un passaggio, ad esempio la durata, lo stato *riuscito* o *non riuscito* e così via. **Quando scegli un'esecuzione nella console CloudWatch Synthetics, puoi visualizzare i dettagli di esecuzione di ogni passaggio nella scheda Step.**
+ *SuccessPercent*e le CloudWatch metriche di *durata* vengono emesse per ogni passaggio, consentendo agli utenti di monitorare la disponibilità e la latenza di ogni passaggio.

   **Utilizzo** 

  ```
  synthetics.executeStep(stepName,()->{
      try {
          //step code to be executed
          return null;
      } catch (Exception e) {
          throw e;
      }
  }).get();
  ```

   **Parametri** 
  + *stepName*, String (obbligatorio): un nome descrittivo del passaggio di Synthetics
  + *function to execute*, Callable<T> (obbligatorio): rappresenta le attività da eseguire
  + *StePoptions*, `com.amazonaws.synthetics.StepOptions (optional)` — StepOptions oggetto che può essere utilizzato per configurare l'esecuzione della fase. 

    *stepConfiguration*, ` com.amazonaws.synthetics.StepConfiguration` (richiesto come parte di StepOptions)

 **Valori restituiti** 

<T>Il valore restituito è. *CompletableFuture*

**Nota**  
Synthetics supporta solo passaggi sequenziali. Assicurati di chiamare il metodo `.get()` come mostrato nell'esempio per assicurarti che il passaggio venga completato prima di procedere a quello successivo.

# Funzioni di libreria disponibili per gli script canary Node.js che utilizzano Playwright
<a name="CloudWatch_Synthetics_Canaries_Nodejs_Playwright"></a>

Questa sezione descrive le funzioni di libreria disponibili per gli script Canary che utilizzano il runtime Node.js Playwright.

**Topics**
+ [avvio](#Synthetics_Library_Nodejs_Playwright_functions)
+ [newPage](#Synthetics_Library_Nodejs_Playwright_function_newPage)
+ [close](#Synthetics_Library_Nodejs_Playwright_function_close)
+ [getDefaultLaunchOpzioni](#Synthetics_Library_Nodejs_Playwright_function_getDefaultLaunchOptions)
+ [executeStep](#Synthetics_Library_Nodejs_Playwright_function_executeStep)

## avvio
<a name="Synthetics_Library_Nodejs_Playwright_functions"></a>

Questa funzione avvia un browser Chromium utilizzando una funzione di avvio Playwright e restituisce l'oggetto browser. Decomprime i file binari del browser e avvia il browser Chromium utilizzando le opzioni predefinite adatte per un browser headless. Per ulteriori informazioni sulla funzione `launch`, consulta [https://playwright.dev/docs/api/class-browsertype#browser-type-launch](https://playwright.dev/docs/api/class-browsertype#browser-type-launch) nella documentazione di Playwright.

 **Utilizzo** 

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

 **Arguments (Argomenti)** 

`options` [options](https://playwright.dev/docs/api/class-browsertype#browser-type-launch) (facoltativo) è un insieme configurabile di opzioni da impostare sul browser.

 **Valori restituiti** 

Promise `<Browser>` dove [Browser](https://playwright.dev/docs/api/class-browser) è un'istanza del browser Playwright.

Se questa funzione viene chiamata nuovamente, un browser aperto in precedenza viene chiuso prima di avviare un nuovo browser. È possibile sovrascrivere i parametri di avvio utilizzati da CloudWatch Synthetics e passare parametri aggiuntivi all'avvio del browser. Ad esempio, il seguente frammento di codice avvia un browser con argomenti predefiniti e un percorso eseguibile predefinito, ma con un'area di visualizzazione di 800 x 600 pixel. Per ulteriori informazioni, consulta le [opzioni di avvio di Playwright](https://playwright.dev/docs/api/class-browsertype#browser-type-launch) nella documentazione di Playwright.

```
const browser = await synthetics.launch({
  defaultViewport: { 
      "deviceScaleFactor": 1, 
      "width": 800,
      "height": 600 
}});
```

 Puoi anche aggiungere o sostituire i flag Chromium trasmessi per impostazione predefinita al browser. Ad esempio, puoi disabilitare la sicurezza web aggiungendo un `--disable-web-security` flag agli argomenti nei parametri di avvio di 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 funzione `newPage()` crea e restituisce una nuova pagina Playwright. Synthetics configura automaticamente una connessione DevTools Chrome Protocol (CDP) per abilitare le acquisizioni di rete per la generazione di archivi HTTP (HAR).

 **Utilizzo** 

Usa `newPage()` in una delle seguenti modalità:

 **1. Creazione di una nuova pagina in un nuovo contesto del browser:** 

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

 **2. Creazione di una nuova pagina in un contesto del browser specificato:** 

```
// 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 (Argomenti)** 

Accetta l'istanza Playwright [Browser](https://playwright.dev/docs/api/class-browser) o l'istanza [ BrowserContext](https://playwright.dev/docs/api/class-browsercontext)Playwright. 

 **Valori restituiti** 

Promise <Page> dove Page è un'istanza [Page](https://playwright.dev/docs/api/class-page) di Playwright. 

## close
<a name="Synthetics_Library_Nodejs_Playwright_function_close"></a>

Chiude il browser attualmente aperto.

 **Utilizzo** 

```
await synthetics.close();
```

Si consiglia di chiudere il browser in un blocco `finally` dello script.

 **Arguments (Argomenti)** 

Nessuno 

 **Valori restituiti** 

Restituisce una Promise<void> utilizzata dalla funzione di avvio di Synthetics per avviare il browser.

## getDefaultLaunchOpzioni
<a name="Synthetics_Library_Nodejs_Playwright_function_getDefaultLaunchOptions"></a>

La `getDefaultLaunchOptions()` funzione restituisce le opzioni di avvio del browser utilizzate da CloudWatch Synthetics.

 **Utilizzo** 

```
const defaultOptions = await synthetics.getDefaultLaunchOptions();
```

 **Arguments (Argomenti)** 

Nessuno 

 **Valori restituiti** 

Restituisce le [opzioni di avvio](https://playwright.dev/docs/api/class-browsertype#browser-type-launch) di Playwright utilizzate dalla funzione `launch` di Synthetics per avviare il browser.

## executeStep
<a name="Synthetics_Library_Nodejs_Playwright_function_executeStep"></a>

La funzione `executeStep` viene utilizzata per eseguire un passaggio in uno script Synthetics. In CloudWatch Synthetics, una fase di Synthetics è un modo per suddividere lo script canary in una serie di azioni chiaramente definite, che consentono di monitorare separatamente diverse parti del percorso applicativo. Per ogni passaggio, CloudWatch Synthetics esegue le seguenti operazioni:
+ Cattura automaticamente uno screenshot prima dell'inizio del passaggio e dopo il completamento di un passaggio. Puoi anche catturare schermate all'interno di un passaggio. Le schermate vengono acquisite per impostazione predefinita, ma possono essere disattivate utilizzando le configurazioni Synthetics.
+ Per ogni esecuzione di Canary viene creato un rapporto, che include un riepilogo, dei dettagli relativi all'esecuzione delle fasi, come la durata di una fase `pass` o `fail` lo stato URLs, la pagina di origine e di destinazione, le schermate associate, ecc. **Quando scegli un'esecuzione nella console CloudWatch Synthetics, puoi visualizzare i dettagli di esecuzione di ogni passaggio nella scheda Step.**
+ `SuccessPercent`e le `Duration` CloudWatch metriche vengono emesse per ogni passaggio, consentendo agli utenti di monitorare la disponibilità e la latenza di ogni passaggio.

 **Utilizzo** 

```
await synthetics.executeStep("mystepname", async function () {
  await page.goto(url, { waitUntil: 'load', timeout: 30000 });
}
```

**Nota**  
I passaggi dovrebbero essere eseguiti in sequenza. Assicurati di usare `await` on-premises.

 **Arguments (Argomenti)** 
+ Stringa `stepName` (obbligatorio) (booleano): nome del passaggio di Synthetics. 
+ Funzione asincrona `functionToExecute` (obbligatoria): la funzione che desideri che venga eseguita da Synthetics. Questa funzione dovrebbe contenere la logica per il passaggio.
+ Oggetto `stepConfig` (facoltativo): la configurazione del passaggio sovrascrive la configurazione globale di Synthetics per questo passaggio.
  + Booleano `continueOnStepFailure` (facoltativo): indica se continuare l'esecuzione dello script canary dopo che questo passaggio ha esito negativo. 
  + Booleano `screenshotOnStepStart` (facoltativo): indica se fare uno screenshot all'inizio di questo passaggio. 
  + Booleano `screenshotOnStepSuccess` (facoltativo): indica se fare uno screenshot dopo che questo passaggio ha esito positivo. 
  + Booleano `screenshotOnStepFailure` (facoltativo): indica se fare uno screenshot dopo che questo passaggio ha esito negativo. 
+ `page`: oggetto pagina di Playwright (facoltativo)

  Un oggetto pagina di Playwright. Synthetics utilizza questo oggetto pagina per acquisire schermate e. URLs Per impostazione predefinita, Synthetics utilizza la pagina Playwright creata quando viene chiamata `synthetics.newPage()` la funzione per acquisire dettagli della pagina come schermate e. URLs

 **Valori restituiti** 

Restituisce una Promise che si risolve con il valore restituito dalla funzione ` functionToExecute`. Per uno script di esempio, consulta [Codice di esempio per gli script canary](CloudWatch_Synthetics_Canaries_Samples.md) in questa guida.

# Funzioni di libreria disponibili per gli script canary Node.js utilizzando Puppeteer
<a name="CloudWatch_Synthetics_Canaries_Library_Nodejs"></a>

Questa sezione descrive le funzioni di libreria disponibili per gli script canary Node.js.

**Topics**
+ [Classi e funzioni di libreria di Node.js che si applicano a tutti i canary](#CloudWatch_Synthetics_Library_allcanaries)
+ [Classi e funzioni della libreria di Node.js che si applicano solo ai canary dell'interfaccia utente](#CloudWatch_Synthetics_Library_UIcanaries)
+ [Classi e funzioni della libreria di Node.js che si applicano solo ai canary dell'API](#CloudWatch_Synthetics_Library_APIcanaries)

## Classi e funzioni di libreria di Node.js che si applicano a tutti i canary
<a name="CloudWatch_Synthetics_Library_allcanaries"></a>

Le seguenti funzioni della libreria CloudWatch Synthetics per Node.js sono utili per tutti i canarini.

**Topics**
+ [Classe Synthetics](#CloudWatch_Synthetics_Library_Synthetics_Class_all)
+ [SyntheticsConfiguration classe](#CloudWatch_Synthetics_Library_SyntheticsConfiguration)
+ [Synthetics logger](#CloudWatch_Synthetics_Library_SyntheticsLogger)
+ [SyntheticsLogHelper classe](#CloudWatch_Synthetics_Library_SyntheticsLogHelper)

### Classe Synthetics
<a name="CloudWatch_Synthetics_Library_Synthetics_Class_all"></a>

Le seguenti funzioni per tutti i canary sono nella classe Synthetics.

**Topics**
+ [addExecutionError(ErrorMessage, es.);](#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(ErrorMessage, es.);
<a name="CloudWatch_Synthetics_Library_addExecutionError"></a>

`errorMessage` descrive l'errore e `ex` è l'eccezione che si verifica

Puoi utilizzare `addExecutionError` per impostare gli errori di esecuzione per il tuo canary. Fa fallire il canary senza interrompere l'esecuzione dello script. Inoltre, non influisce sui tuoi parametri `successPercent`.

È necessario tenere traccia degli errori come errori di esecuzione solo se non sono importanti per indicare il successo o il fallimento dello script canary.

Di seguito è illustrato un esempio dell'uso dell'elemento `addExecutionError`. Stai monitorando la disponibilità del tuo endpoint e acquisendo screenshot dopo che la pagina è stata caricata. Poiché l'errore di acquisizione di uno screenshot non determina la disponibilità dell'endpoint, puoi rilevare eventuali errori riscontrati durante l'acquisizione di screenshot e aggiungerli come errori di esecuzione. I parametri di disponibilità indicheranno comunque che l'endpoint è attivo e funzionante, ma lo stato del canary verrà contrassegnato come non riuscito. Il seguente blocco di codice di esempio rileva tale errore e lo aggiunge come errore di esecuzione.

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

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

Restituisce il nome del canary.

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

Restituisce l'ARN del canary.

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

Restituisce l'agente utente personalizzato del canary.

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

Questa funzione è disponibile nella versione di runtime `syn-nodejs-puppeteer-3.0` e versione successiva. Restituisce la versione di runtime di Synthetics del canary. Ad esempio, il valore restituito potrebbe essere `syn-nodejs-puppeteer-3.0`.

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

Recupera il livello di log corrente per la libreria Synthetics. I valori possibili sono i seguenti:
+ `0`: Debug
+ `1`: Info
+ `2`: Warn
+ `3`: Error

Esempio:

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

#### setLogLevel();
<a name="CloudWatch_Synthetics_Library_setLogLevel"></a>

Imposta il livello di log per la libreria Synthetics. I valori possibili sono i seguenti:
+ `0`: Debug
+ `1`: Info
+ `2`: Warn
+ `3`: Error

Esempio:

```
synthetics.setLogLevel(0);
```

### SyntheticsConfiguration classe
<a name="CloudWatch_Synthetics_Library_SyntheticsConfiguration"></a>

Questa classe è disponibile solo nella versione di runtime `syn-nodejs-2.1` o versioni successive.

Puoi utilizzare la classe `SyntheticsConfiguration` per configurare il comportamento delle funzioni della libreria Synthetics. Ad esempio, puoi utilizzare questa classe per configurare la funzione `executeStep()` per non acquisire screenshot.

È possibile impostare configurazioni CloudWatch Synthetics a livello globale, che vengono applicate a tutti i passaggi di Canaries. Puoi anche sovrascrivere queste configurazioni a livello di passaggio passando coppie chiave e valore di configurazione.

Puoi passare le opzioni a livello di fase. Per alcuni esempi, consulta [async executeStep (StepName,, [StepConfig]); functionToExecute](#CloudWatch_Synthetics_Library_executeStep) e [executeHttpStep(StepName, RequestOptions, [callback], [StepConfig])](#CloudWatch_Synthetics_Library_executeHttpStep)

**Topics**
+ [setConfig(options)](#CloudWatch_Synthetics_Library_setConfig)
+ [Monitoraggio visivo](#CloudWatch_Synthetics_Library_SyntheticsLogger_VisualTesting)

#### setConfig(options)
<a name="CloudWatch_Synthetics_Library_setConfig"></a>

` options ` è un oggetto, che è un insieme di opzioni configurabili per il tuo canary. Le seguenti sezioni spiegano i campi possibili in ` options `.

##### setConfig(options) per tutti i canary
<a name="CloudWatch_Synthetics_Library_setConfigall"></a>

Per i canarini che utilizzano `syn-nodejs-puppeteer-3.2` o versioni successive, le **(opzioni)** di **setConfig possono includere i seguenti parametri**:
+ `includeRequestHeaders` (booleano): indica se includere le intestazioni della richiesta nel report. Il valore predefinito è `false`.
+ `includeResponseHeaders` (booleano): indica se includere le intestazioni della risposta nel report. Il valore predefinito è `false`.
+ `restrictedHeaders` (array): un elenco di valori di intestazione da ignorare, se le intestazioni sono incluse. Questo vale sia per le intestazioni della richiesta che della risposta. **Ad esempio, puoi nascondere le tue credenziali passando ** includeRequestHeaders**as e RestrictedHeaders as`true`.** `['Authorization']` 
+ `includeRequestBody` (booleano): indica se includere il corpo della richiesta nel report. Il valore predefinito è `false`.
+ `includeResponseBody` (booleano): indica se includere il corpo della risposta nel report. Il valore predefinito è `false`.
**Importante**  
Se abiliti uno dei due `includeResponseBody` o` logResponseBody`, l'oggetto dati non viene restituito nella risposta da alcuni APIs, come i client aws-sdk v3. Ciò è dovuto a una limitazione di Node.js e al tipo di oggetto di risposta utilizzato.

 **setConfig (opzioni) relative alle metriche CloudWatch ** 

Per i canarini che utilizzano `syn-nodejs-puppeteer-3.1` o versioni successive, le **(options)** di **setConfig** possono includere i seguenti parametri booleani che determinano quali metriche vengono pubblicate dal canarino. Il valore predefinito per ciascuna di queste opzioni è `true`. Le opzioni che iniziano con `aggregated` determinano se il parametro viene emesso senza destinazione ` CanaryName`. Puoi usare questi parametri per visualizzare i risultati aggregati per tutti i canary. Le altre opzioni determinano se il parametro viene emesso con la dimensione `CanaryName`. Puoi usare questi parametri per visualizzare i risultati per ogni singolo canary.

Per un elenco delle metriche emesse dai canarini, vedi CloudWatch . [CloudWatch metriche pubblicate da canaries](CloudWatch_Synthetics_Canaries_metrics.md)
+ `failedCanaryMetric` (booleano): indica se emettere il parametro ` Failed` (con la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `failedRequestsMetric` (booleano): indica se emettere il parametro `Failed requests` (con la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `_2xxMetric` (booleano): indica se emettere il parametro `2xx` (con la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `_4xxMetric` (booleano): indica se emettere il parametro `4xx` (con la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `_5xxMetric` (booleano): indica se emettere il parametro `5xx` (con la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `stepDurationMetric` (booleano): indica se emettere il parametro `Step duration` (con le dimensioni `CanaryName` `StepName`) per questo canary. Il valore predefinito è `true`.
+ `stepSuccessMetric` (booleano): indica se emettere il parametro `Step success` (con le dimensioni `CanaryName` `StepName`) per questo canary. Il valore predefinito è `true`.
+ `aggregatedFailedCanaryMetric` (booleano): indica se emettere il parametro `Failed` (senza la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `aggregatedFailedRequestsMetric` (booleano): indica se emettere il parametro `Failed Requests` (senza la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `aggregated2xxMetric` (booleano): indica se emettere il parametro ` 2xx` (senza la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `aggregated4xxMetric` (booleano): indica se emettere il parametro ` 4xx` (senza la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `aggregated5xxMetric` (booleano): indica se emettere il parametro ` 5xx` (senza la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `visualMonitoringSuccessPercentMetric` (booleano): indica se emettere il parametro `visualMonitoringSuccessPercent` per questo canary. Il valore predefinito è `true`.
+ `visualMonitoringTotalComparisonsMetric` (booleano): indica se emettere il parametro `visualMonitoringTotalComparisons` per questo canary. Il valore predefinito è `false`.
+ `includeUrlPassword` (booleano): indica se includere una password visualizzata nell'URL. Per impostazione predefinita, le password che compaiono in URLs vengono cancellate dai registri e dai report, per evitare la divulgazione di dati sensibili. Il valore predefinito è `false`.
+ `restrictedUrlParameters` (array): un elenco di parametri del percorso dell'URL o della query da oscurare. Questo vale per la URLs visualizzazione nei log, nei report e negli errori. Il parametro prevede la distinzione tra lettere maiuscole e minuscole. Puoi passare un asterisco (\$1) come valore per oscurare tutti i valori dei parametri del percorso dell'URL e delle query. L'impostazione predefinita è una matrice vuota.
+ `logRequest` (booleano): indica se registrare ogni richiesta nei log del canary. Per i canary dell'interfaccia utente, registra ogni richiesta inviata dal browser. Il valore predefinito è `true`.
+ `logResponse` (booleano): indica se registrare ogni risposta nei log del canary. Per i canary dell'interfaccia utente, registra ogni risposta ricevuta dal browser. Il valore predefinito è `true`.
+ `logRequestBody` (booleano): indica se registrare i corpi delle richieste insieme alle richieste nei log dei canary. Questa configurazione si applica solo se `logRequest` è `true`. Il valore predefinito è `false`.
+ `logResponseBody` (booleano): indica se registrare i corpi delle risposte insieme alle risposte nei log dei canary. Questa configurazione si applica solo se `logResponse` è `true`. Il valore predefinito è ` false`.
**Importante**  
Se abiliti uno dei due `includeResponseBody` o` logResponseBody`, l'oggetto dati non viene restituito nella risposta da alcuni APIs, come i client aws-sdk v3. Ciò è dovuto a una limitazione di Node.js e al tipo di oggetto di risposta utilizzato.
+ `logRequestHeaders` (booleano): indica se registrare le intestazioni delle richieste insieme alle richieste nei log dei canary. Questa configurazione si applica solo se `logRequest` è `true`. Il valore predefinito è ` false`.

  Nota che `includeRequestHeaders` abilita le intestazioni negli artefatti.
+ `logResponseHeaders` (booleano): indica se registrare le intestazioni delle risposte insieme alle risposte nei log dei canary. Questa configurazione si applica solo se `logResponse` è `true`. Il valore predefinito è ` false`.

  Nota che `includeResponseHeaders` abilita le intestazioni negli artefatti.

**Nota**  
I parametri `Duration` e `SuccessPercent` vengono sempre emessi per ogni canary, sia con che senza il parametro `CanaryName`.

##### Metodi per abilitare o disabilitare i parametri
<a name="CloudWatch_Synthetics_Library_setConfig_metrics"></a>

 **disableAggregatedRequestMetriche ()** 

Disabilita il canary dall'emettere tutti i parametri delle richieste emessi senza dimensione `CanaryName`.

 **disableRequestMetrics()** 

Disabilita tutti i parametri delle richieste, inclusi i parametri dei canary e i parametri aggregati in tutti i canary.

 **disableStepMetrics()** 

Disabilita tutti i parametri dei passaggi, inclusi sia quelli di riuscita che di durata.

 **enableAggregatedRequestMetriche ()** 

Consente al canary di emettere tutti i parametri della richiesta emessi senza la dimensione ` CanaryName`.

 **enableRequestMetrics()** 

Abilita tutti i parametri delle richieste, inclusi i parametri dei canary e i parametri aggregati in tutti i canary.

 **enableStepMetrics()** 

Abilita tutti i parametri dei passaggi, inclusi sia quelli di riuscita che di durata.

 **get2xxMetric()** 

Indica se il canary emette un parametro `2xx` con dimensione ` CanaryName`.

 **get4xxMetric()** 

Indica se il canary emette un parametro `4xx` con dimensione ` CanaryName`.

 **get5xxMetric()** 

Indica se il canary emette un parametro `5xx` con dimensione ` CanaryName`.

 **getAggregated2xxMetric()** 

Indica se il canary emette un parametro `2xx` senza dimensione.

 **getAggregated4xxMetric()** 

Indica se il canary emette un parametro `4xx` senza dimensione.

 **getAggregatedFailedCanaryMetric()** 

Indica se il canary emette un parametro `Failed` senza dimensione.

 **getAggregatedFailedRequestsMetric()** 

Indica se il canary emette un parametro `Failed requests` senza dimensione.

 **getAggregated5xxMetric()** 

Indica se il canary emette un parametro `5xx` senza dimensione.

 **getFailedCanaryMetrica ()** 

Indica se il canary emette un parametro `Failed` con dimensione ` CanaryName`.

 **getFailedRequestsMetrico ()** 

Indica se il canary emette un parametro `Failed requests` con dimensione `CanaryName`.

 **getStepDurationMetrico ()** 

Indica se il canary emette un parametro `Duration` con dimensione ` CanaryName` per questo canary.

 **getStepSuccessMetrico ()** 

Indica se il canary emette un parametro `StepSuccess` con dimensione ` CanaryName` per questo canary.

 **with2xxMetric(\$12xxMetric)** 

Accetta un argomento booleano, che specifica se emettere un parametro `2xx` con dimensione `CanaryName` per questo canary.

 **with4xxMetric(\$14xxMetric)** 

Accetta un argomento booleano, che specifica se emettere un parametro `4xx` con dimensione `CanaryName` per questo canary.

 **with5xxMetric(\$15xxMetric)** 

Accetta un argomento booleano, che specifica se emettere un parametro `5xx` con dimensione `CanaryName` per questo canary.

 **withAggregated2xxMetric(aggregated2xxMetric)** 

Accetta un argomento booleano, che specifica se emettere un parametro `2xx` senza alcuna dimensione per questo canary.

 **withAggregated4xxMetric(aggregated4xxMetric)** 

Accetta un argomento booleano, che specifica se emettere un parametro `4xx` senza alcuna dimensione per questo canary.

 **withAggregated5xxMetric(aggregated5xxMetric)** 

Accetta un argomento booleano, che specifica se emettere un parametro `5xx` senza alcuna dimensione per questo canary.

 ** withAggregatedFailedCanaryMetric(aggregatedFailedCanaryMetrico)** 

Accetta un argomento booleano, che specifica se emettere un parametro `Failed` senza alcuna dimensione per questo canary.

 ** withAggregatedFailedRequestsMetric(aggregatedFailedRequestsMetrico)** 

Accetta un argomento booleano, che specifica se emettere un parametro `Failed requests` senza alcuna dimensione per questo canary.

 **withFailedCanaryMetrico () failedCanaryMetric** 

Accetta un argomento booleano, che specifica se emettere un parametro `Failed` con dimensione `CanaryName` per questo canary.

 **withFailedRequestsMetrico () failedRequestsMetric** 

Accetta un argomento booleano, che specifica se emettere un parametro `Failed requests` con dimensione `CanaryName` per questo canary.

 **withStepDurationMetrico () stepDurationMetric** 

Accetta un argomento booleano, che specifica se emettere un parametro `Duration` con dimensione `CanaryName` per questo canary.

 **withStepSuccessMetrico () stepSuccessMetric** 

Accetta un argomento booleano, che specifica se emettere un parametro ` StepSuccess` con dimensione `CanaryName` per questo canary.

##### Metodi per abilitare o disabilitare altre funzionalità
<a name="CloudWatch_Synthetics_Library_setConfig_methods"></a>

 **withHarFile()** 

Accetta un argomento booleano, che specifica se creare un file HAR per questo canary.

 **withStepsReport()** 

Accetta un argomento booleano, che specifica se segnalare un riepilogo dell'esecuzione delle fasi per questo canary.

 **withIncludeUrlPassword ()** 

Accetta un argomento booleano che specifica se includere le password che compaiono nei log e URLs nei report.

 **withRestrictedUrlParametri ()** 

Accetta una matrice di parametri del percorso dell'URL o della query da oscurare. Questo vale per la URLs visualizzazione nei log, nei report e negli errori. Puoi passare un asterisco (\$1) come valore per oscurare tutti i valori dei parametri del percorso dell'URL e delle query

 **withLogRequest()** 

Accetta un argomento booleano, che specifica se registrare ogni richiesta nei log del canary.

 **withLogResponse()** 

Accetta un argomento booleano, che specifica se registrare ogni risposta nei log del canary.

 **withLogRequestCorpo ()** 

Accetta un argomento booleano, che specifica se registrare ogni corpo della richiesta nei log del canary.

 **withLogResponseCorpo ()** 

Accetta un argomento booleano, che specifica se registrare ogni corpo della risposta nei log del canary.

 **withLogRequestIntestazioni ()** 

Accetta un argomento booleano, che specifica se registrare ogni intestazione della richiesta nei log del canary.

 **withLogResponseIntestazioni ()** 

Accetta un argomento booleano, che specifica se registrare ogni intestazione della risposta nei log del canary.

 **getHarFile()** 

Restituisce se il canary crea un file HAR.

 **getStepsReport()** 

Restituisce se il canary segnala un riepilogo dell'esecuzione della fase.

 **getIncludeUrlPassword ()** 

Indica se il canarino include le password che compaiono nei registri e URLs nei rapporti.

 **getRestrictedUrlParametri ()** 

Restituisce se il canary oscura i parametri del percorso dell'URL o della query.

 **getLogRequest()** 

Restituisce se il canary registra ogni richiesta nei log del canary.

 **getLogResponse()** 

Restituisce se il canary registra ogni risposta nei log del canary.

 **getLogRequestCorpo ()** 

Restituisce se il canary registra ogni corpo della richiesta nei log del canary.

 **getLogResponseCorpo ()** 

Restituisce se il canary registra ogni corpo della risposta nei log del canary.

 **getLogRequestIntestazioni ()** 

Restituisce se il canary registra ogni intestazione della richiesta nei log del canary.

 **getLogResponseIntestazioni ()** 

Restituisce se il canary registra ogni intestazione della risposta nei log del canary.

 **Funzioni per tutti i canary** 
+ `withIncludeRequestHeaders`(includeRequestHeaders)
+ `withIncludeResponseHeaders`(includeResponseHeaders)
+ `withRestrictedHeaders`(restrictedHeaders)
+ `withIncludeRequestBody`(includeRequestBody)
+ `withIncludeResponseBody`(includeResponseBody)
+ `enableReportingOptions`() — Abilita tutte le opzioni di reporting-- **includeRequestHeaders**, ** includeResponseHeaders**includeRequestBody****, e **includeResponseBody**,.
+ `disableReportingOptions`() — Disattiva tutte le opzioni di reporting-- **includeRequestHeaders**, ** includeResponseHeaders**includeRequestBody****, e **includeResponseBody**,.

##### setConfig(options) per canary dell'interfaccia utente
<a name="CloudWatch_Synthetics_Library_setConfigUI"></a>

Per i canary dell'interfaccia utente, **setConfig** può includere i seguenti parametri booleani:
+ `continueOnStepFailure`**(boolean) — Indica se continuare a eseguire lo script canary dopo un passaggio fallito (si riferisce alla funzione ExecuteStep).** Se le fasi hanno esito negativo, l'esecuzione del canary verrà comunque contrassegnata come fallita. Il valore predefinito è `false`.
+ `harFile` (booleano): indica se creare un file HAR. Il valore predefinito è `True`.
+ `screenshotOnStepStart` (booleano): indica se fare uno screenshot prima di iniziare una fase.
+ `screenshotOnStepSuccess` (booleano): indica se acquisire uno screenshot dopo aver completato una fase riuscita.
+ `screenshotOnStepFailure` (booleano): indica se acquisire uno screenshot dopo il fallimento di una fase.

##### Metodi per abilitare o disabilitare gli screenshot
<a name="CloudWatch_Synthetics_Library_setConfig_screenshots"></a>

 **disableStepScreenshots()** 

Disattiva tutte le opzioni relative agli screenshot (screenshotOnStepStart, Success e Failure). screenshotOnStep screenshotOnStep

 **enableStepScreenshots()** 

Abilita tutte le opzioni relative agli screenshot (screenshotOnStepStart, screenshotOnStep Success e screenshotOnStep Failure). Per impostazione predefinita, tutti questi metodi sono abilitati.

 **getScreenshotOnStepFailure()** 

Restituisce se il canary acquisisce uno screenshot dopo che una fase fallisce.

 **getScreenshotOnStepStart()** 

Restituisce se il canary acquisisce uno screenshot prima di iniziare una fase.

 **getScreenshotOnStepSuccess()** 

Restituisce se il canary acquisisce uno screenshot dopo aver completato correttamente una fase.

 **withScreenshotOnStepStart(screenshotOnStepInizio)** 

Accetta un argomento booleano, che indica se eseguire uno screenshot prima di iniziare una fase.

 **withScreenshotOnStepSuccess(screenshotOnStepSuccesso)** 

Accetta un argomento booleano, che indica se acquisire uno screenshot dopo aver completato correttamente una fase.

 **withScreenshotOnStepFailure(screenshotOnStepFallimento)** 

Accetta un argomento booleano, che indica se acquisire uno screenshot dopo il fallimento di una fase.

 **Utilizzo in canary dell'interfaccia utente** 

Innanzitutto, importa la dipendenza di Synthetics e recupera la configurazione.

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

// Get Synthetics configuration
const synConfig = synthetics.getConfiguration();
```

Quindi, imposta la configurazione per ogni opzione chiamando il metodo setConfig utilizzando una delle opzioni seguenti.

```
// Set configuration values
    synConfig.setConfig({
        screenshotOnStepStart: true, 
        screenshotOnStepSuccess: false,
        screenshotOnStepFailure: false
    });
```

Oppure

```
synConfig.withScreenshotOnStepStart(false).withScreenshotOnStepSuccess(true).withScreenshotOnStepFailure(true)
```

Per disabilitare tutti gli screenshot, utilizza la funzione `disableStepScreenshots()` come in questo esempio.

```
synConfig.disableStepScreenshots();
```

Puoi abilitare e disabilitare gli screenshot in qualsiasi punto del codice. Ad esempio, per disabilitare gli screenshot solo per una fase, disattivali prima di eseguire tale fase e quindi attivali dopo la fase.

##### setConfig(options) per canary dell'iAPI
<a name="CloudWatch_Synthetics_Library_setConfigAPI"></a>

Per i canary dell'API, **setConfig** può includere i seguenti parametri booleani:
+ `continueOnHttpStepFailure`(boolean) — Indica se continuare a eseguire lo script canary dopo un errore in un passaggio HTTP (si riferisce alla **executeHttpStep**funzione). Se le fasi hanno esito negativo, l'esecuzione del canary verrà comunque contrassegnata come fallita. Il valore predefinito è `true`.

#### Monitoraggio visivo
<a name="CloudWatch_Synthetics_Library_SyntheticsLogger_VisualTesting"></a>

Il monitoraggio visivo confronta gli screenshot acquisiti durante un'esecuzione del canary con quelli acquisiti durante un'esecuzione del canary di riferimento. Se la discrepanza tra i due screenshot supera una percentuale di soglia, il canary fallisce e puoi vedere le aree con differenze di colore evidenziate nel report di esecuzione del canary. **Il monitoraggio visivo è supportato nei canaries che eseguono syn-puppeteer-node -3.2 e versioni successive.** Attualmente non è supportato nei canary che eseguono Python e Selenium.

Per abilitare il monitoraggio visivo, aggiungi la seguente riga di codice allo script canary. Per ulteriori dettagli, consulta [SyntheticsConfiguration classe](#CloudWatch_Synthetics_Library_SyntheticsConfiguration).

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

La prima volta che il canary viene eseguito correttamente dopo che questa riga è stata aggiunta allo script, utilizza gli screenshot acquisiti durante l'esecuzione come riferimento per il confronto. Dopo la prima esecuzione del canarino, puoi usare la CloudWatch console per modificare il canarino per eseguire una delle seguenti operazioni:
+ Imposta l'esecuzione successiva del canary come nuovo riferimento.
+ Disegna dei limiti sullo screenshot di riferimento corrente per designare le aree dello screenshot da ignorare durante i confronti visivi.
+ Rimuovi uno screenshot dall'utilizzo per il monitoraggio visivo.

Per ulteriori informazioni sull'utilizzo della CloudWatch console per modificare un canarino, consulta. [Modifica o eliminazione di un canary](synthetics_canaries_deletion.md)

 **Altre opzioni per il monitoraggio visivo** 

 Configurazione **sintetica. withVisualVarianceThresholdPercentage(Percentuale desiderata)** 

Imposta la percentuale accettabile per la varianza dello screenshot nei confronti visivi.

 **Configurazione sintetica. withVisualVarianceHighlightHexColor(» \$1fafa00 «)** 

Imposta il colore di evidenziazione che designa le aree di varianza quando si esaminano i report di esecuzione del canary che utilizzano il monitoraggio visivo.

 Configurazione **sintetica. withFailCanaryRunOnVisualVariance(Fail Canary)** 

Imposta se il canary fallisce o meno quando vi è una differenza visiva superiore alla soglia. L'impostazione predefinita è far fallire il canary.

### Synthetics logger
<a name="CloudWatch_Synthetics_Library_SyntheticsLogger"></a>

SyntheticsLogger scrive i log out sia sulla console che su un file di registro locale allo stesso livello di registro. Questo file di log viene scritto in entrambe le posizioni solo se il livello di log è pari o inferiore al livello di registrazione desiderato della funzione di log chiamata.

Le istruzioni di registrazione nel file di log locale sono precedute da "DEBUG: ", "INFO: " e così via per corrispondere al livello di log della funzione che è stata chiamata.

Puoi usare SyntheticsLogger, supponendo che tu voglia eseguire la Synthetics Library allo stesso livello di registro del tuo Synthetics Canary Logging.

L'utilizzo di non SyntheticsLogger è necessario per creare un file di registro da caricare nella posizione dei risultati S3. Puoi invece creare un file di log diverso nella cartella ` /tmp`. Tutti i file creati nella cartella `/tmp` vengono caricati nella posizione dei risultati in S3 come artefatti. 

Per utilizzare il logger della libreria Synthetics:

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

Definizioni utili delle funzioni:

 **log.debug (,); *message* *ex*** 

Parametri: *message* è il messaggio da registrare. * ex*è l'eventuale eccezione da registrare.

Esempio:

```
log.debug("Starting step - login.");
```

 **log.error (*message*,); *ex*** 

Parametri: *message* è il messaggio da registrare. * ex*è l'eventuale eccezione da registrare.

Esempio:

```
try {
  await login();
catch (ex) {
  log.error("Error encountered in step - login.", ex);
}
```

 **log.info (*message*,*ex*);** 

Parametri: *message* è il messaggio da registrare. * ex*è l'eventuale eccezione da registrare.

Esempio:

```
log.info("Successfully completed step - login.");
```

 **log.log (*message*,*ex*);** 

Questo è un alias per `log.info`. 

Parametri: *message* è il messaggio da registrare. * ex*è l'eventuale eccezione da registrare.

Esempio:

```
 log.log("Successfully completed step - login.");
```

 **log.warn (,)*message*; *ex*** 

Parametri: *message* è il messaggio da registrare. * ex*è l'eventuale eccezione da registrare.

Esempio:

```
log.warn("Exception encountered trying to publish CloudWatch Metric.", ex);
```

### SyntheticsLogHelper classe
<a name="CloudWatch_Synthetics_Library_SyntheticsLogHelper"></a>

La classe `SyntheticsLogHelper` è disponibile nel runtime ` syn-nodejs-puppeteer-3.2` e nei runtime successivi. È già inizializzato nella libreria CloudWatch Synthetics ed è configurato con la configurazione Synthetics. È possibile aggiungerla come dipendenza nello script. Questa classe consente di disinfettare le intestazioni e i messaggi di URLs errore per oscurare le informazioni sensibili.

**Nota**  
Synthetics elimina URLs tutti i messaggi di errore che registra prima di includerli nei registri, nei report, nei file HAR e negli errori di esecuzione di Canary in base all'impostazione di configurazione Synthetics. `restrictedUrlParameters` È necessario utilizzarlo ` getSanitizedUrl` o `getSanitizedErrorMessage` solo se si registrano errori o si verificano errori nello script. URLs Synthetics non memorizza alcun artefatto canary tranne che per gli errori del canary generati dallo script. Gli artefatti di esecuzione del canary sono archiviati nel tuo account cliente. Per ulteriori informazioni, consulta [Considerazioni sulla sicurezza per Canary Synthetics](servicelens_canaries_security.md).

**Topics**
+ [getSanitizedUrl(url, stepConfig = null)](#CloudWatch_Synthetics_Library_getSanitizedUrl)
+ [getSanitizedErrorMessaggio](#CloudWatch_Synthetics_Library_getSanitizedErrorMessage)
+ [getSanitizedHeaders(intestazioni, stepconfig=null)](#CloudWatch_Synthetics_Library_getSanitizedHeaders)

#### getSanitizedUrl(url, stepConfig = null)
<a name="CloudWatch_Synthetics_Library_getSanitizedUrl"></a>

Questa funzione è disponibile nella versione `syn-nodejs-puppeteer-3.2` e versione successiva. Restituisce stringhe di URL sanificate in base alla configurazione. Puoi scegliere di oscurare parametri di URL sensibili ad esempio password e access\$1token impostando la proprietà `restrictedUrlParameters`. Per impostazione predefinita, le password inserite vengono oscurate. URLs Se necessario, puoi abilitare le password degli URL impostando `includeUrlPassword` su “true”. 

Questa funzione genera un errore se l'URL passato non è un URL valido.

 **Parametri** 
+ *url*è una stringa ed è l'URL da disinfettare.
+  *stepConfig*(Facoltativo) sovrascrive la configurazione globale Synthetics per questa funzione. Se `stepConfig` non viene passato, la configurazione globale viene utilizzata per sanificare l'URL.

 **Esempio** 

In questo esempio viene utilizzato l'URL di esempio riportato di seguito: ` https://example.com/learn/home?access_token=12345&token_type=Bearer&expires_in=1200`. In questo esempio, `access_token` contiene le tue informazioni sensibili che non devono essere registrate. Ricorda che i servizi Synthetics non memorizzano alcun artefatto di esecuzione del canary. Artefatti ad esempio log, screenshot e report sono tutti memorizzati in un bucket Amazon S3 nel tuo account cliente.

La prima fase consiste nell'impostare la configurazione 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);
```

Quindi, sanifica e registra 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');
```

Questa procedura registra quanto segue nel log del canary.

```
My example url is: https://example.com/learn/home?access_token=REDACTED&token_type=Bearer&expires_in=1200
```

Puoi ignorare la configurazione Synthetics per un URL passando un parametro facoltativo contenente le opzioni di configurazione Synthetics, come nell'esempio seguente.

```
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);
```

Nell'esempio precedente vengono oscurati tutti i parametri di query e vengono registrati come segue:

```
My example url is: https://example.com/learn/home?access_token=REDACTED&token_type=REDACTED&expires_in=REDACTED
```

#### getSanitizedErrorMessaggio
<a name="CloudWatch_Synthetics_Library_getSanitizedErrorMessage"></a>

Questa funzione è disponibile nella versione `syn-nodejs-puppeteer-3.2` e versione successiva. Restituisce stringhe di errore sanificate disinfettando qualsiasi URLs regalo in base alla configurazione Synthetics. Puoi scegliere di sovrascrivere la configurazione Synthetics globale quando chiami questa funzione passando un parametro `stepConfig`. 

 **Parametri** 
+ *error*è l'errore da disinfettare. Può essere un oggetto Error o una stringa.
+  *stepConfig*(Facoltativo) sovrascrive la configurazione globale Synthetics per questa funzione. Se `stepConfig` non viene passato, la configurazione globale viene utilizzata per sanificare l'URL.

 **Esempio** 

In questo esempio viene utilizzato l'errore seguente: ` Failed to load url: https://example.com/learn/home?access_token=12345&token_type=Bearer&expires_in=1200`

La prima fase consiste nell'impostare la configurazione 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'];
});
```

Quindi, sanifica e registra il messaggio di errore

```
// 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);
}
```

Questa procedura registra quanto segue nel log del canary.

```
Failed to load url: https://example.com/learn/home?access_token=REDACTED&token_type=Bearer&expires_in=1200
```

#### getSanitizedHeaders(intestazioni, stepconfig=null)
<a name="CloudWatch_Synthetics_Library_getSanitizedHeaders"></a>

Questa funzione è disponibile nella versione `syn-nodejs-puppeteer-3.2` e versione successiva. Restituisce intestazioni sanificate in base alla proprietà `restrictedHeaders` di ` syntheticsConfiguration`. Le intestazioni specificate nella proprietà `restrictedHeaders` vengono oscurate da log, file HAR e report. 

 **Parametri** 
+ *headers*è un oggetto contenente le intestazioni da disinfettare.
+ *stepConfig*(Facoltativo) sovrascrive la configurazione globale Synthetics per questa funzione. Se `stepConfig` non viene passato, la configurazione globale viene utilizzata per sanificare le intestazioni.

## Classi e funzioni della libreria di Node.js che si applicano solo ai canary dell'interfaccia utente
<a name="CloudWatch_Synthetics_Library_UIcanaries"></a>

Le seguenti funzioni della libreria CloudWatch Synthetics per Node.js sono utili solo per i canari dell'interfaccia utente.

**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>

Le seguenti funzioni sono nella classe Synthetics.

**Topics**
+ [async addUserAgent (pagina,); userAgentString](#CloudWatch_Synthetics_Library_addUserAgent)
+ [async executeStep (StepName,, [StepConfig]); functionToExecute](#CloudWatch_Synthetics_Library_executeStep)
+ [getDefaultLaunchOpzioni ();](#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)

#### async addUserAgent (pagina,); userAgentString
<a name="CloudWatch_Synthetics_Library_addUserAgent"></a>

Questa funzione si aggiunge *userAgentString* all'intestazione user-agent della pagina specificata.

Esempio:

```
await synthetics.addUserAgent(page, "MyApp-1.0");
```

Risultati nell'intestazione user-agent della pagina impostata su ` browsers-user-agent-header-valueMyApp-1.0`

#### async executeStep (StepName,, [StepConfig]); functionToExecute
<a name="CloudWatch_Synthetics_Library_executeStep"></a>

Esegue il passaggio fornito, avvolgendolo con le metriche di durata. start/pass/fail logging, start/pass/fail screenshots, and pass/fail

**Nota**  
Se utilizzi il runtime `syn-nodejs-2.1` o versione successiva, puoi configurare se e quando vengono acquisite le schermate. Per ulteriori informazioni, consulta [SyntheticsConfiguration classe](#CloudWatch_Synthetics_Library_SyntheticsConfiguration).

La funzione `executeStep` svolge anche le operazioni seguenti:
+ Registra che il passaggio è iniziato.
+ Acquisisce uno screenshot denominato `<stepName>-starting`.
+ Avvia un timer.
+ Esegue la funzione fornita.
+ Se la funzione viene restituita normalmente, conta come passaggio. Se la funzione genera, conta come errore.
+ Termina il timer.
+ Registra se il passaggio è riuscito o non è riuscito
+ Prende uno screenshot chiamato `<stepName>-succeeded` o ` <stepName>-failed`.
+ Emette la metrica `stepName` `SuccessPercent`, 100 per passato o 0 per errore.
+ Genera il parametro `stepName` `Duration` con un valore basato sull'ora di inizio e di fine del passaggio.
+ Infine, restituisce ciò che il `functionToExecute` ha restituito o rigenera ciò che `functionToExecute` ha generato.

Se il canary usa il runtime `syn-nodejs-2.0` o versioni successive, questa funzione aggiunge anche un riepilogo dell'esecuzione delle fasi al report del canary. Il riepilogo include dettagli su ogni fase, ad esempio l'ora di inizio, l'ora di fine, lo stato (PASSED/FAILED), il motivo dell'errore (in caso di errore) e le schermate acquisite durante l'esecuzione di ogni fase.

Esempio:

```
await synthetics.executeStep('navigateToUrl', async function (timeoutInMillis = 30000) {
           await page.goto(url, {waitUntil: ['load', 'networkidle0'], timeout: timeoutInMillis});});
```

Risposta:

Restituisce ciò che `functionToExecute` restituisce.

 **Aggiornamenti con syn-nodejs-2.2** 

A partire da`syn-nodejs-2.2`, puoi facoltativamente passare le configurazioni dei passaggi per sovrascrivere le configurazioni CloudWatch Synthetics a livello di passaggio. Per un elenco di opzioni che puoi trasferire a `executeStep`, consulta [SyntheticsConfiguration classe](#CloudWatch_Synthetics_Library_SyntheticsConfiguration).

L'esempio riportato di seguito sostituisce la configurazione `false` di default per ` continueOnStepFailure` su `true` e specifica quando acquisire screenshot.

```
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);
```

#### getDefaultLaunchOpzioni ();
<a name="CloudWatch_Synthetics_Library_getDefaultLaunchOptions"></a>

La `getDefaultLaunchOptions()` funzione restituisce le opzioni di avvio del browser utilizzate da CloudWatch Synthetics. Per ulteriori informazioni, consulta [Tipo di opzioni di avvio](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>

Restituisce la pagina corrente aperta come oggetto Puppeteer. Per ulteriori informazioni, consulta l'[API Puppeteer v1.14.0](https://github.com/puppeteer/puppeteer/blob/v1.14.0/docs/api.md).

Esempio:

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

Risposta:

La pagina (oggetto Puppeteer) attualmente aperta nella sessione corrente del browser.

#### getRequestResponseLogHelper();
<a name="CloudWatch_Synthetics_Library_getRequestResponseLogHelper"></a>

**Importante**  
Nei canary che usano il runtime `syn-nodejs-puppeteer-3.2` o versione successiva, questa funzione è resa obsoleta insieme alla classe `RequestResponseLogHelper`. Qualsiasi utilizzo di questa funzione fa apparire un avviso nei log del canary. Questa funzione verrà rimossa nelle future versioni di runtime. Se utilizzi questa funzione, utilizza invece [RequestResponseLogHelper classe](#CloudWatch_Synthetics_Library_RequestResponseLogHelper). 

Utilizza questa funzione come modello di builder per modificare i flag di registrazione della richiesta e della risposta.

Esempio:

```
synthetics.setRequestResponseLogHelper(getRequestResponseLogHelper().withLogRequestHeaders(false));;
```

Risposta:

```
{RequestResponseLogHelper}
```

#### launch(options)
<a name="CloudWatch_Synthetics_Library_LaunchOptions"></a>

Le opzioni per questa funzione sono disponibili solo nella versione di runtime `syn-nodejs-2.1` o versioni successive.

Questa funzione è utilizzata solo per i canary dell'interfaccia utente. Chiude il browser esistente e ne avvia uno nuovo.

**Nota**  
CloudWatch Synthetics avvia sempre un browser prima di iniziare a eseguire lo script. Non è necessario chiamare “launch()” a meno che non desideri avviare un nuovo browser con opzioni personalizzate.

(options) è un insieme configurabile di opzioni da impostare sul browser. Per ulteriori informazioni, consulta [Tipi di opzioni di avvio](https://pptr.dev/browsers-api/browsers.launchoptions/).

Se chiami questa funzione senza “options”, Synthetics avvia un browser con argomenti predefiniti, `executablePath` e `defaultViewport`. La finestra di visualizzazione predefinita in CloudWatch Synthetics è 1920 x 1080.

È possibile sovrascrivere i parametri di avvio utilizzati da CloudWatch Synthetics e passare parametri aggiuntivi all'avvio del browser. Ad esempio, il seguente frammento di codice avvia un browser con argomenti predefiniti e un percorso eseguibile predefinito, ma con un'area di visualizzazione di 800 x 600.

```
await synthetics.launch({
        defaultViewport: { 
            "deviceScaleFactor": 1, 
            "width": 800,
            "height": 600 
    }});
```

Il seguente codice di esempio aggiunge un nuovo `ignoreHTTPSErrors` parametro ai parametri di avvio di CloudWatch Synthetics:

```
await synthetics.launch({
        ignoreHTTPSErrors: true
 });
```

Puoi disabilitare la sicurezza web aggiungendo un `--disable-web-security` flag ad args nei parametri di avvio di 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>

**Importante**  
Nei canary che usano il runtime `syn-nodejs-puppeteer-3.2` o versioni successive, questa classe è resa obsoleta. Qualsiasi uso di questa classe fa apparire un avviso nei log del canary. Questa funzione verrà rimossa nelle future versioni di runtime. Se utilizzi questa funzione, utilizza invece [RequestResponseLogHelper classe](#CloudWatch_Synthetics_Library_RequestResponseLogHelper).

Gestisce la configurazione granulare e la creazione di rappresentazioni di stringa di payload di richiesta e risposta. 

```
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);
```

Esempio:

```
synthetics.setRequestResponseLogHelper(getRequestResponseLogHelper()
.withLogRequestPostData(true)
.withLogRequestHeaders(true)
.withLogResponseHeaders(true));
```

Risposta:

```
{RequestResponseLogHelper}
```

#### setRequestResponseLogHelper();
<a name="CloudWatch_Synthetics_Library_setRequestResponseLogHelper"></a>

**Importante**  
Nei canary che usano il runtime `syn-nodejs-puppeteer-3.2` o versione successiva, questa funzione è resa obsoleta insieme alla classe `RequestResponseLogHelper`. Qualsiasi utilizzo di questa funzione fa apparire un avviso nei log del canary. Questa funzione verrà rimossa nelle future versioni di runtime. Se utilizzi questa funzione, utilizza invece [RequestResponseLogHelper classe](#CloudWatch_Synthetics_Library_RequestResponseLogHelper). 

Utilizza questa funzione come modello di builder per impostare i flag di registrazione richiesta e risposta.

Esempio:

```
synthetics.setRequestResponseLogHelper().withLogRequestHeaders(true).withLogResponseHeaders(true);
```

Risposta:

```
{RequestResponseLogHelper}
```

#### async takeScreenshot(name, suffix);
<a name="CloudWatch_Synthetics_Library_takeScreenshot"></a>

Acquisisce uno screenshot (.PNG) della pagina corrente con nome e suffisso (opzionale).

Esempio:

```
await synthetics.takeScreenshot("navigateToUrl", "loaded")
```

Questo esempio acquisisce e carica uno screenshot denominato ` 01-navigateToUrl-loaded.png` nel bucket S3 del canary.

Puoi acquisire uno screenshot per una particolare fase del canary passando ` stepName` come primo parametro. Gli screenshot sono collegati alla fase del canary nei report, per aiutarti a tenere traccia di ogni fase durante il debug.

CloudWatch Synthetics canaries acquisisce automaticamente gli screenshot prima di iniziare un passaggio (`executeStep`la funzione) e dopo il completamento del passaggio (a meno che non si configuri il canary per disabilitare gli screenshot). Puoi acquisire più screenshot passando il nome della fase nella funzione `takeScreenshot`.

L'esempio seguente acquisisce screenshot con `signupForm` come valore di `stepName`. Lo screenshot sarà chiamato ` 02-signupForm-address` e sarà collegato alla fase denominata ` signupForm` nel report del canary.

```
await synthetics.takeScreenshot('signupForm', 'address')
```

### BrokenLinkCheckerReport classe
<a name="CloudWatch_Synthetics_Library_BrokenLinkCheckerReport"></a>

Questa classe offre metodi per aggiungere un collegamento Synthetics. È supportata solo sui canary che utilizzano la versione `syn-nodejs-2.0-beta` del runtime o versioni successive. 

Per utilizzare `BrokenLinkCheckerReport`, includi le seguenti righe nello script:

```
const BrokenLinkCheckerReport = require('@aws/synthetics-broken-link-checker-report');
            
const brokenLinkCheckerReport = new BrokenLinkCheckerReport();
```

Definizioni utili delle funzioni:

 **addLink (*syntheticsLink*, isBroken)** 

` syntheticsLink ` è un ` SyntheticsLink` che rappresenta un collegamento. Questa funzione aggiunge il collegamento in base al codice di stato. Per impostazione predefinita, considera un collegamento interrotto se il codice di stato non è disponibile o se il codice di stato è 400 o superiore. Puoi ignorare questo comportamento predefinito passando il parametro opzionale `isBrokenLink` con un valore di `true` o `false`.

Questa funzione non ha un valore di restituzione.

 **getLinks()** 

Questa funzione restituisce una matrice di oggetti `SyntheticsLink` inclusi nel report di controllo del collegamento interrotto.

 **getTotalBrokenCollegamenti ()** 

Questa funzione restituisce un numero che rappresenta il numero totale di collegamenti interrotti.

 **getTotalLinksControllato ()** 

Questa funzione restituisce un numero che rappresenta il numero totale di collegamenti inclusi nel report.

 **Come usare BrokenLinkCheckerReport** 

Il seguente frammento di codice di script canary mostra un esempio di spostamento a un collegamento e aggiunta al report di controllo del collegamento interrotto.

1. Importa `SyntheticsLink`, `BrokenLinkCheckerReport` e ` 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. Per aggiungere un collegamento al report, crea un'istanza di ` BrokenLinkCheckerReport`.

   ```
   let brokenLinkCheckerReport = new BrokenLinkCheckerReport();
   ```

1. Passa all'URL e aggiungilo al report di controllo del collegamento interrotto.

   ```
   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. Aggiungi il report a Synthetics. Questa procedura crea un file JSON denominato ` BrokenLinkCheckerReport.json` nel bucket S3 per ogni esecuzione del canary. Puoi visualizzare un report dei collegamenti nella console per ogni esecuzione del canary insieme a screenshot, log e file HAR.

   ```
   await synthetics.addReport(brokenLinkCheckerReport);
   ```

### SyntheticsLink classe
<a name="CloudWatch_Synthetics_Library_SyntheticsLink"></a>

Questa classe offre metodi per impacchettare le informazioni. È supportata solo sui canary che utilizzano la versione `syn-nodejs-2.0-beta` del runtime o versioni successive. 

Per utilizzare `SyntheticsLink`, includi le seguenti righe nello script:

```
const SyntheticsLink = require('@aws/synthetics-link');

const syntheticsLink = new SyntheticsLink("https://www.amazon.com");
```

Questa funzione restituisce `syntheticsLinkObject`

Definizioni utili delle funzioni:

 **con URL () *url*** 

` url ` è una stringa URL. Questa funzione restituisce `syntheticsLinkObject`

 **con testo () *text*** 

` text ` è una stringa che rappresenta il testo di ancoraggio. Questa funzione restituisce `syntheticsLinkObject`. Aggiunge il testo di ancoraggio corrispondente al collegamento.

 **withParentUrl(*parentUrl*)** 

` parentUrl ` è una stringa che rappresenta l'URL principale (pagina di origine). Questa funzione restituisce `syntheticsLink Object`

 **withStatusCode(*statusCode*)** 

` statusCode ` è una stringa che rappresenta il codice di stato. Questa funzione restituisce `syntheticsLinkObject`

 **withFailureReason(*failureReason*)** 

` failureReason ` è una stringa che rappresenta il motivo dell'errore. Questa funzione restituisce `syntheticsLink Object`

 **addScreenshotResult(*screenshotResult*)** 

` screenshotResult ` è un oggetto. Si tratta di un'istanza di `ScreenshotResult` restituita dalla funzione `takeScreenshot` di Synthetics. L'oggetto include i seguenti elementi:
+ `fileName`: una stringa che rappresenta ` screenshotFileName`
+ `pageUrl` (facoltativo)
+ `error` (facoltativo)

## Classi e funzioni della libreria di Node.js che si applicano solo ai canary dell'API
<a name="CloudWatch_Synthetics_Library_APIcanaries"></a>

Le seguenti CloudWatch funzioni della libreria Synthetics per Node.js sono utili solo per API canaries.

**Topics**
+ [executeHttpStep(StepName, RequestOptions, [callback], [StepConfig])](#CloudWatch_Synthetics_Library_executeHttpStep)

### executeHttpStep(StepName, RequestOptions, [callback], [StepConfig])
<a name="CloudWatch_Synthetics_Library_executeHttpStep"></a>

Esegue la richiesta HTTP fornita come fase e pubblica `SuccessPercent` (pass/fail) e parametri `Duration`.

**executeHttpStep**utilizza automaticamente funzioni native HTTP o HTTPS, a seconda del protocollo specificato nella richiesta.

Questa funzione aggiunge anche un riepilogo dell'esecuzione delle fasi al report del canary. Il riepilogo include dettagli su ogni richiesta HTTP, ad esempio:
+ Ora di inizio
+ Ora di fine
+ Stato (PASSED/FAILED)
+ Motivo dell'errore, se non è riuscita
+ dettagli della chiamata HTTP come request/response header, body, codice di stato, messaggio di stato e tempi delle prestazioni. 

**Topics**
+ [Parameters](#CloudWatch_Synthetics_Library_executeHttpStep_parameters)
+ [Esempi di utilizzo executeHttpStep](#CloudWatch_Synthetics_Library_executeHttpStep_examples)

#### Parameters
<a name="CloudWatch_Synthetics_Library_executeHttpStep_parameters"></a>

 **StepName () *String*** 

Specifica il nome della fase. Questo nome viene utilizzato anche per pubblicare le CloudWatch metriche relative a questo passaggio.

 **requestOptions () *Object or String*** 

Il valore di questo parametro può essere un URL, una stringa URL o un oggetto. Se si tratta di un oggetto, deve essere un insieme di opzioni configurabili per effettuare una richiesta HTTP. Supporta tutte le opzioni in [ http.request(options[, callback])](https://nodejs.org/api/http.html#http_http_request_options_callback) nella documentazione di Node.js.

Oltre a queste opzioni Node.js, **requestOptions** supporta il parametro aggiuntivo `body`. Puoi utilizzare il parametro `body` per trasferire i dati come corpo della richiesta.

 **richiamata () *response*** 

(Facoltativo) Questa è una funzione utente che viene richiamata con la risposta HTTP. La risposta è del tipo [Class: http. IncomingMessage](https://nodejs.org/api/http.html#http_class_http_incomingmessage).

 **StepConfig () *object*** 

(Facoltativo) Utilizza questo parametro per sostituire le configurazioni Synthetics globali con una configurazione diversa per questa fase.

#### Esempi di utilizzo executeHttpStep
<a name="CloudWatch_Synthetics_Library_executeHttpStep_examples"></a>

La seguente serie di esempi si basa l'uno sull'altro per illustrare i vari usi di questa opzione.

Questo primo esempio configura i parametri della richiesta. Puoi passare un URL come **RequestOptions:**

```
let requestOptions = 'https://www.amazon.com';
```

Oppure puoi trasferire una serie di opzioni:

```
let requestOptions = {
        'hostname': 'myproductsEndpoint.com',
        'method': 'GET',
        'path': '/test/product/validProductName',
        'port': 443,
        'protocol': 'https:'
    };
```

L'esempio seguente crea una funzione di callback che accetta una risposta. Per impostazione predefinita, se non si specifica il **callback**, CloudWatch Synthetics verifica che lo stato sia compreso tra 200 e 299 inclusi.

```
// 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'esempio successivo crea una configurazione per questo passaggio che sovrascrive la configurazione globale di Synthetics CloudWatch . La configurazione della fase in questo esempio consente le intestazioni della richiesta, le intestazioni della risposta, il corpo della richiesta (dopo i dati) e il corpo della risposta nel report e di limitare i valori di intestazione “X-Amz-Security-Token” e “Authorization”. Per impostazione predefinita, questi valori non vengono inclusi nel report per motivi di sicurezza. Se scegli di includerli, i dati vengono archiviati solo nel bucket 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
};
```

Questo ultimo esempio passa la richiesta a **executeHttpStep**e assegna un nome alla fase.

```
await synthetics.executeHttpStep('Verify GET products API', requestOptions, callback, stepConfig);
```

**Con questo set di esempi, CloudWatch Synthetics aggiunge i dettagli di ogni passaggio del rapporto e produce metriche per ogni passaggio utilizzando StepName.**

 Vedrai i parametri `successPercent` e `duration` per la fase `Verify GET products API`. Puoi monitorare le prestazioni delle API monitorando i parametri per le fasi delle chiamate API. 

Per uno script completo di esempio che utilizza queste funzioni, consulta [Canary dell'API in più fasi](CloudWatch_Synthetics_Canaries_Samples.md#CloudWatch_Synthetics_Canaries_Samples_APIsteps).

# Funzioni di libreria disponibili per gli script canary Python che usano Selenium
<a name="CloudWatch_Synthetics_Canaries_Library_Python"></a>

Questa sezione elenca le funzioni di libreria di Selenium disponibili per gli script canary Python.

**Topics**
+ [Classi e funzioni della libreria Python e Selenium che si applicano a tutti i canary](#CloudWatch_Synthetics_Library_allcanaries_Python)
+ [Classi e funzioni della libreria Python e Selenium che si applicano solo ai canary dell'interfaccia utente](#CloudWatch_Synthetics_Library_Python_UIcanaries)

## Classi e funzioni della libreria Python e Selenium che si applicano a tutti i canary
<a name="CloudWatch_Synthetics_Library_allcanaries_Python"></a>

Le seguenti funzioni della libreria CloudWatch Synthetics Selenium per Python sono utili per tutti i canarini.

**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>

È possibile utilizzare la SyntheticsConfiguration classe per configurare il comportamento delle funzioni della libreria Synthetics. Ad esempio, puoi utilizzare questa classe per configurare la funzione ` executeStep()` per non acquisire screenshot.

È possibile impostare le configurazioni CloudWatch Synthetics a livello globale.

Definizioni della funzione:

#### set\$1config(options)
<a name="CloudWatch_Synthetics_Library_setConfig_Python"></a>

```
from aws_synthetics.common import synthetics_configuration
```

` options ` è un oggetto, che è un insieme di opzioni configurabili per il tuo canary. Le seguenti sezioni spiegano i campi possibili in ` options `.
+ `screenshot_on_step_start` (booleano): indica se fare uno screenshot prima di iniziare una fase.
+ `screenshot_on_step_success` (booleano): indica se acquisire uno screenshot dopo aver completato una fase riuscita.
+ `screenshot_on_step_failure` (booleano): indica se acquisire uno screenshot dopo il fallimento di una fase.

 **with\$1screenshot\$1on\$1step\$1start(screenshot\$1on\$1step\$1start)** 

Accetta un argomento booleano, che indica se eseguire uno screenshot prima di iniziare una fase.

 **with\$1screenshot\$1on\$1step\$1success(screenshot\$1on\$1step\$1success)** 

Accetta un argomento booleano, che indica se acquisire uno screenshot dopo aver completato correttamente una fase.

 **with\$1screenshot\$1on\$1step\$1failure(screenshot\$1on\$1step\$1failure)** 

Accetta un argomento booleano, che indica se acquisire uno screenshot dopo il fallimento di una fase.

 **get\$1screenshot\$1on\$1step\$1start()** 

Restituisce se acquisire uno screenshot prima di iniziare una fase.

 **get\$1screenshot\$1on\$1step\$1success()** 

Restituisce se acquisire uno screenshot dopo aver completato correttamente una fase.

 **get\$1screenshot\$1on\$1step\$1failure()** 

Restituisce se acquisire uno screenshot dopo che una fase fallisce.

 **disable\$1step\$1screenshots()** 

Disabilita tutte le opzioni di screenshot (get\$1screenshot\$1on\$1step\$1start, get\$1screenshot\$1on\$1step\$1success e get\$1screenshot\$1on\$1step\$1failure).

 **enable\$1step\$1screenshots()** 

Abilita tutte le opzioni di screenshot (get\$1screenshot\$1on\$1step\$1start, get\$1screenshot\$1on\$1step\$1success e get\$1screenshot\$1on\$1step\$1failure). Per impostazione predefinita, tutti questi metodi sono abilitati.

 **setConfig (opzioni) relative alle metriche CloudWatch ** 

Per i canarini che utilizzano `syn-python-selenium-1.1` o versioni successive, le **(options)** di **setConfig** possono includere i seguenti parametri booleani che determinano quali metriche vengono pubblicate dal canarino. Il valore predefinito per ciascuna di queste opzioni è `true`. Le opzioni che iniziano con ` aggregated` determinano se il parametro viene emesso senza destinazione ` CanaryName`. Puoi usare questi parametri per visualizzare i risultati aggregati per tutti i canary. Le altre opzioni determinano se il parametro viene emesso con la dimensione `CanaryName`. Puoi usare questi parametri per visualizzare i risultati per ogni singolo canary.

Per un elenco delle metriche emesse dai canarini, vedi CloudWatch . [CloudWatch metriche pubblicate da canaries](CloudWatch_Synthetics_Canaries_metrics.md)
+ `failed_canary_metric` (booleano): indica se emettere il parametro ` Failed` (con la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `failed_requests_metric` (booleano): indica se emettere il parametro `Failed requests` (con la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `2xx_metric` (booleano): indica se emettere il parametro `2xx` (con la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `4xx_metric` (booleano): indica se emettere il parametro `4xx` (con la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `5xx_metric` (booleano): indica se emettere il parametro `5xx` (con la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `step_duration_metric` (booleano): indica se emettere il parametro `Step duration` (con le dimensioni `CanaryName` `StepName`) per questo canary. Il valore predefinito è `true`.
+ `step_success_metric` (booleano): indica se emettere il parametro `Step success` (con le dimensioni `CanaryName` `StepName`) per questo canary. Il valore predefinito è `true`.
+ `aggregated_failed_canary_metric` (booleano): indica se emettere il parametro `Failed` (senza la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `aggregated_failed_requests_metric` (booleano): indica se emettere il parametro `Failed Requests` (senza la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `aggregated_2xx_metric` (booleano): indica se emettere il parametro ` 2xx` (senza la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `aggregated_4xx_metric` (booleano): indica se emettere il parametro ` 4xx` (senza la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.
+ `aggregated_5xx_metric` (booleano): indica se emettere il parametro ` 5xx` (senza la dimensione `CanaryName`) per questo canary. Il valore predefinito è `true`.

 **with\$12xx\$1metric(2xx\$1metric)** 

Accetta un argomento booleano, che specifica se emettere un parametro `2xx` con dimensione `CanaryName` per questo canary.

 **with\$14xx\$1metric(4xx\$1metric)** 

Accetta un argomento booleano, che specifica se emettere un parametro `4xx` con dimensione `CanaryName` per questo canary.

 **with\$15xx\$1metric(5xx\$1metric)** 

Accetta un argomento booleano, che specifica se emettere un parametro `5xx` con dimensione `CanaryName` per questo canary.

 **withAggregated2xxMetric(aggregated2xxMetric)** 

Accetta un argomento booleano, che specifica se emettere un parametro `2xx` senza alcuna dimensione per questo canary.

 **withAggregated4xxMetric(aggregated4xxMetric)** 

Accetta un argomento booleano, che specifica se emettere un parametro `4xx` senza alcuna dimensione per questo canary.

 **with\$1aggregated\$15xx\$1metric(aggregated\$15xx\$1metric)** 

Accetta un argomento booleano, che specifica se emettere un parametro `5xx` senza alcuna dimensione per questo canary.

 **with\$1aggregated\$1failed\$1canary\$1metric (aggregated\$1failed\$1canary\$1metric)** 

Accetta un argomento booleano, che specifica se emettere un parametro `Failed` senza alcuna dimensione per questo canary.

 **con \$1aggregated\$1failed\$1requests\$1metric (aggregated\$1failed\$1requests\$1metric)** 

Accetta un argomento booleano, che specifica se emettere un parametro `Failed requests` senza alcuna dimensione per questo canary.

 **with\$1failed\$1canary\$1metric(failed\$1canary\$1metric)** 

Accetta un argomento booleano, che specifica se emettere un parametro `Failed` con dimensione `CanaryName` per questo canary.

 **with\$1failed\$1requests\$1metric(failed\$1requests\$1metric)** 

Accetta un argomento booleano, che specifica se emettere un parametro `Failed requests` con dimensione `CanaryName` per questo canary.

 **with\$1step\$1duration\$1metric(step\$1duration\$1metric)** 

Accetta un argomento booleano, che specifica se emettere un parametro `Duration` con dimensione `CanaryName` per questo canary.

 **with\$1step\$1success\$1metric(step\$1success\$1metric)** 

Accetta un argomento booleano, che specifica se emettere un parametro `StepSuccess` con dimensione `CanaryName` per questo canary.

##### Metodi per abilitare o disabilitare i parametri
<a name="CloudWatch_Synthetics_Python_setConfig_metrics"></a>

 **disable\$1aggregated\$1request\$1metrics()** 

Disabilita il canary dall'emettere tutti i parametri delle richieste emessi senza dimensione ` CanaryName`.

 **disable\$1request\$1metrics()** 

Disabilita tutti i parametri delle richieste, inclusi i parametri dei canary e i parametri aggregati in tutti i canary.

 **disable\$1step\$1metrics()** 

Disabilita tutti i parametri dei passaggi, inclusi sia quelli di riuscita che di durata.

 **enable\$1aggregated\$1request\$1metrics()** 

Consente al canary di emettere tutti i parametri della richiesta emessi senza la dimensione ` CanaryName`.

 **enable\$1request\$1metrics()** 

Abilita tutti i parametri delle richieste, inclusi i parametri dei canary e i parametri aggregati in tutti i canary.

 **enable\$1step\$1metrics()** 

Abilita tutti i parametri dei passaggi, inclusi sia quelli di riuscita che di durata.

 **Utilizzo in canary dell'interfaccia utente** 

Innanzitutto, importa la dipendenza di Synthetics e recupera la configurazione. Quindi, imposta la configurazione per ogni opzione chiamando il metodo setConfig utilizzando una delle opzioni seguenti.

```
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
```

Oppure

```
synthetics_configuration.with_screenshot_on_step_start(False).with_screenshot_on_step_success(False).with_screenshot_on_step_failure(True)
```

Per disabilitare tutti gli screenshot, usa la funzione () come in questo esempio. disableStepScreenshots

```
synthetics_configuration.disable_step_screenshots()
```

Puoi abilitare e disabilitare gli screenshot in qualsiasi punto del codice. Ad esempio, per disabilitare gli screenshot solo per una fase, disattivali prima di eseguire tale fase e quindi attivali dopo la fase.

##### set\$1config(options) per canary dell'interfaccia utente
<a name="CloudWatch_Synthetics_Library_Python_UI"></a>

A partire da `syn-python-selenium-1.1`, per i canary dell'interfaccia utente, ` set_config` può includere i seguenti parametri booleani:
+ `continue_on_step_failure`**(boolean) — Indica se continuare a eseguire lo script canary dopo un passaggio fallito (si riferisce alla funzione ExecuteStep).** Se le fasi hanno esito negativo, l'esecuzione del canary verrà comunque contrassegnata come fallita. Il valore predefinito è `false`.

### SyntheticsLogger classe
<a name="CloudWatch_Synthetics_Library_SyntheticsLogger_Python"></a>

`synthetics_logger` scrive i log sia nella console che in un file di log locale allo stesso livello di log. Questo file di log viene scritto in entrambe le posizioni solo se il livello di log è pari o inferiore al livello di registrazione desiderato della funzione di log chiamata.

Le istruzioni di registrazione nel file di log locale sono precedute da "DEBUG: ", "INFO: " e così via per corrispondere al livello di log della funzione che è stata chiamata.

L'utilizzo di `synthetics_logger` non è necessario per creare un file di log che viene caricato nel percorso dei risultati di Amazon S3. Puoi invece creare un file di log diverso nella cartella `/tmp`. Tutti i file creati nella cartella `/tmp` vengono caricati nella posizione dei risultati nel bucket S3 come artefatti.

Per utilizzare `synthetics_logger`:

```
from aws_synthetics.common import synthetics_logger
```

****Definizioni utili delle funzioni:

Ottenere il livello di log:

```
log_level = synthetics_logger.get_level()
```

Impostare il livello di log:

```
synthetics_logger.set_level()
```

Registrare un messaggio con un livello specificato. Il livello può essere `DEBUG`, ` INFO`, `WARN` oppure `ERROR`, come negli esempi di sintassi seguenti:

```
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)
```

Per informazioni sui parametri di debug, consulta la documentazione standard di Python all'indirizzo [logging.debug](https://docs.python.org/3/library/logging.html#logging.debug)

In queste funzioni di registrazione, `message` è la stringa di formato del messaggio. `args` sono gli argomenti che vengono uniti in `msg` utilizzando l'operatore di formattazione delle stringhe.

Ci sono tre argomenti della parola chiave in `kwargs`:
+ `exc_info`: se non viene valutato come false (falso), aggiunge informazioni sulle eccezioni al messaggio di log.
+ `stack_info`: imposta il valore predefinito su false (falso). Se true (vero), aggiunge le informazioni sullo stack al messaggio di log, inclusa la chiamata di registrazione effettiva.
+ `extra`: il terzo argomento della parola chiave facoltativo, che puoi utilizzare per il passaggio a un dizionario utilizzato per popolare il `__dict__` di `LogRecord` creato per l'evento di log con attributi definiti dall'utente.

Esempi:

Registrare un messaggio con il livello `DEBUG`:

```
synthetics_logger.debug('Starting step - login.')
```

Registrare un messaggio con il livello `INFO`. `logger.log` è sinonimo di `logger.info`:

```
synthetics_logger.info('Successfully completed step - login.')
```

or

```
synthetics_logger.log('Successfully completed step - login.')
```

Registrare un messaggio con il livello `WARN`:

```
synthetics_logger.warning('Warning encountered trying to publish %s', 'CloudWatch Metric')
```

Registrare un messaggio con il livello `ERROR`:

```
synthetics_logger.error('Error encountered trying to publish %s', 'CloudWatch Metric')
```

Registrare un'eccezione:

```
synthetics_logger.exception(message, *args, **kwargs)
```

Registra un messaggio con il livello `ERROR`. Le informazioni sulle eccezioni vengono aggiunte al messaggio di log. Dovresti chiamare questa funzione solo da un gestore di eccezioni.

[Per informazioni sui parametri di eccezione, consulta la documentazione standard di Python all'indirizzo logging.exception](https://docs.python.org/3/library/logging.html#logging.exception)

`message` è la stringa di formato del messaggio. `args` sono gli argomenti che vengono uniti in `msg` utilizzando l'operatore di formattazione delle stringhe.

Ci sono tre argomenti della parola chiave in `kwargs`:
+ `exc_info`: se non viene valutato come false (falso), aggiunge informazioni sulle eccezioni al messaggio di log.
+ `stack_info`: imposta il valore predefinito su false (falso). Se true (vero), aggiunge le informazioni sullo stack al messaggio di log, inclusa la chiamata di registrazione effettiva.
+ `extra`: il terzo argomento della parola chiave facoltativo, che puoi utilizzare per il passaggio a un dizionario utilizzato per popolare il `__dict__` di `LogRecord` creato per l'evento di registrazione con attributi definiti dall'utente.

Esempio:

```
synthetics_logger.exception('Error encountered trying to publish %s', 'CloudWatch Metric')
```

## Classi e funzioni della libreria Python e Selenium che si applicano solo ai canary dell'interfaccia utente
<a name="CloudWatch_Synthetics_Library_Python_UIcanaries"></a>

Le seguenti funzioni della libreria CloudWatch Synthetics Selenium per Python sono utili solo per i canari dell'interfaccia utente.

**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>

**Nota**  
`SyntheticsBrowser` è supportato solo nel browser Chrome.

Quando crei un'istanza del browser chiamando `synthetics_webdriver.Chrome()`, l'istanza del browser restituita è del tipo `SyntheticsBrowser`. La ` SyntheticsBrowser` classe eredita la WebDriver classe e fornisce l'accesso a tutti i metodi esposti da. [WebDriver](https://www.selenium.dev/documentation/webdriver/) Controlla e abilita lo script canary per guidare il browser, permettendo a Selenium di funzionare con WebDriver Synthetics. ChromeDriver

**Nota**  
Synthetics sovrascrive il metodo quit per non intraprendere WebDriver [alcuna](https://www.selenium.dev/selenium/docs/api/py/selenium_webdriver_firefox/selenium.webdriver.firefox.webdriver.html) azione. Non è necessario chiudere il browser manualmente, poiché Synthetics se ne occupa automaticamente.

Oltre ai metodi standard di Selenium, offre anche i seguenti metodi. 

**Topics**
+ [set\$1viewport\$1size(width, height)](#CloudWatch_Synthetics_Library_set_viewport_size)
+ [save\$1screenshot(filename, suffix)](#CloudWatch_Synthetics_Library_save_screenshot)

#### set\$1viewport\$1size(width, height)
<a name="CloudWatch_Synthetics_Library_set_viewport_size"></a>

Imposta l'area di visualizzazione del browser. Esempio:

```
browser.set_viewport_size(1920, 1080)
```

#### save\$1screenshot(filename, suffix)
<a name="CloudWatch_Synthetics_Library_save_screenshot"></a>

Salva gli screenshot nella directory `/tmp`. Gli screenshot vengono caricati da lì nella cartella degli artefatti del canary nel bucket S3.

*filename* è il nome del file per lo screenshot e *suffix* è una stringa opzionale da utilizzare per denominare lo screenshot.

Esempio:

```
browser.save_screenshot('loaded.png', 'page1')
```

### SyntheticsWebDriver classe
<a name="CloudWatch_Synthetics_Library_Python_SyntheticsWebDriver"></a>

Per utilizzare questa classe, utilizza i seguenti elementi nello script:

```
from aws_synthetics.selenium import synthetics_webdriver
```

**Topics**
+ [addExecutionError(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)

#### addExecutionError(errorMessage, ex);
<a name="CloudWatch_Synthetics_Library_Python_addExecutionError"></a>

`errorMessage` descrive l'errore e `ex` è l'eccezione che si verifica

Puoi utilizzare `add_execution_error` per impostare gli errori di esecuzione per il tuo canary. Fa fallire il canary senza interrompere l'esecuzione dello script. Inoltre, non influisce sui tuoi parametri `successPercent`.

È necessario tenere traccia degli errori come errori di esecuzione solo se non sono importanti per indicare il successo o il fallimento dello script canary.

Di seguito è illustrato un esempio dell'uso dell'elemento `add_execution_error`. Stai monitorando la disponibilità del tuo endpoint e acquisendo screenshot dopo che la pagina è stata caricata. Poiché l'errore di acquisizione di uno screenshot non determina la disponibilità dell'endpoint, puoi rilevare eventuali errori riscontrati durante l'acquisizione di screenshot e aggiungerli come errori di esecuzione. I parametri di disponibilità indicheranno comunque che l'endpoint è attivo e funzionante, ma lo stato del canary verrà contrassegnato come non riuscito. Il seguente blocco di codice di esempio rileva tale errore e lo aggiunge come errore di esecuzione.

```
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>

Aggiunge il valore di `user_agent_str` all'intestazione dell'agente utente del browser. È necessario assegnare `user_agent_str` prima di creare l'istanza del browser.

Esempio:

```
await synthetics_webdriver.add_user_agent('MyApp-1.0')
```

`add_user_agent` deve essere usato all'interno di una funzione `async`.

#### execute\$1step(step\$1name, function\$1to\$1execute)
<a name="CloudWatch_Synthetics_Library_Python_execute_step"></a>

Elabora una funzione. Inoltre esegue le seguenti operazioni:
+ Registra che il passaggio è iniziato.
+ Acquisisce uno screenshot denominato `<stepName>-starting`.
+ Avvia un timer.
+ Esegue la funzione fornita.
+ Se la funzione viene restituita normalmente, conta come passaggio. Se la funzione genera, conta come errore.
+ Termina il timer.
+ Registra se il passaggio è riuscito o non è riuscito
+ Prende uno screenshot chiamato `<stepName>-succeeded` o ` <stepName>-failed`.
+ Emette la metrica `stepName` `SuccessPercent`, 100 per passato o 0 per errore.
+ Genera il parametro `stepName` `Duration` con un valore basato sull'ora di inizio e di fine del passaggio.
+ Infine, restituisce ciò che il `functionToExecute` ha restituito o rigenera ciò che `functionToExecute` ha generato.

Esempio:

```
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>

Effettua una richiesta HTTP all'URL fornito e restituisce il codice di risposta della richiesta HTTP. Se si verifica un'eccezione durante la richiesta HTTP, viene restituita una stringa con valore “error”.

Esempio:

```
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>

Avvia un'istanza del browser Chromium e restituisce l'istanza creata del browser.

Esempio:

```
browser = synthetics_webdriver.Chrome()
browser.get("https://example.com/)
```

Per avviare un browser in modalità di navigazione in incognito, utilizza quanto segue:

```
add_argument('——incognito')
```

Per aggiungere impostazioni proxy, utilizza quanto segue:

```
add_argument('--proxy-server=%s' % PROXY)
```

Esempio:

```
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("——incognito")
browser = syn_webdriver.Chrome(chrome_options=chrome_options)
```

# Pianificazione delle esecuzioni di canary usando cron
<a name="CloudWatch_Synthetics_Canaries_cron"></a>

L'utilizzo di un'espressione cron ti offre flessibilità quando pianifichi un canary. Le espressioni cron contengono cinque o sei campi nell'ordine elencato nella tabella seguente. I campi sono separati da uno spazio. La sintassi varia a seconda che si utilizzi la CloudWatch console per creare il canarino o la o. AWS CLI AWS SDKs Quando utilizzi la console, specifichi solo i primi cinque campi. Quando si utilizza AWS CLI o AWS SDKs, si specificano tutti e sei i campi ed è necessario specificare `*` per il campo. `Year`


|  **Campo**  |  **Valori consentiti**  |  **Caratteri speciali consentiti**  | 
| --- | --- | --- | 
|  Minuti  |  0-59  |  , - \$1 /  | 
|  Ore  |  0-23  |  , - \$1 /  | 
|  D ay-of-month  |  1-31  |  , - \$1 ? / L W  | 
|  Mese  |  1-12 o JAN-DEC  |  , - \$1 /  | 
|  D ay-of-week  |  1-7 o SUN-SAT  |  , - \$1 ? L \$1  | 
|  Anno  |  \$1  |    | 

**Caratteri speciali**
+ Il carattere **,**(virgola) include più valori nell'espressione di un campo. Ad esempio, nel campo Month (Mese), JAN,FEB,MAR (GEN,FEB,MAR) include gennaio, febbraio e marzo.
+ Il carattere speciale **-** (trattino) specifica gli intervalli. Nel campo Day (Giorno), 1-15 include i giorni dall'1 al 15 del mese specificato.
+ Il carattere speciale **\$1** (asterisco) include tutti i valori nel campo. Nel campo Hours (Ore), **\$1** include ogni ora. Non è possibile utilizzare **\$1** in entrambi i Day-of-week campi Day-of-month e della stessa espressione. Se viene utilizzato in uno di tali campi, è necessario utilizzare **?** nell'altro.
+ Il carattere **/** (barra) specifica gli incrementi. Nel campo Minutes (Minuti), puoi inserire 1/10 per specificare ogni decimo minuto, a partire dal primo minuto dell'ora (ad esempio, l'11°, il 21° e il 31° minuto e così via).
+ Il carattere **?** (punto interrogativo) specifica un valore o un altro. **Se inserisci **7** nel Day-of-month campo e non ti interessa in che giorno della settimana è il settimo, puoi inserire?** sul Day-of-week campo.
+ Il carattere jolly **L** nel campo Day-of-month o Day-of-week specifica l'ultimo giorno del mese o della settimana.
+ Il carattere **W** jolly nel Day-of-month campo specifica un giorno della settimana. Nel Day-of-month campo, **3W** specifica il giorno della settimana più vicino al terzo giorno del mese.
+ Il **carattere jolly \$1** nel Day-of-week campo specifica una determinata istanza del giorno della settimana specificato nell'arco di un mese. Ad esempio, 3\$12 è il secondo martedì del mese. Il 3 fa riferimento a martedì perché è il terzo giorno di ogni settimana e il 2 fa riferimento al secondo giorno di questo tipo in un mese.

**Limitazioni**
+ Non puoi specificare i campi Day-of-month e Day-of-week nella stessa espressione cron. Se specifichi un valore o `*` (asterisco) in uno dei campi, devi usare un carattere **?** (punto interrogativo) nell'altro campo.
+ Le espressioni Cron che indicano frequenze più rapide di un minuto non sono supportate.
+ Non è possibile impostare un canary in modo da attendere più di un anno prima dell'esecuzione, quindi è possibile specificare solo `*` nel campo `Year`.

**Esempi**  
Quando crei un canary puoi fare riferimento alle seguenti stringhe Cron di esempio. Gli esempi seguenti sono la sintassi corretta per utilizzare o per creare AWS CLI o AWS SDKs aggiornare un canarino. Se stai usando la CloudWatch console, ometti la finale `*` in ogni esempio.


| Expression | Significato | 
| --- | --- | 
|   `0 10 * * ? *`   |  Esegui ogni giorno alle 10:00 (UTC)  | 
|   `15 12 * * ? *`   |  Esegui ogni giorno alle 12:15 (UTC)  | 
|   `0 18 ? * MON-FRI *`   |  Esegui dal lunedì al venerdì alle 18:00 (UTC)  | 
|   `0 8 1 * ? *`   |  Esegui ogni primo giorno del mese alle 8:00 (UTC)  | 
|   `0/10 * ? * MON-SAT *`   |  Esegui dal lunedì al sabato ogni 10 minuti  | 
|   `0/5 8-17 ? * MON-FRI *`   |  Esegui dal lunedì al venerdì dalle 8.00 alle 17:55 (UTC) ogni 5 minuti   | 

# Configurazione del canary per riprovare automaticamente
<a name="CloudWatch_Synthetics_Canaries_autoretry"></a>

Quando crei o aggiorni un canary, puoi configurare i canary in modo che tentino automaticamente altre esecuzioni quando quella programmata non riesce. Questo aiuta a distinguere tra guasti reali e problemi temporanei, fornendo risultati più affidabili. Tale funzionalità è ideale per creare sistemi di monitoraggio più resilienti, riducendo al contempo i falsi allarmi e gli interventi manuali.

**Per creare un canary con tentativi automatici**

1. Apri la CloudWatch console all'indirizzo [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Nel pannello di navigazione, scegli **Application Signals**, **Canary di Synthetics**.

1. Scegli **Create Canary** (Crea Canary).

1. In **Configurazione aggiuntiva**, sotto **Tentativi automatici**, seleziona il numero massimo di tentativi desiderato.

**Per aggiornare il numero massimo di tentativi per un canary**

1. Apri la CloudWatch console all'indirizzo [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Nel pannello di navigazione, scegli **Application Signals**, **Canary di Synthetics**.

1. Puoi effettuare una delle seguenti operazioni:
   + Seleziona il canary e scegli **Azioni**, quindi **Abilita tentativi automatici** e modifica il numero massimo di tentativi.
   + Seleziona il canary e scegli **Operazioni**, **Modifica**. Nella pagina **Modifica dettagli**, sotto **Configurazioni aggiuntive**, in **Tentativi automatici**, modifica la configurazione dei nuovi tentativi.

 **Limitazioni** 

Di seguito sono riportate le limitazioni per configurare i tentativi automatici.
+ Supportato solo nelle versioni di runtime `syn-nodejs-puppeteer-10.0 ` o più recenti, ` syn-nodejs-playwright-2.0` o più recenti, `syn-python-selenium-5.1` o più recenti o più recenti. `syn-nodejs-3.0`
+ I canary a lunga esecuzione che scadono dopo dieci minuti sono limitati a un tentativo. Tutti gli altri canary possono supportare fino a due tentativi

# Utilizzo delle dipendenze con CloudWatch Synthetics canaries
<a name="CloudWatch_Synthetics_Canaries_dependencies"></a>

Questa sezione spiega come usare `Dependencies` nei canarini CloudWatch Synthetics. Il campo `Dependencies` ti consente di specificare le dipendenze per i tuoi canary, consentendoti di includere librerie aggiuntive o codice personalizzato utilizzabile dai tuoi script Canary.

## Panoramica di
<a name="overview"></a>

CloudWatch Synthetics Canaries supporta la specificazione dei layer Lambda come dipendenze. Questa funzionalità consente di:
+ Condividere codice comune su più canary
+ Gestire le dipendenze separatamente dal codice dello script canary
+ Ridurre le dimensioni del tuo script canary spostando le dipendenze su un livello Lambda

## Supportato APIs
<a name="supported-apis"></a>

Il `Dependencies` campo è supportato nei seguenti casi: 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) 

## Sintassi
<a name="syntax"></a>

Il campo `Dependencies` fa parte della struttura del codice nella sintassi della richiesta:

```
"Code": { 
  "Handler": "string",
  "S3Bucket": "string",
  "S3Key": "string",
  "S3Version": "string",
  "ZipFile": blob,
  "Dependencies": [
    {
      "Type": "LambdaLayer",
      "Reference": "string"
    }
  ]
}
```

## Utilizzo delle dipendenze
<a name="usage"></a>

Di seguito sono riportati alcuni esempi e istruzioni per l'utilizzo del campo `Dependencies` in diversi scenari.

### Creazione di un Canary con dipendenze
<a name="creating-canary"></a>

Quando crei un canary, puoi specificare un livello Lambda come dipendenza:

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

### Aggiornamento delle dipendenze di un canary
<a name="updating-canary"></a>

Puoi aggiornare le dipendenze di un canarino utilizzando l' UpdateCanary API:

```
{
  "Name": "my-canary",
  "Code": {
    "Dependencies": [
      {
        "Type": "LambdaLayer",
        "Reference": "arn:aws:lambda:us-west-2:123456789012:layer:my-updated-layer:2"
      }
    ]
  }
}
```

### Rimozione delle dipendenze
<a name="removing-dependencies"></a>

Per rimuovere le dipendenze da un canary, fornisci un array vuoto per il campo dipendenze:

```
{
  "Name": "my-canary",
  "Code": {
    "Dependencies": []
  }
}
```

### Testare le dipendenze con StartCanaryDryRun
<a name="testing-dependencies"></a>

Prima di aggiornare un canarino con nuove dipendenze, puoi testarlo utilizzando l'API: StartCanaryDryRun 

```
{
  "Name": "my-canary",
  "Code": {
    "Dependencies": [
      {
        "Type": "LambdaLayer",
        "Reference": "arn:aws:lambda:us-west-2:123456789012:layer:my-test-layer:3"
      }
    ]
  }
}
```

## Considerazioni e limitazioni
<a name="limitations"></a>
+ È possibile specificare un solo livello Lambda come dipendenza
+ Il ruolo utilizzato per creare un canary con dipendenze dovrebbe avere accesso ` lambda:GetLayerVersion` al livello delle dipendenze oltre [ai ruoli e alle autorizzazioni necessari](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Roles.html)

## Creazione di livelli Lambda compatibili
<a name="creating-compatible-layers"></a>

Per informazioni su come creare e impacchettare i livelli, consulta [Managing Lambda dependencies with layers](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html), mentre per comprendere la struttura di impacchettamento di un canary in base alla sua organizzazione, consulta [Writing a canary script](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_WritingCanary.html).

# Gruppi
<a name="CloudWatch_Synthetics_Groups"></a>

Puoi creare *gruppi* per associare i canary tra loro, compresi i canary tra regioni. L'utilizzo dei gruppi può aiutarti a gestire e automatizzare i canary e puoi anche visualizzare i risultati e le statistiche di esecuzione aggregati per tutti i canary di un gruppo. 

I gruppi sono risorse globali. Quando crei un gruppo, questo viene replicato in tutte le AWS regioni che supportano i gruppi e puoi aggiungere canarini da una qualsiasi di queste regioni e visualizzarlo in una di queste regioni. Sebbene il formato dell'ARN del gruppo rifletta il nome della regione in cui è stato creato, un gruppo non è vincolato ad alcuna regione. Ciò significa che puoi inserire canary di più regioni nello stesso gruppo e utilizzare quindi tale gruppo per visualizzare e gestire tutti i canary in un'unica vista.

I gruppi sono supportati in tutte le regioni ad eccezione delle regioni che sono disattivate per impostazione predefinita. Per ulteriori informazioni su queste regioni, consulta [Abilitazione di una regione](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html#rande-manage-enable).

Ogni gruppo può contenere un massimo di 10 canary. Nel tuo account puoi avere un massimo di 20 gruppi. Ogni singolo canary può essere membro al massimo di 10 gruppi.

**Come creare un gruppo**

1. Apri la CloudWatch console all'indirizzo. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)

1. Nel pannello di navigazione, scegli **Application Signals**, **Canary di Synthetics**.

   

1. Selezionare **Create Group (Crea gruppo)**.

1. Per **Group Name** (Nome gruppo), specifica un nome per il gruppo. 

1. Seleziona i canary da associare a questo gruppo. Per selezionare un canary, digita il suo nome completo in **Exact canary name** (Nome esatto del canary) e scegli **Search** (Cerca). Quindi seleziona la casella di controllo accanto al nome del canary. Se ci sono più canary con lo stesso nome in regioni diverse, assicurati di selezionare i canary desiderati.

   Puoi ripetere questa fase per associare un massimo di 10 canary al gruppo.

1. (Facoltativo) In **Tags** (Tag), aggiungi facoltativamente una o più coppie chiave/valore come tag per questo gruppo. I tag possono aiutarti a identificare e organizzare AWS le tue risorse e a tenere traccia AWS dei costi. Per ulteriori informazioni, consulta [Assegnazione di tag alle risorse Amazon CloudWatch](CloudWatch-Tagging.md).

1. Selezionare **Create Group (Crea gruppo)**.

# Test di un canary in locale
<a name="CloudWatch_Synthetics_Debug_Locally"></a>

Questa sezione spiega come modificare, testare ed eseguire il debug di CloudWatch Synthetics canaries direttamente all'interno dell'editor di codice o Microsoft Visual Studio dell'editor di codice. JetBrains IDE L'ambiente di debug locale utilizza un container Serverless Application Model (SAM) per simulare una funzione Lambda per emulare il comportamento di un canary Synthetics. 

**Nota**  
Non è pratico eseguire localmente il debug dei canary che si basano sul monitoraggio visivo. Il monitoraggio visivo si basa sull'acquisizione di screenshot di base durante un'esecuzione iniziale e sul successivo confronto di questi screenshot con quelli delle esecuzioni successive. In un ambiente di sviluppo locale, le esecuzioni non vengono archiviate o tracciate, e ogni iterazione è un'esecuzione indipendente e autonoma. L'assenza di una cronologia di esecuzione dei canary rende poco pratico il debug dei canary che si basano sul monitoraggio visivo.

 **Prerequisiti** 

1. Scegli o crea un bucket Amazon S3 da utilizzare per archiviare artefatti provenienti da test canary locali, come file HAR e screenshot. Ciò richiede il provisioning di IAM. Se salti la configurazione dei bucket Amazon S3, puoi comunque testare il tuo canary localmente, ma vedrai un messaggio di errore relativo al bucket mancante e non avrai accesso agli artefatti del canary.

   Se utilizzi un bucket Amazon S3, ti consigliamo di impostare il ciclo di vita del bucket in modo da eliminare gli oggetti dopo alcuni giorni, per risparmiare sui costi. Per ulteriori informazioni, consulta [Gestione del ciclo di vita dell'archiviazione](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html).

1. Configura un AWS profilo predefinito per il tuo account. AWS Per ulteriori informazioni, consulta [Configuration and credential file settings](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html).

1. Imposta la AWS regione predefinita dell'ambiente di debug sulla tua regione preferita, ad esempio` us-west-2`.

1. Installa la AWS SAM CLI. Per ulteriori informazioni, consulta [Installazione della AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html).

1. Installa Visual Studio Code Editor o JetBrains IDE. Per ulteriori informazioni, consulta [https://code.visualstudio.com/](https://code.visualstudio.com/) o [https://www.jetbrains.com/ides/](https://www.jetbrains.com/ides/)

1. DockerInstalla per funzionare con la AWS SAM CLI. Assicurati di avviare il daemon di Docker. Per ulteriori informazioni, consulta [Installazione  Docker da utilizzare con la AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-docker.html).

   In alternativa, puoi installare altri software di gestione dei container, ad esempio  Rancher, purché utilizzi il runtime Docker.

1. Installa un'estensione del AWS toolkit per il tuo editor preferito. Per ulteriori informazioni, consulta [Installazione di AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-toolkit.html) o [Installazione di AWS Toolkit for JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/setup-toolkit.html).

**Topics**
+ [Configurazione dell'ambiente di test e di debug](#CloudWatch_Synthetics_Debug_Environment)
+ [Utilizzare Visual Studio Code IDE](#CloudWatch_Synthetics_Debug_VS)
+ [Utilizzare JetBrains IDE](#CloudWatch_Synthetics_Debug_JetBrains)
+ [Esegui un canary localmente con la CLI SAM](#CloudWatch_Synthetics_Run_Locally)
+ [Integra il tuo ambiente di test locale in un pacchetto canary esistente](#CloudWatch_Synthetics_Debug_Integrate)
+ [Modificare il runtime di CloudWatch Synthetics](#CloudWatch_Synthetics_Debug_DifferentRuntime)
+ [Errori comuni](#CloudWatch_Synthetics_Debug_Errors)

## Configurazione dell'ambiente di test e di debug
<a name="CloudWatch_Synthetics_Debug_Environment"></a>

Innanzitutto, clona il repository Github che lo fornisce inserendo il seguente comando. AWS Il repository contiene esempi di codice sia per i canary Node.js che per i canary Python. 

```
git clone https://github.com/aws-samples/synthetics-canary-local-debugging-sample.git
```

Quindi esegui una delle seguenti operazioni, a seconda del linguaggio dei canary.

**Per i canary Node.js**

1. Vai alla directory di origine del canary Node.js immettendo il seguente comando.

   ```
   cd synthetics-canary-local-debugging-sample/nodejs-canary/src
   ```

1. Esegui il comando riportato qui di seguito per installare le dipendenze dei canary.

   ```
   npm install
   ```

**Per i canary Python**

1. Vai alla directory di origine del canary Python immettendo il seguente comando.

   ```
   cd synthetics-canary-local-debugging-sample/python-canary/src
   ```

1. Esegui il comando riportato qui di seguito per installare le dipendenze dei canary.

   ```
   pip3 install -r requirements.txt -t .
   ```

## Utilizzare Visual Studio Code IDE
<a name="CloudWatch_Synthetics_Debug_VS"></a>

Il file di configurazione di avvio di Visual Studio è posizionato in ` .vscode/launch.json`. Contiene configurazioni che consentono a Visual Studio di individuare il file modello. Definisce un payload Lambda con i parametri richiesti per richiamare correttamente il canary. Qui si trova la configurazione di avvio per un 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": {}
            }
        }
    ]
}
```

Puoi anche fornire facoltativamente i seguenti campi nel payload JSON:
+ Valori validi `s3EncryptionMode`: `SSE_S3` \$1 `SSE_KMS`
+ `s3KmsKeyArn`Valore valido: *KMS Key ARN*
+ Valori validi `activeTracing`: `true` \$1 `false`
+ `canaryRunId`Valore valido: *UUID* questo parametro è obbligatorio se la traccia attiva è abilitata.

Per eseguire il debug del canary in Visual Studio, aggiungi dei punti di interruzione nel codice canary in cui desideri sospendere l'esecuzione. Per aggiungere un punto di interruzione, scegli il margine dell'editor e passa alle modalità **Esecuzione e debug** nell'editor. Esegui il canary facendo clic sul pulsante play. Quando il canary viene eseguito, i log verranno registrati nella console di debug, che ti fornirà informazioni in tempo reale sul comportamento del canary. Se hai aggiunto punti di interruzione, l'esecuzione del canary si interromperà in corrispondenza di ogni punto di interruzione, consentendoti di scorrere il codice e ispezionare i valori delle variabili, i metodi di istanza, gli attributi degli oggetti e lo stack di chiamate alle funzioni.

Non sono previsti costi per l'esecuzione e il debug di Canaries localmente, ad eccezione degli artefatti archiviati nel bucket Amazon S3 e delle metriche generate da ogni esecuzione locale. CloudWatch 

![\[Visual Studio Code interface showing JavaScript code for a heartbeat canary function.\]](http://docs.aws.amazon.com/it_it/AmazonCloudWatch/latest/monitoring/images/DebugCanaryVS.png)


## Utilizzare JetBrains IDE
<a name="CloudWatch_Synthetics_Debug_JetBrains"></a>

Dopo aver installato l' AWS Toolkit for JetBrains estensione, assicuratevi che il plugin e il JavaScript debugger Node.js siano abilitati all'esecuzione, se state eseguendo il debug di un canarino Node.js. Quindi procedi come descritto di seguito.

**Esegui il debug di un canary usando JetBrains IDE**

1. Nel riquadro di navigazione a sinistra di JetBrains IDE, scegli **Lambda**, quindi scegli il modello di configurazione locale.

1. Immetti un nome per la configurazione dell'esecuzione, ad esempio **LocalSyntheticsCanary**.

1. Scegli **Da modello**, poi apri il file browser nel campo modello, quindi seleziona il file **template.yml** dal progetto, dalla directory **nodejs** o **python**.

1. Nella sezione **Input**, inserisci il payload per il canary come mostrato nella schermata seguente.

   ```
   {
    "canaryName": "LocalSyntheticsCanary",
    "artifactS3Location": {
        "s3Bucket": "cw-syn-results-123456789012-us-west-2",
        "s3Key": "local-run-artifacts"
    },
    "customerCanaryHandlerName": "heartbeat-canary.handler"
   }
   ```

   Puoi anche impostare altre variabili di ambiente nel payload JSON, come elencato in [Utilizzare Visual Studio Code IDE](#CloudWatch_Synthetics_Debug_VS).

![\[Run/Debug Configurations interface for AWS Lambda with LocalSyntheticsCanary settings.\]](http://docs.aws.amazon.com/it_it/AmazonCloudWatch/latest/monitoring/images/DebugCanaryIntellij.png)


## Esegui un canary localmente con la CLI SAM
<a name="CloudWatch_Synthetics_Run_Locally"></a>

Utilizza una delle seguenti procedure per eseguire il tuo canary localmente utilizzando la CLI Serverless Application Model (SAM). Assicurati di specificare il nome del tuo bucket Amazon S3 per `s3Bucket` in `event.json`

**Per utilizzare la CLI SAM per eseguire un canary Node.js**

1. Vai alla directory di origine immettendo il seguente comando.

   ```
   cd synthetics-canary-local-debugging-sample/nodejs-canary
   ```

1. Esegui i comandi seguenti:

   ```
   sam build
   sam local invoke -e ../event.json
   ```

**Per usare la CLI SAM per eseguire un canary Python**

1. Vai alla directory di origine immettendo il seguente comando.

   ```
   cd synthetics-canary-local-debugging-sample/python-canary
   ```

1. Esegui i comandi seguenti:

   ```
   sam build
   sam local invoke -e ../event.json
   ```

## Integra il tuo ambiente di test locale in un pacchetto canary esistente
<a name="CloudWatch_Synthetics_Debug_Integrate"></a>

Puoi integrare il debug locale del canary nel tuo pacchetto canary esistente copiando tre file:
+ Copia il file `template.yml` nella directory root del tuo pacchetto canary. Assicurati di modificare il percorso per `CodeUri` in modo che punti alla directory in cui è presente il tuo codice canary.
+ Se stai lavorando con un canary Node.js, copia il file `cw-synthetics.js` nella directory di origine del tuo canary. Se stai lavorando con un canary Python, copia il file ` cw-synthetics.py` nella directory di origine del tuo canary.
+ Copia il file di configurazione di avvio .`vscode/launch.json` nella directory root del pacchetto. Assicurati di inserirlo all'interno della cartella `.vscode`; creala se non esiste già.

## Modificare il runtime di CloudWatch Synthetics
<a name="CloudWatch_Synthetics_Debug_DifferentRuntime"></a>

Come parte del debug, potresti provare a eseguire un canary con un runtime Synthetics diverso, invece del runtime CloudWatch più recente. A tale scopo, individua il runtime che desideri utilizzare da una delle seguenti tabelle. Assicurarti di selezionare il runtime per la regione corretta. Quindi incolla l'ARN per quel runtime nella posizione appropriata nel file ` template.yml`, quindi esegui il canary.

### Runtime Node.js e Puppeteer
<a name="Synthetics_NodeJS_Puppeteer_Runtime_ARNs"></a>

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

La tabella seguente elenca la versione ARNs ` syn-nodejs-puppeteer-15.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

La tabella seguente elenca la versione ARNs ` syn-nodejs-puppeteer-14.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

La tabella seguente elenca la versione ARNs ` syn-nodejs-puppeteer-13.1` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

La tabella seguente elenca la versione ARNs ` syn-nodejs-puppeteer-13.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

La tabella seguente elenca la versione ARNs ` syn-nodejs-puppeteer-12.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

La tabella seguente elenca la versione ARNs ` syn-nodejs-puppeteer-11.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARNs per syn-nodejs-puppeteer -10.0
<a name="syn-nodejs-puppeteer-10.0"></a>

La tabella seguente elenca la versione ARNs ` syn-nodejs-puppeteer-10.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:58`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:61`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:59`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:61`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:59`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:59`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:34`   | 
|  Asia Pacifico (Giacarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:41`   | 
|  Asia Pacifico (Malesia)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics:15`   | 
|  Asia Pacifico (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:32`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:59`   | 
|  Asia Pacifico (Nuova Zelanda)  |   `arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics:18`   | 
|  Asia Pacifico (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:45`   | 
|  Asia Pacifico (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:62`   | 
|  Asia Pacifico (Singapore)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:63`   | 
|  Asia Pacifico (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:58`   | 
|  Asia Pacifico (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics:24`   | 
|  Asia Pacifico (Thailandia)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics:6`   | 
|  Asia Pacifico (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:59`   | 
|  Canada (Centrale)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:59`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:90`   | 
|  Cina (Pechino)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:58`   | 
|  Cina (Ningxia)  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:59`   | 
|  Europa (Francoforte)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:59`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:60`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:58`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:60`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:59`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:34`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:59`   | 
|  Europa (Zurigo)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:33`   | 
|  Israele (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:31`   | 
|  Messico (centrale)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics:7`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:58`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:34`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:60`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:54`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:55`   | 

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

La tabella seguente elenca la versione ARNs ` syn-nodejs-puppeteer-9.1` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:53`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:56`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:54`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:56`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:54`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:54`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:29`   | 
|  Asia Pacifico (Giacarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:36`   | 
|  Asia Pacifico (Malesia)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics:10`   | 
|  Asia Pacifico (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:27`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:54`   | 
|  Asia Pacifico (Nuova Zelanda)  |   `arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics:17`   | 
|  Asia Pacifico (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:40`   | 
|  Asia Pacifico (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:57`   | 
|  Asia Pacifico (Singapore)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:58`   | 
|  Asia Pacifico (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:53`   | 
|  Asia Pacifico (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics:25`   | 
|  Asia Pacifico (Thailandia)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics:1`   | 
|  Asia Pacifico (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:54`   | 
|  Canada (Centrale)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:54`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:85`   | 
|  Cina (Pechino)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:54`   | 
|  Cina (Ningxia)  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:55`   | 
|  Europa (Francoforte)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:54`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:55`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:53`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:55`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:54`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:29`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:54`   | 
|  Europa (Zurigo)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:28`   | 
|  Israele (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:26`   | 
|  Messico (centrale)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics:3`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:53`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:29`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:55`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:50`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:51`   | 

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

La tabella seguente elenca la versione ARNs ` syn-nodejs-puppeteer-9.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:51`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:54`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:52`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:54`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:52`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:52`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:27`   | 
|  Asia Pacifico (Giacarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:34`   | 
|  Asia Pacifico (Malesia)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics:8`   | 
|  Asia Pacifico (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:25`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:52`   | 
|  Asia Pacifico (Nuova Zelanda)  |   `arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics:16`   | 
|  Asia Pacifico (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:38`   | 
|  Asia Pacifico (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:55`   | 
|  Asia Pacifico (Singapore)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:56`   | 
|  Asia Pacifico (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:51`   | 
|  Asia Pacifico (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics:26`   | 
|  Asia Pacifico (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:52`   | 
|  Canada (Centrale)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:52`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:83`   | 
|  Cina (Pechino)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:52`   | 
|  Cina (Ningxia)  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:53`   | 
|  Europa (Francoforte)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:52`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:53`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:51`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:53`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:52`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:27`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:52`   | 
|  Europa (Zurigo)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:26`   | 
|  Israele (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:24`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:51`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:27`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:53`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:48`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:49`   | 

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

La tabella seguente elenca la versione ARNs ` syn-nodejs-puppeteer-8.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:48`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:50`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:48`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:51`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:48`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:49`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:24`   | 
|  Asia Pacifico (Giacarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:30`   | 
|  Asia Pacifico (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:22`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:48`   | 
|  Asia Pacifico (Nuova Zelanda)  |   `arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics:15`   | 
|  Asia Pacifico (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:34`   | 
|  Asia Pacifico (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:51`   | 
|  Asia Pacifico (Singapore)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:53`   | 
|  Asia Pacifico (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:48`   | 
|  Asia Pacifico (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics:23`   | 
|  Asia Pacifico (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:48`   | 
|  Canada (Centrale)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:48`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:80`   | 
|  Cina (Pechino)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:49`   | 
|  Cina (Ningxia)  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:50`   | 
|  Europa (Francoforte)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:48`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:50`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:48`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:49`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:48`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:24`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:48`   | 
|  Europa (Zurigo)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:23`   | 
|  Israele (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:21`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:48`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:23`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:49`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:45`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:46`   | 

#### ARNs per syn-nodejs-puppeteer -7.0
<a name="syn-nodejs-puppeteer-7.0"></a>

La tabella seguente elenca la versione ARNs ` syn-nodejs-puppeteer-7.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:44`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:46`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:44`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:47`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:44`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:45`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:20`   | 
|  Asia Pacifico (Giacarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:26`   | 
|  Asia Pacifico (Malesia)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics:7`   | 
|  Asia Pacifico (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:18`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:44`   | 
|  Asia Pacifico (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:30`   | 
|  Asia Pacifico (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:46`   | 
|  Asia Pacifico (Singapore)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:49`   | 
|  Asia Pacifico (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:44`   | 
|  Asia Pacifico (Thailandia)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics:3`   | 
|  Asia Pacifico (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:44`   | 
|  Canada (Centrale)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:44`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:76`   | 
|  Cina (Pechino)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:45`   | 
|  Cina (Ningxia)  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:46`   | 
|  Europa (Francoforte)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:44`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:46`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:44`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:45`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:44`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:20`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:44`   | 
|  Europa (Zurigo)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:19`   | 
|  Israele (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:17`   | 
|  Messico (centrale)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics:4`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:44`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:19`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:45`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:41`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:42`   | 

#### ARNs per syn-nodejs-puppeteer -6.2
<a name="syn-nodejs-puppeteer-6.2"></a>

La tabella seguente elenca la versione ARNs ` syn-nodejs-puppeteer-6.2` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:41`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:43`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:41`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:44`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:41`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:42`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:17`   | 
|  Asia Pacifico (Giacarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:23`   | 
|  Asia Pacifico (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:15`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:41`   | 
|  Asia Pacifico (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:27`   | 
|  Asia Pacifico (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:42`   | 
|  Asia Pacifico (Singapore)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:46`   | 
|  Asia Pacifico (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:41`   | 
|  Asia Pacifico (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:41`   | 
|  Canada (Centrale)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:41`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:73`   | 
|  Cina (Pechino)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:42`   | 
|  Cina (Ningxia)  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:43`   | 
|  Europa (Francoforte)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:41`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:43`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:41`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:42`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:41`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:17`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:41`   | 
|  Europa (Zurigo)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:16`   | 
|  Israele (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:14`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:41`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:16`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:42`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:39`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:39`   | 

#### ARNs per syn-nodejs-puppeteer -5.2
<a name="syn-nodejs-puppeteer-5.2"></a>

La tabella seguente elenca la versione ARNs ` syn-nodejs-puppeteer-5.2` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:42`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:44`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:42`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:45`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:42`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:43`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:18`   | 
|  Asia Pacifico (Giacarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:24`   | 
|  Asia Pacifico (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:16`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:42`   | 
|  Asia Pacifico (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:28`   | 
|  Asia Pacifico (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:44`   | 
|  Asia Pacifico (Singapore)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:47`   | 
|  Asia Pacifico (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:42`   | 
|  Asia Pacifico (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:42`   | 
|  Canada (Centrale)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:42`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:74`   | 
|  Cina (Pechino)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:43`   | 
|  Cina (Ningxia)  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:44`   | 
|  Europa (Francoforte)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:42`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:44`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:42`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:43`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:42`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:18`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:42`   | 
|  Europa (Zurigo)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:17`   | 
|  Israele (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:15`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:42`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:17`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:43`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:40`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:40`   | 

### Runtime di Node.js e Playwright
<a name="Synthetics_Playwright_Runtime_ARNs"></a>

#### ARNs per syn-nodejs-playwright -6.0
<a name="syn-nodejs-playwright-6.0"></a>

La tabella seguente elenca la versione ARNs ` syn-nodejs-playwright-6.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARNs per syn-nodejs-playwright -5.1
<a name="syn-nodejs-playwright-5.1"></a>

La tabella seguente elenca la versione ARNs ` syn-nodejs-playwright-5.1` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARNs per syn-nodejs-playwright -5.0
<a name="syn-nodejs-playwright-5.0"></a>

La tabella seguente elenca la versione ARNs ` syn-nodejs-playwright-5.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

La tabella seguente elenca la versione ARNs ` syn-nodejs-playwright-4.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARNs per syn-nodejs-playwright -3.0
<a name="syn-nodejs-playwright-3.0"></a>

La tabella seguente elenca la versione ARNs ` syn-nodejs-playwright-3.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARNs per syn-nodejs-playwright -2.0
<a name="syn-nodejs-playwright-2.0"></a>

La tabella seguente elenca la versione ARNs ` syn-nodejs-playwright-2.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   ` arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Stati Uniti orientali (Ohio)  |   ` arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Stati Uniti occidentali (California settentrionale)  |   ` arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Stati Uniti occidentali (Oregon)  |   ` arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Africa (Città del Capo)  |   ` arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pacifico (Hong Kong)  |   ` arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pacific (Hyderabad)  |   ` arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pacifico (Giacarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pacifico (Malesia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pacifico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pacifico (Mumbai)  |   ` arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pacifico (Nuova Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJsPlaywright:7`   | 
|  Asia Pacifico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pacifico (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pacifico (Singapore)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pacifico (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pacifico (Taipei)  |   ` arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJsPlaywright:9`   | 
|  Asia Pacifico (Thailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  Asia Pacifico (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Canada (Centrale)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Canada occidentale (Calgary)  |   ` arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Cina (Pechino)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  Cina (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  Europa (Francoforte)  |   ` arn:aws:lambda:eu-central-1:122305336817:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europa (Irlanda)  |   ` arn:aws:lambda:eu-west-1:563204233543:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europa (Londra)  |   ` arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europa (Milano)  |   ` arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europa (Parigi)  |   ` arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europa (Spagna)  |   ` arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europa (Stoccolma)  |   ` arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europa (Zurigo)  |   ` arn:aws:lambda:eu-central-2:224218992030:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Israele (Tel Aviv)  |   ` arn:aws:lambda:il-central-1:313249807427:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Messico (centrale)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJsPlaywright:5`   | 
|  Medio Oriente (Bahrein)  |   ` arn:aws:lambda:me-south-1:823195537320:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   ` arn:aws:lambda:me-central-1:239544149032:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Sud America (San Paolo)  |   ` arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 

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

La tabella seguente elenca la versione ARNs ` syn-nodejs-playwright-1.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   ` arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Stati Uniti orientali (Ohio)  |   ` arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Stati Uniti occidentali (California settentrionale)  |   ` arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Stati Uniti occidentali (Oregon)  |   ` arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Africa (Città del Capo)  |   ` arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pacifico (Hong Kong)  |   ` arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pacific (Hyderabad)  |   ` arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pacifico (Giacarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pacifico (Malesia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pacifico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pacifico (Mumbai)  |   ` arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pacifico (Nuova Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJsPlaywright:8`   | 
|  Asia Pacifico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pacifico (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pacifico (Singapore)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pacifico (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pacifico (Taipei)  |   ` arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJsPlaywright:10`   | 
|  Asia Pacifico (Thailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pacifico (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Canada (Centrale)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Canada occidentale (Calgary)  |   ` arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Cina (Pechino)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Cina (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europa (Francoforte)  |   ` arn:aws:lambda:eu-central-1:122305336817:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europa (Irlanda)  |   ` arn:aws:lambda:eu-west-1:563204233543:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europa (Londra)  |   ` arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europa (Milano)  |   ` arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europa (Parigi)  |   ` arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europa (Spagna)  |   ` arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europa (Stoccolma)  |   ` arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europa (Zurigo)  |   ` arn:aws:lambda:eu-central-2:224218992030:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Israele (Tel Aviv)  |   ` arn:aws:lambda:il-central-1:313249807427:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Messico (centrale)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  Medio Oriente (Bahrein)  |   ` arn:aws:lambda:me-south-1:823195537320:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   ` arn:aws:lambda:me-central-1:239544149032:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Sud America (San Paolo)  |   ` arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 

### Runtime Node.js
<a name="Synthetics_NodeJS_Runtime_ARNs"></a>

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

La tabella seguente elenca la versione ARNs `syn-nodejs-4.1` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Africa (Città del Capo)  |   ` arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pacific (Hyderabad)  |   ` arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pacifico (Giacarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pacifico (Malesia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pacifico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pacifico (Mumbai)  |   ` arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pacifico (Nuova Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pacifico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pacifico (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pacifico (Singapore)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pacifico (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pacifico (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pacifico (Thailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pacifico (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Canada (Centrale)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Cina (Pechino)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Cina (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europa (Francoforte)  |   ` arn:aws:lambda:eu-central-1:122305336817:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europa (Milano)  |   ` arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europa (Spagna)  |   ` arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europa (Stoccolma)  |   ` arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europa (Zurigo)  |   ` arn:aws:lambda:eu-central-2:224218992030:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Israele (Tel Aviv)  |   ` arn:aws:lambda:il-central-1:313249807427:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Messico (centrale)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJs:12`   | 

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

La tabella seguente elenca la versione ARNs da utilizzare per la versione `syn-nodejs-4.0` del runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Africa (Città del Capo)  |   ` arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pacific (Hyderabad)  |   ` arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pacifico (Giacarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pacifico (Malesia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pacifico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pacifico (Mumbai)  |   ` arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pacifico (Nuova Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pacifico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pacifico (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pacifico (Singapore)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pacifico (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pacifico (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pacifico (Thailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pacifico (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Canada (Centrale)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Cina (Pechino)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Cina (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europa (Francoforte)  |   ` arn:aws:lambda:eu-central-1:122305336817:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europa (Milano)  |   ` arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europa (Spagna)  |   ` arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europa (Stoccolma)  |   ` arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europa (Zurigo)  |   ` arn:aws:lambda:eu-central-2:224218992030:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Israele (Tel Aviv)  |   ` arn:aws:lambda:il-central-1:313249807427:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Messico (centrale)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJs:11`   | 

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

La tabella seguente elenca la versione ARNs `syn-nodejs-3.1` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pacifico (Giacarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pacifico (Malesia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pacifico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pacifico (Nuova Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pacifico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pacifico (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pacifico (Singapore)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pacifico (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pacifico (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pacifico (Thailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pacifico (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Canada (Centrale)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Cina (Pechino)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Cina (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europa (Francoforte)  |   ` arn:aws:lambda:eu-central-1:122305336817:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europa (Zurigo)  |   ` arn:aws:lambda:eu-central-2:224218992030:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Israele (Tel Aviv)  |   ` arn:aws:lambda:il-central-1:313249807427:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Messico (centrale)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   ` arn:aws:lambda:me-central-1:239544149032:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJs:9`   | 

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

La tabella seguente elenca la versione ARNs `syn-nodejs-3.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pacifico (Giacarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pacifico (Malesia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pacifico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pacifico (Nuova Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pacifico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pacifico (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pacifico (Singapore)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pacifico (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pacifico (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pacifico (Thailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pacifico (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Canada (Centrale)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Cina (Pechino)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Cina (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europa (Francoforte)  |   ` arn:aws:lambda:eu-central-1:122305336817:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europa (Zurigo)  |   ` arn:aws:lambda:eu-central-2:224218992030:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Israele (Tel Aviv)  |   ` arn:aws:lambda:il-central-1:313249807427:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Messico (centrale)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   ` arn:aws:lambda:me-central-1:239544149032:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJs:1`   | 

### Runtime Python e Selenium
<a name="Synthetics_Python_Runtime_ARNs"></a>

#### ARNs per syn-python-selenium -10.0
<a name="syn-python-selenium-10.0"></a>

La tabella seguente elenca la versione ARNs da utilizzare per la versione ` syn-python-selenium-10.0` del runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:62`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:65`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:63`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:64`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:63`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:62`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:50`   | 
|  Asia Pacifico (Giacarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:57`   | 
|  Asia Pacifico (Malesia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:32`   | 
|  Asia Pacifico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:48`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:63`   | 
|  Asia Pacifico (Nuova Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:38`   | 
|  Asia Pacifico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:61`   | 
|  Asia Pacifico (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:66`   | 
|  Asia Pacifico (Singapore)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:67`   | 
|  Asia Pacifico (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:62`   | 
|  Asia Pacifico (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:25`   | 
|  Asia Pacifico (Thailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:23`   | 
|  Asia Pacifico (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:63`   | 
|  Canada (Centrale)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:63`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:106`   | 
|  Cina (Pechino)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:61`   | 
|  Cina (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:61`   | 
|  Europa (Francoforte)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:63`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:64`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:62`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:64`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:63`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:50`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:63`   | 
|  Europa (Zurigo)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:49`   | 
|  Israele (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:47`   | 
|  Messico (centrale)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:24`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:64`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:59`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:60`   | 

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

La tabella seguente elenca la versione ARNs da utilizzare per la versione ` syn-python-selenium-9.0` del runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:61`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:64`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:62`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:63`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:62`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:61`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:49`   | 
|  Asia Pacifico (Giacarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:56`   | 
|  Asia Pacifico (Malesia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:31`   | 
|  Asia Pacifico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:47`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:62`   | 
|  Asia Pacifico (Nuova Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:37`   | 
|  Asia Pacifico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:60`   | 
|  Asia Pacifico (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:65`   | 
|  Asia Pacifico (Singapore)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:66`   | 
|  Asia Pacifico (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:61`   | 
|  Asia Pacifico (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:24`   | 
|  Asia Pacifico (Thailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:22`   | 
|  Asia Pacifico (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:62`   | 
|  Canada (Centrale)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:62`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:105`   | 
|  Cina (Pechino)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:60`   | 
|  Cina (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:60`   | 
|  Europa (Francoforte)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:62`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:63`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:61`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:63`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:62`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:49`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:62`   | 
|  Europa (Zurigo)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:48`   | 
|  Israele (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:46`   | 
|  Messico (centrale)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:23`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:61`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:49`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:63`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:58`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:59`   | 

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

La tabella seguente elenca la versione ARNs ` syn-python-selenium-8.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:57`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:60`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:58`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:59`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:58`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:57`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:45`   | 
|  Asia Pacifico (Giacarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:52`   | 
|  Asia Pacifico (Malesia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:27`   | 
|  Asia Pacifico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:43`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:58`   | 
|  Asia Pacifico (Nuova Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:33`   | 
|  Asia Pacifico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:56`   | 
|  Asia Pacifico (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:61`   | 
|  Asia Pacifico (Singapore)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:62`   | 
|  Asia Pacifico (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:57`   | 
|  Asia Pacifico (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:20`   | 
|  Asia Pacifico (Thailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:18`   | 
|  Asia Pacifico (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:58`   | 
|  Canada (Centrale)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:58`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:101`   | 
|  Cina (Pechino)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:56`   | 
|  Cina (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:56`   | 
|  Europa (Francoforte)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:58`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:59`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:57`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:59`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:58`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:45`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:58`   | 
|  Europa (Zurigo)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:44`   | 
|  Israele (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:42`   | 
|  Messico (centrale)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:19`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:57`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:45`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:59`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:54`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:55`   | 

#### ARNs per syn-python-selenium -7.0
<a name="syn-python-selenium-7.0"></a>

La tabella seguente elenca la versione ARNs ` syn-python-selenium-7.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:49`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:52`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:50`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:51`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:50`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:49`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:37`   | 
|  Asia Pacifico (Giacarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:44`   | 
|  Asia Pacifico (Malesia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:19`   | 
|  Asia Pacifico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:35`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:50`   | 
|  Asia Pacifico (Nuova Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:25`   | 
|  Asia Pacifico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:48`   | 
|  Asia Pacifico (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:53`   | 
|  Asia Pacifico (Singapore)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:54`   | 
|  Asia Pacifico (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:49`   | 
|  Asia Pacifico (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:12`   | 
|  Asia Pacifico (Thailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:10`   | 
|  Asia Pacifico (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:50`   | 
|  Canada (Centrale)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:50`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:93`   | 
|  Cina (Pechino)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:48`   | 
|  Cina (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:48`   | 
|  Europa (Francoforte)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:50`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:51`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:49`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:51`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:50`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:37`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:50`   | 
|  Europa (Zurigo)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:36`   | 
|  Israele (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:34`   | 
|  Messico (centrale)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:11`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:49`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:37`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:51`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:46`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:47`   | 

#### ARNs per syn-python-selenium -6.0
<a name="syn-python-selenium-6.0"></a>

La tabella seguente elenca la versione ARNs ` syn-python-selenium-6.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:47`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:50`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:48`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:49`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:48`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:47`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:35`   | 
|  Asia Pacifico (Giacarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:42`   | 
|  Asia Pacifico (Malesia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:17`   | 
|  Asia Pacifico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:33`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:48`   | 
|  Asia Pacifico (Nuova Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:25`   | 
|  Asia Pacifico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:46`   | 
|  Asia Pacifico (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:51`   | 
|  Asia Pacifico (Singapore)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:52`   | 
|  Asia Pacifico (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:47`   | 
|  Asia Pacifico (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:10`   | 
|  Asia Pacifico (Thailandia)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:8`   | 
|  Asia Pacifico (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:48`   | 
|  Canada (Centrale)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:48`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:91`   | 
|  Cina (Pechino)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:46`   | 
|  Cina (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:46`   | 
|  Europa (Francoforte)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:48`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:49`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:47`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:49`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:48`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:35`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:48`   | 
|  Europa (Zurigo)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:34`   | 
|  Israele (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:32`   | 
|  Messico (centrale)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:9`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:47`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:35`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:49`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:44`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:45`   | 

#### ARNs per syn-python-selenium -5.1
<a name="syn-python-selenium-5.1"></a>

La tabella seguente elenca la versione ARNs ` syn-python-selenium-5.1` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:45`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:48`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:46`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:47`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:46`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:45`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:33`   | 
|  Asia Pacifico (Giacarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:40`   | 
|  Asia Pacifico (Malesia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:15`   | 
|  Asia Pacifico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:31`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:46`   | 
|  Asia Pacifico (Nuova Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:24`   | 
|  Asia Pacifico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:44`   | 
|  Asia Pacifico (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:49`   | 
|  Asia Pacifico (Singapore)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:50`   | 
|  Asia Pacifico (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:45`   | 
|  Asia Pacifico (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:8`   | 
|  Asia Pacifico (Thailandia)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:6`   | 
|  Asia Pacifico (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:46`   | 
|  Canada (Centrale)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:44`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:89`   | 
|  Cina (Pechino)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:44`   | 
|  Cina (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:44`   | 
|  Europa (Francoforte)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:46`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:47`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:45`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:47`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:46`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:33`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:46`   | 
|  Europa (Zurigo)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:32`   | 
|  Israele (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:30`   | 
|  Messico (centrale)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:7`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:45`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:33`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:47`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:42`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:43`   | 

#### ARNs per syn-python-selenium -5.0
<a name="syn-python-selenium-5.0"></a>

La tabella seguente elenca la versione ARNs ` syn-python-selenium-5.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:43`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:46`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:44`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:45`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:44`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:43`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:31`   | 
|  Asia Pacifico (Giacarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:38`   | 
|  Asia Pacifico (Malesia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:13`   | 
|  Asia Pacifico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:29`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:44`   | 
|  Asia Pacifico (Nuova Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:23`   | 
|  Asia Pacifico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:42`   | 
|  Asia Pacifico (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:47`   | 
|  Asia Pacifico (Singapore)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:48`   | 
|  Asia Pacifico (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:43`   | 
|  Asia Pacifico (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:3`   | 
|  Asia Pacifico (Thailandia)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:4`   | 
|  Asia Pacifico (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:44`   | 
|  Canada (Centrale)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:44`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:87`   | 
|  Cina (Pechino)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:43`   | 
|  Cina (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:43`   | 
|  Europa (Francoforte)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:44`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:45`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:43`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:45`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:44`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:31`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:44`   | 
|  Europa (Zurigo)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:30`   | 
|  Israele (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:28`   | 
|  Messico (centrale)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:5`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:43`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:31`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:45`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:41`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:42`   | 

#### ARNs per syn-python-selenium -4.1
<a name="syn-python-selenium-4.1"></a>

La tabella seguente elenca la versione ARNs ` syn-python-selenium-4.1` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:40`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:43`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:41`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:42`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:41`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:40`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:28`   | 
|  Asia Pacifico (Giacarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:35`   | 
|  Asia Pacifico (Malesia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:10`   | 
|  Asia Pacifico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:26`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:41`   | 
|  Asia Pacifico (Nuova Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:22`   | 
|  Asia Pacifico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:39`   | 
|  Asia Pacifico (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:44`   | 
|  Asia Pacifico (Singapore)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:45`   | 
|  Asia Pacifico (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:40`   | 
|  Asia Pacifico (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:4`   | 
|  Asia Pacifico (Thailandia)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:1`   | 
|  Asia Pacifico (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:41`   | 
|  Canada (Centrale)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:41`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:84`   | 
|  Cina (Pechino)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:40`   | 
|  Cina (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:40`   | 
|  Europa (Francoforte)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:41`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:42`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:40`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:42`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:41`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:28`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:41`   | 
|  Europa (Zurigo)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:27`   | 
|  Israele (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:25`   | 
|  Messico (centrale)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:3`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:40`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:28`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:42`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:38`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:39`   | 

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

La tabella seguente elenca la versione ARNs ` syn-python-selenium-4.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:38`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:41`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:39`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:40`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:39`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:38`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:26`   | 
|  Asia Pacifico (Giacarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:33`   | 
|  Asia Pacifico (Malesia)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:8`   | 
|  Asia Pacifico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:24`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:39`   | 
|  Asia Pacifico (Nuova Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:21`   | 
|  Asia Pacifico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:37`   | 
|  Asia Pacifico (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:42`   | 
|  Asia Pacifico (Singapore)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:43`   | 
|  Asia Pacifico (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:38`   | 
|  Asia Pacifico (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:5`   | 
|  Asia Pacifico (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:39`   | 
|  Canada (Centrale)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:39`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:82`   | 
|  Cina (Pechino)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:38`   | 
|  Cina (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:38`   | 
|  Europa (Francoforte)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:39`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:40`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:38`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:40`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:39`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:26`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:39`   | 
|  Europa (Zurigo)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:25`   | 
|  Israele (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:23`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:38`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:26`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:40`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:36`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:37`   | 

#### ARNs per syn-python-selenium -3.0
<a name="syn-python-selenium-3.0"></a>

La tabella seguente elenca la versione ARNs ` syn-python-selenium-3.0` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:32`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:34`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:32`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:34`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:32`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:32`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:20`   | 
|  Asia Pacifico (Giacarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:26`   | 
|  Asia Pacifico (Malesia)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:7`   | 
|  Asia Pacifico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:18`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:32`   | 
|  Asia Pacifico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:30`   | 
|  Asia Pacifico (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:34`   | 
|  Asia Pacifico (Singapore)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:37`   | 
|  Asia Pacifico (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:32`   | 
|  Asia Pacifico (Thailandia)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:3`   | 
|  Asia Pacifico (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:32`   | 
|  Canada (Centrale)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:32`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:76`   | 
|  Cina (Pechino)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:32`   | 
|  Cina (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:32`   | 
|  Europa (Francoforte)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:32`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:34`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:32`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:33`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:32`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:20`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:32`   | 
|  Europa (Zurigo)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:19`   | 
|  Israele (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:17`   | 
|  Messico (centrale)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:4`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:32`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:19`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:33`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:30`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:31`   | 

#### ARNs per syn-python-selenium -2.1
<a name="syn-python-selenium-2.1"></a>

La tabella seguente elenca la versione ARNs ` syn-python-selenium-2.1` da utilizzare per il runtime CloudWatch Synthetics in AWS ciascuna regione in cui è disponibile.


| Region | ARN | 
| --- | --- | 
|  Stati Uniti orientali (Virginia settentrionale)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:29`   | 
|  Stati Uniti orientali (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:31`   | 
|  Stati Uniti occidentali (California settentrionale)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:29`   | 
|  Stati Uniti occidentali (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:31`   | 
|  Africa (Città del Capo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:29`   | 
|  Asia Pacifico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:29`   | 
|  Asia Pacific (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:17`   | 
|  Asia Pacifico (Giacarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:23`   | 
|  Asia Pacifico (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:15`   | 
|  Asia Pacifico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:29`   | 
|  Asia Pacifico (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:27`   | 
|  Asia Pacifico (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:30`   | 
|  Asia Pacifico (Singapore)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:34`   | 
|  Asia Pacifico (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:29`   | 
|  Asia Pacifico (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:29`   | 
|  Canada (Centrale)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:29`   | 
|  Canada occidentale (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:73`   | 
|  Cina (Pechino)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:29`   | 
|  Cina (Ningxia)  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:29`   | 
|  Europa (Francoforte)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:29`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:31`   | 
|  Europa (Londra)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:29`   | 
|  Europa (Milano)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:30`   | 
|  Europa (Parigi)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:29`   | 
|  Europa (Spagna)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:17`   | 
|  Europa (Stoccolma)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:29`   | 
|  Europa (Zurigo)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:16`   | 
|  Israele (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:14`   | 
|  Medio Oriente (Bahrein)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:29`   | 
|  Medio Oriente (Emirati Arabi Uniti)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:16`   | 
|  Sud America (San Paolo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:30`   | 
|  AWS GovCloud (Stati Uniti orientali)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:29`   | 
|  AWS GovCloud (Stati Uniti occidentali)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:29`   | 

## Errori comuni
<a name="CloudWatch_Synthetics_Debug_Errors"></a>

 **Errore: l'esecuzione locale di progetti AWS SAM richiede Docker. Lo hai già installato e avviato?** 

Assicurati di avviare Docker sul tuo computer.

 **Richiamata locale SAM non riuscita: si è verificato un errore (ExpiredTokenException) durante la chiamata all' GetLayerVersion operazione: il token di sicurezza incluso nella richiesta è scaduto** 

Assicurati che il profilo AWS predefinito sia impostato.

 **Errori più comuni** 

Per ulteriori informazioni sugli errori più comuni con SAM, consulta [AWS SAM CLI troubleshooting ](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-troubleshooting.html).

# Risoluzione dei problemi di un canary fallito
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot"></a>

Se il canary fallisce, procedi come descritto di seguito per la risoluzione dei problemi.

 **Risoluzione dei problemi generali** 
+ Utilizza la pagina dei dettagli del canary per trovare maggiori informazioni. Nella CloudWatch console, scegli **Canarie** nel pannello di navigazione, quindi scegli il nome del canarino per aprire la pagina dei dettagli del canarino. Nella scheda **Disponibilità**, controlla la ** SuccessPercent**metrica per vedere se il problema è costante o intermittente.

  Mentre ancora nella scheda **Availability** (Disponibilità), scegli un punto dati non riuscito per visualizzare schermate, log e report delle fasi (se disponibili) per l'esecuzione non riuscita.

  Se è disponibile un report di passaggio perché le fasi fanno parte dello script, verifica quale fase non è riuscita e consulta gli screenshot associati per verificare il problema riscontrato dai clienti.

  È inoltre possibile controllare i file HAR per vedere se una o più richieste non vanno a buon fine. Puoi esaminare ulteriori dettagli utilizzando i log per analizzare richieste ed errori non andati a buon fine. Infine, puoi confrontare questi artefatti con gli artefatti di un'esecuzione di un canary andato a buon fine per individuare il problema.

  Per impostazione predefinita, CloudWatch Synthetics acquisisce schermate per ogni passaggio in un'interfaccia utente canary. Tuttavia, lo script potrebbe essere configurato per disabilitare gli screensot. Durante il debug, potrai voler abilitare nuovamente gli screenshot. Allo stesso modo, per i canary dell'API potresti voler vedere le intestazioni e il corpo della richiesta HTTP e della risposta durante il debug. Per informazioni su come includere questi dati nel report, consulta [executeHttpStep(StepName, RequestOptions, [callback], [StepConfig])](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_executeHttpStep).
+ Se disponi di un'implementazione recente per l'applicazione, esegui il rollback e quindi esegui il debug in un secondo momento.
+ Connettiti manualmente all'endpoint per verificare se è possibile riprodurre lo stesso problema.

**Topics**
+ [Il canary presenta problemi dopo l'aggiornamento dell'ambiente Lambda](#Troubleshoot_upgradeLambda)
+ [Il mio canarino è bloccato da AWS WAF](#Canary_Blocked_WAF)
+ [Attesa della visualizzazione di un elemento](#CloudWatch_Synthetics_Canaries_Troubleshoot_waiting)
+ [Il nodo non è visibile o non è visibile per page.click () HTMLElement](#CloudWatch_Synthetics_Canaries_Troubleshoot_notvisible)
+ [Impossibile caricare artefatti su S3, Eccezione: impossibile recuperare la posizione del bucket S3: accesso negato](#CloudWatch_Synthetics_Canaries_Troubleshoot_noupload)
+ [Errore: errore di protocollo (Runtime). callFunctionOn): Obiettivo chiuso.](#CloudWatch_Synthetics_Canaries_Troubleshoot_protocolError)
+ [Canary non riuscito. Errore: nessun datapoint - Canary mostra errore di timeout](#CloudWatch_Synthetics_Canaries_Troubleshoot_nodatapoint)
+ [Tentativo di accedere a un endpoint interno](#CloudWatch_Synthetics_Canaries_Troubleshoot_internalendpoint)
+ [Problemi relativi all'aggiornamento e al downgrade della versione di runtime del canary](#CloudWatch_Synthetics_Canaries_Troubleshoot_upgradeissues)
+ [Problema CORS (Cross-Origin Request Sharing)](#CloudWatch_Synthetics_Canaries_CORS)
+ [Problemi relativi alle condizioni dell'esecuzione del canary](#CloudWatch_Synthetics_Canaries_RaceCondition)
+ [Risoluzione dei problemi di un Canary su un VPC](#CloudWatch_Synthetics_Canaries_VPC_troubleshoot)
+ [Risoluzione dei problemi relativi a un canary di tentativi automatici](#CloudWatch_Synthetics_Canaries_autoretry)

## Il canary presenta problemi dopo l'aggiornamento dell'ambiente Lambda
<a name="Troubleshoot_upgradeLambda"></a>

CloudWatch I canarini Synthetics sono implementati come funzioni Lambda nel tuo account. Queste funzioni Lambda sono soggette a regolari aggiornamenti del runtime Lambda contenenti aggiornamenti di sicurezza, correzioni di bug e altri miglioramenti. Lambda fornisce aggiornamenti di runtime compatibili con le versioni precedenti delle funzioni esistenti. Tuttavia, come nel caso delle patch software, ci sono rari casi in cui un aggiornamento del runtime può influire negativamente su una funzione esistente. Se ritieni che il tuo canary sia stato penalizzato da un aggiornamento del runtime Lambda, puoi utilizzare la modalità manuale di gestione del runtime Lambda (nelle regioni supportate) per eseguire temporaneamente il rollback della versione del runtime Lambda. Ciò mantiene il canary funzionante e riduce al minimo le interruzioni, dando il tempo necessario per porre rimedio all'incompatibilità prima di tornare alla versione di runtime più recente.

Se il tuo canary non funziona dopo un aggiornamento del runtime Lambda, la soluzione migliore è eseguire l'aggiornamento a uno dei runtime Synthetics più recenti. Per ulteriori informazioni sui runtime più recenti, consulta [Versioni di runtime Synthetics](CloudWatch_Synthetics_Canaries_Library.md).

Come soluzione alternativa, nelle regioni in cui sono disponibili i controlli di gestione del runtime Lambda, puoi ripristinare un canary a un vecchio runtime gestito da Lambda, utilizzando la modalità manuale per i controlli di gestione del runtime. Puoi impostare la modalità manuale utilizzando AWS CLI o utilizzando la console Lambda, seguendo i passaggi riportati di seguito nelle sezioni seguenti.

**avvertimento**  
Quando modifichi le impostazioni di runtime in modalità manuale, la funzione Lambda non riceverà aggiornamenti di sicurezza automatici finché non tornerà alla modalità Auto. Durante questo periodo, la tua funzione Lambda potrebbe essere soggetta a vulnerabilità di sicurezza.

 **Prerequisiti** 
+ Installazione di [jq](https://jqlang.github.io/jq/) 
+ Installazione della versione più recente della AWS CLI. Per ulteriori informazioni, consulta le [istruzioni di installazione e aggiornamento della AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html#getting-started-install-instructions).

### Passaggio 1: ottieni l'ARN della funzione Lambda
<a name="UpgradeLambda_ObtainFunctionARN"></a>

Esegui il comando seguente per recuperare il campo `EngineArn` dalla risposta. Questo `EngineArn` è l'ARN della funzione Lambda associata al canary. Utilizzerai questo ARN nei passaggi successivi.

```
aws synthetics get-canary --name my-canary | jq '.Canary.EngineArn'
```

Output di esempio di `EngingArn`:

```
"arn:aws:lambda:us-west-2:123456789012:function:cwsyn-my-canary-dc5015c2-db17-4cb5-afb1-EXAMPLE991:8"
```

### Passaggio 2: ottieni l'ARN dell'ultima versione valida del runtime Lambda
<a name="UpgradeLambda_RuntimeARN"></a>

Per capire se il tuo canary è stato penalizzato da un aggiornamento del runtime Lambda, controlla se la data e l'ora in cui le modifiche all'ARN della versione del runtime Lambda nei tuoi log corrispondono alla data e all'ora in cui hai riscontrato il problema sul tuo canary. Se non corrispondono, probabilmente non è un aggiornamento del runtime Lambda a causare i problemi.

Se il tuo canary è stato penalizzato da un aggiornamento del runtime Lambda, è necessario identificare l'ARN della versione del runtime Lambda funzionante che stavi utilizzando in precedenza. Segui le istruzioni riportate in [Identificazione delle modifiche alla versione di runtime](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-update.html#runtime-management-identify.html) per trovare l'ARN del runtime precedente. Registra l'ARN della versione di runtime e continua con il Passaggio 3 per impostare la configurazione della gestione del runtime.

Se il tuo canary non è ancora stato penalizzato da un aggiornamento dell'ambiente Lambda, puoi trovare l'ARN della versione del runtime Lambda che stai utilizzando attualmente. Esegui il comando seguente per recuperare il `RuntimeVersionArn` della funzione Lambda dalla risposta. 

```
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'
```

Output di esempio di `RuntimeVersionArn`:

```
"arn:aws:lambda:us-west-2::runtime:EXAMPLE647b82f490a45d7ddd96b557b916a30128d9dcab5f4972911ec0f"
```

### Passaggio 3: aggiorna la configurazione di gestione del runtime Lambda
<a name="UpgradeLambda_Update"></a>

È possibile utilizzare la console AWS CLI o la console Lambda per aggiornare la configurazione di gestione del runtime.

 **Per impostare la modalità manuale di configurazione della gestione del runtime Lambda utilizzando la AWS CLI** 

Inserisci il seguente comando per modificare la gestione del runtime della funzione Lambda in modalità manuale. Assicurati di sostituire la funzione *function-name* e * qualifier* con l'ARN della funzione Lambda e il numero di versione della funzione Lambda rispettivamente, utilizzando i valori trovati nel passaggio 1. Sostituisci anche il * runtime-version-arn* con la versione ARN che hai trovato nel passaggio 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"
```

**Per cambiare un canary in modalità manuale utilizzando la console Lambda**

1. Apri la AWS Lambda console all'indirizzo [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Scegli la scheda **Versioni**, scegli il collegamento al numero di versione che corrisponde al tuo ARN e scegli la scheda **Codice**.

1. Scorri verso il basso fino alle **Impostazioni di runtime**, espandi la **Configurazione di gestione del runtime** e copia l'**ARN della versione del runtime**.  
![\[Mostra la sezione delle Impostazioni di runtime della schermata e mostra dove appare l'ARN della versione del runtime in questa sezione.\]](http://docs.aws.amazon.com/it_it/AmazonCloudWatch/latest/monitoring/images/SyntheticsManual1.png)

1. Scegli **Modifica configurazione di gestione del runtime**, scegli **Manuale**, incolla l'ARN della versione di runtime che hai copiato in precedenza nel campo **ARN della versione** di runtime. Quindi scegli **Save** (Salva).  
![\[Mostra la schermata di Configurazione della gestione del runtime e mostra dove incollare l'ARN della versione del runtime copiata in precedenza.\]](http://docs.aws.amazon.com/it_it/AmazonCloudWatch/latest/monitoring/images/SyntheticsManual2.png)

## Il mio canarino è bloccato da AWS WAF
<a name="Canary_Blocked_WAF"></a>

Per consentire il passaggio del traffico di Canary AWS WAF, crea una condizione di corrispondenza delle AWS WAF stringhe che consenta una stringa personalizzata da te specificata. Per ulteriori informazioni, consulta [Lavorare con le condizioni di corrispondenza delle stringhe](https://docs.aws.amazon.com/waf/latest/developerguide/classic-web-acl-string-conditions.html) nella AWS WAF documentazione.

Ti consigliamo vivamente di utilizzare una stringa user-agent personalizzata invece di utilizzare valori predefiniti. Ciò offre un migliore controllo sui filtri AWS WAF e migliora la sicurezza.

Per impostare una stringa user-agent personalizzata, effettua le seguenti operazioni:
+ Per i runtime di Playwright, puoi aggiungere la stringa user-agent personalizzata AWS WAF approvata utilizzando il file di configurazione Synthetics. Per ulteriori informazioni, consulta [CloudWatch Configurazioni Synthetics](Synthetics_WritingCanary_Nodejs_Playwright.md#Synthetics_canary_configure_Playwright_script).
+ Per i runtime Puppeteer o Selenium, puoi aggiungere la tua stringa user-agent personalizzata utilizzando le funzioni di libreria supportate. Per i runtime di Puppeteer, consulta [async addUserAgent (pagina,); userAgentString](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_addUserAgent). Per i runtime di Selenium, consulta [add\$1user\$1agent(user\$1agent\$1str)](CloudWatch_Synthetics_Canaries_Library_Python.md#CloudWatch_Synthetics_Library_add_user_agent).

## Attesa della visualizzazione di un elemento
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_waiting"></a>

Dopo aver analizzato i log e gli screenshot, se vedi che il tuo script è in attesa che un elemento venga visualizzato sullo schermo e viene raggiunto il timeout, controlla lo screenshot pertinente per vedere se l'elemento appare nella pagina. Verifica il tuo `xpath` per assicurarti che sia corretto.

[Per problemi relativi a Puppetteer, consulta la pagina di Puppeteer o i forum su Internet. GitHub ](https://github.com/puppeteer/puppeteer/issues)

## Il nodo non è visibile o non è visibile per page.click () HTMLElement
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_notvisible"></a>

Se un nodo non è visibile o non è un `HTMLElement` per `page.click()`, prima di tutto verifica l'`xpath` che stai utilizzando per fare clic sull'elemento. Inoltre, se il tuo elemento si trova nella parte inferiore dello schermo, regola la visualizzazione. CloudWatch Synthetics per impostazione predefinita utilizza una finestra di 1920 \$1 1080. Puoi impostare un'area di visualizzazione diversa quando avvii il browser o utilizzando la funzione `page.setViewport` di Puppeteer.

## Impossibile caricare artefatti su S3, Eccezione: impossibile recuperare la posizione del bucket S3: accesso negato
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_noupload"></a>

Se il tuo canary fallisce a causa di un errore di Amazon S3, CloudWatch Synthetics non è stata in grado di caricare schermate, log o report creati per il canarino a causa di problemi di autorizzazione. Verifica quanto segue:
+ Controlla che il ruolo IAM del canary abbia autorizzazione `s3:ListAllMyBuckets`, l'autorizzazione `s3:GetBucketLocation` per il bucket Amazon S3 corretto e autorizzazione `s3:PutObject` per il bucket dove il canary immagazzina i suoi artefatti. Se il canary esegue il monitoraggio visivo, per il ruolo è necessaria anche l'autorizzazione ` s3:GetObject` per il bucket. Queste stesse autorizzazioni sono richieste anche nella policy degli endpoint gateway Amazon VPC S3, se il canary viene distribuito in un VPC con un endpoint VPC.
+  Se il canarino utilizza una chiave gestita AWS KMS dal cliente per la crittografia anziché la chiave AWS gestita standard (impostazione predefinita), il ruolo IAM del canarino potrebbe non avere l'autorizzazione per crittografare o decrittografare utilizzando tale chiave. Per ulteriori informazioni, consulta [Crittografia di artefatti canary](CloudWatch_Synthetics_artifact_encryption.md).
+ La tua policy del bucket potrebbe non permettere il meccanismo di crittografia utilizzato da Canary. Ad esempio, se la policy del bucket richiede di utilizzare un meccanismo di crittografia specifico o una chiave KMS, è necessario selezionare la stessa modalità di crittografia per il canary.

Se il canary esegue il monitoraggio visivo, vedere [Aggiornamento della posizione e della crittografia degli artifact quando si utilizza il monitoraggio visivo](CloudWatch_Synthetics_artifact_encryption.md#CloudWatch_Synthetics_artifact_encryption_visual) per ulteriori informazioni.

## Errore: errore di protocollo (Runtime). callFunctionOn): Obiettivo chiuso.
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_protocolError"></a>

Questo errore viene visualizzato se sono presenti alcune richieste di rete dopo la chiusura della pagina o del browser. Potresti aver dimenticato di attendere un'operazione asincrona. Dopo aver eseguito lo script, CloudWatch Synthetics chiude il browser. L'esecuzione di qualsiasi operazione asincrona dopo la chiusura del browser potrebbe causare un `target closed error`. 

## Canary non riuscito. Errore: nessun datapoint - Canary mostra errore di timeout
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_nodatapoint"></a>

Significa che l'esecuzione del canary ha superato il timeout. L'esecuzione di Canary si è interrotta prima CloudWatch che Synthetics potesse pubblicare metriche sulla CloudWatch percentuale di successo o aggiornare artefatti come file HAR, registri e schermate. Se il timeout è troppo basso, puoi aumentarlo.

Per impostazione predefinita, un valore di timeout del canary è uguale alla sua frequenza. Puoi regolare manualmente il valore di timeout in modo che sia inferiore o uguale alla frequenza del canary. Se la frequenza del canary è bassa, è necessario aumentare la frequenza per aumentare il timeout. Puoi regolare sia la frequenza che il valore di timeout in **Schedule** quando crei o aggiorni un canarino utilizzando la console Synthetics CloudWatch .

Assicurati che il valore di timeout canary non sia inferiore a 15 secondi per consentire l'avvio a freddo Lambda e il tempo necessario per avviare la strumentazione canary.

Gli artefatti Canary non sono disponibili per la visualizzazione nella console Synthetics quando si verifica CloudWatch questo errore. Puoi usare CloudWatch Logs per vedere i registri del canarino.

**Usare CloudWatch Logs per visualizzare i tronchi di un canarino**

1. Apri la console all' CloudWatch indirizzo. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)

1. Nel pannello di navigazione a sinistra, scegli **Log groups** (Gruppi di log).

1. Individua il gruppo di log digitando il nome del canary nella casella filtro. I gruppi di log per i canarini hanno il nome**/aws/lambda/cwsyn- *canaryName* -RandomID**.

## Tentativo di accedere a un endpoint interno
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_internalendpoint"></a>

Se desideri che il tuo canary acceda a un endpoint sulla tua rete interna, ti consigliamo di configurare CloudWatch Synthetics per utilizzare VPC. Per ulteriori informazioni, consulta [Esecuzione di un Canary su un VPC](CloudWatch_Synthetics_Canaries_VPC.md).

## Problemi relativi all'aggiornamento e al downgrade della versione di runtime del canary
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_upgradeissues"></a>

Se di recente è stato aggiornato il canary dalla versione di runtime `syn-1.0` a una versione successiva, potrebbe trattarsi di un problema CORS (cross-origin resource sharing). Per ulteriori informazioni, consulta [Problema CORS (Cross-Origin Request Sharing)](#CloudWatch_Synthetics_Canaries_CORS).

Se hai recentemente effettuato il downgrade di Canary a una versione di runtime precedente, assicurati che le funzioni Synthetics CloudWatch che stai utilizzando siano disponibili nella versione di runtime precedente a cui hai effettuato il downgrade. Ad esempio, la funzione `executeHttpStep` è disponibile per la versione di runtime `syn-nodejs-2.2` e versioni successive. Per verificare la disponibilità delle funzioni, consulta [Scrivere uno script canary](CloudWatch_Synthetics_Canaries_WritingCanary.md). 

**Nota**  
Quando prevedi di eseguire l'upgrade o il downgrade della versione di runtime per un canary, ti consigliamo prima di clonare il canary e aggiornare la versione di runtime nel canary clonato. Una volta verificato che il clone con la nuova versione di runtime funziona, puoi aggiornare la versione di runtime del canary originale ed eliminare il clone.

## Problema CORS (Cross-Origin Request Sharing)
<a name="CloudWatch_Synthetics_Canaries_CORS"></a>

In un canary dell'interfaccia utente, se alcune richieste di rete non vanno a buon fine con `403` o ` net::ERR_FAILED`, verifica se il canary ha attivato il tracciamento attivo e utilizza anche la funzione `page.setExtraHTTPHeaders` di Puppeteer per aggiungere intestazioni. In tal caso, le richieste di rete non riuscite potrebbero essere causate da restrizioni CORS (Cross-Origin Request Sharing). Puoi confermare se questo è il caso disabilitando il tracciamento attivo o rimuovendo le intestazioni HTTP aggiuntive.

 **Perché succede?** 

Quando viene utilizzato il tracciamento attivo, viene aggiunta un'intestazione aggiuntiva a tutte le richieste in uscita per tracciare la chiamata. La modifica delle intestazioni della richiesta aggiungendo un'intestazione di traccia o l'aggiunta di intestazioni aggiuntive utilizzando Puppeteer provoca un controllo CORS delle richieste di richiesta (XHR). `page.setExtraHTTPHeaders` XMLHttp

Se non desideri disabilitare il tracciamento attivo o rimuovere le intestazioni aggiuntive, puoi aggiornare l'applicazione Web per consentire l'accesso multiorigine oppure disabilitare la protezione Web utilizzando il comando `disable-web-security` quando avvii il browser Chrome nello script.

È possibile sovrascrivere i parametri di avvio utilizzati da CloudWatch Synthetics e passare parametri di flag ` disable-web-security` aggiuntivi utilizzando la funzione di avvio Synthetics. CloudWatch Per ulteriori informazioni, consulta [Funzioni di libreria disponibili per gli script canary Node.js utilizzando Puppeteer](CloudWatch_Synthetics_Canaries_Library_Nodejs.md).

**Nota**  
È possibile sovrascrivere i parametri di avvio utilizzati da CloudWatch Synthetics quando si utilizza la versione runtime o successiva. `syn-nodejs-2.1`

## Problemi relativi alle condizioni dell'esecuzione del canary
<a name="CloudWatch_Synthetics_Canaries_RaceCondition"></a>

Per una migliore esperienza di utilizzo di CloudWatch Synthetics, assicurati che il codice scritto per i canarini sia idempotente. Altrimenti, in rari casi, le esecuzioni canary possono incontrare condizioni di conflitto quando il canary accede alla stessa risorsa durante esecuzioni diverse.

## Risoluzione dei problemi di un Canary su un VPC
<a name="CloudWatch_Synthetics_Canaries_VPC_troubleshoot"></a>

Se riscontri problemi dopo la creazione o l'aggiornamento di un Canary su un VPC, una delle sezioni seguenti potrebbe aiutarti a risolvere il problema.

### Impossibile aggiornare il Canary o il nuovo Canary è in stato di errore
<a name="CloudWatch_Synthetics_Canaries_VPC_troubleshoot_errorstate"></a>

Se crei un Canary per l'esecuzione in un VPC e questo entra immediatamente in stato di errore oppure se non è possibile aggiornare un Canary per l'esecuzione su un VPC, è possibile che il ruolo del Canary non abbia le autorizzazioni corrette. Per l'esecuzione su un VPC, un canary deve disporre delle autorizzazioni ` ec2:CreateNetworkInterface`, `ec2:DescribeNetworkInterfaces` e ` ec2:DeleteNetworkInterface`. Queste autorizzazioni sono tutte contenute nella policy ` AWSLambdaVPCAccessExecutionRole` gestita. Per ulteriori informazioni, consulta [Autorizzazioni del ruolo di esecuzione e dell'utente](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-permissions).

Se il problema si verifica quando crei un Canary, devi eliminare il Canary e crearne uno nuovo. **Se usi la CloudWatch console per creare il nuovo canarino, in **Autorizzazioni di accesso**, seleziona Crea un nuovo ruolo.** Viene creato un nuovo ruolo che include tutte le autorizzazioni necessarie per eseguire il canary.

Se il problema si verifica quando aggiorni un canary, puoi aggiornare nuovamente il canary e fornire un nuovo ruolo con le autorizzazioni necessarie.

### Errore "Nessun risultato del test restituito"
<a name="CloudWatch_Synthetics_Canaries_VPC_troubleshoot_noresult"></a>

Se un Canary visualizza l'errore "Nessun risultato del test restituito", la causa potrebbe una delle seguenti: 
+ Se il tuo VPC non dispone di accesso a Internet, devi utilizzare gli endpoint VPC per consentire a Canary di accedere ad Amazon S3. CloudWatch Devi abilitare le opzioni **DNS resolution** (Risoluzione DNS) e **DNS hostname** (Hostname DNS) nel VPC affinché questi indirizzi di endpoint vengano risolti correttamente. Per ulteriori informazioni, consulta [Utilizzo del DNS con il VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html) e Utilizzo [ CloudWatch e CloudWatch Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-and-interface-VPC.html) con gli endpoint VPC dell'interfaccia.
+ I Canary devono essere eseguiti in sottoreti private all'interno di un VPC. Per verificarlo, apri la pagina **Subnet** nella console VPC. Controlla le sottoreti selezionate durante la configurazione del Canary. Se hanno un percorso per un gateway Internet (**igw-**), non sono sottoreti private.

Per risolvere questi problemi, vedi i log per il Canary.

**Per visualizzare gli eventi di log da un Canary**

1. Apri la console all' CloudWatch indirizzo. [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)

1. Nel pannello di navigazione, seleziona **Log groups** (Gruppi di log).

1. Scegli il nome del gruppo di log del Canary. Il nome del gruppo di log inizia con ` /aws/lambda/cwsyn-canary-name`.

## Risoluzione dei problemi relativi a un canary di tentativi automatici
<a name="CloudWatch_Synthetics_Canaries_autoretry"></a>

Per capire perché il tuo canary non funziona o per analizzare specifici tentativi non riusciti, segui questi passaggi per la risoluzione dei problemi.

1. Apri la CloudWatch console all'indirizzo [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Nel pannello di navigazione, scegli **Application Signals**, **Canary di Synthetics**.

1. Scegli la scheda **canary**.

1. Nella scheda **Disponibilità**, puoi esaminare i dettagli dell'esecuzione in uno dei seguenti modi:
   + Selezione di un punto specifico nel grafico esecuzioni canary
   + In **Problemi**, seleziona un record. Tieni presente che i nuovi tentativi sono contrassegnati e condividono i timestamp con le rispettive esecuzioni pianificate

   È possibile visualizzare informazioni aggiuntive in **Steps**, **Screenshot**, **Logs**, **File HAR** o **Traces (se la traccia attiva è** abilitata).

1. Su **Artefatti del canary e posizioni Amazon S3**, puoi accedere all'artefatto e navigare verso le cartelle o i bucket Amazon S3 tramite i link disponibili.

1. Il grafico delle **esecuzioni canary** utilizza punti colorati diversi per indicare vari stati:
   + Punti blu: indicano le esecuzioni programmate riuscite con un valore costante del 100%
   + Punti rossi: mostrano gli errori sia nelle esecuzioni programmate che in tutti i nuovi tentativi, contrassegnati con lo 0%
   + Punti arancioni: mostrano lo 0% o il 100%. Lo 0% indica un nuovo tentativo in corso dopo i tentativi precedenti non riusciti e il 100% indica che è stato raggiunto un esito positivo dopo un nuovo tentativo

# Codice di esempio per gli script canary
<a name="CloudWatch_Synthetics_Canaries_Samples"></a>

Questa sezione contiene esempi di codice che illustrano alcune possibili funzioni per gli script canary di CloudWatch Synthetics.

## Esempi per Node.js e Playwright
<a name="Synthetics_Canaries_Samples_nodejs_playwright"></a>

### Canary Playwright con più passaggi
<a name="Synthetics_canary_example_nodejs_playwright_multistep"></a>

Lo script seguente è un esempio di canary Node.js Playwright con più passaggi.

```
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();
  }
}
```

### Canary Playwright e impostazione dei cookie
<a name="Synthetics_canaries_nodejs_playwright_cookies"></a>

Lo script seguente è un esempio di un canary Node.js Playwright che imposta tre cookie.

```
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();
  }
};
```

## Esempi per Node.js e Puppeteer
<a name="CloudWatch_Synthetics_Canaries_Samples_nodejspup"></a>

### Impostazione dei cookie
<a name="CloudWatch_Synthetics_Canaries_Samples_cookies"></a>

I siti Web si basano sui cookie per fornire funzionalità personalizzate o tracciare gli utenti. Impostando i cookie negli script CloudWatch Synthetics, puoi imitare questo comportamento personalizzato e convalidarlo.

Ad esempio, un sito Web potrebbe visualizzare un collegamento **Login** (Accedi) per un utente che rivisita la pagina invece di un collegamento **Register** (Registrati).

```
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();
};
```

### Emulazione del dispositivo
<a name="CloudWatch_Synthetics_Canaries_Samples_device"></a>

Puoi scrivere script che emulano vari dispositivi in modo da poter approssimare l'aspetto e il comportamento di una pagina su tali dispositivi.

L'esempio seguente emula un dispositivo iPhone 6. Per ulteriori informazioni sull'emulazione, consulta [page.emulate (options)](https://pptr.dev/#?product=Puppeteer&version=v5.3.1&show=api-pageemulateoptions) nella documentazione di 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();
};
```

### Canary dell'API in più fasi
<a name="CloudWatch_Synthetics_Canaries_Samples_APIsteps"></a>

Questo codice di esempio illustra un canary dell'API con due fasi HTTP: testare la stessa API per casi di test positivi e negativi. La configurazione dei passaggi viene passata per abilitare la segnalazione delle intestazioni. request/response Inoltre, nasconde l'intestazione Authorization e X-Amz-Security-Token, poiché contiene le credenziali dell'utente. 

Quando questo script viene utilizzato come canary, puoi visualizzare i dettagli di ogni fase e le richieste HTTP associate, ad esempio pass/fail, durata e parametri delle prestazioni, come il tempo di ricerca DNS e il tempo del primo byte. Puoi visualizzare il numero di 2xx, 4xx e 5xx per l'esecuzione del 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();
};
```

## Esempi per Python e Selenium
<a name="CloudWatch_Synthetics_Canaries_Samples_pythonsel"></a>

Il seguente codice di esempio Selenium è un canary che fallisce con un messaggio di errore personalizzato quando un elemento di destinazione non viene caricato.

```
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()
```

# Canary e tracciamento X-Ray
<a name="CloudWatch_Synthetics_Canaries_tracing"></a>

Puoi scegliere di abilitare il AWS X-Ray tracciamento attivo sui canarini che utilizzano il runtime o successivo. ` syn-nodejs-2.0` Con il tracciamento abilitato, vengono inviate tracce per tutte le chiamate effettuate dal canarino che utilizzano il browser, l' AWS SDK o i moduli HTTP o HTTPS. I canary con tracciamento abilitato vengono visualizzati sulla [mappa di tracciamento X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-console-servicemap.html) e all'interno di [Application Signals](CloudWatch-Application-Monitoring-Sections.md) una volta abilitata l'opzione per l'applicazione. 

**Nota**  
L'attivazione del tracciamento X-Ray sui canary non è ancora supportata in Asia Pacifico (Giacarta).  
Il tracciamento X-Ray non è supportato con i canary del browser Firefox.

Quando un canary viene visualizzato sulla mappa di tracciamento X-Ray, viene visualizzato come un nuovo tipo di nodo client. Puoi passare il mouse su un nodo canary per visualizzare i dati su latenza, richieste ed errori. Puoi anche scegliere il nodo canary per visualizzare più dati nella parte inferiore della pagina. Da quest'area della pagina, puoi scegliere **Visualizza in Synthetics** per passare alla console Synthetics per maggiori dettagli sul canarino, oppure **scegliere Visualizza** tracce per vedere maggiori dettagli sulle tracce delle corse di questo canarino. CloudWatch 

Un canary con tracciamento abilitato ha anche una scheda **Tracing** (Tracciamento) nella sua pagina dei dettagli, con dettagli sulle tracce e sui segmenti delle esecuzioni del canary.

L'abilitazione del tracciamento aumenta il tempo di esecuzione dei canary dal 2,5% al 7%.

Un canary con tracciamento abilitato deve utilizzare un ruolo con le seguenti autorizzazioni. Se usi la console per creare il ruolo quando crei il canary, queste autorizzazioni vengono concesse.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Sid230934",
            "Effect": "Allow",
            "Action": [
                "xray:PutTraceSegments"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Vengono addebitati dei costi per le tracce generate dai canary. Per ulteriori informazioni sui prezzi di X-Ray, consulta [Prezzi di AWS X-Ray](https://aws.amazon.com/xray/pricing/).

# Esecuzione di un Canary su un VPC
<a name="CloudWatch_Synthetics_Canaries_VPC"></a>

Puoi eseguire i canary sugli endpoint di un VPC e sugli endpoint interni pubblici. Per eseguire un Canary su un VPC, devi abilitare entrambe le opzioni **DNS Resolution** (Risoluzione DNS) e **DNS hostnames** (Nomi host DNS) sul VPC. Per ulteriori informazioni, vedi [Utilizzo del DNS con VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html).

Quando esegui un canary su un endpoint VPC, devi fornire un modo per inviargli i parametri e gli artefatti CloudWatch ad Amazon S3. Se il VPC è già abilitato per l'accesso a Internet, non c'è altro da fare. Il canary verrà eseguito nel VPC, ma può accedere a Internet per caricare parametri e artefatti.

Se il VPC non è già abilitato per l'accesso a Internet, sono disponibili due opzioni:
+ Abilita l'accesso a IPv4 Internet per consentire al canarino di inviare metriche ad Amazon CloudWatch S3. Per ulteriori informazioni, consulta la sezione seguente [Fornire accesso a Internet al tuo canary su un VPC](#CloudWatch_Synthetics_VPC_Internet).
+ Se desideri mantenere privato il tuo VPC, puoi configurare Canary per inviare i dati ad Amazon CloudWatch S3 tramite endpoint VPC privati. Se non l'hai già fatto, devi creare un endpoint VPC per CloudWatch (com.amazonaws). *region*.monitoring) e un endpoint gateway per Amazon S3. Per ulteriori informazioni, consulta [Utilizzo CloudWatch, CloudWatch Synthetics CloudWatch e monitoraggio della rete con endpoint VPC di interfaccia](cloudwatch-and-interface-VPC.md) ed [Endpoint Amazon VPC per Amazon S3](https://docs.aws.amazon.com/glue/latest/dg/vpc-endpoints-s3.html). 

## Fornire accesso a Internet al tuo canary su un VPC
<a name="CloudWatch_Synthetics_VPC_Internet"></a>

Segui questi passaggi per fornire accesso a Internet al tuo canary nel VPC o per assegnargli un indirizzo IP statico

**Per fornire l'accesso a Internet (IPv4) a un canarino su un VPC**

1. Creare un gateway NAT in una sottorete pubblica VPC. Per istruzioni, consulta [Creazione di un gateway NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-creating).

1. Aggiungere un nuovo routing alla tabella di routing nella sottorete privata in cui viene lanciato il canary. Specificare le impostazioni seguenti:
   + In **Destination** (Destinazione), immetti **0.0.0.0/0**.
   + Per **Destinazione**, scegli **Gateway NAT** e quindi scegli l'ID del gateway NAT creato.
   + Seleziona **Save routes** (Salva route).

   Per ulteriori informazioni sull'aggiunta di routing, alla tabella di routing, consulta [Aggiunta e rimozione di route da una tabella di routing](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithRouteTables.html#AddRemoveRoutes).

**Per fornire l'accesso a Internet (IPv6) a un canarino su un VPC**

1. Configurare il VPC in modo che disponga di sottoreti Dualstack. È necessario aggiungere un gateway Internet solo in uscita al VPC, aggiornare le tabelle di routing per consentire il traffico verso l'Internet Gateway e consentire l'accesso in uscita dai gruppi di sicurezza associati. Per ulteriori informazioni, consulta [Aggiungere IPv6 il supporto per il tuo VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6-add.html).

1. Imposta `Ipv6AllowedForDualstack ` nella configurazione VPC del tuo canary utilizzando l'API `CreateCanary` o `UpdateCanary`. Per ulteriori informazioni, consulta [VpcConfigInput](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_VpcConfigInput.html).

   Per abilitare il IPv6 traffico in uscita dal tuo canarino, le sottoreti VPC collegate al canarino devono essere abilitate per Dualstack.

**Nota**  
Assicurati che i routing verso il gateway NAT siano in uno stato **attivo**. Se il gateway NAT viene eliminato e non hai aggiornato il routing, questo si trova in uno stato blackhole. Per ulteriori informazioni consulta [Utilizzo di gateway NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with).

# Crittografia di artefatti canary
<a name="CloudWatch_Synthetics_artifact_encryption"></a>

CloudWatch Synthetics archivia artefatti canarini come schermate, file HAR e report nel tuo bucket Amazon S3. Per impostazione predefinita, questi artefatti vengono crittografati quando sono inattivi utilizzando una chiave gestita. AWS Per ulteriori informazioni, consulta [Customer keys and AWS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-mgmt.html). 

Puoi scegliere di utilizzare un'opzione di crittografia diversa. CloudWatch Synthetics supporta quanto segue:
+ **SSE-S3**– Crittografia lato server (SSE) con una chiave gestita da Amazon S3.
+ **SSE-KMS**– Crittografia lato server (SSE) con una chiave AWS KMS gestita dal cliente.

Se desideri utilizzare l'opzione di crittografia predefinita con una chiave AWS gestita, non hai bisogno di autorizzazioni aggiuntive. 

Per utilizzare la crittografia SSE-S3, devi specificare **SSE\$1S3**come modalità di crittografia quando si crea o si aggiorna il canary. Per utilizzare questa modalità di crittografia non sono necessarie autorizzazioni supplementari. Per ulteriori informazioni, consulta [Protezione dei dati mediante la crittografia lato server con chiavi gestite da Amazon S3 (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html).

Per utilizzare una chiave gestita AWS KMS dal cliente, devi specificare **SSE-KMS** come modalità di crittografia quando crei o aggiorni il tuo canary e fornisci anche l'Amazon Resource Name (ARN) della tua chiave. È inoltre possibile utilizzare una chiave KMS a più account.

Per utilizzare una chiave gestita dal cliente, sono necessarie le seguenti impostazioni:
+ Il ruolo IAM per il canary deve avere l'autorizzazione di crittografare gli artefatti utilizzando la chiave. Se utilizzi il monitoraggio visivo, è inoltre necessario concedergli l'autorizzazione a decrittare gli artefatti.

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

------
+ Invece di aggiungere autorizzazioni al ruolo IAM, è possibile aggiungere il proprio ruolo IAM alla policy chiave. Se si usa lo stesso ruolo per più canary, si dovrebbe considerare questo approccio.

  ```
  {
      "Sid": "Enable IAM User Permissions",
      "Effect": "Allow",
      "Principal": {
          "AWS": "Your synthetics IAM role ARN"
      },
      "Action": [
          "kms:GenerateDataKey",
          "kms:Decrypt"
      ],
      "Resource": "*"
  }
  ```
+ Se utilizzi una chiave KMS tra account, consulta [Permettere agli utenti in altri account di utilizzare una chiave KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html).

 **Visualizzazione di artefatti canary crittografati quando si utilizza una chiave gestita dal cliente** 

Per visualizzare gli artefatti di Canary, aggiorna la tua chiave gestita dal cliente per autorizzare la decrittografia all'utente che visualizza AWS KMS gli artefatti. In alternativa, aggiungi le autorizzazioni di decrittografia all'utente o al ruolo IAM che sta visualizzando gli artefatti.

La AWS KMS policy predefinita abilita le policy IAM nell'account per consentire l'accesso alle chiavi KMS. Se utilizzi una chiave KMS per più account, consulta [Perché gli utenti con più account ricevono errori di accesso negato quando tentano di accedere a oggetti Amazon S3 crittografati](https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-denied-error-s3/) da una chiave personalizzata? AWS KMS . 

Per ulteriori informazioni sulla risoluzione dei problemi di accesso negato a causa di una chiave KMS, consulta [Risoluzione dei problemi di accesso alla chiave](https://docs.aws.amazon.com/kms/latest/developerguide/policy-evaluation.html). 

## Aggiornamento della posizione e della crittografia degli artifact quando si utilizza il monitoraggio visivo
<a name="CloudWatch_Synthetics_artifact_encryption_visual"></a>

Per eseguire il monitoraggio visivo, CloudWatch Synthetics confronta gli screenshot con gli screenshot di base acquisiti durante l'esecuzione selezionata come linea di base. Se si aggiorna la posizione dell'artifact o l'opzione di crittografia, è necessario procedere in uno dei seguenti modi:
+ Assicurarti che il ruolo IAM disponga di autorizzazioni sufficienti sia per la posizione precedente di Amazon S3 che per la nuova posizione Amazon S3 per gli artefatti. Assicurarti inoltre che disponga dell'autorizzazione per i metodi di crittografia precedenti e nuovi e le chiavi KMS.
+ Creare una nuova linea di base selezionando la prossima canary run come nuova baseline. Se si utilizza questa opzione, è solo necessario assicurarti che il ruolo IAM disponga di autorizzazioni sufficienti per la nuova posizione degli artifact e l'opzione di crittografia.

Consigliamo la seconda opzione per selezionare l'esecuzione successiva come nuova baseline. Ciò evita di avere una dipendenza da una posizione di artefatto o da un'opzione di crittografia che non stai più usando per il canary.

Ad esempio, supponiamo che il canary utilizzi la posizione dell'artefatto A e la chiave KMS K per caricare gli artefatti. Se si aggiorna il canary alla posizione dell'artifact B e alla chiave KMS L, ci si può assicurare che il ruolo IAM disponga delle autorizzazioni per entrambe le posizioni degli artifact (A e B) e entrambe le chiavi KMS (K e L). In alternativa, è possibile selezionare l'esecuzione successiva come nuova baseline e assicurarti che il ruolo IAM canary disponga delle autorizzazioni per la posizione dell'artifact B e la chiave KMS L. 

# Visualizzazione delle statistiche e dei dettagli dei Canary
<a name="CloudWatch_Synthetics_Canaries_Details"></a>

Puoi visualizzare i dettagli relativi ai Canary e le statistiche delle rispettive esecuzioni.

Per poter visualizzare tutti i dettagli relativi ai risultati della sessione di test canary, devi accedere a un account che dispone di autorizzazioni sufficienti. Per ulteriori informazioni, consulta [Ruoli e autorizzazioni richiesti per i canarini CloudWatch](CloudWatch_Synthetics_Canaries_Roles.md).

**Per visualizzare statistiche e dettagli dei Canary**

1.  CloudWatch Apri [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)la console all'indirizzo.

1. Nel pannello di navigazione, scegli **Application Signals**, **Canary di Synthetics**.

   Nei dettagli sui canary che hai creato:
   + **Status** (Stato) mostra visivamente il numero di canary che hanno superato le sessioni di test più recenti.
   + **Groups** (Gruppi) mostra i gruppi che hai creato e riporta quanti di essi hanno canary non funzionanti o allarmanti.
   + **Slowest performers** (Eseguito con i risultati più lenti) visualizza il gruppo e la regione con i canary con le prestazioni più lente. Questi vengono calcolati sommando la durata media di tutti i canary (nell'arco di tempo selezionato) all'interno di un gruppo o di una regione e dividendola per il numero di canary nel gruppo o nella regione. Se scegli il parametro per il gruppo più lento, la tabella viene filtrata per visualizzare solo i gruppi più lenti e i relativi canary. La tabella è ordinata per Durata media.
   + Nella parte inferiore della pagina è presente una tabella che visualizza tutti i canary. Puoi utilizzare la barra dei filtri per applicare filtri alla tabella e visualizzare i canary in base a nomi specifici, risultati dell'ultima esecuzione, percentuale di successo, allarmi, frequenze di esecuzione, stato del canary, runtime e tag univoci. 

     Nella colonna degli allarmi, vengono visualizzati solo gli quelli conformi allo standard di denominazione per gli allarmi del canary. Questo standard è `Synthetics-Alarm-canaryName -index`. Gli allarmi Canary creati nella sezione Synthetics della CloudWatch console **utilizzano automaticamente** questa convenzione di denominazione. Se crei gli allarmi Canary nella sezione **Allarmi** della CloudWatch console o utilizzando AWS CloudFormation, e non usi questa convenzione di denominazione, gli allarmi funzionano ma non compaiono in questo elenco.

1. **Per vedere maggiori dettagli su un singolo canarino, scegli il nome del canarino nella tabella Canarie.**

   Nei dettagli su quel canary:
   + La scheda **Availability** (Disponibilità) mostra informazioni sulle esecuzioni recenti di questo canary.

     Sotto **Canary**, puoi scegli una delle linee per visualizzare i dettagli su quella esecuzione.

     Sotto il grafico, puoi scegliere **Steps**, **Screenshot**, **Logs** o il **file HAR** per vedere questi tipi di dettagli. Se il canarino ha abilitato il tracciamento attivo, puoi anche scegliere **Tracce** per visualizzare le informazioni di tracciamento delle corse del canarino.

     I registri relativi alle corse Canary sono archiviati in bucket S3 e in Logs. CloudWatch 

     Gli screenshot mostrano come i tuoi clienti visualizzano le tue pagine Web. Puoi utilizzare i file HAR (file di archivio HTTP) per visualizzare dati dettagliati sulle prestazioni delle pagine Web. Puoi analizzare l'elenco delle richieste Web e rilevare problemi di prestazioni, ad esempio il tempo di caricamento di un elemento. I file di log mostrano il record delle interazioni tra il canary e la pagina Web e possono essere utilizzati per identificare i dettagli degli errori.

     Se il canary usa la versione di runtime `syn-nodejs-2.0-beta` o versione successiva, puoi ordinare i file HAR in base al codice di stato, alla dimensione della richiesta o alla durata.

     La scheda **Steps** (Fasi) visualizza un elenco delle fasi del canary, lo stato di ogni fase, il motivo dell'errore, l'URL dopo l'esecuzione della fase, gli screenshot e la durata dell'esecuzione della fase. Per i canary delle API con fasi HTTP, puoi visualizzare le fasi e le richieste HTTP corrispondenti se utilizzi il runtime `syn-nodejs-2.2` o versione successiva.

     Seleziona **HTTP Requests** (Richieste HTTP) per visualizzare il log di ogni richiesta HTTP fatta dal canary. È possibile visualizzare le request/response intestazioni, il corpo della risposta, il codice di stato, i tempi di errore e di prestazioni (durata totale, tempo di connessione TCP, tempo di handshake TLS, tempo di primo byte e tempo di trasferimento dei contenuti). Tutte le richieste HTTP che utilizzano il HTTP/HTTPS modulo nascosto vengono acquisite qui.

     Per impostazione predefinita nei canary API, l'intestazione della richiesta, l'intestazione della risposta, il corpo della richiesta e il corpo della risposta non sono inclusi nel report per motivi di sicurezza. Se scegli di includerli, i dati vengono archiviati solo nel bucket S3. Per informazioni su come includere questi dati nel report, consulta [executeHttpStep(StepName, RequestOptions, [callback], [StepConfig])](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_executeHttpStep).

     Sono supportati i tipi di contenuto del corpo della risposta testuale, HTML e JSON. Sono supportati tipi di contenuto come text/HTML, text/plain, application/JSON and application/x -amz-json-1.0. Le risposte compresse non sono supportate. 
   + La scheda **Monitoraggio** mostra i grafici delle metriche pubblicate da questo canarino. CloudWatch Per ulteriori informazioni su questi parametri, consulta [CloudWatch metriche pubblicate da canaries](CloudWatch_Synthetics_Canaries_metrics.md).

     Sotto i CloudWatch grafici pubblicati dal canarino ci sono i grafici delle metriche Lambda relative al codice Lambda del canarino.
   + La scheda **Configuration** (Configurazione) visualizza le informazioni di configurazione e pianificazione sul canary.
   + La scheda **Groups** (Gruppi) mostra gli eventuali gruppi a cui è associato questo canary.
   + La scheda **Tags** (Tag) visualizza i tag associati al canary.

# CloudWatch metriche pubblicate da canaries
<a name="CloudWatch_Synthetics_Canaries_metrics"></a>

Canaries pubblica le seguenti metriche nel namespace. CloudWatch `CloudWatchSynthetics` Per ulteriori informazioni sulla visualizzazione CloudWatch delle metriche, consulta. [Visualizzazione di parametri disponibili](viewing_metrics_with_cloudwatch.md)

**Nota**  
Per i canary con più browser, le metriche relative alla dimensione del browser sono abilitate per impostazione predefinita così da fornire visibilità sulle prestazioni su browser come Chrome, Firefox e altri ancora. Per disabilitare le metriche del browser, imposta `browserDimension` su `false`.  
Per i canary a browser singolo, le metriche relative alla dimensione del browser sono disabilitate per impostazione predefinita così da evitare ridondanze. Per visualizzare le metriche suddivise per browser, imposta `browserDimension` su ` true`.


| Metrica | Description | 
| --- | --- | 
|   `2xx`   |  Numero di richieste di rete eseguite dal canary che ha restituito risposte OK, con codici di risposta compresi tra 200 e 299. Questo parametro viene segnalato per i canary dell'interfaccia utente che utilizzano la versione di runtime ` syn-nodejs-2.0` o versione successiva e viene segnalato per i canary dell'API che utilizzano la versione di runtime `syn-nodejs-2.2` o versione successiva. Dimensioni valide: CanaryName, Browser Statistiche valide: Sum Unità: numero  | 
|   `4xx`   |  Numero di richieste di rete eseguite dal canary che ha restituito risposte Error (Errore), con codici di risposta compresi tra 400 e 499. Questo parametro viene segnalato per i canary dell'interfaccia utente che utilizzano la versione di runtime ` syn-nodejs-2.0` o versione successiva e viene segnalato per i canary dell'API che utilizzano la versione di runtime `syn-nodejs-2.2` o versione successiva. Dimensioni valide: CanaryName, Browser Statistiche valide: Sum Unità: numero  | 
|   `5xx`   |  Numero di richieste di rete eseguite dal canary che ha restituito risposte Fault (Guasto), con codici di risposta compresi tra 500 e 599. Questo parametro viene segnalato per i canary dell'interfaccia utente che utilizzano la versione di runtime ` syn-nodejs-2.0` o versione successiva e viene segnalato per i canary dell'API che utilizzano la versione di runtime `syn-nodejs-2.2` o versione successiva. Dimensioni valide: CanaryName, Browser Statistiche valide: Sum Unità: numero  | 
|   `Duration`   |  La durata dell'esecuzione del canary, in millisecondi. Dimensioni valide: CanaryName, Browser Statistiche valide: media Unità: millisecondi  | 
|   `DurationDryRun`   |  La durata delle DryRun esecuzioni.  Dimensioni valide: CanaryName, Browser Statistiche valide: media Unità: millisecondi  | 
|   `EphemeralStorageUsagePercent`   |  La percentuale massima di archiviazione temporanea utilizzata rispetto a quella totale configurata. Questa metrica viene raccolta ogni 10 secondi.  | 
|   `Failed`   |  Il numero di esecuzioni canary che non sono stati eseguiti. Questi fallimenti sono legati al canary stesso. Dimensioni valide: CanaryName, Browser Statistiche valide: Sum Unità: numero  | 
|   `Failed requests`   |  Numero di richieste HTTP eseguite dal canary sul sito Web di destinazione non riuscite senza risposta. Dimensioni valide: CanaryName, Browser Statistiche valide: Sum Unità: numero  | 
|   `RetryCount`   |  Il numero di volte in cui il canary ha effettuato un nuovo tentativo. Questa metrica viene visualizzata solo quando ci sono nuovi tentativi. Dimensioni valide: CanaryName, Browser Statistiche valide: Sum Unità: numero  | 
|   `SuccessPercent`   |  La percentuale delle esecuzioni di questo canary che riescono e non trovano fallimenti. Dimensioni valide: CanaryName, Browser Statistiche valide: media Unità: percentuale  | 
|   `SuccessPercentDryRun`   |  La percentuale di successo delle DryRun esecuzioni. Dimensioni valide: CanaryName, Browser Statistiche valide: media Unità: percentuale  | 
|   `SuccessPercentWithRetries`   |  La percentuale delle esecuzioni di questo canary che riescono dopo tutti i tentativi. Dimensioni valide: CanaryName, Browser Statistiche valide: media Unità: percentuale  | 
|   `VisualMonitoringSuccessPercent`   |  Percentuale di confronti visivi che hanno abbinato correttamente gli screenshot di riferimento durante un'esecuzione del canary. Dimensioni valide: CanaryName, Browser Statistiche valide: media Unità: percentuale  | 
|   `VisualMonitoringTotalComparisons`   |  Il numero totale di confronti visivi verificatisi durante un'esecuzione del canary. Dimensioni valide: CanaryName, Browser Unità: numero  | 

**Nota**  
Canary che usano il metodo `executeStep()` o `executeHttpStep()` dalla libreria Synthetics pubblicano anche i parametri `SuccessPercent` e ` Duration` con le dimensioni `CanaryName` e `StepName` per ogni fase.

 

# Modifica o eliminazione di un canary
<a name="synthetics_canaries_deletion"></a>

Puoi modificare o eliminare un canary esistente.

 **Modifica di un canary** 

Quando si modifica un canary, anche se non si modifica la pianificazione, questa viene reimpostata in base a quando modifichi il canary. Ad esempio, se disponi di un canary che viene eseguito ogni ora e modifichi quel canary, il canary verrà eseguito immediatamente dopo il completamento della modifica e poi ogni ora dopo.

**Per modificare o aggiornare un canary**

1. Apri la CloudWatch console all'indirizzo [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Nel pannello di navigazione, scegli **Application Signals**, **Canary di Synthetics**.

1. Seleziona il pulsante accanto al nome del canarino e scegli **Azioni**, **Modifica**.

1. (Facoltativo) Se questo canary esegue il monitoraggio visivo degli screenshot e desideri impostare l'esecuzione successiva del canary come riferimento, seleziona **Set next run as new baseline** (Imposta l'esecuzione successiva come nuovo riferimento).

1. (Facoltativo) Se questo canary esegue il monitoraggio visivo degli screenshot e desideri rimuovere uno screenshot dal monitoraggio visivo o desideri designare parti dello screenshot da ignorare durante i confronti visivi, in **Visual Monitoring** (Monitoraggio visivo) scegli **Edit Baseline** (Modifica riferimento).

   Viene visualizzato lo screenshot e puoi eseguire una delle seguenti operazioni:
   + Per rimuovere lo screenshot dall'utilizzo per il monitoraggio visivo, seleziona **Remove screenshot from visual test baseline** (Rimuovi screenshot dal riferimento del test visivo).
   + Per designare parti dello screenshot da ignorare durante i confronti visivi, fai clic e trascina per disegnare le aree dello schermo da ignorare. Una volta eseguita questa operazione per tutte le aree che desideri ignorare durante i confronti, scegli **Save** (Salva).

1. In **Editor script**, **Versione di runtime**, seleziona una versione di runtime Synthetics per eseguire il canary. Per informazioni sulle versioni di runtime Synthetics, consulta [Versioni di runtime Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library.html).

   In **Configurazione del browser**, puoi abilitare il browser per testare il canary. È necessario selezionare almeno un browser.

1. Apporta tutte le altre modifiche desiderate al canary e scegli **Save** (Salva).

 **Eliminare un canary** 

Quando elimini un canary, puoi scegliere se eliminare anche altre risorse utilizzate e create dal canary. Se il `ProvisionedResourceCleanup` campo del canarino è impostato ` AUTOMATIC` o `DeleteLambda` è specificato come `true` quando si elimina il canarino, Synthetics CloudWatch eliminerà automaticamente le funzioni e i layer Lambda utilizzati dal canarino.

Quando elimini un canary, devi eliminare anche quanto segue:
+ Le funzioni Lambda e i livelli utilizzati da questo canary. Il loro prefisso è `cwsyn- MyCanaryName`.
+ CloudWatch allarmi creati per questo canarino. Gli allarmi hanno un nome che inizia con ` Synthetics-Alarm-MyCanaryName`. Per ulteriori informazioni sull'eliminazione di allarmi, consulta [Modificare o eliminare un CloudWatch avviso](Edit-CloudWatch-Alarm.md).
+ Oggetti e bucket Amazon S3, ad esempio la posizione dei risultati del Canary e la posizione dell'artefatto.
+ I ruoli IAM creati per il Canary. Il loro nome è ` role/service-role/CloudWatchSyntheticsRole-MyCanaryName`. 
+ Gruppi di CloudWatch log in Registri creati per il canarino. Questi gruppi di log hanno i seguenti nomi:. `/aws/lambda/cwsyn-MyCanaryName-randomId` 

Prima di eliminare un canary, è possibile visualizzare i dettagli del canary e prendere nota di queste informazioni. In questo modo, è possibile eliminare le risorse corrette dopo aver eliminato il canary.

**Per eliminare un canary**

1. Apri la CloudWatch console su [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Nel pannello di navigazione, scegli **Application Signals**, **Canary di Synthetics**.

1. Se il canary è attualmente nello stato `RUNNING`, è necessario arrestarlo. Solo i canary nello stato `STOPPED`, `READY(NOT_STARTED)` o `ERROR` possono essere eliminati.

   **Per fermare il canarino, seleziona il pulsante accanto al nome del canarino e scegli **Azioni**, Stop.**

1. **Seleziona il pulsante accanto al nome del canarino e scegli **Azioni**, Elimina.**

1. Scegli se eliminare anche le altre risorse create e utilizzate dal canary. I livelli e le funzioni Lambda verranno eliminati insieme al canary, ma puoi anche scegliere di eliminare il ruolo IAM e la policy IAM del canary.

   Inserisci **Delete** nella casella e scegli **Delete** (Elimina).

1. Elimina le altre risorse utilizzate e create per il canary, come indicato in precedenza in questa sezione.

# Avvio, interruzione, eliminazione o aggiornamento del runtime di più canary
<a name="synthetics_canaries_multi-action"></a>

Puoi interrompere, avviare, eliminare o aggiornare il runtime di cinque canary con una sola operazione. L'aggiornamento del runtime per un canary avviene per l'ultimo runtime disponibile per il linguaggio e il framework utilizzati dal canary.

Se selezioni più canary e solo alcuni di essi si trovano in uno stato valido per l'operazione selezionata, questa viene eseguita solo sui canary in cui tale azione è valida. Ad esempio, se selezioni una combinazione di canary attualmente in esecuzione e altri no, e scegli di avviarli, l'operazione avrà esito positivo soltanto per i canary che non erano in esecuzione, mentre gli altri non saranno interessati.

Se nessuno dei canary selezionati è valido per un'azione, tale operazione non sarà disponibile nel menu.

1. Apri la CloudWatch console all'indirizzo [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Nel pannello di navigazione, scegli **Application Signals**, **Canary di Synthetics**.

1. Seleziona le caselle di controllo accanto ai canary da interrompere, avviare o eliminare.

1. Scegli **Azioni**, quindi scegli **Start**, **Stop**, **Delete**, **Start Dry Run** o **Update Runtime**.

   Inoltre, quando scegli **Aggiorna runtime**, puoi scegliere di eseguire un processo di test per l'aggiornamento del runtime prima di apportare la modifica.

# Monitoraggio degli eventi delle Canarie con Amazon EventBridge
<a name="monitoring-events-eventbridge"></a>

Le regole EventBridge degli eventi di Amazon possono avvisarti quando i canarini cambiano stato o completano le esecuzioni. EventBridgefornisce un near-real-time flusso di eventi di sistema che descrivono i cambiamenti nelle AWS risorse. CloudWatch *Synthetics invia questi eventi con EventBridge il massimo impegno.* La consegna con il massimo impegno significa che CloudWatch Synthetics tenta di inviare tutti gli eventi EventBridge a, ma in alcuni rari casi un evento potrebbe non essere consegnato. EventBridge elabora tutti gli eventi ricevuti almeno una volta. Inoltre, i listener di eventi potrebbero non ricevere gli eventi nell'ordine in cui si sono verificati.

**Nota**  
Amazon EventBridge è un servizio di bus di eventi che puoi utilizzare per connettere le tue applicazioni con dati provenienti da una varietà di fonti. Per ulteriori informazioni, consulta [What is Amazon EventBridge?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) nella *Amazon EventBridge User Guide*.

CloudWatch Synthetics emette un evento quando un canarino cambia stato o completa una corsa. È possibile creare una EventBridge regola che includa uno schema di eventi che corrisponda a tutti i tipi di eventi inviati da CloudWatch Synthetics o che corrisponda solo a tipi di eventi specifici. Quando un canarino attiva una regola, EventBridge richiama le azioni target definite nella regola. In questo modo è possibile inviare notifiche, acquisire informazioni sugli eventi, intraprendere azioni correttive in risposta a una modifica dello stato del canary o al completamento di un'esecuzione del canary. Ad esempio, è possibile creare regole per i seguenti casi d'uso:
+ Indagare quando una corsa canary fallisce
+ Indagare quando un canary è entrato nello stato `ERROR`
+ Tracciamento del ciclo di vita di un canary
+ Monitoraggio della riuscita o del fallimento dell'esecuzione del canary in un flusso di lavoro

## Eventi di esempio tratti da CloudWatch Synthetics
<a name="synthetics-event-examples"></a>

Questa sezione elenca gli eventi di esempio di CloudWatch Synthetics. Per ulteriori informazioni sul formato degli eventi, vedete [Eventi e modelli di eventi in](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-event-patterns.html). EventBridge 

 **Modifica dello stato dei canary** 

In questo tipo di evento, i valori di `current-state` e `previous-state` possono essere i seguenti:

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

 **Esecuzione riuscita del canary completata** 

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

 **Esecuzione non riuscita del canary completata** 

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

È possibile che gli eventi vengano duplicati o non funzionino. Per determinare l'ordine degli eventi, utilizza la proprietà `time`.

## Prerequisiti per la creazione di regole EventBridge
<a name="create-events-rule-prereqs"></a>

Prima di creare una EventBridge regola per CloudWatch Synthetics, dovete fare quanto segue:
+ Acquisite familiarità con eventi, regole e obiettivi in. EventBridge
+ Crea e configura gli obiettivi richiamati dalle tue regole. EventBridge Le regole possono richiamare molti tipi di target, tra cui:
  + Argomenti di Amazon SNS
  + AWS Lambda funzioni
  + Flussi Kinesis
  + Code Amazon SQS

Per ulteriori informazioni, consulta [What is Amazon EventBridge?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) e [Guida introduttiva ad Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-getting-set-up.html) nella *Amazon EventBridge User Guide*.

## Creare una EventBridge regola (CLI)
<a name="create-events-rule-cli"></a>

I passaggi dell'esempio seguente creano una EventBridge regola che pubblica un argomento di Amazon SNS quando il canarino `my-canary-name` indicato completa un'esecuzione o `us-east-1` cambia lo stato.

1. Crea la regola.

   ```
   aws events put-rule \
     --name TestRule \
     --region us-east-1 \ 
     --event-pattern "{\"source\": [\"aws.synthetics\"], \"detail\": {\"canary-name\": [\"my-canary-name\"]}}"
   ```

   Eventuali proprietà omesse dal modello vengono ignorate.

1. Aggiungi l'argomento come destinazione della regola.
   + Sostituisci *topic-arn* con l'Amazon Resource Name (ARN) del tuo argomento Amazon SNS.

   ```
   aws events put-targets \
     --rule TestRule \
     --targets "Id"="1","Arn"="topic-arn"
   ```
**Nota**  
Per consentire EventBridge ad Amazon di indicare il tuo argomento di riferimento, devi aggiungere una politica basata sulle risorse all'argomento. Per ulteriori informazioni, consulta le [autorizzazioni di Amazon SNS](https://docs.aws.amazon.com/eventbridge/latest/userguide/resource-based-policies-eventbridge.html#sns-permissions) nella *Amazon EventBridge * User Guide.

Per ulteriori informazioni, consulta la sezione [Eventi e modelli di eventi EventBridge nella](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-event-patterns.html) *Amazon EventBridge User Guide*.

# Esecuzione di aggiornamenti sicuri sul canary
<a name="performing-safe-canary-upgrades"></a>

CloudWatch synthetics safe canary updates ti consente di testare gli aggiornamenti sui tuoi canarini esistenti prima di applicare le modifiche. Questa funzionalità consente di convalidare la compatibilità del canary con nuovi runtime e altre modifiche alla configurazione, come modifiche al codice o alla memoria. Ciò contribuirà a ridurre al minimo le potenziali interruzioni del monitoraggio causate da aggiornamenti errati.

Utilizzando aggiornamenti sicuri sul canary per gli aggiornamenti delle versioni di runtime, i cambiamenti alla configurazione e le modifiche agli script di codice, hai la possibilità di ridurre i rischi, mantenere un monitoraggio ininterrotto, verificare le modifiche prima di eseguire il commit, apportare aggiornamenti e ridurre il tempo di inattività.

**Topics**
+ [Prerequisiti](#performing-safe-canary-upgrades-prereq)
+ [Best practice](#performing-safe-canary-upgrades-best-practices)
+ [Esecuzione di test dei canary usando un processo di test](#performing-safe-canary-upgrades-getting-started)
+ [Limitazioni](#performing-safe-canary-upgrades-limitations)

## Prerequisiti
<a name="performing-safe-canary-upgrades-prereq"></a>

Assicurati che i prerequisiti siano completi.
+ AWS account con autorizzazioni sintetiche CloudWatch 
+ Canary esistente nelle versioni di runtime supportate (consulta [Limitazioni](#performing-safe-canary-upgrades-limitations) per i runtime compatibili)
+ Includi i runtime compatibili quando esegui un processo di test (vedi [Limitazioni](#performing-safe-canary-upgrades-limitations) per i runtime compatibili)

## Best practice
<a name="performing-safe-canary-upgrades-best-practices"></a>

Di seguito sono indicate alcune best practice da seguire durante l'esecuzione di un canary.
+ Eseguire un processo di test per convalidare un aggiornamento di runtime
+ Eseguire un processo di test prima di applicare aggiornamenti in produzione al canary
+ Esaminare i log e gli artefatti del canary dopo un processo di test
+ Usare processi di test per convalidare le dipendenze e la compatibilità delle librerie

## Esecuzione di test dei canary usando un processo di test
<a name="performing-safe-canary-upgrades-getting-started"></a>

Puoi testare l'aggiornamento del canary utilizzando le seguenti opzioni:

 **Utilizzo del flusso di lavoro « Console di gestione AWS Edit»** 

1. Vai alla console di CloudWatch sintesi.

1. Seleziona il canary che desideri aggiornare.

1. Dal menu a discesa **Azioni**, scegli **Modifica**.

   Aggiorna il canary con le modifiche che desideri testare. Ad esempio, cambiando la versione di runtime o modificando il codice dello script.

1. In **Canary script**, scegli **Avvia processo di test** per testare e visualizzare immediatamente i risultati oppure scegli **Convalida e salva più tardi** nella parte inferiore della pagina per iniziare il test e visualizzare i risultati più avanti nella pagina dei **Dettagli del canary**.

1. Una volta completato il processo di test, scegli **Invia** per confermare gli aggiornamenti del canary.

 **Utilizzo di Console di gestione AWS per aggiornare i canarini in un batch** 

1. Vai alla console di CloudWatch sintesi.

1. Scegli la pagina dell'elenco **Synthetics**.

1. Seleziona fino a cinque canary per cui desideri aggiornare il runtime.

1. Dal menu a discesa **Azioni**, scegli **Aggiorna Runtime**.

1. Scegli **Avvia processo di test per nuovo runtime** per avviare il processo di test e provare le modifiche prima di un aggiornamento.

1. **Nella pagina dell'elenco Synthetics, vedrai un testo accanto alla versione Runtime per **il** canary che mostra l'avanzamento della corsa a secco (questo viene visualizzato solo per le corse a secco che richiedono un aggiornamento del runtime).**

   Una volta completato il processo di test, verrà visualizzato il testo **Avvia l'aggiornamento**.

1. Scegli **Avvia l'aggiornamento** per confermare l'aggiornamento del runtime.

1. Se il processo di test non riesce, verrà visualizzato il testo **Processo di test dell'aggiornamento non riuscito**. Scegli il testo per visualizzare il collegamento di debug alla pagina dei dettagli del canary.

 **Utilizzo della AWS CLI o dell'SDK** 

L'API avvia il processo di test per il nome canary fornito `MyCanary` e aggiorna la versione di runtime a `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 restituirà l'`DryRunId`interno di. `DryRunConfigOutput`

Chiama `GetCanary` con il `DryRunId` fornito per ricevere le configurazioni del processo di test del canary e un campo aggiuntivo `DryRunConfig` che contiene lo stato del processo di test elencato come `LastDryRunExecutionStatus`.

```
aws synthetics get-canary \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

Per maggiori dettagli, utilizza `GetCanaryRuns` con il `DryRunId` fornito per recuperare l'esecuzione e altre informazioni.

```
aws synthetics get-canary-runs \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

Dopo un processo di test riuscito, puoi utilizzare `UpdateCanary` con il ` DryRunId` fornito per confermare le modifiche.

```
aws synthetics update-canary \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

Quando fallisce per qualsiasi motivo (result from GetCanaryRuns conterrà i dettagli), il risultato `GetCanaryRuns` ha una posizione nell'artefatto che contiene i log di cui eseguire il debug. Quando non sono presenti log, significa che il processo di test non è stato creato. È possibile effettuare la convalida utilizzando ` GetCanary`.

```
aws synthetics get-canary \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

Lo *stato *StateReason**, e * StateReasonCode*visualizza lo stato del funzionamento a secco.

 **Usando CloudFormation** 

Nel tuo modello per un canary Synthetics, fornisci il campo `DryRunAndUpdate` che accetta un valore booleano `true` o `false`.

Quando il valore è `true` ogni aggiornamento esegue un processo di test per convalidare le modifiche prima di aggiornare automaticamente il canary. Quando il dry run fallisce, il canary non si aggiorna e fallisce la distribuzione e l' CloudFormation implementazione per un motivo valido. Per eseguire il debug di questo problema, usa la [console AWS Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Troubleshoot.html) oppure, se stai utilizzando un'API, ottieni l'`ArtifactS3Location` tramite l'API `GetCanaryRuns` e scarica i file `*-log.txt` per esaminare i log di esecuzione del canary alla ricerca di eventuali errori. Dopo la convalida, modifica il CloudFormation modello e riprova la distribuzione o utilizza l'API sopra riportata per la convalida.

Quando il valore è `false`, Synthetics non eseguirà un processo di test per convalidare le modifiche ma effettuerà direttamente il commit degli aggiornamenti.

Per informazioni sulla risoluzione dei problemi con un canary non eseguito, consulta [Risoluzione dei problemi di un canary fallito](CloudWatch_Synthetics_Canaries_Troubleshoot.md).

Un modello di esempio

```
SyntheticsCanary:
    Type: 'AWS::Synthetics::Canary'
    Properties:
      Name: MyCanary
      RuntimeVersion: syn-nodejs-puppeteer-10.0
      Schedule: {Expression: 'rate(5 minutes)', DurationInSeconds: 3600}
      ...
      DryRunAndUpdate: true
```

## Limitazioni
<a name="performing-safe-canary-upgrades-limitations"></a>
+ Supporta le versioni di runtime: syn-nodejs-puppeteer -10.0\$1, syn-nodejs-playwright -2.0\$1, -5.1\$1 e syn-python-selenium syn-nodejs-3.0\$1
+ Puoi eseguire un solo processo di test alla volta per ciascun canary
+ Quando un processo di test non riesce, non è possibile aggiornare il canary
+ Il processo di test non può valutare alcuna modifica del campo **Pianifica**

**Nota**  
Quando si avvia un processo di test con modifiche al codice per un canary Playwright e si desidera aggiornare il canary senza fornire il `DryRunId` relativo, è necessario specificare esplicitamente i parametri del codice.