

# Synthetic Monitoring (valores controlados)
<a name="CloudWatch_Synthetics_Canaries"></a>

Puede utilizar Amazon CloudWatch Synthetics para crear *canarios*, scripts configurables que se ejecutan según una programación, para supervisar los puntos de enlace y las API. Los Canaries siguen las mismas rutas y realizan las mismas acciones que un cliente, lo que le permite verificar continuamente su experiencia de cliente incluso cuando no tiene tráfico de clientes en sus aplicaciones. Mediante el uso de canaries, puede descubrir problemas antes de que sus clientes lo hagan.

Los canarios son scripts escritos en Node.js en Python o en Java. Crean funciones de Lambda en la cuenta que usan Node.js, Python o Java como tiempo de ejecución. Los canaries funcionan a través de protocolos HTTP y HTTPS. Los valores controlados utilizan capas de Lambda que contienen la biblioteca de CloudWatch Synthetics. La biblioteca incluye implementaciones de CloudWatch Synthetics para NodeJS, Python y Java.

Los canarios en tiempos de ejecución de Node.js y Python ofrecen acceso programático a los navegadores sin periféricos a través de Playwright, Puppeteer o Selenium Webdriver. Se admiten varios navegadores, incluido un navegador Google Chrome sin periféricos y Mozilla Firefox. Para obtener más información sobre Playwright, consulte [Playwright](https://playwright.dev/). Para obtener más información acerca de Puppeteer, consulte [Puppeteer](https://developer.chrome.com/docs/puppeteer/). Para obtener más información acerca de Selenium, consulte [Selenium](https://www.selenium.dev/). Los canarios en Selenium solo son compatibles con el navegador Chrome. Los canarios en Java están diseñados para ofrecer flexibilidad a la hora de supervisar cualquier tipo de servicio o aplicación, y no incluyen compatibilidad con navegadores ni marcos.

Los Canaries comprueban la disponibilidad y latencia de sus puntos de enlace, y pueden almacenar datos de tiempo de carga y capturas de pantalla de la interfaz de usuario. Supervisan las API REST, las URL y el contenido del sitio web, y pueden comprobar si hay cambios no autorizados de suplantación de identidad, inyección de código y scripting entre sitios.

 CloudWatch Synthetics se integra con [Application Signals](CloudWatch-Application-Monitoring-Sections.md), que puede detectar y supervisar los servicios de aplicaciones, los clientes, los valores controlados de Synthetics y las dependencias de los servicios. Use Application Signals para ver una lista o un mapa visual de sus servicios, ver las métricas del estado en función de los objetivos de nivel de servicio (SLO) y profundizar para ver los seguimientos de X-Ray correlacionados para una solución de problemas más detallada. Para ver sus valores controlados en Application Signals, [active el seguimiento activo de X-Ray](CloudWatch_Synthetics_Canaries_tracing.md). Los canarios se muestran en el [Mapa de aplicaciones](ServiceMap.md) conectado a sus servicios y en la página [Detalles del servicio](ServiceDetail.md) de los servicios a los que llaman. 

Para ver una demostración en video de los valores controlados, consulte lo siguiente:
+  [Introduction to Amazon CloudWatch Synthetics (Introducción a Amazon CloudWatch Synthetics](https://www.youtube.com/watch?v=MItluIsvfTo) 
+  [Amazon CloudWatch Synthetics Demo (Demostración de Amazon CloudWatch Synthetics](https://www.youtube.com/watch?v=hF3NM9j-u7I) 
+  [Create Canaries Using Amazon CloudWatch Synthetics (Crear valores controlados con Amazon CloudWatch Synthetics](https://www.youtube.com/watch?v=DSx65wW7lr0) 
+  [Visual Monitoring with Amazon CloudWatch Synthetics (Supervisión visual con Amazon CloudWatch Synthetics](https://www.youtube.com/watch?v=_PCs-ucZz7E) 



Puede ejecutar un valor controlado una vez o de forma periódica. Los canaries pueden ejecutarse con una frecuencia de una vez por minuto. Puede usar expresiones cron y de frecuencia para programar valores controlados.

Para obtener información acerca de los problemas de seguridad que deben tenerse en cuenta antes de crear y ejecutar valores programados, consulte [Consideraciones de seguridad para los canaries de Synthetics](servicelens_canaries_security.md). 

De forma predeterminada, los canaries crean algunas métricas de CloudWatch en el espacio de nombres de `CloudWatchSynthetics`. Estas métricas tienen `CanaryName` como dimensión. Los canaries que utilizan la función `executeStep()` o `executeHttpStep()` de la biblioteca de funciones también tienen `StepName` como dimensión. Para obtener más información sobre la biblioteca de funciones de valor controlado, consulte [Funciones de la biblioteca disponibles para los scripts de valor controlado](CloudWatch_Synthetics_Canaries_Function_Library.md).

CloudWatch Synthetics se integra bien con el mapa de seguimiento de X-Ray, el cual utiliza CloudWatch con AWS X-Ray para proporcionar una visión integral de los servicios a fin de ayudarlo a detallar de manera más eficiente los cuellos de botella de rendimiento e identificar a los usuarios afectados. Los valores controlados que crea con CloudWatch Synthetics aparecen en el mapa de seguimiento. Para obtener más información, consulte [Mapa de seguimiento de X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-console-servicemap.html). 

Actualmente, CloudWatch Synthetics está disponible en todas las regiones comerciales de AWS y en las regiones de GovCloud.

**nota**  
En Asia-Pacífico (Osaka), AWS PrivateLink no es compatible. En Asia-Pacífico (Yakarta), AWS PrivateLink y X-Ray no son compatibles.

**Topics**
+ [Roles y permisos necesarios para los canaries de CloudWatch](CloudWatch_Synthetics_Canaries_Roles.md)
+ [Creación de un valor controlado](CloudWatch_Synthetics_Canaries_Create.md)
+ [Grupos](CloudWatch_Synthetics_Groups.md)
+ [Prueba local de un canario](CloudWatch_Synthetics_Debug_Locally.md)
+ [Solución de problemas de un valor controlado](CloudWatch_Synthetics_Canaries_Troubleshoot.md)
+ [Código de muestra para scripts de valores controlados](CloudWatch_Synthetics_Canaries_Samples.md)
+ [Canaries y rastreo X-Ray](CloudWatch_Synthetics_Canaries_tracing.md)
+ [Ejecución de un valor controlado en una VPC](CloudWatch_Synthetics_Canaries_VPC.md)
+ [Cifrado de artefactos de un valor controlado](CloudWatch_Synthetics_artifact_encryption.md)
+ [Visualización de las estadísticas y los detalles de los valores controlados](CloudWatch_Synthetics_Canaries_Details.md)
+ [Métricas de CloudWatch que los canaries publican](CloudWatch_Synthetics_Canaries_metrics.md)
+ [Edición o eliminación de un valor controlado](synthetics_canaries_deletion.md)
+ [Inicio, detención, eliminación o actualización del tiempo de ejecución de varios valores controlados](synthetics_canaries_multi-action.md)
+ [Supervisión de eventos del valor controlado con Amazon EventBridge](monitoring-events-eventbridge.md)
+ [Actualizaciones seguras del canario](performing-safe-canary-upgrades.md)

# Roles y permisos necesarios para los canaries de CloudWatch
<a name="CloudWatch_Synthetics_Canaries_Roles"></a>

Tanto los usuarios que crean y administran valores controlados como los propios valores controlados deben tener ciertos permisos.

# Roles y permisos necesarios para los usuarios que administran valores controlados de CloudWatch
<a name="CloudWatch_Synthetics_Canaries_UserPermissions"></a>

Para ver los detalles de los valores controlados y los resultados de sus ejecuciones, debe iniciar sesión como usuario con las políticas adjuntas de `CloudWatchSyntheticsFullAccess` o ` CloudWatchSyntheticsReadOnlyAccess`. Para leer todos los datos de Synthetics en la consola, también necesita las políticas `AmazonS3ReadOnlyAccess` y ` CloudWatchReadOnlyAccess`. Para ver el código fuente utilizado por canaries, también necesita la política `AWSLambda_ReadOnlyAccess`.

Para crear valores controlados, debe haber iniciado sesión como un usuario que tenga la política de ` CloudWatchSyntheticsFullAccess` o un conjunto similar de permisos. Para crear Roles de IAM para los canaries, también necesita la siguiente declaración de política insertada:

------
#### [ 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**  
Otorgar a un usuario los permisos `iam:CreateRole`, `iam:CreatePolicy` e ` iam:AttachRolePolicy` proporciona a ese usuario acceso administrativo a su cuenta de AWS. Por ejemplo, un usuario con estos permisos puede crear una política que tenga permisos completos para todos los recursos y puede asociarla a cualquier rol. Sea muy cauteloso en lo referente a la persona a la que concede estos permisos.

Para obtener información acerca de cómo asociar políticas y conceder permisos a los usuarios, consulte [Cambio de los permisos de un usuario de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) y [Para integrar una política en línea de un usuario o un rol](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#embed-inline-policy-console).

# Roles y permisos necesarios para los valores controlados
<a name="CloudWatch_Synthetics_Canaries_CanaryPermissions"></a>

Cada valor controlado debe estar asociado a un rol de IAM que tenga ciertos permisos adjuntos. Cuando crea un valor controlado con la consola de CloudWatch, puede elegir que CloudWatch Synthetics cree un rol de IAM para el valor controlado. Si lo hace, el rol contará con los permisos necesarios.

Si desea crear el rol de IAM o desea crear un rol de IAM que pueda utilizar cuando use la AWS CLI o las API para crear un valor controlado, el rol debe contener los permisos enumerados en esta sección.

Todos los roles de IAM para valores controlados deben incluir la siguiente declaración de política de confianza.

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

****  

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

------

Además, el rol de IAM del valor controlado necesita una de las siguientes declaraciones.

 **Valor controlado básico que no usa AWS KMS ni necesita acceso a 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"
                }
            }
        }
    ]
}
```

------

 **Valor controlado que usa AWS KMS para cifrar los artefactos de valor controlado, pero que no necesita acceso a 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"
                    ]
                }
            }
        }
    ]
}
```

------

 **Valor controlado que no usa AWS KMS, pero sí necesita acceso a 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": [
                "*"
            ]
        }
    ]
}
```

------

 **Valor controlado que usa AWS KMS para cifrar los artefactos de valor controlado y también necesita acceso a Amazon VPC** 

Si actualiza un valor controlado que no es de VPC de manera que comience a utilizar una VPC, tendrá que actualizar el rol del valor controlado para que incluya los permisos de la interfaz de red enumerados en la siguiente política.

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

------

## AWSPolíticas administradas de para CloudWatch Synthetics
<a name="CloudWatch_Synthetics_IAMManagedPolicies"></a>

Para agregar permisos a usuarios, grupos y roles, es más fácil utilizar las políticas administradas de AWS que escribirlas uno mismo. Se necesita tiempo y experiencia para crear políticas administradas por el cliente de IAM que le brinden a su equipo solo los permisos necesarios. Para comenzar a hacerlo con rapidez, puede utilizar nuestras políticas administradas de AWS. Estas políticas cubren casos de uso comunes y están disponibles en su cuenta de AWS. Para obtener más información acerca de las políticas administradas de AWS, consulte [Políticas administradas de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) en la Guía del usuario de IAM.

Los servicios de AWS mantienen y actualizan las políticas administradas de AWS. No puede cambiar los permisos en las políticas gestionadas de AWS. Los servicios cambian ocasionalmente los permisos en una política administrada de AWS. Este tipo de actualización afecta a todas las identidades (usuarios, grupos y roles) donde se asocia la política.

### CloudWatch Synthetics se actualiza según las políticas administradas de AWS
<a name="CloudWatch_Synthetics_IAMManagedPolicies_Updates"></a>

Puede consultar los detalles sobre las actualizaciones de las políticas administradas de AWS para CloudWatch Synthetics desde que el servicio comenzó a rastrear estos cambios. Para obtener alertas automáticas sobre cambios en esta página, suscríbase a la fuente RSS en la página de historial de documentos de CloudWatch. 


| Cambio | Descripción | Fecha | 
| --- | --- | --- | 
|  Acciones redundantes eliminadas de **CloudWatchSyntheticsFullAccess**  |  CloudWatch Synthetics eliminó las acciones `s3:PutBucketEncryption` y ` lambda:GetLayerVersionByArn` de la política **CloudWatchSyntheticsFullAccess** porque esas acciones eran redundantes con otros permisos de la política. Las acciones eliminadas no proporcionaron ningún permiso y no hay ningún cambio neto en los permisos que la política ha otorgado.  | 12 de marzo de 2021 | 
|  CloudWatch Synthetics comenzó a rastrear los cambios  |  CloudWatch Synthetics comenzó a rastrear los cambios para las políticas administradas de AWS.  | 10 de marzo de 2021 | 

 **CloudWatchSyntheticsFullAccess** 

Aquí está el contenido de la política `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** 

Aquí está el contenido de la política `CloudWatchSyntheticsReadOnlyAccess`:

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

****  

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

------

# Limitar a un usuario a ver canaries específicos
<a name="CloudWatch_Synthetics_Canaries_Restricted"></a>

Puede limitar la capacidad de un usuario para ver información sobre canaries, de modo que solo pueda ver información sobre los canaries que usted especifique. Para ello, utilice una política de IAM con una declaración de ` Condition` similar a la siguiente y asocie esta política a un usuario o a un rol de IAM.

En el ejemplo siguiente se limita al usuario a ver únicamente información sobre ` name-of-allowed-canary-1` y `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 admite mostrar hasta cinco elementos en la matriz `synthetics:Names`.

También puede crear una política que utilice un \$1** como un comodín en nombres de valor controlado que deben permitirse, como en el ejemplo siguiente:

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

****  

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

------

Cualquier usuario que haya iniciado sesión con una de estas políticas asociadas no puede utilizar la consola de CloudWatch para ver ninguna información de valor controlado. Solo pueden ver la información de valor controlado para los valores controlados autorizados por la política y exclusivamente mediante el uso de la API [DescribeCanaries](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_DescribeCanaries.html) o el comando [describe-canaries](https://docs.aws.amazon.com/cli/latest/reference/synthetics/describe-canaries.html) en la AWS CLI.

# Creación de un valor controlado
<a name="CloudWatch_Synthetics_Canaries_Create"></a>

**importante**  
Asegúrese de utilizar canaries de Synthetics para supervisar solo aquellos puntos de enlace y API en los que tenga propiedad o permisos. En función de la configuración de frecuencia de los valores controlados, estos puntos de conexión pueden experimentar un aumento del tráfico.

Cuando utiliza la consola de CloudWatch para crear un valor controlado, puede utilizar un esquema que CloudWatch proporciona para crear un valor controlado o escribir su propio script. Para obtener más información, consulte [Uso de esquemas de valores controlados](CloudWatch_Synthetics_Canaries_Blueprints.md).

También puede crear un valor controlado mediante la CloudFormation si está utilizando su propio script para el valor controlado. Para obtener más información, consulte [AWS::Synthetics::Canary](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-synthetics-canary.html) en la *Guía del usuario de AWS CloudFormation*.

Si está escribiendo su propio script, puede utilizar varias funciones que CloudWatch Synthetics ha integrado en una biblioteca. Para obtener más información, consulte [Versiones de tiempo de ejecución de Synthetics](CloudWatch_Synthetics_Canaries_Library.md).

**nota**  
Cuando crea un valor controlado, una de las capas que se crean es una capa de Synthetics a la que se le antepone ` Synthetics`. Esta capa es propiedad de la cuenta del servicio Synthetics y contiene el código del tiempo de ejecución.

**Cómo crear un valor controlado**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Señales de aplicación**, **Valores controlados de Synthetics**.

   

1. Elija **Crear valor controlado**.

1. Elija una de las opciones siguientes:
   + Para basar su valor controlado en un script de proyecto, elija **Usar un esquema**, y, a continuación, elija el tipo de valor controlado que desea crear. Para obtener más información acerca de lo que hace cada tipo de proyecto, consulte [Uso de esquemas de valores controlados](CloudWatch_Synthetics_Canaries_Blueprints.md).
   + Para cargar su propio script de Node.js y crear un valor controlado personalizado, elija **Cargar un script**.

     A continuación, puede arrastrar su script al área **Script** o elegir **Browse files (Examinar archivos)** para desplazarse hasta el script en su sistema de archivos.
   + Para importar el script desde un bucket de S3, elija **Import from S3 (Importar de S3)**. En **Ubicación de origen**, escriba la ruta completa al valor controlado o elija **Examinar S3**.

     Debe tener permisos `s3:GetObject` y `s3:GetObjectVersion` para el bucket de S3 que utilice. El bucket debe estar en la misma Región de AWS en la que está creando el valor controlado.

1. En **Nombre**, escriba un nombre para su valor controlado. El nombre se utiliza en muchas páginas, por lo que le recomendamos que le asigne un nombre descriptivo que lo diferencie de otros canaries.

1. En **URL del punto de conexión o aplicación**, escriba la dirección URL que desea que pruebe el valor controlado. Esta URL debe incluir el protocolo (como https://).

   Si desea que el valor controlado pruebe un punto de conexión en una VPC, también debe escribir información sobre la VPC más adelante en este procedimiento. 

1. Si utiliza su propio script para el valor controlado, en **Controlador de Lambda**, escriba el punto de entrada donde desea que comience el valor controlado. Para obtener información sobre el formato del controlador de Lambda, consulte [Versiones de tiempo de ejecución de Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library.html).

1. En el **Editor de scripts**, **Versión del tiempo de ejecución**, seleccione una versión de tiempo de ejecución de Synthetics para ejecutar el canario. Para obtener información sobre las versiones del tiempo de ejecución de Synthetics, consulte [Versiones de tiempo de ejecución de Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library.html).

   En **Configuración del navegador**, puede habilitar el navegador para probar el canario. Debe seleccionar al menos un navegador.

1. Si está utilizando variables de entorno en el script, elija **Environment variables** (Variables de entorno) y, a continuación, especifique un valor para cada variable de entorno definida en el script. Para obtener más información, consulte [Variables de entorno](CloudWatch_Synthetics_Canaries_WritingCanary_Nodejs_Pup.md#CloudWatch_Synthetics_Environment_Variables).

1. Bajo el título **Programa**, elija si desea ejecutar el valor controlado solo una vez, ejecutarlo continuamente con una expresión de frecuencia o programarlo con una expresión cron.
   + Cuando utilice la consola de CloudWatch para crear un valor controlado que funcione continuamente, puede elegir un índice entre una vez al minuto y una vez por hora.
   + Para obtener más información sobre cómo escribir una expresión cron para la programación de valores controlados, consulte [Programación de las ejecuciones de valores controlados con cron](CloudWatch_Synthetics_Canaries_cron.md).

1. (Opcional) Para establecer un tiempo de espera para el valor controlado, elija **Configuración adicional** y, a continuación, especifique el valor de tiempo de espera. Haga que no sea inferior a 15 segundos para permitir arranques en frío de Lambda y el tiempo que tarda en arrancar la instrumentación del valor controlado.

1. En **Retención de datos**, especifique cuánto tiempo se retiene la información sobre las ejecuciones de valores controlados fallidas y correctas. El intervalo abarca de 1 a 455 días.

   Esta configuración afecta al rango de información que devuelven las operaciones [GetCanaryRuns](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_GetCanaryRuns.html), así como al rango de información que se muestra en la consola Synthetics.

   No afecta a los datos almacenados en los buckets de Amazon S3, ni a los registros o métricas publicados por el valor controlado.

   Independientemente del período de retención de datos del canario, el rango de información que se muestra en la consola tiene ciertos límites. En la vista de inicio de la consola de Synthetics, el rango de tiempo relativo y absoluto está limitado a siete días. En la vista de consola de Synthetics para un canario específico, el rango de tiempo relativo está limitado a siete días, mientras que el rango de tiempo absoluto está limitado a 30 días.

1. En **Almacenamiento de datos**, seleccione el bucket de Amazon S3 que desea utilizar para almacenar los datos de las ejecuciones de canario. El nombre del bucket no puede contener un punto (.). Si deja este valor en blanco, se utilizará un bucket de Amazon S3 predeterminado o se creará uno nuevo.

1. (Opcional) De forma predeterminada, los canaries almacenan sus artefactos en Amazon S3 y los artefactos se cifran en reposo mediante una clave de AWS KMS administrada por AWS. Puede utilizar una opción de cifrado diferente si selecciona **Additional configuration** (Configuración adicional) en la sección **Data Storage** (Almacenamiento de datos). Luego, puede elegir el tipo de clave que desea utilizar para el cifrado. Para obtener más información, consulte [Cifrado de artefactos de un valor controlado](CloudWatch_Synthetics_artifact_encryption.md). 

1. En **Permisos de acceso**, elija si desea crear un nuevo rol de IAM para ejecutar el valor controlado o utilizar uno existente.

   Si hace que CloudWatch Synthetics cree el rol, este incluirá automáticamente todos los permisos necesarios. Si desea crear el rol, consulte [Roles y permisos necesarios para los valores controlados](CloudWatch_Synthetics_Canaries_CanaryPermissions.md) para obtener información acerca de los permisos necesarios.

   Si utiliza la consola de CloudWatch para crear un rol para un valor controlado, al crear el valor controlado no podrá volver a utilizar el rol para otros valores controlados, ya que estos roles son específicos de un solo valor controlado. Si ha creado manualmente un rol que funcione para varios canaries, puede utilizar ese rol existente.

   Para utilizar un rol existente, debe tener el permiso `iam:PassRole` para pasar ese rol a Synthetics y Lambda. También debe tener el permiso `iam:GetRole`.

1. (Opcional) Bajo el título **Alarmas**, elija si desea que se creen alarmas predeterminadas de CloudWatch para este valor controlado. Si decide crear alarmas, se crean con la siguiente convención de nombres: :`Synthetics-Alarm-canaryName -index `

   `index` es un número que representa cada alarma que se crea para este valor controlado. La primera alarma tiene un índice de 1, la segunda alarma tiene un índice de 2, y así sucesivamente.

1. (Opcional) Para que este valor controlado pruebe un punto de conexión que está en una VPC, elija **Configuración de VPC** y, a continuación, haga lo siguiente:

   1. Seleccione la VPC que aloja el punto de enlace.

   1. Seleccione una o más subredes en la VPC. Debe seleccionar una subred privada, ya que la instancia de Lambda no se puede configurar para ejecutarse en una subred pública cuando no se puede asignar una dirección IP a la instancia de Lambda durante la ejecución. Para obtener más información, consulte [Configuración de una función de Lambda para obtener acceso a los recursos en una VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html).

   1. Seleccione uno o varios grupos de seguridad en la VPC.

   1. Para permitir el tráfico IPv6 saliente para este canario, seleccione **Permitir tráfico IPv6 para subredes de doble pila**. Esto permite al canario monitorear los puntos de conexión habilitados solo para IPv6 y para doble pila a través de IPv6.

      Puede monitorear los puntos de conexión externos a su VPC proporcionando al canario acceso a Internet y configurando las subredes de la VPC de forma correcta. Para obtener más información, consulte [Ejecución de un valor controlado en una VPC](CloudWatch_Synthetics_Canaries_VPC.md).

   Si el punto de conexión está en una VPC, debe habilitar el valor controlado para enviar información a CloudWatch y a Amazon S3. Para obtener más información, consulte [Ejecución de un valor controlado en una VPC](CloudWatch_Synthetics_Canaries_VPC.md).

1. (Opcional) En **Etiquetas**, agregue uno o más pares de clave-valor como etiquetas para este valor controlado. Las etiquetas pueden ayudarlo a identificar y organizar sus recursos de AWS y a realizar un seguimiento de sus costes de AWS. Para obtener más información, consulte [Etiquetado de los recursos de Amazon CloudWatch](CloudWatch-Tagging.md).

   Si desea que las etiquetas que aplique al canario también se apliquen a la función de Lambda que utiliza el canario, elija **Función de Lambda** en **Replicación de etiquetas**. Si elige esta opción, CloudWatch Synthetics mantendrá sincronizadas las etiquetas de canarios y de la función de Lambda:
   + Synthetics aplicará las mismas etiquetas que especifique aquí tanto al canario como a la función de Lambda.
   + Si, posteriormente, actualiza las etiquetas del canario y mantiene esta opción seleccionada, Synthetics modifica las etiquetas de la función de Lambda para que permanezcan sincronizadas con el canario. 

1. (Opcional) Bajo el título **Rastreo activo**, elija si desea habilitar el rastreo activo de X-Ray para este valor controlado. El seguimiento activo solo está disponible para los tiempos de ejecución de Puppeteer y Java. Para obtener más información, consulte [Canaries y rastreo X-Ray](CloudWatch_Synthetics_Canaries_tracing.md).

## Recursos que se crean para canaries
<a name="CloudWatch_Synthetics_Canaries_Resources_Created"></a>

Al crear un valor controlado, se crean los siguientes recursos para el mismo:
+ Un rol de IAM con el nombre `CloudWatchSyntheticsRole-canary-name -uuid` (si utiliza la consola de CloudWatch para crear el valor controlado y especifica que se cree un nuevo rol para el valor controlado)
+ Una política de IAM con el nombre `CloudWatchSyntheticsPolicy- canary-name-uuid`.
+ Un bucket de S3 con el nombre `cw-syn-results-accountID -region`.
+ Alarmas con el nombre `Synthetics-Alarm-MyCanaryName`, si desea que se creen alarmas para el valor controlado.
+ Capas y funciones de Lambda, si utiliza un esquema para crear el valor controlado. Estos recursos tienen el prefijo `cwsyn-MyCanaryName`.
+ Grupos de registro de CloudWatch Logs con el nombre `/aws/lambda/cwsyn-MyCanaryName -randomId`.

# Uso de esquemas de valores controlados
<a name="CloudWatch_Synthetics_Canaries_Blueprints"></a>

Esta sección proporciona detalles sobre cada uno de los esquemas de valor controlado y las tareas para las que cada esquema es más adecuado. Se proporcionan esquemas para los siguientes tipos de valor controlado: 

**Topics**
+ [Supervisión de latidos](#CloudWatch_Synthetics_Canaries_Blueprints_Heartbeat)
+ [Valor controlado de la API](#CloudWatch_Synthetics_Canaries_Blueprints_API)
+ [Verificador de enlaces que no funcionan](#CloudWatch_Synthetics_Canaries_Blueprints_Broken_Links)
+ [Proyecto de supervisión visual](#CloudWatch_Synthetics_Canaries_Blueprints_VisualTesting)
+ [Registrador de valores controlados](#CloudWatch_Synthetics_Canaries_Blueprints_Recorder)
+ [Generador de flujo de trabajo de la GUI](#CloudWatch_Synthetics_Canaries_Blueprints_GUI_Workflow)
+ [Esquema de comprobaciones múltiples](#CloudWatch_Synthetics_Canaries_Blueprints_Multichecks_Blueprint)
+ [Creación de canarios de esquemas de comprobaciones múltiples](CloudWatch_Synthetics_Canaries_MultiCheck_Blueprint.md)

Cuando se utiliza un esquema para crear un valor controlado, mientras rellena los campos en la consola de CloudWatch, el área de la página **Editor de scripts** muestra el valor controlado que se está creando como script Node.js. También puede editar su valor controlado en esta área para personalizarlo aún más.

## Supervisión de latidos
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Heartbeat"></a>

Los scripts de latidos cargan la URL especificada y almacenan una captura de pantalla de la página y un archivo HTTP (archivo HAR). También almacenan registros de direcciones URL a las que se accede. 

Puede utilizar los archivos HAR para ver datos de rendimiento detallados sobre las páginas web. Puede analizar la lista de solicitudes web y detectar problemas de rendimiento, como el tiempo de carga de un elemento.

Si el valor controlado utiliza `syn-nodejs-puppeteer-3.1` o una versión posterior en el tiempo de ejecución, puede utilizar el esquema de supervisión de latidos para supervisar varias direcciones URL y ver el estado, la duración, las capturas de pantalla asociadas y el motivo del error para cada URL en el resumen de pasos del informe de ejecución del valor controlado.

## Valor controlado de la API
<a name="CloudWatch_Synthetics_Canaries_Blueprints_API"></a>

Los canaries de API pueden probar las funciones básicas de lectura y escritura de una API REST. REST significa *transferencia de estado representacional* y es un conjunto de reglas que siguen los desarrolladores al crear una API. Una de estas reglas establece que un enlace a una URL específica debe devolver un fragmento de datos.

Los canaries pueden trabajar con cualquier API y probar todo tipo de funcionalidades. Cada valor controlado puede hacer varias llamadas a la API.

En los canarios que usan la versión de tiempo de ejecución `syn-nodejs-2.2` o posterior, el esquema de canario de API admite canarios de varios pasos que supervisan las API como pasos HTTP. Puede probar varias API en un único valor controlado. Cada paso es una solicitud independiente que puede acceder a una URL diferente, usar cabeceras diferentes y utilizar diferentes reglas para la captura de cabeceras y de cuerpos de respuesta. Al no capturar cabeceras y cuerpo de respuesta, puede evitar que se registre información confidencial. 

Cada solicitud en un valor controlado de API consta de la siguiente información:
+ El *punto de enlace*, que es la URL que solicita.
+ El *método*, que es el tipo de solicitud que se envía al servidor. Las API REST admiten operaciones GET (lectura), POST (escritura), PUT (actualización), PATCH (actualización) y DELETE (eliminación).
+ Los *encabezados*, que proporcionan información tanto al cliente como al servidor. Se utilizan para la autenticación y para proporcionar información sobre el contenido del cuerpo. Para obtener una lista de cabeceras válidas, consulte [HTTP Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers) (Cabeceras HTTP).
+ Los *datos* (o el *cuerpo*), contienen información que se enviará al servidor. Esto se utiliza solo para solicitudes POST, PUT, PATCH o DELETE.

**nota**  
Los esquemas de canarios de API no son compatibles con los tiempos de ejecución de Playwright.

El esquema de valor controlado de API admite los métodos GET y POST. Cuando utilice este valor controlado, debe especificar los encabezados. Por ejemplo, puede especificar **Authorization** como **Clave** y especificar los datos de autorización necesarios como **Valor** para esa clave.

Si está probando una solicitud POST, especifique también el contenido que se va a publicar en el campo **Datos**.

 **Integración con la API Gateway** 

El proyecto de la API está integrado con Amazon API Gateway. Esto le permite seleccionar una API de API Gateway y un escenario desde la misma cuenta y región de AWS que el valor controlado, o cargar una plantilla de Swagger desde API Gateway para la supervisión de la API entre cuentas y entre regiones. A continuación, puede elegir el resto de los detalles en la consola para crear el valor controlado, en lugar de introducirlos desde cero. Para obtener más información sobre API Gateway, consulte [What is Amazon API Gateway?](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) (¿Qué es Amazon API Gateway?) 

 **Uso de una API privada** 

Puede crear un valor controlado que utilice una API privada en Amazon API Gateway. Para obtener más información, consulte [Creación de una API privada en Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html).

## Verificador de enlaces que no funcionan
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Broken_Links"></a>

El verificador de enlaces que no funcionan recopila todos los enlaces dentro de la dirección URL que está probando mediante `document.getElementsByTagName('a')`. Solo prueba el número de enlaces que especifique; la dirección URL en sí se cuenta como primer enlace. Por ejemplo, si desea comprobar todos los enlaces de una página que contiene cinco enlaces, debe especificar que el valor controlado siga seis enlaces.

Los valores controlados de verificadores de enlaces que no funcionan que se han creado con el tiempo de ejecución `syn-nodejs-2.0-beta` o posterior admiten las siguientes características adicionales:
+ Proporciona un informe que incluye los enlaces que se han verificado, el código de estado, el motivo del error (si los hay) y las capturas de pantalla de la página fuente y de destino.
+ Al ver los resultados del valor controlado, puede utilizar el filtro para ver solo los enlaces que no funcionan y, a continuación, corregir el enlace en función del motivo del error.
+ Esta versión toma capturas de pantalla de la página fuente anotadas para cada enlace y resalta el anclaje donde se encontró el enlace. Los componentes ocultos no se anotan.
+ Puede configurar esta versión para tomar capturas de pantalla de páginas fuente y de destino, pero solo páginas fuente o páginas de destino.
+ Esta versión corrige un problema de la versión anterior en el que el script del valor controlado se detiene después del primer enlace roto, incluso cuando se raspan más enlaces desde la primera página.

**nota**  
Los esquemas de verificador de enlaces que no funcionan no son compatibles con los tiempos de ejecución de Playwright.

Para actualizar un canario existente con `syn-1.0` para utilizar el nuevo tiempo de ejecución, debe eliminar y volver a crear el canario. Actualizar un valor controlado existente al nuevo tiempo de ejecución no hace que estas características estén disponibles.

Un valor controlado de verificadores de enlaces que no funcionan detecta los siguientes tipos de errores en un enlace:
+ 404 Página no encontrada
+ Nombre de host no válido
+ URL incorrecta. Por ejemplo, a la URL le falta un corchete, tiene barras diagonales adicionales o utiliza el protocolo incorrecto.
+ Código de respuesta HTTP no válido
+ El servidor host devuelve respuestas vacías sin contenido ni código de respuesta.
+ Las solicitudes HTTP agotan constantemente el tiempo de espera durante la ejecución del valor controlado.
+ El host interrumpe constantemente las conexiones porque está mal configurado o está demasiado ocupado.

## Proyecto de supervisión visual
<a name="CloudWatch_Synthetics_Canaries_Blueprints_VisualTesting"></a>

El esquema de supervisión visual incluye un código para comparar capturas de pantalla que se toman durante una ejecución de valor controlado con capturas de pantalla que se toman durante una ejecución de valor controlado de línea de base. Si la discrepancia entre las dos capturas de pantalla está más allá de un porcentaje umbral, el valor controlado falla. La supervisión visual es compatible con canaries que ejecutan **syn-puppeteer-node-3.2** y versiones posteriores. Actualmente, no es compatible con canarios que ejecutan Python y Selenium o utiliza tiempos de ejecución de Playwright.

El esquema de supervisión visual incluye la siguiente línea de código en el script de valor controlado de esquema predeterminado, que permite la supervisión visual.

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

La primera vez que el valor controlado se ejecuta correctamente después de agregar esta línea al script, utiliza las capturas de pantalla que se toman durante esa ejecución como línea de base para la comparación. Después de la primera ejecución del valor controlado, se puede usar la consola de CloudWatch para editar el valor controlado para realizar cualquiera de las siguientes acciones:
+ Establecer la siguiente ejecución del valor controlado como la nueva línea de base.
+ Establecer límites en la captura de pantalla de línea de base actual para designar áreas de la captura de pantalla que se ignorarán durante las comparaciones visuales.
+ Eliminar una captura de pantalla de ser utilizada para la supervisión visual.

Para obtener más información sobre cómo usar la consola de CloudWatch para editar un valor controlado, consulte [Edición o eliminación de un valor controlado](synthetics_canaries_deletion.md).

También puede cambiar la ejecución del valor controlado que se utiliza como línea de base mediante los parámetros ` nextrun` o `lastrun` o mediante la especificación de un ID de ejecución de valor controlado en la API [UpdateCanary](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_UpdateCanary.html).

Cuando utilice el proyecto de supervisión visual, ingrese la dirección URL donde desea que se tome la captura de pantalla y especifique un umbral de diferencia como porcentaje. Después de la ejecución de la línea de base, las futuras ejecuciones del valor controlado que detectan una diferencia visual mayor que ese umbral desencadenan un fallo del valor controlado. Después de la ejecución de la línea de base, también puede editar el valor controlado para “dibujar” límites en la captura de pantalla de línea de base que desea omitir durante la supervisión visual.

La característica de supervisión visual está impulsada por el conjunto de herramientas de software de código abierto ImageMagick. Para obtener más información, consulte [ImageMagick](https://imagemagick.org/index.php).

## Registrador de valores controlados
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Recorder"></a>

Con el esquema del registrador de valores controlados, puede utilizar CloudWatch Synthetics Recorder para registrar las acciones de cliqueo y tipeo en un sitio web y generar automáticamente un script Node.js que se puede utilizar para crear un valor controlado que siga los mismos pasos. Recorder CloudWatch Synthetics es una extensión de Amazon para Google Chrome. El registrador de canarios no es compatible con los canarios que utilizan el tiempo de ejecución de Playwright.

**Créditos**: el registrador CloudWatch Synthetics se basa en el [Registrador sin procesador](https://github.com/checkly/headless-recorder).

Para obtener más información, consulte [Uso del registrador de CloudWatch Synthetics para Google Chrome](CloudWatch_Synthetics_Canaries_Recorder.md).

## Generador de flujo de trabajo de la GUI
<a name="CloudWatch_Synthetics_Canaries_Blueprints_GUI_Workflow"></a>

El proyecto del generador de flujo de trabajo de la GUI verifica que se pueden realizar acciones en la página web. Por ejemplo, si tiene una página web con un formulario de inicio de sesión, el valor controlado puede rellenar los campos de usuario y contraseña y enviar el formulario para verificar que la página web funciona correctamente.

Cuando utiliza un esquema para crear este tipo de valor controlado, especifique las acciones que desea que el valor controlado realice en la página web. Las acciones que puede utilizar son las siguientes:
+ **Clic**: selecciona el elemento especificado y simula un usuario al hacer clic o al elegir el elemento.

  Para especificar el elemento en un script Node.js, utilice `[id=]` o ` a[class=]`.

  Para especificar el elemento en un script Python, utilice `xpath //*[@id=]` o ` //*[@class=]`.
+ **Verificación del selector**: verifica que el elemento especificado existe en la página web. Esta prueba es útil para comprobar que una acción anterior hace que los elementos correctos rellenen la página.

  Para especificar el elemento que se va a verificar en un script Node.js, utilice `[id=]` o ` a[class=]`.

  Para especificar el elemento que se va a verificar en un script Python, utilice `xpath //*[@id=]` o `//*[class=]`.
+ **Verificación de texto**: verifica que la cadena especificada está contenida en el elemento de destino. Esta prueba es útil para verificar que una acción anterior ha causado que se muestre el texto correcto.

  Para especificar el elemento en un script Node.js, utilice un formato como ` div[@id=]//h1`, ya que esta acción utiliza la función `waitForXPath` en Puppeteer.

  Para especificar el elemento en un script Python, utilice el formato xpath como ` //*[@id=] ` o //\$1 [@class =] porque esta acción utiliza la función `implicitly_wait` en Selenium.
+ **Ingresar texto**: ingresa el texto especificado en el elemento de destino.

  Para especificar el elemento que se va a verificar en un script Node.js, utilice `[id=]` o ` a[class=]`.

  Para especificar el elemento que se va a verificar en un script Python, utilice `xpath //*[@id=]` o `//*[@class=]`.
+ **Clic con navegación**: espera a que toda la página se cargue después de elegir el elemento especificado. Esto es más útil cuando necesita volver a cargar la página.

  Para especificar el elemento en un script Node.js, utilice `[id=]` o ` a[class=]`.

  Para especificar el elemento en un script Python, utilice `xpath //*[@id=]` o ` //*[@class=]`.

Por ejemplo, el siguiente blueprint utiliza Node.js. Hace clic en **firstButton** en la URL especificada, comprueba que aparece el selector esperado con el texto esperado, ingresa el nombre `Test_Customer` en el campo **Nombre**, hace clic en el botón **Inicio de sesión** y, luego, comprueba que el inicio de sesión sea complete correctamente mediante la verificación del texto **Le damos la bienvenida** en la página siguiente.

![\[La página de creación de valor controlado en la consola, con campos completados para el esquema de flujo de trabajo de la GUI.\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/images/canary_create_gui_workflow.PNG)


Los valores controlados de flujo de trabajo de la GUI que utilizan los siguientes tiempos de ejecución también proporcionan un resumen de los pasos ejecutados para cada ejecución de un valor controlado. Puede utilizar las capturas de pantalla y el mensaje de error asociados con cada paso para encontrar la causa raíz del error.
+ `syn-nodejs-2.0` o posterior.
+ `syn-python-selenium-1.0` o posterior.

## Esquema de comprobaciones múltiples
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Multichecks_Blueprint"></a>

El esquema de comprobaciones múltiples simplifica la creación de canarios. Reduce los costos porque utiliza una configuración JSON sencilla que proporciona una funcionalidad lista para usar a fin de llevar a cabo comprobaciones de HTTP, DNS, SSL y TCP. Puede configurar hasta 10 comprobaciones. Configure cada comprobación como un paso numérico que se ejecute de forma secuencial, lo que permitirá comprender claramente el flujo de canarios.

Los esquemas de comprobaciones múltiples admiten lo siguiente:
+ Solicitudes HTTP básicas, solicitudes TCP, validación de registros de DNS y supervisión de certificados SSL
+ Métodos de autenticación HTTP como básica, clave de API, OAuth y Sigv4 integrados con Secrets Manager
+ Aserciones para cada comprobación

Para obtener más información, consulte [Creación de un valor controlado](CloudWatch_Synthetics_Canaries_Create.md).

# Creación de canarios de esquemas de comprobaciones múltiples
<a name="CloudWatch_Synthetics_Canaries_MultiCheck_Blueprint"></a>

El esquema de comprobaciones múltiples de Amazon CloudWatch Synthetics le permite crear un canario de Synthetics al proporcionar una configuración JSON sencilla. Para ahorrar costos, puede agrupar hasta 10 tipos diferentes de comprobaciones de HTTP, DNS, SSL y TCP de forma secuencial por pasos. Cada comprobación incluye aserciones que proporcionan una verificación básica con respecto al resultado de una comprobación.

Los canarios de comprobaciones múltiples están diseñados para casos de uso sencillos que solo requieren comprobaciones básicas sin la necesidad de usar un navegador sin periféricos. Para casos de uso más complejos, consulte los otros tipos de canarios que proporciona Amazon CloudWatch Synthetics.

**Topics**
+ [Requisitos previos](#CloudWatch_Synthetics_MultiCheck_Prerequisites)
+ [Limitaciones](#CloudWatch_Synthetics_MultiCheck_Limitations)
+ [Estructura de empaquetado, esquema JSON y ajustes de configuración](#CloudWatch_Synthetics_MultiCheck_Packaging)
+ [Creación de un canario de comprobaciones múltiples en la Consola de administración de AWS](#CloudWatch_Synthetics_MultiCheck_Console)
+ [Creación de un canario de comprobaciones múltiples con las API de AWS Synthetics](#CloudWatch_Synthetics_MultiCheck_API)
+ [Creación de un canario de comprobaciones múltiples en la CloudFormation](#CloudWatch_Synthetics_MultiCheck_CloudFormation)
+ [Configuración de la autenticación](#CloudWatch_Synthetics_MultiCheck_Authentication)
+ [Solución de problemas](#CloudWatch_Synthetics_MultiCheck_Troubleshooting)

## Requisitos previos
<a name="CloudWatch_Synthetics_MultiCheck_Prerequisites"></a>
+ Debe usar syn-nodejs-3.0\$1 para crear un canario de comprobaciones múltiples.
+ Al utilizar la configuración de Authentication y Secrets Manager, debe asegurarse de que el canario [ExecutionRoleArn](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_CreateCanary.html) conceda los permisos para acceder a estos secretos.
+ Al utilizar la configuración de Authentication para Sigv4, debe asegurarse de que el canario [ExecutionRoleArn](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_CreateCanary.html) conceda los permisos para acceder al rol relacionado.

## Limitaciones
<a name="CloudWatch_Synthetics_MultiCheck_Limitations"></a>
+ El tamaño de la respuesta HTTP no puede ser superior a 1 MB.
+ Máximo de 10 variables definidas.
+ Cuando se utiliza la RFC JSON, el JSON de comprobaciones puede tener campos duplicados, pero solo se utilizará el último campo secuencial.
+ En la Consola de administración de AWS, un canario de comprobaciones múltiples mostrará de forma predeterminada las métricas de los pasos de comprobaciones múltiples para identificar fácilmente la disponibilidad de cada comprobación. Cuando se eliminan las comprobaciones, es posible que este gráfico siga mostrando las comprobaciones en el gráfico de disponibilidad hasta que la métrica deje de estar activa durante al menos 3 horas.

## Estructura de empaquetado, esquema JSON y ajustes de configuración
<a name="CloudWatch_Synthetics_MultiCheck_Packaging"></a>

Se debe asignar el nombre a la configuración de comprobaciones de JSON que se utilizará para el canario ` blueprint-config.json`. La configuración debe seguir el [esquema](https://github.com/aws-samples/synthetics-canary-local-debugging-sample/tree/main) y las instrucciones de [Escritura de una configuración JSON para un esquema de comprobaciones múltiples de Node.js](CloudWatch_Synthetics_WritingCanary_Multichecks.md).

Comprima `blueprint-config.json` en un archivo ZIP y proporciónelo en uno de los siguientes flujos de trabajo de creación. Cuando haya una configuración `synthetics.json`, también se comprime en el archivo ZIP. A continuación, se muestra un archivo ZIP de ejemplo denominado `multi-checks.zip`.

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

## Creación de un canario de comprobaciones múltiples en la Consola de administración de AWS
<a name="CloudWatch_Synthetics_MultiCheck_Console"></a>

1. Abra la consola de Amazon CloudWatch Synthetics.

1. Elija **Crear valor controlado**.

1. En **Usar un esquema**, elija **Comprobaciones múltiples**.

   En **Configurar comprobaciones**, verá dos pestañas, **Comprobaciones** y **Configuración canario**.

1. Seleccione la versión de tiempo de ejecución **syn-nodejs-3.0** o posterior.

1. Siga el procedimiento de [Escritura de una configuración JSON para un esquema de comprobaciones múltiples de Node.js](CloudWatch_Synthetics_WritingCanary_Multichecks.md) para describir la comprobación que desea llevar a cabo. Como alternativa, la consola le proporciona una configuración JSON predeterminada sobre la que puede crear.

1. Elija **Crear valor controlado**.

## Creación de un canario de comprobaciones múltiples con las API de AWS Synthetics
<a name="CloudWatch_Synthetics_MultiCheck_API"></a>

Utilice la API de `CreateCanary` y, en el parámetro `Code`, proporcione el valor de campo `BlueprintTypes="multi-checks"` en lugar de ` Handler`. Cuando se especifican `BlueprintTypes` y `Handler`, se muestra `ValidationException`. La versión de tiempo de ejecución proporcionada debe ser `syn-nodejs-3.0` o superior.

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

## Creación de un canario de comprobaciones múltiples en la CloudFormation
<a name="CloudWatch_Synthetics_MultiCheck_CloudFormation"></a>

En la plantilla CloudFormation de un canario de comprobaciones múltiples, en el parámetro `Code`, proporcione el valor de campo `BlueprintTypes="multi-checks"` en lugar de ` Handler`. Cuando se especifican `BlueprintTypes` y `Handler`, se muestra `ValidationException`. La versión de tiempo de ejecución proporcionada debe ser `syn-nodejs-3.0 or later`. 

Plantilla de ejemplo:

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

## Configuración de la autenticación
<a name="CloudWatch_Synthetics_MultiCheck_Authentication"></a>

Cuando el canario hace solicitudes HTTP a un punto de conexión autenticado, puede configurar los pasos del canario del esquema para utilizar uno de los cuatro tipos de autenticación: básica, clave de API, credenciales de cliente de OAuth y SigV4. En lugar de configurar los encabezados de las solicitudes, puede especificar un tipo de autenticación en la definición del esquema y Synthetics seguirá el tipo de autenticación especificado para rellenar los componentes de la solicitud HTTP con la información de autenticación proporcionada.

El tipo de autenticación se especifica en el paso del esquema de la sección Autenticación. Se especifica el esquema de autenticación que desea usar, las propiedades obligatorias para el esquema de autenticación elegido y Synthetics usa la información proporcionada para crear un encabezado de autenticación para la solicitud HTTP.

Como almacenar secretos (como contraseñas o claves de API) en texto sin formato es un problema de seguridad, Synthetics admite la integración con AWS Secrets Manager. Cuando desee autenticar una solicitud HTTP en un canario de esquema de Synthetics, puede consultar el secreto que almacena la información de autenticación y Synthetics se encarga de recuperar el secreto y almacenarlo en caché en el canario. Este enfoque proporciona secretos a Synthetics y, al mismo tiempo, los mantiene almacenados de forma segura, sin especificarlos en texto sin formato en la configuración del esquema.

Para obtener más información acerca del AWS Secrets Manager, consulte [¿Qué es el AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)

### Autenticación básica
<a name="CloudWatch_Synthetics_MultiCheck_BasicAuth"></a>

Synthetics implementa el esquema de autenticación HTTP básico definido en la RFC 7617. El proceso funciona de la siguiente manera:
+ La configuración del esquema proporciona un par de nombre de usuario y contraseña.
+ Para crear el par de usuario y contraseña, se concatena el nombre de usuario, un solo carácter de dos puntos (“:”) y la contraseña.
+ El par de usuario y contraseña se codifica en UTF-8 y se convierte en una cadena codificada en base64.
+ Este par de usuario y contraseña codificado en base64 se proporciona en el encabezado “Authorization” con el siguiente formato: Authorization: Basic \$1base64-encoded-user-pass\$1

Por ejemplo, si el agente de usuario quiere enviar el ID de usuario “Aladdin” y la contraseña “open sesame”, utiliza el siguiente campo de encabezado: Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Ejemplo de configuración:

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

### Autenticación de la clave de API
<a name="CloudWatch_Synthetics_MultiCheck_APIKeyAuth"></a>

Puede proporcionar una clave de API para autenticar solicitudes HTTP. Al utilizar la autenticación mediante clave de API, la clave de API proporcionada se coloca en el encabezado HTTP “X-API-Key”. Si tiene un recurso personalizado que busca encabezados de claves de API en un encabezado que no sea este, tiene la opción de especificar un nombre de encabezado diferente para que Synthetics coloque la clave de API.

Ejemplo de configuración:

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

### Autenticación de SigV4
<a name="CloudWatch_Synthetics_MultiCheck_SigV4Auth"></a>

AWS SigV4 (Signature Version 4) es el protocolo de firma de AWS para agregar información de autenticación a solicitudes de API de AWS. Para hacer una solicitud autenticada por SigV4, debe especificar la región y el servicio a los que hace las solicitudes, así como un ARN (nombre de recurso de AWS) que identifique un rol de IAM que desea que el canario asuma al hacer esta solicitud de SigV4. Synthetics asume el rol de IAM proporcionado en el roleArn y lo utiliza para autenticar la solicitud de API de AWS.

Ejemplo de configuración:

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

#### Consideraciones sobre SigV4
<a name="CloudWatch_Synthetics_MultiCheck_SigV4Considerations"></a>

Para que Synthetics asuma el rol que proporcionó en la sección de autenticación de SigV4, la política de confianza adjunta al rol debe configurarse para permitir que el canario asuma el roleArn proporcionado. La entidad principal de AWS principal en la que debe confiar es el rol que asumió el canario a través de AWS STS. Tiene el formato ` aws:sts::{account_running_the_canary}:assumed-role/<canary_name>/<assumed_role_name>` arn:.

Por ejemplo, si tiene un canario en ejecución en la cuenta 0123456789012, denominado test-canary, y el rol que asumió se denominó canary-assume-role, la política de confianza debe incluir esta instrucción para que el canario asuma correctamente el roleArn para SigV4:

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

### Credenciales del cliente OAuth
<a name="CloudWatch_Synthetics_MultiCheck_OAuthAuth"></a>

Synthetics implementa el tipo de concesión de credenciales de cliente de OAuth tal como se define en la sección 4.4 de la RFC 6479. Si desea hacer una solicitud HTTP a un punto de conexión autenticado con un token de portador emitido por un punto de conexión de token de OAuth, Synthetics puede solicitar y administrar un token de portador en tu nombre. Cuando se utiliza el esquema de OAuth, Synthetics lleva a cabo los siguientes pasos:
+ Utiliza el esquema de autenticación básico con clientId y clientSecret para autenticar una solicitud en tokenUrl, el punto de conexión que emite los tokens de portadores.
+ Si proporciona los parámetros de recurso, audiencia y ámbito opcionales, se incluyen en la solicitud del token.
+ Utiliza el token de acceso que devuelve el tokenUrl para autenticar la solicitud HTTP.
+ Almacena de forma segura el token de actualización que devuelve el tokenUrl para futuras solicitudes de token

Ejemplo de configuración:

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

#### Consideraciones sobre OAuth
<a name="CloudWatch_Synthetics_MultiCheck_OAuthConsiderations"></a>

Synthetics actualiza los tokens de OAuth cuando se devuelve una respuesta 401 o 407.

### AWS Secrets ManagerIntegración de
<a name="CloudWatch_Synthetics_MultiCheck_SecretsManager"></a>

Para evitar el almacenamiento de valores de secretos (como contraseñas o claves de API) en texto sin formato, Synthetics proporciona una integración con AWS Secrets Manager. Puede hacer referencia a un valor de secreto completo en la configuración del esquema con el formato ` ${aws_SECRET:<secret_name>}` o hacer referencia a una clave concreta ` ${aws_SECRET:<secret_name>:<secret_key>}`.

Por ejemplo, si tiene un secreto denominado login/basic-auth-credentials, almacene un nombre de usuario y una contraseña con la siguiente estructura de JSON:

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

Puede hacer referencia al nombre de usuario y la contraseña en la configuración del esquema de la siguiente manera, y Synthetics se encarga de recuperar el valor del secreto y usar sus claves para autenticar la solicitud:

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

Para permitir que Synthetics recupere el secreto especificado, el ARN de rol que asume el canario debe tener los permisos secretsManager:GetSecretValue. Si el secreto está cifrado con una clave administrada por el cliente en lugar de la clave administrada de AWS AWS/secretsmanager, también necesita los permisos kms:Decrypt para la clave.

Ejemplo de permisos:

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

## Solución de problemas
<a name="CloudWatch_Synthetics_MultiCheck_Troubleshooting"></a>

### Errores comunes de solución de problemas
<a name="CloudWatch_Synthetics_MultiCheck_Common_Failures"></a>

El código subyacente del esquema de comprobaciones múltiples está escrito en Typescript. Consulte la página de solución de problemas de canarios para ver los errores más comunes: [Solución de problemas de un valor controlado](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Troubleshoot.html).

### Errores de sintaxis de la configuración de comprobaciones de JSON
<a name="CloudWatch_Synthetics_MultiCheck_JSON_Errors"></a>

Si hay algún error sintáctico relacionado con la configuración de comprobaciones de JSON del canario, Consola de administración de AWS le indicará el motivo del error cuando intente crear el canario. Si está creando un canario mediante una API o CloudFormation, verá el error cuando se ejecute el canario por primera vez. Se recomienda utilizar el flujo de trabajo de actualizaciones seguras de canarios para el canario de comprobaciones múltiples. Para obtener más información, consulte [Actualizaciones seguras del canario](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/performing-safe-canary-upgrades.html).

### Errores de red o de tiempo de espera
<a name="CloudWatch_Synthetics_MultiCheck_Network_Failures"></a>

En caso de errores intermitentes o coherentes relacionados con los tiempos de espera, los errores de conexión de red (por ejemplo, ENOTFOUND, ECONNRESET) consideran la activación de registros de ` DEBUG` para que la ejecución siguiente proporcione más detalles sobre el motivo de los errores de las comprobaciones. Para ello, proporcione la variable de entorno CW\$1SYNTHETICS\$1LOG\$1LEVEL: "DEBUG".

Si aún hay errores que no puede depurar, considere la posibilidad de contactar con AWS Support o comprobar si alguno de los otros tipos de canarios proporcionados por CloudWatch Synthetics se ajusta mejor a su caso de uso.

# Uso del registrador de CloudWatch Synthetics para Google Chrome
<a name="CloudWatch_Synthetics_Canaries_Recorder"></a>

Amazon proporciona un registrador de CloudWatch Synthetics para ayudarlo a crear canaries de manera más fácil. El registrador es una extensión de Google Chrome.

Registra las acciones de cliqueo y de tipeo en un sitio web y genera automáticamente un script Node.js que se puede utilizar para crear un valor controlado que siga los mismos pasos.

Después de iniciar el registro, CloudWatch Synthetics Recorder detecta las acciones en el navegador y las convierte en un script. Puede pausar y reanudar el registro según sea necesario. Cuando deja de registrar, el registrador produce un script Node.js de las acciones, que puede copiar fácilmente con el comando **Copy to Clipboard** (Copiar al portapapeles). A continuación, puede utilizar el script para crear un valor controlado en CloudWatch Synthetics. 

**Créditos**: el registrador CloudWatch Synthetics se basa en el [Registrador sin procesador](https://github.com/checkly/headless-recorder).

## Instalación de la extensión CloudWatch Synthetics Recorder para Google Chrome
<a name="CloudWatch_Synthetics_Canaries_Recorder-install"></a>

Si desea utilizar CloudWatch Synthetics Recorder, puede empezar a crear un valor controlado y elegir el esquema **Registrador de valores controlados**. Si lo hace cuando aún no ha descargado el registrador, la consola de CloudWatch Synthetics proporciona un enlace para descargarlo.

Alternativamente, puede seguir estos pasos para descargar e instalar el registrador directamente.

**Para instalar el registrador de CloudWatch Synthetics**

1. Con Google Chrome, ingrese a este sitio web: [ https://chrome.google.com/webstore/detail/cloudwatch-synthetics-rec/bhdnlmmgiplmbcdmkkdfplenecpegfno](https://chrome.google.com/webstore/detail/cloudwatch-synthetics-rec/bhdnlmmgiplmbcdmkkdfplenecpegfno)

1. Seleccione **Add to Chrome** (Añadir a Chrome) y, después, **Add extension** (Agregar extensión).

## Uso del registrador de CloudWatch Synthetics para Google Chrome
<a name="CloudWatch_Synthetics_Canaries_Recorder-using"></a>

Si desea utilizar CloudWatch Synthetics Recorder para obtener ayuda para crear un valor controlado, puede elegir **Crear valor controlado** en la consola de CloudWatch y luego, **Usar un esquema**, **Registrador de valores controlados**. Para obtener más información, consulte [Creación de un valor controlado](CloudWatch_Synthetics_Canaries_Create.md). 

Alternativamente, puede usar el registrador para registrar pasos sin usarlos de manera inmediata para crear un valor controlado.

**Para utilizar CloudWatch Synthetics Recorder a fin de registrar las acciones en un sitio web**

1. Desplácese hasta la página que desea supervisar.

1. Elija el icono de extensiones de Chrome y, a continuación, elija **CloudWatch Synthetics Recorder**.

1. Seleccione **Start Recording** (Comenzar a registrar).

1. Realice los pasos que desea registrar. Para pausar el registro, elija **Pausar**.

1. Cuando termine de registrar el flujo de trabajo, elija **Stop recording** (Detener registro).

1. Seleccione **Copy to clipboard** (Copiar al portapapeles) para copiar el script generado al portapapeles. O bien, si desea comenzar de nuevo, elija **New recording** (Registro nuevo).

1. Para crear un valor controlado con el script copiado, puede pegar el script copiado en el editor en línea del esquema del registro o guardarlo en un bucket de Amazon S3 e importarlo desde allí.

1. Si no está creando un valor controlado inmediatamente, puede guardar el script registrado en un archivo.

## Limitaciones conocidas CloudWatch Synthetics Recorder
<a name="CloudWatch_Synthetics_Canaries_Recorder-limitations"></a>

CloudWatch Synthetics Recorder para Google Chrome tiene las siguientes limitaciones por el momento. 
+ Los elementos HTML que no tienen ID usarán selectores CSS. Esto puede dañar los canaries si la estructura de la página web cambia más adelante. Se planea proporcionar algunas opciones de configuración (como el uso del atributo data-id) en torno a esto en una versión futura del registrador. 
+ El registrador no admite acciones, como hacer doble clic o copiar o pegar, y no admite combinaciones de teclas como CMD\$10. 
+ Para verificar la presencia de un elemento o texto en la página, los usuarios deben agregar aserciones después de generar el script. El registrador no admite la verificación de un elemento sin realizar ninguna acción sobre ese elemento. Esto es similar a las opciones “Verificar texto” o “Verificar elemento” en el generador de flujo de trabajo de valores controlados. Se planea agregar compatibilidad con aserciones en una versión futura del registrador. 
+ El registrador graba todas las acciones en la pestaña donde se inicia el registro. No registra ventanas emergentes (por ejemplo, para permitir el seguimiento de ubicación) ni la navegación a páginas diferentes desde ventanas emergentes. 

# Versiones de tiempo de ejecución de Synthetics
<a name="CloudWatch_Synthetics_Canaries_Library"></a>

Al crear o actualizar un valor controlado, se elige una versión de tiempo de ejecución de Synthetics para este. Un tiempo de ejecución de Synthetics es una combinación del código de Synthetics que llama al controlador de scripts y de las capas Lambda de las dependencias agrupadas.

Actualmente, CloudWatch Synthetics admite tiempos de ejecución que usan los lenguajes Node.js, Python o Java. Los marcos compatibles son Puppeteer, Playwright y Selenium.

Recomendamos utilizar siempre la versión de tiempo de ejecución más reciente para sus valores controlados a fin de poder usar las últimas características y actualizaciones realizadas en la biblioteca de Synthetics.

**Nota**: Siempre que ponga en marcha un canario para utilizar la nueva versión del tiempo de ejecución de Synthetics, todas las funciones de la biblioteca de Synthetics que utilice el canario también se moverán automáticamente a la misma versión de NodeJS que admita el tiempo de ejecución de Synthetics.

**Topics**
+ [Versiones de tiempo de ejecución que utilizan Java](CloudWatch_Synthetics_Library_Java.md)
+ [Versiones en tiempo de ejecución con Node.js y Playwright](CloudWatch_Synthetics_Library_nodejs_playwright.md)
+ [Versiones en tiempo de ejecución con Node.js y Puppeteer](CloudWatch_Synthetics_Library_nodejs_puppeteer.md)
+ [Versiones en tiempo de ejecución con Python y Selenium Webdriver](CloudWatch_Synthetics_Library_python_selenium.md)
+ [Versiones de tiempo de ejecución con Node.js](CloudWatch_Synthetics_Library_Nodejs.md)
+ [Política de soporte de versiones del tiempo de ejecución](CloudWatch_Synthetics_Runtime_Support_Policy.md)
+ [Actualización de las versiones del tiempo de ejecución](CloudWatch_Synthetics_Runtime_Version_Update.md)

# Versiones de tiempo de ejecución que utilizan Java
<a name="CloudWatch_Synthetics_Library_Java"></a>

La siguiente sección contiene información acerca de las versiones de tiempo de ejecución de CloudWatch Synthetics para Java. Este tiempo de ejecución no incluye ningún navegador ni marco.

La convención de nomenclatura de estas versiones de tiempo de ejecución es `syn-language -majorversion.minorversion`. 

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

**Dependencias principales**:
+ Tiempo de ejecución de AWS Lambda Java 21

 **Características** 
+ *Integración con CloudWatch Logs*: puede consultar y filtrar los registros a través de la consola de CloudWatch Synthetics. Cada mensaje de los registros contiene un elemento ` canaryRunId` único, lo que facilita la búsqueda de los registros de una ejecución de canario concreta.
+ *Métricas*: puede supervisar el porcentaje de éxito y la duración de las ejecuciones del canario mediante las métricas de CloudWatch. También puede configurar alarmas que le adviertan cuando los canarios detecten problemas.
+ *Artefactos de canarios*: con cada ejecución de un canario, se carga un informe detallado correspondiente a la ejecución y a los pasos de la ejecución, al que se puede acceder a través de Amazon S3.
+ *Compatibilidad con seguimientos*: puede emitir seguimientos para todas las solicitudes hechas por el canario a través de X-Ray. Cada ejecución del canario está asociada a un ID de rastro.

# Versiones en tiempo de ejecución con Node.js y Playwright
<a name="CloudWatch_Synthetics_Library_nodejs_playwright"></a>

Las siguientes secciones contienen información acerca de las versiones de tiempo de ejecución de CloudWatch Synthetics para Node.js y Playwright. Playwright es una biblioteca de automatización de código abierto para pruebas de navegadores. Para obtener más información sobre Playwright, consulte [https://playwright.dev/](https://playwright.dev). 

La convención de nomenclatura de estas versiones de tiempo de ejecución es `syn-language -framework-majorversion. minorversion`. 

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

**importante**  
Al iniciar Synthetics `syn-nodejs-playwright-5.1` y versiones posteriores, el tiempo de ejecución de Synthetics usará el nuevo espacio de nombres. Migre el script de canario para usar el nuevo espacio de nombres. El espacio de nombres heredado quedará obsoleto en un futuro lanzamiento.  
@amzn/synthetics-playwright → @aws/synthetics-playwright

**Dependencias principales**:
+ Tiempo de ejecución de AWS Lambda: Node.js 22.x
+ Versión 1.58.2 de Playwright
+ Versión 1.58.2 de prueba de Playwright
+ Chromium versión 145.0.7632.77
+ Firefox, versión 146.0.1

 **Cambios en syn-nodejs-playwright-6.0** 
+ Se aplicaron parches de seguridad y se actualizaron las versiones de Playwright y del navegador. 

Para obtener más información, consulte los siguientes temas:
+  [Registro de cambios de Playwright ](https://playwright.dev/docs/release-notes) 
+  [Referencia de la API de Playwright](https://playwright.dev/docs/api/class-playwright) 

## Versiones de tiempo de ejecución anteriores para Node.js y Playwright
<a name="Previousversions-nodejs-playwright"></a>

Las siguientes versiones anteriores de tiempo de ejecución para Node.js y Playwright aún se admiten. 

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

**Dependencias principales**:
+ Tiempo de ejecución de AWS Lambda: Node.js 22.x
+ Playwright, versión 1.57.0
+ Playwright, versión 1.57.0 de prueba
+ Chromium versión 143.0.7499.169
+ Firefox, versión 142.0.1

 **Cambios en syn-nodejs-playwright-5.1** 
+ Migración del espacio de nombres del tiempo de ejecución de Synthetics. 
+ La definición de tipo está disponible en [npm Registry](https://www.npmjs.com/package/@aws/synthetics-playwright). Asegúrese de que la versión del paquete de definición de tipos coincida con la versión de tiempo de ejecución de su canario.

Para obtener más información, consulte los siguientes temas:
+  [Registro de cambios de Playwright ](https://playwright.dev/docs/release-notes) 
+  [Referencia de la API de Playwright](https://playwright.dev/docs/api/class-playwright) 

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

**Dependencias principales**:
+ Tiempo de ejecución de AWS Lambda: Node.js 22.x
+ Playwright, versión 1.57.0
+ Playwright, versión 1.57.0 de prueba
+ Chromium versión 143.0.7499.4
+ Firefox, versión 142.0.1

 **Cambios en syn-nodejs-playwright-5.0** 
+ Se aplicaron parches de seguridad y se actualizaron las versiones de Playwright y del navegador. 

Para obtener más información, consulte los siguientes temas:
+  [Registro de cambios de Playwright ](https://playwright.dev/docs/release-notes) 
+  [Referencia de la API de Playwright](https://playwright.dev/docs/api/class-playwright) 

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

**Dependencias principales**:
+ Tiempo de ejecución de AWS Lambda: Node.js 22.x
+ Playwright, versión 1.55.0
+ Playwright, versión 1.55.0 de prueba
+ Chromium versión 140.0.7339.16
+ Firefox, versión 141.0

 **Cambios en syn-nodejs-playwright-4.0** 
+ Se aplicaron parches de seguridad y se actualizaron las versiones de Playwright y del navegador. 

Para obtener más información, consulte los siguientes temas:
+  [Registro de cambios de Playwright ](https://playwright.dev/docs/release-notes) 
+  [Referencia de la API de Playwright](https://playwright.dev/docs/api/class-playwright) 

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

**Dependencias principales**:
+ Tiempo de ejecución de AWS Lambda: Node.js 20.x
+ Playwright, versión 1.53.0
+ Playwright, versión 1.53.0 de prueba
+ Chromium, versión 138.0.7204.168

 **Cambios en syn-nodejs-playwright-3.0** 
+ Compatibilidad con varios navegadores: ahora puede ejecutar los canarios de Node.js de Puppeteer en Firefox o Chrome
+ Compatibilidad con supervisión visual

Para obtener más información, consulte los siguientes temas:
+  [Registro de cambios de Playwright ](https://playwright.dev/docs/release-notes) 
+  [Referencia de la API de Playwright](https://playwright.dev/docs/api/class-playwright) 

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

**Dependencias principales**:
+ Tiempo de ejecución de AWS Lambda: Node.js 20.x
+ Versión 1.49.1 de Playwright
+ Versión 1.49.1 de prueba de Playwright
+ Versión 131.0.6778.264 de Chromium

 **Cambios en syn-nodejs-playwright-2.0** 
+ Se ha corregido el desajuste entre la duración total y la suma de los tiempos de una solicitud determinada en un archivo HAR.
+ Admite simulacros para el canario, lo que permite realizar ejecuciones ad hoc o realizar una actualización segura del canario.

Para obtener más información, consulte los siguientes temas:
+  [Registro de cambios de Playwright ](https://playwright.dev/docs/release-notes) 
+  [Referencia de la API de Playwright](https://playwright.dev/docs/api/class-playwright) 

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

**Dependencias principales**:
+ Tiempo de ejecución de AWS Lambda: Node.js 20.x
+ Versión 1.44.1 de Playwright
+ Versión 1.44.1 de prueba de Playwright
+ Versión 126.0.6478.126 de Chromium

**Características**:
+ **Compatibilidad con PlayWright**: puede escribir scripts de canarios mediante el marco de automatización de Playwright. Puede hacer que los scripts de Playwright existentes se ejecuten como canarios y mejorarlos con funcionalidades de supervisión de AWS. 
+ **Integración con CloudWatch Logs**: puede consultar y filtrar los registros a través de la consola de CloudWatch Synthetics. Cada mensaje de los registros contiene un elemento `canaryRunId` único, lo que facilita la búsqueda de los registros de una ejecución de canario concreta. 
+ **Métricas y artefactos de canario**: puede supervisar el índice de aprobación de ejecución de canario a través de las métricas de CloudWatch y configurar alarmas para que le avisen cuando los canarios detecten problemas. 
+ **Capturas de pantalla y asociación de pasos**: puede hacer capturas de pantalla con la funcionalidad nativa de Playwright para visualizar las etapas de un script de canario en cada ejecución. Las capturas de pantalla se asocian automáticamente a los pasos de canarios y se cargan en los buckets de Amazon S3. 
+ **Varias pestañas**: puede crear canarios que abran varias pestañas del navegador y acceder a las capturas de pantalla de cada pestaña. Puede crear flujos de trabajo de usuario con varias pestañas y varios pasos en Synthetics. 

# Versiones en tiempo de ejecución con Node.js y Puppeteer
<a name="CloudWatch_Synthetics_Library_nodejs_puppeteer"></a>

La primera versión en tiempo de ejecución para Node.js y Puppeteer se ha denominado `syn-1.0`. Las versiones posteriores en tiempo de ejecución tienen la convención de nomenclatura `syn-language -majorversion.minorversion`. A partir de `syn-nodejs-puppeteer-3.0`, la convención de nomenclatura es `syn- language-framework-majorversion .minorversion` 

Un sufijo adicional `-beta` muestra que la versión en tiempo de ejecución se encuentra actualmente en una versión preliminar beta.

Las versiones de tiempo de ejecución con el mismo número de versión principal son compatibles con las versiones anteriores. 

El código de Lambda de un valor controlado está configurado para tener una memoria máxima de 1 GB. El tiempo de espera de cada ejecución de un valor controlado se agota transcurrido el valor correspondiente configurado. Si no se especifica ningún valor de tiempo de espera para un valor controlado, CloudWatch elige uno en función de la frecuencia de dicho valor controlado. Si configura un valor de tiempo de espera, haga que no sea inferior a 15 segundos para permitir arranques en frío de Lambda y el tiempo que tarda en arrancar la instrumentación de valor controlado.

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

`syn-nodejs-puppeteer-15.0` es el tiempo de ejecución más reciente de Synthetics para Node.js y Puppeteer. 

**importante**  
Al iniciar Synthetics `syn-nodejs-puppeteer-13.1` y versiones posteriores, el tiempo de ejecución de Synthetics usará el nuevo espacio de nombres. Migre el script de canario para usar nuevos espacio de nombres. Los espacios de nombres heredados quedarán obsoletos en un futuro lanzamiento.  
Synthetics → @aws/synthetics-puppeteer
SyntheticsLink → @aws/synthetics-link
SyntheticsLogger → @aws/synthetics-logger
SyntheticsLogHelper → @aws/synthetics-log-helper
BrokenLinkCheckerReport → @aws/synthetics-broken-link-checker-report

**importante**  
El tiempo de ejecución de Synthetics `syn-nodejs-puppeteer-11.0` y las versiones posteriores solo admiten las siguientes anulaciones de configuración para cada paso:  
 `screenshotOnStepStart` 
 `screenshotOnStepSuccess` 
 `screenshotOnStepFailure` 
 `stepSuccessMetric` 
 `stepDurationMetric` 
 `continueOnStepFailure/continueOnHttpStepFailure` 
 `stepsReport` 

Para obtener más información, consulte los siguientes temas:
+  [Registro de cambios de Puppeteer](https://pptr.dev/CHANGELOG#24375-2026-02-19) 
+  [Referencia de la API de Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.37.5/docs/api/index.md) 

**Dependencias principales**:
+ Tiempo de ejecución Node.js 22.x de Lambda
+ Puppeteer-core versión 24.37.5
+ Chromium versión 145.0.7632.77
+ Firefox, versión 147.0.4

 **Cambios en syn-nodejs-puppeteer-15.0** 
+ Se aplicaron parches de seguridad y se actualizaron las versiones de Puppeteer y del navegador.
+ Se corrigió un error por el que no se respetaba continueOnHttpStepFailure, lo que provocaba que las puestas en marcha de canarios se marcaran incorrectamente como correctas a pesar de que se producían errores en los pasos HTTP.

## Versiones de tiempo de ejecución anteriores para Node.js y Puppeteer
<a name="Previousversions-nodejs-puppeteer"></a>

Las siguientes versiones anteriores de tiempo de ejecución para Node.js y Puppeteer aún se admiten. 

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

Para obtener más información, consulte los siguientes temas:
+  [Registro de cambios de Puppeteer](https://pptr.dev/CHANGELOG#24340-2025-12-19) 
+  [Referencia de la API de Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.34.0/docs/api/index.md) 

**Dependencias principales**:
+ Tiempo de ejecución Node.js 22.x de Lambda
+ Puppeteer-core versión 24.34.0
+ Chromium versión 143.0.7499.169
+ Firefox, versión 146.x

 **Cambios en syn-nodejs-puppeteer-14.0** 
+ Se aplicaron parches de seguridad y se actualizaron las versiones de Puppeteer y del navegador.

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

`syn-nodejs-puppeteer-13.1` es el tiempo de ejecución más reciente de Synthetics para Node.js y Puppeteer. 

Para obtener más información, consulte los siguientes temas:
+  [Registro de cambios de Puppeteer](https://pptr.dev/CHANGELOG#24250-2025-10-15) 
+  [Referencia de la API de Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**Dependencias principales**:
+ Tiempo de ejecución Node.js 22.x de Lambda
+ Puppeteer-core versión 24.25.0
+ Chromium versión 142.0.7444.175
+ Firefox, versión 145.x

 **Cambios en syn-nodejs-puppeteer-13.1** 
+ Migración del espacio de nombres del tiempo de ejecución de Synthetics.
+ Las definiciones de tipos están disponibles en npm Registry. Asegúrese de que la versión del paquete de definición de tipos coincida con la versión de tiempo de ejecución de su canario.
  +  [ @aws/synthetics-puppeteer](https://www.npmjs.com/package/@aws/synthetics-puppeteer) 
  +  [ @aws/synthetics-link](https://www.npmjs.com/package/@aws/synthetics-link) 
  +  [ @aws/synthetics-broken-link-checker-report](https://www.npmjs.com/package/@aws/synthetics-broken-link-checker-report) 
  +  [ @aws/synthetics-log-helper](https://www.npmjs.com/package/@aws/synthetics-log-helper) 
  +  [ @aws/synthetics-logger](https://www.npmjs.com/package/@aws/synthetics-logger) 

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

Para obtener más información, consulte los siguientes temas:
+  [Registro de cambios de Puppeteer](https://pptr.dev/CHANGELOG#24250-2025-10-15) 
+  [Referencia de la API de Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**Dependencias principales**:
+ Tiempo de ejecución Node.js 22.x de Lambda
+ Puppeteer-core versión 24.25.0
+ Chromium versión 142.0.7444.175
+ Firefox, versión 145.x

 **Cambios en syn-nodejs-puppeteer-13.0** 
+ Se aplicaron parches de seguridad y se actualizaron las versiones de Puppeteer y del navegador.
+ Corrección de errores: se corrigió un problema de bloqueo de la extensión en tiempo de ejecución intermitente causado por el acceso simultáneo a la asignación

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

Para obtener más información, consulte los siguientes temas:
+  [Registro de cambios de Puppeteer](https://pptr.dev/CHANGELOG#24221-2025-09-23) 
+  [Referencia de la API de Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.22.1/docs/api/index.md) 

**Dependencias principales**:
+ Tiempo de ejecución Node.js 22.x de Lambda
+ Versión 24.22.1 de Puppeteer-core
+ Chromium versión 140.0.7339.185
+ Firefox, versión 143.0.1

 **Cambios en syn-nodejs-puppeteer-12.0** 
+ Se aplicaron parches de seguridad y se actualizaron las versiones de Puppeteer y del navegador.
+ Corrección de errores para la redacción de encabezados restringidos: se corrigió un problema en el que los encabezados restringidos no se redactaban en executeHttpStep() en determinadas situaciones. El comportamiento ahora es coherente con Puppeteer 10.0.
+ Corrección de errores en la configuración de includeResponseBody: se corrigió un problema en el que la generación de archivos HAR podía aplicar incorrectamente el ajuste de configuración de includeResponseBody en determinadas situaciones. HAR ahora garantiza que los cuerpos de respuesta se excluyan al ajustar la configuración.
+ Corrección del ciclo de vida de captura de solicitudes: se corrigió un problema en el que el capturador de solicitudes HTTP podía provocar una agregación continua de solicitudes en determinadas solicitudes. La grabación ahora finaliza correctamente después de la ejecución de cada paso.

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

Para obtener más información, consulte los siguientes temas:
+  [Registro de cambios de Puppeteer](https://pptr.dev/CHANGELOG) 
+  [Referencia de la API de Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**Dependencias principales**:
+ Tiempo de ejecución de Lambda Node.js 20.x
+ Puppeteer-core versión 24.15.0
+ Chromium, versión 138.0.7204.168

 **Cambios en syn-nodejs-puppeteer-11.0** 
+ Compatibilidad con varios navegadores: ahora puede ejecutar los canarios de Node.js de Puppeteer en Firefox o Chrome
+ Empaquetado simplificado: empaquete los scripts directamente bajo la raíz sin utilizar la estructura de directorios Node.js/node\$1modules
+ Integración de capturas de pantalla: haga capturas de pantalla con las funciones nativas de Puppeteer para visualizar las etapas del script de los canarios. Synthetics asocia automáticamente las capturas de pantalla con los pasos del canario y las carga en Amazon S3.
+ Consulta de registros mejorada: consulte y filtre los registros a través de la consola de Información de CloudWatch. Cada mensaje del registro incluye un `canaryRunId` único para facilitar la búsqueda.
+ Compatibilidad con archivos de configuración: defina y actualice la configuración de Synthetics mediante un archivo synthetics.json. Esta separación de la configuración de la lógica del script mejora el mantenimiento y la reutilización.
+ Compatibilidad con varias pestañas: puede crear canarios que abran varias pestañas de un navegador y acceder a las capturas de pantalla de cada pestaña. Cree flujos de trabajo de usuario con varias pestañas y varios pasos en Synthetics.
+ Correcciones de seguridad:
+ Corrección de errores en el monitoreo visual.
+ Se agregó compatibilidad con el registro JSON estructurado con niveles de registro configurables: los registros ahora se emiten en formato JSON para facilitar el análisis y las consultas en CloudWatch. El nivel de registro se puede configurar (por ejemplo, DEBUG, INFO, TRACE) mediante variables de entorno, lo que permite a los usuarios controlar el detalle según sus necesidades.
+ Compatibilidad con la sintaxis de ES

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

Para obtener más información, consulte los siguientes temas:
+  [Registro de cambios de Puppeteer](https://pptr.dev/CHANGELOG) 
+  [Referencia de la API de Puppeteer](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**Dependencias principales**:
+ Tiempo de ejecución de Lambda Node.js 20.x
+ Puppeteer-core versión 24.2.0
+ Versión 131.0.6778.264 de Chromium

 **Cambios en syn-nodejs-puppeteer-10.0** 
+ Se ha corregido el error relacionado con el cierre del navegador que tardaba demasiado.
+ Admite simulacros para el canario, lo que permite realizar ejecuciones ad hoc o realizar una actualización segura del canario.

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

**Dependencias principales**:
+ Tiempo de ejecución de Lambda Node.js 20.x
+ Versión 22.12.1 de Puppeteer-core
+ Versión 126.0.6478.126 de Chromium

**Cambios en syn-nodejs-puppeteer-9.1**: se han corregido errores relacionados con intervalos de fechas y solicitudes pendientes en archivos HAR.

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

**Dependencias principales**:
+ Tiempo de ejecución de Lambda Node.js 20.x
+ Versión 22.12.1 de Puppeteer-core
+ Versión 126.0.6478.126 de Chromium

**Cambios en syn-nodejs-puppeteer-9.0**: se ha corregido el error para habilitar las capacidades de monitoreo visual.

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

**aviso**  
Debido a un error, el tiempo de ejecución `syn-nodejs-puppeteer-8.0` no admite la supervisión visual en los valores controlados. Actualice a [syn-nodejs-puppeteer-9.0](#CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-9.0) para corregir los errores de la supervisión visual.

**importante**  
Los tiempos de ejecución de Lambda Node.js 18 y versiones posteriores utilizan AWS SDK para JavaScript V3. Si necesita migrar un canario desde un tiempo de ejecución anterior, siga el [taller de migración de aws-sdk-js-v3](https://github.com/aws-samples/aws-sdk-js-v3-workshop) en GitHub. Para obtener más información sobre la versión 3 del AWS SDK para JavaScript, consulte [este blog](https://aws.amazon.com/blogs/developer/modular-aws-sdk-for-javascript-is-now-generally-available/).

**Dependencias principales**:
+ Tiempo de ejecución de Lambda Node.js 20.x
+ Puppeteer-core versión 22.10.0
+ Chromium versión 125.0.6422.112

**Actualizaciones en syn-nodejs-puppeteer-8.0**:
+  **Compatibilidad con la autenticación multifactor** 
+ Se **corrigieron errores** relacionados con la pérdida de datos de algunos clientes del servicio en las respuestas de la versión 3 del SDK de Node.js.

## Versiones de tiempo de ejecución obsoletas para Node.js y Puppeteer.
<a name="CloudWatch_Synthetics_nodejs-puppeteer-Deprecated"></a>

Los siguientes tiempos de ejecución para Node.js y Puppeteer han quedado obsoletos. Para obtener información sobre las fechas de obsolescencia de los tiempos de ejecución, consulte [Fechas de obsolescencia del tiempo de ejecución de CloudWatch 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>

**Dependencias principales**:
+ Tiempo de ejecución de Lambda Node.js 18.x
+ Puppeteer-core versión 21.9.0
+ Chromium versión 121.0.6167.139

**Tamaño del código**:

El tamaño del código y las dependencias que puede empaquetar en este tiempo de ejecución es de 80 MB.

**Actualizaciones en syn-nodejs-puppeteer-7.0**:
+ **Versiones actualizadas de las bibliotecas agrupadas incluidas en Chromium**: las dependencias de Chromium y Puppeteer se actualizan a versiones nuevas.
**importante**  
La migración de Puppeteer 19.7.0 a Puppeteer 21.9.0 introduce cambios importantes en relación con las pruebas y los filtros. Para obtener más información, consulte las secciones de **CAMBIOS IMPORTANTES** en [puppeteer: v20.0.0](https://github.com/puppeteer/puppeteer/releases/tag/puppeteer-v20.0.0) y [puppeteer-core: v21.0.0](https://github.com/puppeteer/puppeteer/releases/tag/puppeteer-core-v21.0.0).

 **Actualización recomendada al SDK v3 de AWS** 

El tiempo de ejecución de Lambda nodejs18.x no es compatible con el SDK v2 de AWS. Se recomienda que migre al SDK v3 de AWS.

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

**Dependencias principales**:
+ Tiempo de ejecución de Lambda Node.js 18.x
+ Puppeteer-core de versión 19.7.0
+ Chromium versión 111.0.5563.146

**Cambios en syn-nodejs-puppeteer-6.2**:
+  **Versiones actualizadas de las bibliotecas agrupadas incluidas en Chromium** 
+ **Supervisión del almacenamiento efímero**: este tiempo de ejecución agrega la supervisión del almacenamiento efímero en las cuentas de los clientes.
+  **Correcciones de errores** 

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

**Dependencias principales**:
+ Tiempo de ejecución de Lambda Node.js 18.x
+ Puppeteer-core de versión 19.7.0
+ Chromium versión 111.0.5563.146

**Actualizaciones en syn-nodejs-puppeteer-6.1**:
+ **Mejoras de estabilidad**: se añadió una lógica de reintento automático para administrar los errores de lanzamiento intermitentes de Puppeteer.
+ **Actualizaciones de dependencias**: actualizaciones para algunos paquetes de dependencias de terceros.
+ **Valores controlados sin permisos de Amazon S3**: se han corregido errores para que puedan seguir funcionando los valores controlados que no tengan ningún permiso de Amazon S3. Estos valores controlados que no tengan permisos de Amazon S3 no podrán subir capturas de pantalla u otros artefactos a Amazon S3. Para obtener más información sobre permisos de valores controlados, consulte [Roles y permisos necesarios para los valores controlados](CloudWatch_Synthetics_Canaries_CanaryPermissions.md).

**importante**  
IMPORTANTE: La dependencia incluida de AWS SDK para JavaScript v2 se eliminará y se actualizará para utilizar AWS SDK para JavaScript v3 en una futura versión del tiempo de ejecución. Cuando eso ocurra, podrá actualizar las referencias de su código de valor controlado. Como alternativa, puede seguir haciendo referencia a la dependencia incluida de AWS SDK para JavaScript v2 y utilizarla agregándola como una dependencia a su archivo zip de código fuente.

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

**Dependencias principales**:
+ Tiempo de ejecución de Lambda Node.js 18.x
+ Puppeteer-core de versión 19.7.0
+ Chromium versión 111.0.5563.146

**Actualizaciones en syn-nodejs-puppeteer-6.0**:
+ **Actualización de la dependencia**: la dependencia de Node.js se ha actualizado a la versión 18.x.
+ **Compatibilidad con el modo de intercepción**: se agregó la compatibilidad con el modo de intercepción cooperativa de Puppeteer a la biblioteca de tiempos de ejecución con valores controlados de Synthetics.
+ **Cambio en el comportamiento de rastreo**: se modificó el comportamiento de rastreo predeterminado para rastrear solo las solicitudes de recuperación y xhr, y no las solicitudes de recursos. Puede habilitar el seguimiento de las solicitudes de recursos configurando la opción `traceResourceRequests`.
+ **Métrica de duración mejorada**: la métrica ` Duration` ahora excluye el tiempo de operación que utiliza el valor controlado para cargar artefactos, hacer capturas de pantalla y generar métricas de CloudWatch. Los valores de las métricas de `Duration` se notifican a CloudWatch y también se pueden ver en la consola Synthetics.
+ **Corrección de errores**: limpia el núcleo volcado que se genera cuando Chromium se bloquea durante una ejecución de valor controlado.

**importante**  
IMPORTANTE: La dependencia incluida de AWS SDK para JavaScript v2 se eliminará y se actualizará para utilizar AWS SDK para JavaScript v3 en una futura versión del tiempo de ejecución. Cuando eso ocurra, podrá actualizar las referencias de su código de valor controlado. Como alternativa, puede seguir haciendo referencia a la dependencia incluida de AWS SDK para JavaScript v2 y utilizarla agregándola como una dependencia a su archivo zip de código fuente.

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

**Dependencias principales**:
+ Tiempo de ejecución de Lambda Node.js 16.x
+ Puppeteer-core de versión 19.7.0
+ Chromium versión 111.0.5563.146

**Actualizaciones en syn-nodejs-puppeteer-5.2**:
+  **Versiones actualizadas de las bibliotecas agrupadas incluidas en Chromium** 
+  **Correcciones de errores** 

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

**Dependencias principales**:
+ Tiempo de ejecución de Lambda Node.js 16.x
+ Puppeteer-core de versión 19.7.0
+ Chromium versión 111.0.5563.146

**Correcciones de errores en syn-nodejs-puppeteer-5.1**:
+ **Corrección de errores**: este tiempo de ejecución corrige un error en ` syn-nodejs-puppeteer-5.0` por el que a los archivos HAR creados por los valores controlados les faltaban encabezados de solicitud.

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

**Dependencias principales**:
+ Tiempo de ejecución de Lambda Node.js 16.x
+ Puppeteer-core de versión 19.7.0
+ Chromium versión 111.0.5563.146

**Actualizaciones en syn-nodejs-puppeteer-5.0**:
+ **Actualización de dependencias**: la versión básica de Puppeteer-core se ha actualizado a la 19.7.0. La versión de Chromium se ha actualizado a la 111.0.5563.146.

**importante**  
La nueva versión básica de Puppeteer no es totalmente compatible con las versiones anteriores de Puppeteer. Algunos de los cambios de esta versión pueden provocar que los valores controlados existentes que utilizan funciones obsoletas de Puppeteer fallen. Para obtener más información, consulte los cambios importantes en los registros de cambios de las versiones 19.7.0 a 6.0 de Puppeteer-core, en los [registros de cambios de Puppeteer](https://github.com/puppeteer/puppeteer/releases?q=breaking&expanded=true).

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

**Dependencias principales**:
+ Tiempo de ejecución de Lambda Node.js 16.x
+ Puppeteer-core de versión 5.5.0
+ Chromium versión 92.0.4512

**Actualizaciones en syn-nodejs-puppeteer-4.0**:
+ **Actualización de la dependencia**: la dependencia de Node.js se ha actualizado a la versión 16.x.

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

**importante**  
Esta versión de tiempo de ejecución quedó obsoleta el 8 de enero de 2024. Para obtener más información, consulte [Política de soporte de versiones del tiempo de ejecución](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Relaciones principales**:
+ Tiempo de ejecución Node.js 14.x de Lambda
+ Puppeteer-core de versión 5.5.0
+ Chromium versión 92.0.4512

**Actualizaciones en syn-nodejs-puppeteer-3.9**:
+ **Actualizaciones de dependencias**: actualiza algunos paquetes de dependencias de terceros.

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

**importante**  
Esta versión de tiempo de ejecución quedó obsoleta el 8 de enero de 2024. Para obtener más información, consulte [Política de soporte de versiones del tiempo de ejecución](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Relaciones principales**:
+ Tiempo de ejecución Node.js 14.x de Lambda
+ Puppeteer-core de versión 5.5.0
+ Chromium versión 92.0.4512

**Actualizaciones en syn-nodejs-puppeteer-3.8**:
+ **Limpieza de perfiles**: los perfiles de Chromium ahora se limpian después de cada ejecución de un valor controlado.

**Correcciones de errores en syn-nodejs-puppeteer-3.8**:
+ **Correcciones de errores**: anteriormente, los valores controlados de supervisión visual a veces dejaban de funcionar correctamente después de una ejecución sin capturas de pantalla. Esto ya está resuelto.

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

**importante**  
Esta versión de tiempo de ejecución quedó obsoleta el 8 de enero de 2024. Para obtener más información, consulte [Política de soporte de versiones del tiempo de ejecución](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Relaciones principales**:
+ Tiempo de ejecución Node.js 14.x de Lambda
+ Puppeteer-core de versión 5.5.0
+ Chromium versión 92.0.4512

**Actualizaciones en syn-nodejs-puppeteer-3.7**:
+ **Mejoras del registro**: el valor controlado cargará los registros en Amazon S3 incluso si se agota el tiempo de espera o se bloquea.
+ **Reducción del tamaño de la capa de Lambda**: el tamaño de la capa de Lambda utilizada para los valores controlados se reduce en un 34 %.

**Correcciones de errores en syn-nodejs-puppeteer-3.7**:
+ **Correcciones de errores**: las fuentes en japonés, chino simplificado y chino tradicional se representarán correctamente.

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

**importante**  
Esta versión de tiempo de ejecución quedó obsoleta el 8 de enero de 2024. Para obtener más información, consulte [Política de soporte de versiones del tiempo de ejecución](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Relaciones principales**:
+ Tiempo de ejecución Node.js 14.x de Lambda
+ Puppeteer-core de versión 5.5.0
+ Chromium versión 92.0.4512

**Actualizaciones en syn-nodejs-puppeteer-3.6**:
+ **Marcas de tiempo más precisas**: la hora de inicio y la hora de parada de las ejecuciones de valores controlados ahora tienen una precisión de milisegundos.

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

**importante**  
Esta versión de tiempo de ejecución quedó obsoleta el 8 de enero de 2024. Para obtener más información, consulte [Política de soporte de versiones del tiempo de ejecución](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Relaciones principales**:
+ Tiempo de ejecución Node.js 14.x de Lambda
+ Puppeteer-core de versión 5.5.0
+ Chromium versión 92.0.4512

**Actualizaciones en syn-nodejs-puppeteer-3.5**:
+ **Dependencias actualizadas**: las únicas características nuevas de este tiempo de ejecución son las dependencias actualizadas.

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

**importante**  
Esta versión de tiempo de ejecución quedó obsoleta el 13 de noviembre de 2022. Para obtener más información, consulte [Política de soporte de versiones del tiempo de ejecución](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependencias principales**:
+ Tiempo de ejecución Node.js 12.x de Lambda 
+ Puppeteer-core de versión 5.5.0
+ Chromium versión 88.0.4298.0

**Actualizaciones en syn-nodejs-puppeteer-3.4**:
+ **Función de controlador personalizada**: ahora puede utilizar una función de controlador personalizada para los scripts de los valores controlados. Los tiempos de ejecución anteriores requerían que el punto de entrada del script incluyera `.handler`. 

  También puede colocar scripts de valores controlados en cualquier carpeta y pasar el nombre de la carpeta como parte del controlador. Por ejemplo, `MyFolder/MyScriptFile.functionname` se puede utilizar como punto de entrada.
+ **Información ampliada de archivos HAR**: ahora puede ver las solicitudes con fallas, pendientes e incompletas en los archivos HAR producidos por los valores controlados.

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

**importante**  
Esta versión de tiempo de ejecución quedó obsoleta el 13 de noviembre de 2022. Para obtener más información, consulte [Política de soporte de versiones del tiempo de ejecución](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependencias principales**:
+ Tiempo de ejecución Node.js 12.x de Lambda 
+ Puppeteer-core de versión 5.5.0
+ Chromium versión 88.0.4298.0

**Actualizaciones en syn-nodejs-puppeteer-3.3**:
+ **Más opciones de cifrado de artefactos**: para los valores controlados que utilicen este tiempo de ejecución o posterior, en lugar de utilizar una clave administrada de AWS para cifrar artefactos que el valor controlado almacena en Amazon S3, puede optar por utilizar una clave administrada por el cliente de AWS KMS o una clave administrada por Amazon S3. Para obtener más información, consulte [Cifrado de artefactos de un valor controlado](CloudWatch_Synthetics_artifact_encryption.md). 

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

**importante**  
Esta versión de tiempo de ejecución quedó obsoleta el 13 de noviembre de 2022. Para obtener más información, consulte [Política de soporte de versiones del tiempo de ejecución](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependencias principales**:
+ Tiempo de ejecución Node.js 12.x de Lambda 
+ Puppeteer-core de versión 5.5.0
+ Chromium versión 88.0.4298.0

**Actualizaciones en syn-nodejs-puppeteer-3.2**:
+ **supervisión visual con capturas de pantalla**: los valores controlados que utilizan este tiempo de ejecución o uno posterior pueden comparar una captura de pantalla que se ha tomado durante una ejecución con una versión de línea de base de la misma captura de pantalla. Si las capturas de pantalla son más diferentes que un umbral de porcentaje especificado, el valor controlado falla. Para obtener más información, consulte [Supervisión visual](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsLogger_VisualTesting) o [Proyecto de supervisión visual](CloudWatch_Synthetics_Canaries_Blueprints.md#CloudWatch_Synthetics_Canaries_Blueprints_VisualTesting). 
+ **Nuevas funciones relacionadas con información confidencial** Se puede evitar que la información confidencial aparezca en los registros de valores controlados e informes. Para obtener más información, consulte [Clase de SyntheticSloghelper](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsLogHelper).
+ **Función obsoleta** La clase ` RequestResponseLogHelper` ha quedado obsoleta en favor de otras opciones de configuración nuevas. Para obtener más información, consulte [RequestResponseLogHelper class](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**  
Esta versión de tiempo de ejecución quedó obsoleta el 13 de noviembre de 2022. Para obtener más información, consulte [Política de soporte de versiones del tiempo de ejecución](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependencias principales**:
+ Tiempo de ejecución Node.js 12.x de Lambda 
+ Puppeteer-core de versión 5.5.0
+ Chromium versión 88.0.4298.0

**Actualizaciones en syn-nodejs-puppeteer-3.1**:
+ **Capacidad para configurar métricas de CloudWatch**: con este tiempo de ejecución, puede desactivar las métricas que no se necesitan. De lo contrario, los valores controlados publican varias métricas de CloudWatch para cada ejecución de valores controlados.
+ **Vinculación de captura de pantalla**: se puede vincular una captura de pantalla a un paso de valor controlado una vez finalizado el paso. Para ello, tome la captura de pantalla mediante el comando **takeScreenshot**, con el nombre del paso al que desea asociar la captura de pantalla. Por ejemplo, puede que desee realizar un paso, agregar un tiempo de espera y, a continuación, tomar la captura de pantalla.
+ **El esquema de supervisión de latidos puede supervisar varias URL**: se puede utilizar el esquema de supervisión de latidos en la consola de CloudWatch para supervisar varias URL y ver el estado, la duración, las capturas de pantalla asociadas y el motivo del error de cada URL en el resumen de pasos del informe de ejecución del canario.

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

**importante**  
Esta versión de tiempo de ejecución quedó obsoleta el 13 de noviembre de 2022. Para obtener más información, consulte [Política de soporte de versiones del tiempo de ejecución](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependencias principales**:
+ Tiempo de ejecución Node.js 12.x de Lambda 
+ Puppeteer-core de versión 5.5.0
+ Chromium versión 88.0.4298.0

**Actualizaciones en syn-nodejs-puppeteer-3.0**:
+ **Relaciones actualizadas**: esta versión utiliza Puppeteer versión 5.5.0, Node.js 12.x y Chromium 88.0.4298.0.
+ **Acceso a buckets entre regiones**: ahora puede especificar un bucket de S3 en otra región como el bucket donde el valor controlado almacena los archivos de registro, capturas de pantalla y archivos HAR.
+ **Nuevas funciones disponibles**: esta versión añade funciones de biblioteca para recuperar el nombre del valor controlado y la versión de tiempo de ejecución de Synthetics.

  Para obtener más información, consulte [Clase de 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>

Esta sección contiene información sobre la versión de tiempo de ejecución `syn-nodejs-2.2`.

**importante**  
Esta versión de tiempo de ejecución quedó obsoleta el 28 de mayo de 2021. Para obtener más información, consulte [Política de soporte de versiones del tiempo de ejecución](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Relaciones principales**:
+ Tiempo de ejecución Node.JS 10.x de Lambda 
+ Puppeteer-core de versión 3.3.0
+ Chromium versión 83.0.4103.0

**Cambios en syn-nodejs-puppeteer-2.2**:
+ **Supervise los valores controlados como pasos HTTP**: ahora puede probar varias API en un único valor controlado. Cada API se prueba como un paso HTTP independiente, y CloudWatch Synthetics supervisa el estado de cada paso mediante métricas de pasos y el informe de pasos de CloudWatch Synthetics. CloudWatch Synthetics crea métricas de ` SuccessPercent` y `Duration` para cada paso HTTP.

  Esta funcionalidad la implementa la función **executeHttpStep(stepName, requestOptions, callback, stepConfig)**. Para obtener más información, consulte [executeHttpStep(stepName, requestOptions, [callback], [stepConfig])](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_executeHttpStep).

  El esquema del valor controlado de API se actualiza para utilizar esta nueva característica.
+ **Informes de solicitudes HTTP**: ahora se pueden ver informes detallados de solicitudes HTTP que capturan detalles como las cabeceras de solicitud y de respuesta, cuerpos de respuesta, códigos de estado, tiempos de error y rendimiento, tiempos de conexión TCP, tiempos de enlace TLS, la hora del primer byte y el tiempo de transferencia de contenido. Todas las solicitudes HTTP que utilizan el módulo HTTP o HTTPS que no se ven a simple vista se capturan aquí. Las cabeceras y el cuerpo de respuesta no se capturan de forma predeterminada, pero se pueden habilitar si se establecen opciones de configuración.
+ **Configuración global y a nivel de paso**: se pueden establecer configuraciones de CloudWatch Synthetics globales, que se aplican a todos los pasos de los canarios. También se pueden anular estas configuraciones en el nivel de paso al pasar los pares clave-valor de configuración para habilitar o desactivar determinadas opciones.

  Para obtener más información, consulte [Clase SyntheticsConfiguration](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsConfiguration).
+ **Continúe con la configuración del error del paso**: puede optar por continuar la ejecución del valor controlado cuando un paso falla . Para la función ` executeHttpStep`, esta opción está activada de forma predeterminada. Puede establecer esta opción una vez a nivel global o definirla de manera diferente por paso. 

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

**importante**  
Esta versión de tiempo de ejecución quedó obsoleta el 28 de mayo de 2021. Para obtener más información, consulte [Política de soporte de versiones del tiempo de ejecución](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Relaciones principales**:
+ Tiempo de ejecución Node.JS 10.x de Lambda 
+ Puppeteer-core de versión 3.3.0
+ Chromium versión 83.0.4103.0

**Actualizaciones en syn-nodejs-2.1**:
+ **Capturas de pantalla de comportamiento configurable**: proporciona la opción de desactivar las capturas de pantalla a través de canaries de UI. En canaries que utilizan versiones anteriores de los tiempos de ejecución, los canaries de UI siempre toman capturas de pantalla antes y después de cada paso. Con `syn-nodejs-2.1`, esto es configurable. La desactivación de las capturas de pantalla puede reducir los costes de almacenamiento de Amazon S3 y puede ayudarlo a cumplir con las normas HIPAA. Para obtener más información, consulte [Clase SyntheticsConfiguration](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsConfiguration).
+ **Personalice los parámetros de inicio de Google Chrome** Ahora puede configurar los argumentos utilizados cuando un valor controlado inicia una ventana del navegador Google Chrome. Para obtener más información, consulte [Lanzamiento (opciones)](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_LaunchOptions).

Puede haber un pequeño aumento en la duración del valor controlado al usar syn-nodejs-2.0 o uno posterior, en comparación con versiones anteriores de los tiempos de ejecución de valores controlados.

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

**importante**  
Esta versión de tiempo de ejecución quedó obsoleta el 28 de mayo de 2021. Para obtener más información, consulte [Política de soporte de versiones del tiempo de ejecución](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Relaciones principales**:
+ Tiempo de ejecución Node.JS 10.x de Lambda 
+ Puppeteer-core de versión 3.3.0
+ Chromium versión 83.0.4103.0

**Actualizaciones en syn-nodejs-2.0**:
+ **Relaciones actualizadas**: esta versión de tiempo de ejecución utiliza Puppeteer-core versión 3.3.0 y Chromium versión 83.0.4103.0
+ **Soporte para el rastreo activo de X-Ray.** Cuando un canario tiene habilitado el seguimiento, se envían los seguimientos de X-Ray para todas las llamadas que canario ha hecho que utilizan el navegador, el SDK de AWS, o módulos HTTP o HTTPS. Los valores controlados con seguimiento activado aparecen en el mapa de seguimiento de X-Ray, incluso cuando no envían solicitudes a otros servicios o aplicaciones que tienen habilitado el rastreo. Para obtener más información, consulte [Canaries y rastreo X-Ray](CloudWatch_Synthetics_Canaries_tracing.md).
+ **Informes de Synthetics**: para cada ejecución del valor controlado, CloudWatch Synthetics crea un informe llamado ` SyntheticsReport-PASSED.json` o ` SyntheticsReport-FAILED.json` que registra datos, como la hora de inicio, la hora de finalización, el estado y los errores. También registra los estados SUPERADO o NO SUPERADO de cada paso del script de valor controlado, así como los fallos y las capturas de pantalla tomadas para cada paso.
+ **Informe del verificador de enlaces que no funcionan**: la nueva versión del verificador de enlaces que no funcionan que está incluido en este tiempo de ejecución crea un informe que incluye los enlaces que se han verificado, el código de estado, el motivo del error (si existe) y las capturas de pantalla de la página fuente y la de destino.
+ **Nuevas métricas de CloudWatch**: Synthetics publica métricas denominadas `2xx`, `4xx`, `5xx`, y `RequestFailed` en el espacio de nombres de `CloudWatchSynthetics`. Estas métricas muestran el número de 200, 400, 500 y los errores de solicitud en las ejecuciones de los valores controlados. Con esta versión de tiempo de ejecución, estas métricas se notifican solo para canaries de la UI y no para canaries de la API. También se reportan para los canaries de la API que comienzan con la versión de tiempo de ejecución ` syn-nodejs-puppeteeer-2.2`.
+ **Archivos HAR ordenables**: ahora puede ordenar los archivos HAR por código de estado, tamaño de solicitud y duración.
+ **Marca de tiempo de las métricas**: las métricas de CloudWatch ahora se informan según el tiempo de invocación de Lambda en lugar de la hora de finalización de la ejecución del valor controlado.

**Corrección de errores en syn-nodejs-2.0**:
+ Se ha corregido el problema de errores de carga de artefactos de valores controlados que no se notificaban. Ahora aparecen como errores de ejecución.
+ Se ha corregido el problema con respecto a las solicitudes redirigidas (3xx) que se registraban incorrectamente como errores.
+ Se ha corregido el problema con respecto a las capturas de pantalla que se enumeraban a partir de 0. Ahora deben comenzar con 1.
+ Se ha corregido el problema con respecto a las capturas de pantalla que eran ilegibles para caracteres chinos y japoneses.

Puede haber un pequeño aumento en la duración del valor controlado al usar syn-nodejs-2.0 o uno posterior, en comparación con versiones anteriores de los tiempos de ejecución de valores controlados.

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

**importante**  
Esta versión de tiempo de ejecución quedó obsoleta el 8 de febrero de 2021. Para obtener más información, consulte [Política de soporte de versiones del tiempo de ejecución](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Relaciones principales**:
+ Tiempo de ejecución Node.JS 10.x de Lambda 
+ Puppeteer-core de versión 3.3.0
+ Chromium versión 83.0.4103.0

**Cambios en syn-nodejs-2.0-beta**:
+ **Relaciones actualizadas**: esta versión de tiempo de ejecución utiliza Puppeteer-core versión 3.3.0 y Chromium versión 83.0.4103.0
+ **Informes de Synthetics**: para cada ejecución del valor controlado, CloudWatch Synthetics crea un informe llamado ` SyntheticsReport-PASSED.json` o ` SyntheticsReport-FAILED.json` que registra datos, como la hora de inicio, la hora de finalización, el estado y los errores. También registra los estados SUPERADO o NO SUPERADO de cada paso del script de valor controlado, así como los fallos y las capturas de pantalla tomadas para cada paso.
+ **Informe del verificador de enlaces que no funcionan**: la nueva versión del verificador de enlaces que no funcionan que está incluido en este tiempo de ejecución crea un informe que incluye los enlaces que se han verificado, el código de estado, el motivo del error (si existe) y las capturas de pantalla de la página fuente y la de destino.
+ **Nuevas métricas de CloudWatch**: Synthetics publica métricas denominadas `2xx`, `4xx`, `5xx`, y `RequestFailed` en el espacio de nombres de `CloudWatchSynthetics`. Estas métricas muestran el número de 200, 400, 500 y los errores de solicitud en las ejecuciones de los valores controlados. Estas métricas se notifican solo para los canaries de la UI y no para los canarios de la API.
+ **Archivos HAR ordenables**: ahora puede ordenar los archivos HAR por código de estado, tamaño de solicitud y duración.
+ **Marca de tiempo de las métricas**: las métricas de CloudWatch ahora se informan según el tiempo de invocación de Lambda en lugar de la hora de finalización de la ejecución del valor controlado.

**Corrección de errores en syn-nodejs-2.0-beta**:
+ Se ha corregido el problema de errores de carga de artefactos de valores controlados que no se notificaban. Ahora aparecen como errores de ejecución.
+ Se ha corregido el problema con respecto a las solicitudes redirigidas (3xx) que se registraban incorrectamente como errores.
+ Se ha corregido el problema con respecto a las capturas de pantalla que se enumeraban a partir de 0. Ahora deben comenzar con 1.
+ Se ha corregido el problema con respecto a las capturas de pantalla que eran ilegibles para caracteres chinos y japoneses.

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

La primera versión de tiempo de ejecución de Synthetics es `syn-1.0`.

**Relaciones principales**:
+ Tiempo de ejecución Node.JS 10.x de Lambda
+ Puppeteer-core versión 1.14.0
+ La versión de Chromium que coincide con Puppeteer-core 1.14.0

# Versiones en tiempo de ejecución con Python y Selenium Webdriver
<a name="CloudWatch_Synthetics_Library_python_selenium"></a>

Las siguientes secciones contienen información acerca de las versiones de tiempo de ejecución de CloudWatch Synthetics para Python y Selenium Webdriver. Selenium es una herramienta de automatización de navegadores de código abierto. Para obtener más información acerca de Selenium, consulte [www.selenium.dev/](https://www.selenium.dev)

Para conocer las características y los métodos compatibles con el tiempo de ejecución de Synthetics en el marco Selenium, consulte las [clases y funciones de las bibliotecas Python y Selenium que se aplican únicamente a los canarios de la IU](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library_Python.html#CloudWatch_Synthetics_Library_Python_UIcanaries) y la [referencia de la API de Selenium](https://www.selenium.dev/selenium/docs/api/py/api.html).

La convención de nomenclatura de estas versiones de tiempo de ejecución es `syn-language -framework-majorversion. minorversion`.

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

La versión 10.0 es el tiempo de ejecución más reciente de CloudWatch Synthetics para Python y Selenium.

**Dependencias principales**:
+ Python 3.11
+ Selenium 4.32.0
+ Chromium versión 145.0.7632.77

**Cambios en syn-python-selenium-10.0 ** 
+ Se aplicaron parches de seguridad y se actualizaron las versiones del navegador.

Para obtener más información, consulte los siguientes temas:
+  [Registro de cambios de Selenium](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Documentación de Selenium](https://www.selenium.dev/selenium/docs/api/py/api.html) 

## Versiones de tiempo de ejecución anteriores para Python y Selenium
<a name="Previousversions-python-selenium"></a>

Las siguientes versiones anteriores de tiempo de ejecución para Python y Selenium aún se admiten. 

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

**Dependencias principales**:
+ Python 3.11
+ Selenium 4.32.0
+ Chromium versión 143.0.7499.169

**Cambios en syn-python-selenium-9.0 ** 
+ Se aplicaron parches de seguridad y se actualizaron las versiones del navegador.

Para obtener más información, consulte los siguientes temas:
+  [Registro de cambios de Selenium](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Documentación de 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 versión 8.0 es el tiempo de ejecución más reciente de CloudWatch Synthetics para Python y Selenium.

**Dependencias principales**:
+ Python 3.11
+ Selenium 4.32.0
+ Chromium versión 142.0.7444.175

**Cambios en syn-python-selenium-8.0 ** 
+ Se aplicaron parches de seguridad y se actualizaron las versiones de Selenium y del navegador.
+ Se modificó el nivel de registro de solicitudes de red HAR con errores de ERROR a INFO.

Para obtener más información, consulte los siguientes temas:
+  [Registro de cambios de Selenium](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Documentación de 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>

**Dependencias principales**:
+ Python 3.11
+ Selenium 4.32.0
+ Chromium, versión 138.0.7204.168

 **Cambios en syn-python-selenium-7.0 ** 
+ Se aplicaron parches de seguridad y se actualizaron las versiones de Selenium y del navegador.

Para obtener más información, consulte los siguientes temas:
+  [Registro de cambios de Selenium](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Documentación de 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>

**Dependencias principales**:
+ Python 3.11
+ Selenium 4.21.0
+ Versión 131.0.6778.264 de Chromium

 **Cambios en syn-python-selenium-6.0** 
+ Actualice de Python 3.9 a Python 3.11.

Para obtener más información, consulte los siguientes temas:
+  [Registro de cambios de Selenium](https://www.selenium.dev/blog/2024/selenium-4-21-released/) 
+  [Documentación de 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>

**Dependencias principales**:
+ Python 3.9
+ Selenium 4.21.0
+ Versión 131.0.6778.264 de Chromium

 **Cambios en syn-python-selenium-5.1** 
+ Actualizaciones menores en la emisión de métricas.
+ Admite simulacros para el canario, lo que permite realizar ejecuciones ad hoc o realizar una actualización segura del canario.

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

**Dependencias principales**:
+ Python 3.9
+ Selenium 4.21.0
+ Versión 131.0.6778.264 de Chromium

**Cambios en syn-python-selenium-5.0**:
+ Reintento automático si el navegador no se inicia.

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

**Dependencias principales**:
+ Python 3.9
+ Selenium 4.15.1
+ Versión 126.0.6478.126 de Chromium

**Cambios en syn-python-selenium-4.1**:
+ **Soluciona una vulnerabilidad de seguridad**: este tiempo de ejecución incluye una actualización para corregir la vulnerabilidad [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>

**Dependencias principales**:
+ Python 3.9
+ Selenium 4.15.1
+ Versión 126.0.6478.126 de Chromium

**Cambios en syn-python-selenium-4.0**:
+ **Se corrigieron** errores en el registro del analizador HAR.

## Versiones de tiempo de ejecución obsoletas para Python y Selenium
<a name="Deprecated-python-selenium"></a>

Las siguientes versiones anteriores de tiempo de ejecución para Python y Selenium han quedado obsoletas. Para obtener información sobre las fechas de obsolescencia de los tiempos de ejecución, consulte [Fechas de obsolescencia del tiempo de ejecución de CloudWatch 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>

**Relaciones principales**:
+ Python 3.8
+ Selenium 4.15.1
+ Chromium versión 121.0.6167.139

**Cambios en syn-python-selenium-3.0**:
+ **Versiones actualizadas de las bibliotecas agrupadas incluidas en Chromium**: la dependencia de Chromium se actualiza a una versión nueva.

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

**Relaciones principales**:
+ Python 3.8
+ Selenium 4.15.1
+ Chromium versión 111.0.5563.146

**Cambios en syn-python-selenium-2.1**:
+ **Versiones actualizadas de las bibliotecas agrupadas incluidas en Chromium**: las dependencias de Chromium y Selenium se actualizan a versiones nuevas.

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

**Relaciones principales**:
+ Python 3.8
+ Selenium 4.10.0
+ Chromium versión 111.0.5563.146

**Cambios en syn-python-selenium-2.0**:
+ **Dependencias actualizadas**: las dependencias de Chromium y Selenium se actualizan a las nuevas versiones.

**Correcciones de errores en syn-python-selenium-2.0**:
+ **Marca de tiempo agregada**: se ha agregado una marca de tiempo los registros de valores controlados.
+ **Reutilización de la sesión**: se ha corregido un error que impedía a los valores controlados reutilizar la sesión de su anterior ejecución.

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

**Relaciones principales**:
+ Python 3.8
+ Selenium 3.141.0
+ Chromium versión 92.0.4512.0

**Cambios en syn-python-selenium-1.3**:
+ **Marcas de tiempo más precisas**: la hora de inicio y la hora de parada de las ejecuciones de valores controlados ahora tienen una precisión de milisegundos.

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

**Relaciones principales**:
+ Python 3.8
+ Selenium 3.141.0
+ Chromium versión 92.0.4512.0
+ **Dependencias actualizadas**: las únicas características nuevas de este tiempo de ejecución son las dependencias actualizadas.

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

**Relaciones principales**:
+ Python 3.8
+ Selenium 3.141.0
+ Chromium versión 83.0.4103.0

**Características**:
+ **Función de controlador personalizada**: ahora puede utilizar una función de controlador personalizada para los scripts de los valores controlados. Los tiempos de ejecución anteriores requerían que el punto de entrada del script incluyera `.handler`. 

  También puede colocar scripts de valores controlados en cualquier carpeta y pasar el nombre de la carpeta como parte del controlador. Por ejemplo, `MyFolder/MyScriptFile.functionname` se puede utilizar como punto de entrada.
+ **Opciones de configuración para agregar métricas y configuraciones de error de pasos**: estas opciones ya estaban disponibles en los tiempos de ejecución para los valores controlados de Node.js. Para obtener más información, consulte  [Clase SyntheticsConfiguration](CloudWatch_Synthetics_Canaries_Library_Python.md#CloudWatch_Synthetics_Library_SyntheticsConfiguration_Python) .
+ **Argumentos personalizados en Chrome**: ahora puede abrir un navegador en el modo de incógnito o pasar con la configuración del servidor proxy. Para obtener más información, consulte [Chrome()](CloudWatch_Synthetics_Canaries_Library_Python.md#CloudWatch_Synthetics_Library_Python_Chrome).
+ **Buckets de artefactos de varias regiones**: un valor controlado puede almacenar sus artefactos en un bucket de Amazon S3 de una región diferente.
+ **Correcciones de errores, incluida una corrección para el problema `index.py`**: con los tiempos de ejecución anteriores, un archivo de valor controlado denominado ` index.py` causaba excepciones porque entraba en conflicto con el nombre del archivo de la biblioteca. Este problema ya está resuelto.

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

**Relaciones principales**:
+ Python 3.8
+ Selenium 3.141.0
+ Chromium versión 83.0.4103.0

**Características**:
+ **Compatibilidad con Selenium**: puede escribir scripts de valores controlados mediante el marco de prueba de Selenium. Puede llevar los scripts de Selenium desde otro lugar a CloudWatch Synthetics con cambios mínimos, y funcionarán con servicios de AWS.

# Versiones de tiempo de ejecución con Node.js
<a name="CloudWatch_Synthetics_Library_Nodejs"></a>

La siguiente sección contiene información acerca de las versiones de tiempo de ejecución de CloudWatch Synthetics para Node.js. Este tiempo de ejecución no incluye ningún navegador ni marco.

La convención de nomenclatura de estas versiones de tiempo de ejecución es `syn-language -majorversion.minorversion`.

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

**importante**  
Al iniciar Synthetics `syn-nodejs-3.1` y versiones posteriores, el tiempo de ejecución de Synthetics usará el nuevo espacio de nombres. Migre el script de canario para usar el nuevo espacio de nombres. El espacio de nombres heredado quedará obsoleto en un futuro lanzamiento.  
q@amzn/synthetics-core → @aws/synthetics-core

**Dependencias principales**:
+ Tiempo de ejecución de AWS Lambda: Node.js 22.x

 **Cambios en syn-nodejs-4.1** 
+ Actualice `fast-xml-parser` a la versión 5.5.7 para corregir las siguientes CVE:
  + CVE-2026-25128
  + CVE-2026-25896
  + CVE-2026-26278
  + CVE-2026-27942
  + CVE-2026-33036

## Versiones de tiempo de ejecución anteriores para Node.js
<a name="Previousversions-nodejs"></a>

Las siguientes versiones de tiempo de ejecución anteriores para Node.js aún se admiten. 

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

**Dependencias principales**:
+ Tiempo de ejecución de AWS Lambda: Node.js 22.x

 **Cambios en syn-nodejs-4.0** 
+ Parches de seguridad aplicados. 

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

**importante**  
Al iniciar Synthetics `syn-nodejs-3.1` y versiones posteriores, el tiempo de ejecución de Synthetics usará el nuevo espacio de nombres. Migre el script de canario para usar el nuevo espacio de nombres. El espacio de nombres heredado quedará obsoleto en un futuro lanzamiento.  
q@amzn/synthetics-core → @aws/synthetics-core

**Dependencias principales**:
+ Tiempo de ejecución de AWS Lambda: Node.js 20.x

 **Cambios en syn-nodejs-3.1** 
+ Migración del espacio de nombres del tiempo de ejecución de Synthetics. 
+ La definición de tipo está disponible en [npm Registry](https://www.npmjs.com/package/@aws/synthetics-core). Asegúrese de que la versión del paquete de definición de tipos coincida con la versión de tiempo de ejecución de su canario.

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

**Dependencias principales**:
+ Tiempo de ejecución de AWS Lambda: Node.js 20.x

 **Cambios en syn-nodejs-3.0** 
+ Compatibilidad con un esquema de varias comprobaciones. 

# Política de soporte de versiones del tiempo de ejecución
<a name="CloudWatch_Synthetics_Runtime_Support_Policy"></a>

Las versiones de tiempo de ejecución de Synthetics están sujetas a operaciones de mantenimiento y actualizaciones de seguridad. Cuando cualquier componente de una versión de tiempo de ejecución deja de ser compatible, dicha versión de tiempo de ejecución de Synthetics queda obsoleta.

No puede crear canaries nuevos con versiones de tiempo de ejecución obsoletas. Los Canaries que utilizan tiempos de ejecución obsoletos siguen ejecutándose. Puede detener, iniciar y eliminar estos canaries. Para actualizar un valor controlado existente que utiliza versiones de tiempo de ejecución obsoletas, actualícelo de forma que utilice una versión de tiempo de ejecución compatible.

CloudWatch Synthetics le notifica por email si tiene canaries que utilizan tiempos de ejecución programados para quedar obsoletos en los próximos 60 días. Se recomienda que migre los canaries a una versión de tiempo de ejecución compatible para beneficiarse de las nuevas mejoras de funcionalidad, seguridad y de rendimiento que se incluyen en las versiones más recientes. 

## Fechas de obsolescencia del tiempo de ejecución de CloudWatch Synthetics
<a name="runtime_deprecation_dates"></a>

La siguiente tabla enumera la fecha de obsolescencia de cada tiempo de ejecución de CloudWatch Synthetics que se encuentra obsoleto.


| Versión de tiempo de ejecución | Fecha de caducidad | 
| --- | --- | 
|   `syn-python-selenium-5.1`   |  3 de febrero de 2026  | 
|   `syn-python-selenium-5.0`   |  3 de febrero de 2026  | 
|   `syn-python-selenium-4.1`   |  3 de febrero de 2026  | 
|   `syn-python-selenium-4.0`   |  3 de febrero de 2026  | 
|   `syn-nodejs-puppeteer-7.0`   |  22 de enero de 2026  | 
|   `syn-nodejs-puppeteer-6.2`   |  22 de enero de 2026  | 
|   `syn-nodejs-puppeteer-5.2`   |  22 de enero de 2026  | 
|   `syn-python-selenium-3.0`   |  22 de enero de 2026  | 
|   `syn-python-selenium-2.1`   |  22 de enero de 2026  | 
|   `syn-nodejs-puppeteer-6.1`   |  8 de marzo de 2024  | 
|   `syn-nodejs-puppeteer-6.0`   |  8 de marzo de 2024  | 
|   `syn-nodejs-puppeteer-5.1`   |  8 de marzo de 2024  | 
|   `syn-nodejs-puppeteer-5.0`   |  8 de marzo de 2024  | 
|   `syn-nodejs-puppeteer-4.0`   |  8 de marzo de 2024  | 
|   `syn-nodejs-puppeteer-3.9`   |  8 de enero de 2024  | 
|   `syn-nodejs-puppeteer-3.8`   |  8 de enero de 2024  | 
|   `syn-python-selenium-2.0`   |  8 de marzo de 2024  | 
|   `syn-python-selenium-1.3`   |  8 de marzo de 2024  | 
|   `syn-python-selenium-1.2`   |  8 de marzo de 2024  | 
|   `syn-python-selenium-1.1`   |  8 de marzo de 2024  | 
|   `syn-python-selenium-1.0`   |  8 de marzo de 2024  | 
|   `syn-nodejs-puppeteer-3.7`   |  8 de enero de 2024  | 
|   `syn-nodejs-puppeteer-3.6`   |  8 de enero de 2024  | 
|   `syn-nodejs-puppeteer-3.5`   |  8 de enero de 2024  | 
|   `syn-nodejs-puppeteer-3.4`   |  13 de noviembre de 2022  | 
|   `syn-nodejs-puppeteer-3.3`   |  13 de noviembre de 2022  | 
|   `syn-nodejs-puppeteer-3.2`   |  13 de noviembre de 2022  | 
|   `syn-nodejs-puppeteer-3.1`   |  13 de noviembre de 2022  | 
|   `syn-nodejs-puppeteer-3.0`   |  13 de noviembre de 2022  | 
|   `syn-nodejs-2.2`   |  28 de mayo de 2021  | 
|   `syn-nodejs-2.1`   |  28 de mayo de 2021  | 
|   `syn-nodejs-2.0`   |  28 de mayo de 2021  | 
|   `syn-nodejs-2.0-beta`   |  8 de febrero de 2021  | 
|   `syn-1.0`   |  28 de mayo de 2021  | 

# Actualización de las versiones del tiempo de ejecución
<a name="CloudWatch_Synthetics_Runtime_Version_Update"></a>

Se puede actualizar la versión en tiempo de ejecución de un valor controlado mediante la consola de CloudWatch, AWS CloudFormation, AWS CLI o el SDK de AWS. Cuando utilice la consola de CloudWatch, puede actualizar hasta cinco canarios a la vez si los selecciona en la página de la lista de canarios y, a continuación, elige **Acciones**, **Actualizar tiempo de ejecución**.

Puede verificar la actualización del tiempo de ejecución probándola antes de confirmarla. Al actualizar las versiones de tiempo de ejecución, elija las opciones **Iniciar simulacro** o **Validar y guardar más tarde** en la consola de CloudWatch para crear un simulacro del canario original junto con los cambios que haya realizado en la configuración. El simulacro actualizará y ejecutará el canario para validar si la actualización del tiempo de ejecución es segura para este. Una vez que haya verificado el canario con la nueva versión de tiempo de ejecución, puede actualizar su versión del tiempo de ejecución. Para obtener más información, consulte [Actualizaciones seguras del canario](performing-safe-canary-upgrades.md).

De otro modo, puede verificar la actualización clonando primero el canario mediante la consola de CloudWatch y actualizando la versión de tiempo de ejecución. Esto crea otro valor controlado que es un clon del valor controlado original. Una vez que haya verificado el valor controlado con la nueva versión de tiempo de ejecución, puede actualizar la versión de tiempo de ejecución del valor controlado original y eliminar el valor controlado clon.

 También puede actualizar varios canaries si se utiliza un script de actualización. Para obtener más información, consulte [Script de actualización en tiempo de ejecución de valores controlados](#CloudWatch_Synthetics_Canaries_upgrade_script).

Si se actualiza un valor controlado y falla, consulte [Solución de problemas de un valor controlado](CloudWatch_Synthetics_Canaries_Troubleshoot.md).

## Script de actualización en tiempo de ejecución de valores controlados
<a name="CloudWatch_Synthetics_Canaries_upgrade_script"></a>

Para actualizar un script de valor controlado a una versión compatible de tiempo de ejecución, utilice el siguiente script.

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

# Escritura de un script de valor controlado
<a name="CloudWatch_Synthetics_Canaries_WritingCanary"></a>

En las siguientes secciones, se explica cómo escribir un script de canario y cómo integrar un canario con otros servicios de AWS y con bibliotecas y dependencias externas.

**Topics**
+ [Escritura de un script de canario mediante el tiempo de ejecución de Java](Synthetics_WritingCanary_Java.md)
+ [Escritura de un script de canario de Node.js mediante el tiempo de ejecución de Playwright](Synthetics_WritingCanary_Nodejs_Playwright.md)
+ [Escritura de un script de canario de Node.js mediante el tiempo de ejecución de Puppeteer](CloudWatch_Synthetics_Canaries_WritingCanary_Nodejs_Pup.md)
+ [Escritura de un script de valor controlado Python](CloudWatch_Synthetics_Canaries_WritingCanary_Python.md)
+ [Escritura de una configuración JSON para un esquema de comprobaciones múltiples de Node.js](CloudWatch_Synthetics_WritingCanary_Multichecks.md)

# Escritura de un script de canario mediante el tiempo de ejecución de Java
<a name="Synthetics_WritingCanary_Java"></a>

**Topics**
+ [Estructura de proyecto Java para un canario](#Synthetics_canary_Java_package)
+ [Empaquetado del proyecto para un canario](#Synthetics_canary_Java_package_canary)
+ [Nombre del controlador](#Synthetics_canary_Java_handler)
+ [Configuraciones de CloudWatch Synthetics](#Synthetics_canary_Java_config)
+ [Variables de entorno de CloudWatch Synthetics](#Synthetics_canary_Java_variables)

## Estructura de proyecto Java para un canario
<a name="Synthetics_canary_Java_package"></a>

Para crear un canario en Java, debe escribir el código, compilarlo e implementar los artefactos compilados en Synthetics. Puede inicializar un proyecto de Lambda en Java de varias maneras. Por ejemplo, puede usar una configuración de proyecto Java estándar en su IDE preferido, como IntelliJ IDEA o Visual Studio Code. Si lo prefiere, puede crear la estructura de archivos necesaria de forma manual.

Un proyecto de Synthetics Java contiene la siguiente estructura general:

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

Puede usar Maven o Gradle para crear su proyecto y administrar las dependencias.

En la estructura anterior, la clase `ExampleCanary` es el punto de entrada o el controlador del canario.

 **Ejemplo de clase de canario de Java** 

Este ejemplo es para un canario que realiza una solicitud GET a una URL almacenada en la variable de entorno *TESTING\$1URL* de Lambda. El canario no utiliza ninguno de los métodos proporcionados por el tiempo de ejecución de 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);
      }
  }
}
```

Se recomienda encarecidamente modularizar sus canarios utilizando la función `executeStep` de biblioteca proporcionada por Synthetics. El canario realiza llamadas `get` a dos URL independientes obtenidas de las variables de entorno URL1 y URL2.

**nota**  
Para utilizar la funcionalidad `executeStep`, el método de manejo del canario debe incluir un parámetro del tipo Synthetics, como se muestra a continuación. 

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

## Empaquetado del proyecto para un canario
<a name="Synthetics_canary_Java_package_canary"></a>

Synthetics acepta el código de un canario de Java en formato *zip*. El zip consta de los archivos de clases para el código del canario, los jars para cualquier dependencia de terceros y el archivo de configuración de Synthetics.

Un zip de Synthetics Java contiene la siguiente estructura general.

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

Para crear este zip a partir de la estructura de proyecto anterior, puede usar gradle (build.gradle) o maven (pom.xml). A continuación se muestra un ejemplo.

Para obtener información sobre las dependencias o interfaces en tiempo de compilación de la biblioteca de Synthetics, consulte el README en [aws-cloudwatch-synthetics-sdk-java](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"
}
```

## Nombre del controlador
<a name="Synthetics_canary_Java_handler"></a>

El nombre del controlador es el punto de entrada para el canario. Para el tiempo de ejecución de Java, el controlador tiene el siguiente formato.

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

## Configuraciones de CloudWatch Synthetics
<a name="Synthetics_canary_Java_config"></a>

Para poder configurar el comportamiento del tiempo de ejecución de Synthetics Java, proporcione un archivo de configuración JSON opcional denominado `synthetics.json`. Este archivo debe empaquetarse en el directorio raíz del zip del paquete. Aunque un archivo de configuración es opcional, si no se proporciona uno o falta una clave de configuración, CloudWatch asume los valores predeterminados.

Los siguientes son los valores de configuración admitidos y sus valores predeterminados.

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

 **Configuraciones de pasos** 
+ *continueOnStepFailure*: determina si un script debe continuar incluso después de que se haya producido un error en un paso. El valor predeterminado es false.
+ *stepSuccessMetric*: determina si se emite la métrica ` SuccessPercent` de un paso. La métrica `SuccessPercent` de un paso es *100* para la puesta en marcha de canarios si el paso es correcto y *0* si se produce un error en el paso. El valor predeterminado es *true*.
+ *stepDurationMetric*: determina si se emite la métrica *Duration* de un paso. La métrica *Duration* se emite como una duración (en milisegundos) de la ejecución del paso. El valor predeterminado es *true*.

 **Configuraciones de registros** 

Se aplica a los registros generados por CloudWatch Synthetics. Controla el nivel de detalle de los registros de solicitudes y respuestas.
+ *logRequest*: especifica si se debe registrar cada solicitud en los registros de canarios. El valor predeterminado es false.
+ *logResponse*: especifica si se debe registrar cada respuesta en los registros de canarios. El valor predeterminado es false.

 **Configuraciones métricas HTTP** 

Configuraciones de métricas relacionadas con el recuento de solicitudes de red con distintos códigos de estado HTTP, emitidas por CloudWatch Synthetics para este canario.
+ *metric\$12xx*: especifica si se debe emitir la métrica *2xx* (con la dimensión CanaryName) para este canario. El valor predeterminado es *true*.
+ *metric\$14xx*: especifica si se debe emitir la métrica *4xx* (con la dimensión CanaryName) para este canario. El valor predeterminado es *true*.
+ *metric\$15xx*: especifica si se debe emitir la métrica *5xx* (con la dimensión CanaryName) para este canario. El valor predeterminado es *true*.
+ *aggregated2xxMetric*: especifica si se debe emitir la métrica *2xx* (sin la dimensión CanaryName) para este canario. El valor predeterminado es *true*.
+ *aggregated4xxMetric*: especifica si se debe emitir la métrica *4xx* (sin la dimensión CanaryName) para este canario. El valor predeterminado es *true*.
+ *aggregated5xxMetric*: especifica si se debe emitir la métrica *5xx* (sin la dimensión CanaryName) para este canario. El valor predeterminado es *true*.

 **Configuraciones de métricas de canarios** 

Configuraciones para otras métricas emitidas por CloudWatch Synthetics.
+ *failedCanaryMetric*: Analizador de acceso a la red especifica si se debe emitir la métrica *Failed* (con la dimensión CanaryName) para este canario. El valor predeterminado es *true*.
+ *aggregatedFailedCanaryMetric*: especifica si se debe emitir la métrica *Failed* (sin la dimensión CanaryName) para este canario. El valor predeterminado es *true*.

## Variables de entorno de CloudWatch Synthetics
<a name="Synthetics_canary_Java_variables"></a>

Puede configurar el nivel y el formato de los registros mediante variables de entorno.

 **Formato de registro** 

El tiempo de ejecución de CloudWatch Synthetics Java crea registros de CloudWatch para cada ejecución de canarios. Los registros se escriben en formato JSON para facilitar la consulta. Si lo desea, puede cambiar el formato de registro a *TEXT*.
+ *Nombre de variable de entorno*: CW\$1SYNTHETICS\$1LOG\$1FORMAT
+ *Valores admitidos*: JSON, TEXT
+ *Predeterminado*: JSON

 **Niveles de registro** 
+ *Nombre de variable de entorno*: CW\$1SYNTHETICS\$1LOG\$1LEVEL
+ *Valores admitidos*: TRACE, DEBUG, INFO, WARN, ERROR, FATAL
+ *Predeterminado*: INFO

Además de las variables de entorno anteriores, se añade una variable de entorno predeterminada para el tiempo de ejecución de Java. Añada la variable de entorno `AWS_LAMBDA-EXEC_WRAPPER` a su función y establezca su valor en `/opt/synthetics-otel-instrument`. Esta variable de entorno modifica el comportamiento de inicio de la función para la telemetría. Si esta variable de entorno ya existe, asegúrese de que esté establecida en el valor requerido.

# Escritura de un script de canario de Node.js mediante el tiempo de ejecución de Playwright
<a name="Synthetics_WritingCanary_Nodejs_Playwright"></a>

**Topics**
+ [Empaquetado de los archivos de canarios de Node.js para el tiempo de ejecución de Playwright](#Synthetics_canary_Nodejs_Playwright_package)
+ [Cambio de un script de Playwright existente para usarlo como canario de CloudWatch Synthetics](#CloudWatch_Synthetics_canary_edit_Playwright_script)
+ [Configuraciones de CloudWatch Synthetics](#Synthetics_canary_configure_Playwright_script)

## Empaquetado de los archivos de canarios de Node.js para el tiempo de ejecución de Playwright
<a name="Synthetics_canary_Nodejs_Playwright_package"></a>

 El script de canarios incluye un archivo `.js` (sintaxis de CommonJS) o `.mjs` (sintaxis de ES) que contiene el código del controlador de Synthetics, junto con los paquetes y módulos adicionales de los que depende el código. Los scripts creados en formato ES (ECMAScript) deben usar la extensión .mjs o incluir un archivo package.json con el conjunto de campos “type”: “module”. A diferencia de otros tiempos de ejecución, como Node.js Puppeteer, no es necesario guardar los scripts en una estructura de carpetas específica. Puede empaquetar los scripts de manera directa. Utilice la utilidad de compresión de `zip` que prefiera para crear un archivo `.zip` con el archivo del controlador en la raíz. Si el script del canario depende de paquetes o módulos adicionales que no se encuentran incluidos en el tiempo de ejecución de Synthetics, puede agregar estas dependencias al archivo `.zip`. Para ello, puede instalar las bibliotecas necesarias de la función en el directorio `node_modules` mediante la ejecución del comando `npm install`. Los siguientes comandos de la CLI crean un archivo `.zip` llamado `my_deployment_package.zip`, que contiene el archivo `index.js` o `index.mjs` (controlador de Synthetics) y sus dependencias. En el ejemplo, las dependencias se instalan mediante el administrador de paquetes `npm`.

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

Cree un archivo `.zip` con el contenido de la carpeta del proyecto en la raíz. Utilice la opción `r` (recursiva), como se muestra en el siguiente ejemplo, para asegurarse de que el archivo `zip` comprime las subcarpetas.

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

Agregue un archivo de configuración de Synthetics para configurar el comportamiento de CloudWatch Synthetics. Puede crear un archivo `synthetics.json` y guardarlo en la misma ruta que el archivo de punto de entrada o controlador.

Si lo desea, también puede almacenar el archivo de punto de entrada en la estructura de carpetas que desee. Sin embargo, asegúrese de que la ruta de la carpeta esté especificada en el nombre del controlador.

 **Nombre del controlador** 

Asegúrese de establecer el punto de entrada del script (controlador) del valor controlado como ` myCanaryFilename.functionName` para que coincida con el nombre de archivo del punto de entrada del script. También puede almacenar el canario en una carpeta independiente, como ` myFolder/my_canary_filename.mjs`. Si lo almacena en una carpeta independiente, especifique esa ruta en el punto de entrada del script, como ` myFolder/my_canary_filename.functionName`.

## Cambio de un script de Playwright existente para usarlo como canario de CloudWatch Synthetics
<a name="CloudWatch_Synthetics_canary_edit_Playwright_script"></a>

Puede editar un script existente para Node.js y Playwright para utilizarlo como canario. Para obtener más información sobre Playwight, consulte la documentación de la [biblioteca de Playwight](https://playwright.dev/docs/api/class-playwright). 

Puede utilizar el siguiente script de Playwright que está guardado en un archivo ` 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();
```

Para convertir el script, haga lo siguiente:

1. Crear y exportar una función de `handler`. El controlador es la función de punto de entrada para el script. Puede elegir cualquier nombre para la función de controlador, pero la función que se utilice en el script debe ser la misma que en el controlador del canario. Si el nombre de su script es `exampleCanary.mjs` y el nombre de la función del controlador es `myhandler`, el controlador del canario de llamará `exampleCanary.myhandler`. En el siguiente ejemplo, el nombre de la función del controlador es `handler`.

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

1. Importe `Synthetics Playwright module` como una dependencia.

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

1. Inicie un navegador con la función `Launch` de Synthetics.

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

1. Cree una nueva página de Playwright mediante la función `newPage` de Synthetics.

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

El script ya está listo para ejecutarlo como un canario de Synthetics. A continuación, se muestra el script actualizado:

 **Script actualizado en formato ES6** 

El archivo de script guardado con una extensión `.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 actualizado en formato CommonJS** 

El archivo de script guardado con una extensión `.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();
  }
};
```

## Configuraciones de CloudWatch Synthetics
<a name="Synthetics_canary_configure_Playwright_script"></a>

Para poder configurar el comportamiento del tiempo de ejecución de Synthetics Playwright, proporcione un archivo de configuración JSON opcional denominado `synthetics.json`. Este archivo debe empaquetarse en la misma ubicación que el archivo del controlador. Aunque un archivo de configuración es opcional, si no se proporciona un archivo de configuración o falta una clave de configuración, CloudWatch asume los valores predeterminados.

 **Empaquetado del archivo de configuración** 

Los siguientes son los valores de configuración admitidos y sus valores predeterminados.

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

 **Configuraciones de pasos** 
+ `screenshotOnStepStart`: determina si Synthetics debe hacer una captura de pantalla antes de que comience el paso. El valor predeterminado es `true`. 
+ `screenshotOnStepSuccess`: determina si Synthetics debe hacer una captura de pantalla después de que un paso se haya completado correctamente. El valor predeterminado es `true`. 
+ `screenshotOnStepFailure`: determina si Synthetics debe hacer una captura de pantalla después de que se haya producido un error en un paso. El valor predeterminado es `true`. 
+ `continueOnStepFailure`: determina si un script debe continuar incluso después de que se haya producido un error en un paso. El valor predeterminado es `false`. 
+ `stepSuccessMetric`: determina si se emite la métrica ` SuccessPercent` de un paso. La métrica `SuccessPercent` de un paso es `100` para la ejecución del canario si el paso es correcto y `0` si se produce un error en el paso. El valor predeterminado es `true`. 
+ `stepDurationMetric`: determina si se emite la métrica `Duration` de un paso. La métrica `Duration` se emite como una duración (en milisegundos) de la ejecución del paso. El valor predeterminado es `true`.

 **Configuraciones de informes** 

Incluye todos los informes generados por CloudWatch Synthetics, como un archivo HAR y un informe de pasos de Synthetics. Los campos de redacción de datos confidenciales `restrictedHeaders` y `restrictedUrlParameters` también se aplican a los registros generados por Synthetics. 
+ `includeRequestHeaders`: si se deben incluir encabezados de solicitud en el informe. El valor predeterminado es `false`. 
+ `includeResponseHeaders`: si se deben incluir encabezados de respuesta en el informe. El valor predeterminado es `false`.
+ `includeUrlPassword`: si se debe incluir una contraseña que aparezca en la dirección URL. De manera predeterminada, las contraseñas que aparecen en las direcciones URL se eliminan de los registros e informes para evitar la divulgación de información confidencial. El valor predeterminado es `false` . 
+ `includeRequestBody`: si se debe incluir el cuerpo de la solicitud en el informe. El valor predeterminado es `false`. 
+ `includeResponseBody`: si se debe incluir el cuerpo de respuesta en el informe. El valor predeterminado es `false`. 
+ `restrictedHeaders`: lista de valores de encabezado que se deben ignorar si se incluyen encabezados. Esto aplica a las cabeceras de solicitud y respuesta. Por ejemplo, para poder ocultar sus credenciales, pase `includeRequestHeaders` como verdadero y `restrictedHeaders` como `['Authorization']`. 
+ `restrictedUrlParameters`: lista de la ruta URL o los parámetros de consulta que se van a editar. Esto aplica a las URL que aparecen en registros, informes y errores. El parámetro no distingue entre mayúsculas y minúsculas. Puede pasar un asterisco (`*`) como un valor para editar todos los valores de ruta de URL y los parámetros de consulta. El valor predeterminado es una matriz vacía. 
+ `har`: determina si se debe generar un archivo HTTP (HAR). El valor predeterminado es `true`.

A continuación, se muestra un ejemplo de un archivo de configuraciones de informe.

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

 **Configuraciones de registros** 

Se aplica a los registros generados por CloudWatch Synthetics. Controla el nivel de detalle de los registros de solicitudes y respuestas.
+ `logRequest`: si se debe registrar cada solicitud en los registros de canarios. Para canaries de UI, esto registra cada solicitud que el navegador envía. El valor predeterminado es ` false`. 
+ `logResponse`: si se debe registrar cada respuesta en los registros de canarios. Para canaries de UI, esto registra todas las respuestas que el navegador recibe. El valor predeterminado es ` false`. 
+ `logRequestBody`: si se deben registrar los cuerpos de la solicitud junto con las solicitudes en los registros de canarios. Esta configuración sólo aplica si `logRequest` es verdadero. El valor predeterminado es `false`. 
+ `logResponseBody`: si se deben registrar los cuerpos de respuesta junto con las solicitudes en los registros de canarios. Esta configuración sólo aplica si `logResponse` es verdadero. El valor predeterminado es `false`. 
+ `logRequestHeaders`: si se deben registrar encabezados de solicitud junto con las solicitudes en registros de canarios. Esta configuración sólo aplica si ` logRequest` es verdadero. El valor predeterminado es `false`. 
+ `logResponseHeaders`: si se deben registrar encabezados de respuesta junto con las respuestas en los registros de canarios. Esta configuración sólo aplica si ` logResponse` es verdadero. El valor predeterminado es `false`. 

 **Configuraciones métricas HTTP** 

Configuraciones de métricas relacionadas con el recuento de solicitudes de red con distintos códigos de estado HTTP, emitidas por CloudWatch Synthetics para este canario.
+ `metric_2xx`: si se debe emitir la métrica `2xx` (con la dimensión `CanaryName`) para este canario. El valor predeterminado es ` true`. 
+ `metric_4xx`: si se debe emitir la métrica `4xx` (con la dimensión `CanaryName`) para este canario. El valor predeterminado es ` true`. 
+ `metric_5xx`: si se debe emitir la métrica `5xx` (con la dimensión `CanaryName`) para este canario. El valor predeterminado es ` true`. 
+ `failedRequestsMetric`: si se debe emitir la métrica ` failedRequests` (con la dimensión `CanaryName`) para este canario. El valor predeterminado es `true`. 
+ `aggregatedFailedRequestsMetric`: si se debe emitir la métrica ` failedRequests` (sin la dimensión `CanaryName`) para este canario. El valor predeterminado es `true`. 
+ `aggregated2xxMetric`: si se debe emitir la métrica `2xx` (sin la dimensión `CanaryName`) para este canario. El valor predeterminado es `true`. 
+ `aggregated4xxMetric`: si se debe emitir la métrica `4xx` (sin la dimensión `CanaryName`) para este canario. El valor predeterminado es `true`. 
+ `aggregated5xxMetric`: si se debe emitir la métrica `5xx` (sin la dimensión `CanaryName`) para este canario. El valor predeterminado es `true`. 

 **Configuraciones de métricas de canarios** 

Configuraciones para otras métricas emitidas por CloudWatch Synthetics.
+ `failedCanaryMetric`: si se debe emitir la métrica `Failed` (con la dimensión `CanaryName`) para este canario. El valor predeterminado es ` true`. 
+ `aggregatedFailedCanaryMetric`: si se debe emitir la métrica ` Failed` (sin la dimensión `CanaryName`) para este canario. El valor predeterminado es `true`. 

 **Otras configuraciones** 
+ `userAgent`: una cadena para agregarla al agente de usuario. El agente de usuario es una cadena que se incluye en el encabezado de la solicitud e identifica el navegador en los sitios web que visita cuando se utiliza el navegador sin periféricos. CloudWatch Synthetics agrega automáticamente `CloudWatchSynthetics/canary-arn to the user agent`. La configuración especificada se adjunta al agente de usuario generado. El valor predeterminado del agente de usuario que se debe adjuntar es una cadena vacía (`""`).

### Variables de entorno de CloudWatch Synthetics
<a name="Synthetics_canary_Nodejs_Playwright_script"></a>

Configure el nivel y el formato de los registros mediante variables de entorno.

 **Formato de registro** 

El tiempo de ejecución de CloudWatch Synthetics Playwright crea registros de CloudWatch para cada ejecución de canarios. Los registros se escriben en formato JSON para facilitar la consulta. Si lo desea, puede cambiar el formato de registro a `TEXT`.
+ `Environment variable name`: CW\$1SYNTHETICS\$1LOG\$1FORMAT 
+ `Supported values`: JSON, TEXT 
+ `Default`: JSON 

 **Niveles de registro** 

Si bien habilitar el modo `Debug` aumenta el nivel de detalle, puede resultar útil para solucionar problemas.
+ `Environment variable name`: CW\$1SYNTHETICS\$1LOG\$1LEVEL
+ `Supported values`: TRACE, DEBUG, INFO, WARN, ERROR, FATAL 
+ `Default`: INFO

# Escritura de un script de canario de Node.js mediante el tiempo de ejecución de Puppeteer
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Nodejs_Pup"></a>

**Topics**
+ [Creación de un valor controlado de CloudWatch Synthetics desde cero](#CloudWatch_Synthetics_Canaries_write_from_scratch)
+ [Empaquetado de los archivos de valores controlados de Node.js](#CloudWatch_Synthetics_Canaries_package)
+ [Cambio de un script de Puppeteer existente para usarlo como valor controlado de Synthetics](#CloudWatch_Synthetics_Canaries_modify_puppeteer_script)
+ [Variables de entorno](#CloudWatch_Synthetics_Environment_Variables)
+ [Integración del valor controlado con otros servicios de AWS](#CloudWatch_Synthetics_Canaries_AWS_integrate)
+ [Forzar al valor controlado para que utilice una dirección IP estática](#CloudWatch_Synthetics_Canaries_staticIP)

## Creación de un valor controlado de CloudWatch Synthetics desde cero
<a name="CloudWatch_Synthetics_Canaries_write_from_scratch"></a>

Aquí hay un ejemplo de script mínimo de valor controlado de Synthetics. Este script pasa como una ejecución correcta y devuelve una cadena. Para ver el aspecto de un valor controlado erróneo, cambie `let fail = false;` a `let fail = true;`. 

Debe definir una función de punto de entrada para el script de valor controlado. Para ver cómo se cargan los archivos en la ubicación de Amazon S3 especificada como `ArtifactS3Location` del canario, cree estos archivos en la carpeta `/tmp`. Todos los artefactos de canarios deben almacenarse en el directorio `/tmp`, ya que es el único en el que se puede escribir. Asegúrese de que la ruta de la captura de pantalla esté establecida en `/tmp` para todas las capturas de pantalla u otros archivos creados por el script. Synthetics carga los archivos automáticamente de ` /tmp` en un bucket de S3.

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

Después de que el script se ejecuta, el estado superado o no superado y las métricas de duración se ejecutan en CloudWatch y los archivos bajo `/tmp` se cargan en un bucket de 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();
};
```

A continuación, expandiremos el script para usar el registro de Synthetics y realizar una llamada usando el SDK de AWS. A modo de demostración, este script creará un cliente de Amazon DynamoDB y realizará una llamada a las listTables DynamoDB de la API. Registra la respuesta a la solicitud y los registros se superan o no en función de si la solicitud se realizó correctamente.

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

## Empaquetado de los archivos de valores controlados de Node.js
<a name="CloudWatch_Synthetics_Canaries_package"></a>

 **Para syn-nodejs-puppeteer-11.0 y versiones posteriores** 

 La estructura de empaquetado anterior (para syn-nodejs-puppeteer-10.0 y versiones anteriores) sigue siendo compatible con las versiones más recientes.

Cree un script utilizando una de las siguientes opciones:
+ Archivo .js (sintaxis de CommonJS)
+ Archivo .mjs (sintaxis de los módulos de ES)

Para los módulos de ES, utilice una de las siguientes opciones:
+ Archivo .js (sintaxis de CommonJS)
+ Archivo .mjs (sintaxis de los módulos de ES)

La estructura de los paquetes se define a continuación:
+ Archivo de controlador a nivel raíz (index.js/index.mjs)
+ Archivo de configuración opcional (synthetics.json)
+ Dependencias adicionales en node\$1modules (de ser necesarias)

Ejemplo de estructura de empaquetado:

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

Para empaquetar, siga los pasos que se indican a continuación:

1. Instale las dependencias (si las hay).

   ```
   npm install
   ```

1. Cree un paquete .zip.

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

 **Para syn-nodejs-puppeteer-11.0 y versiones anteriores** 

Cuando se usa Amazon S3, se requiere la siguiente estructura:

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

 **Para añadir compatibilidad opcional para subcarpetas en syn-nodejs-puppeteer-3.4\$1:** 

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

**nota**  
La ruta del controlador en la configuración debe coincidir con la ubicación del archivo.

 **Nombre del controlador** 

Asegúrese de establecer el punto de entrada del script (controlador) del valor controlado como ` myCanaryFilename.functionName` para que coincida con el nombre de archivo del punto de entrada del script. Si utiliza un tiempo de ejecución anterior a `syn-nodejs-puppeteer-3.4`, el `functionName` debe ser `handler`. Si utiliza ` syn-nodejs-puppeteer-3.4` o uno posterior, puede elegir cualquier nombre de función como el controlador. Si utiliza `syn-nodejs-puppeteer-3.4` o uno posterior, también puede almacenar el valor controlado en una carpeta independiente, como ` nodejs/node_modules/myFolder/my_canary_filename`. Si lo almacena en una carpeta independiente, especifique esa ruta en el punto de entrada del script, como ` myFolder/my_canary_filename.functionName`.

## Cambio de un script de Puppeteer existente para usarlo como valor controlado de Synthetics
<a name="CloudWatch_Synthetics_Canaries_modify_puppeteer_script"></a>

En esta sección se explica cómo tomar scripts de Puppeteer y modificarlos para que se ejecuten como scripts de valor controlado de Synthetics. Para obtener más información acerca de Puppeteer, consulte [Puppeteer API v1.14.0](https://github.com/puppeteer/puppeteer/blob/v1.14.0/docs/api.md). 

Comenzaremos con este ejemplo de script de 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();
})();
```

Los pasos de conversión son los siguientes:
+ Crear y exportar una función de `handler`. El controlador es la función de punto de entrada para el script. Si utiliza un tiempo de ejecución anterior a ` syn-nodejs-puppeteer-3.4`, la función del controlador debe denominarse `handler`. Si utiliza `syn-nodejs-puppeteer-3.4` o uno posterior, la función puede tener cualquier nombre, pero debe ser el mismo nombre que se usa en el script. Además, si utiliza `syn-nodejs-puppeteer-3.4` o uno posterior, puede almacenar los scripts en cualquier carpeta y especificar dicha carpeta como parte del nombre del controlador.

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

  ```
  var synthetics = require('@aws/synthetics-puppeteer');
  ```
+ Utilice la función de `Synthetics.getPage` para obtener un objeto `Page` de Puppeteer.

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

  El objeto de página devuelto por la función Synthetics.getPage tiene instrumentados para el registro los eventos `request`, `response` y ` requestfailed` de **page.on**. Synthetics también configura la generación de archivos HAR para las solicitudes y respuestas en la página y agrega el ARN del valor controlado a los encabezados del agente de usuario de las solicitudes salientes en la página.

El script ya está listo para ser ejecutado como un valor controlado de Synthetics. Aquí está el script actualizado:

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

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

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

## Variables de entorno
<a name="CloudWatch_Synthetics_Environment_Variables"></a>

Puede utilizar variables de entorno al crear canaries. Esto le permite escribir un único script de valor controlado y luego usar ese script con diferentes valores para crear rápidamente varios valores controlados que tengan una tarea similar.

Suponga, por ejemplo, que su organización tiene puntos de enlaces como `prod`, ` dev`, y `pre-release` para las diferentes etapas del desarrollo del software, y que necesita crear canaries para probar cada uno de estos puntos de enlace. Puede escribir un único script de valor controlado que pruebe el software y, a continuación, especificar los valores diferentes para la variable de entorno de punto de conexión cuando cree cada uno de los tres valores controlados. A continuación, cuando se crea un valor controlado, se especifica el script y los valores que se van a utilizar para las variables de entorno.

Los nombres de las variables de entorno pueden contener letras, números y guiones bajos. Deben comenzar con una letra y tener al menos dos caracteres. El tamaño total de las variables de entorno no puede superar los 4 KB. No es posible especificar variables de entorno reservadas de Lambda como claves para sus variables de entorno. Para obtener más información acerca de las variables de entorno reservadas, consulte [Runtime environment variables](https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html#configuration-envvars-runtime) (Variables de entorno en tiempo de ejecución).

**importante**  
Las claves y valores de las variables de entorno se cifran en reposo utilizando claves AWS KMS propiedad de AWS. Sin embargo, las variables de entorno no se cifran del lado del cliente. No guarde información confidencial en ellos.

En el siguiente ejemplo el script utiliza dos variables de entorno. Este script es para un valor controlado que verifica si hay una página web disponible. Utiliza variables de entorno para parametrizar tanto la URL que verifica como el nivel de registro de CloudWatch Synthetics que utiliza. 

La siguiente función establece `LogLevel` al valor de la variable de entorno ` LOG_LEVEL`.

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

La función establece `URL` al valor de la variable de entorno `URL`.

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

Este es el script completo. Cuando se crea un valor controlado con este script, se especifican los valores para las variables de entorno `LOG_LEVEL` y `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();
};
```

### Traspaso de las variables de entorno al script
<a name="CloudWatch_Synthetics_Canaries_pass_variables"></a>

Para pasar variables de entorno al script cuando cree un valor controlado en la consola, especifique las claves y los valores de las variables de entorno en la sección **Variables de entorno** en la consola. Para obtener más información, consulte [Creación de un valor controlado](CloudWatch_Synthetics_Canaries_Create.md).

Para pasar variables de entorno a través de la API o AWS CLI, utilice el parámetro ` EnvironmentVariables` en la sección `RunConfig`. A continuación, se observa un ejemplo del comando de AWS CLI que crea un valor controlado que utiliza dos variables de entorno con claves de `Environment` y `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"
}'
```

## Integración del valor controlado con otros servicios de AWS
<a name="CloudWatch_Synthetics_Canaries_AWS_integrate"></a>

Todos los canaries pueden utilizar la biblioteca de AWS SDK. Puede utilizar esta biblioteca cuando escriba su valor controlado para integrarlo con otros servicios de AWS.

Para ello, debe agregar el siguiente código al valor controlado. Para estos ejemplos, AWS Secrets Manager se utiliza como servicio para la integración del valor controlado.
+ Importar el SDK de AWS.

  ```
  const AWS = require('aws-sdk');
  ```
+ Cree un cliente para el servicio de AWS con el que se está integrando.

  ```
  const secretsManager = new AWS.SecretsManager();
  ```
+ Use el cliente para realizar llamadas a la API a ese servicio.

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

El siguiente fragmento de código de script de valor controlado muestra un ejemplo de integración con Secrets Manager con más detalle.

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

## Forzar al valor controlado para que utilice una dirección IP estática
<a name="CloudWatch_Synthetics_Canaries_staticIP"></a>

Se puede configurar un valor controlado para que utilice una dirección IP estática.

**Para forzar a un valor controlado a utilizar una dirección IP estática**

1. Cree una nueva VPC Para obtener más información, consulte [Utilización de DNS con su VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html).

1. Cree una gateway de Internet. Para obtener más información, consulte [Adding an internet gateway to your VPC](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html#working-with-igw) (Cómo añadir una gateway de Internet a la VPC).

1. Cree una subred pública en la nueva VPC.

1. Agregue una nueva tabla de enrutamiento a la VPC.

1. Agregue una ruta en la nueva tabla de enrutamiento, que va desde `0.0.0.0/0` a la gateway de Internet.

1. Asocie la nueva tabla de enrutamiento con la subred pública.

1. Cree una dirección IP elástica Para obtener más información, consulte [Elastic IP addresses](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) (Direcciones IP elásticas).

1. Cree una nueva gateway NAT y asígnela a la subred pública y a la dirección IP elástica.

1. Cree las subredes privadas en la VPC

1. Agregue una ruta a la tabla de enrutamiento predeterminada de la VPC, que va desde `0.0.0.0/0` a la gateway NAT

1. Cree el valor controlado. 

# Escritura de un script de valor controlado Python
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Python"></a>

Este script pasa como una ejecución correcta y devuelve una cadena. Cómo ver el aspecto de un valor controlado erróneo, cambie error = Falso a error = verdadero

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

## Empaquetado de los archivos de valores controlados de Python
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Python_package"></a>

Si tiene más de un archivo .py o el script tiene una dependencia, puede agruparlos todos en un único archivo ZIP. Si utiliza el tiempo de ejecución `syn-python-selenium-1.1`, el archivo ZIP debe contener el archivo .py principal del valor controlado dentro de una carpeta `python`, como `python/my_canary_filename.py`. Si utiliza ` syn-python-selenium-1.1` o uno posterior, puede utilizar una carpeta diferente, como `python/myFolder/my_canary_filename.py`.

Este archivo ZIP debe contener todas las carpetas y archivos necesarios, pero los demás archivos no necesitan estar en la carpeta `python`.

Asegúrese de establecer el punto de entrada del script del valor controlado como ` my_canary_filename.functionName` para que coincida con el nombre del archivo y el nombre de la función del punto de entrada de su script. Si utiliza el tiempo de ejecución `syn-python-selenium-1.0`, el `functionName` debe ser `handler`. Si utiliza ` syn-python-selenium-1.1` o uno posterior, no se aplica esta restricción para el nombre del controlador y, además, usted puede optar por almacenar el valor controlado en una carpeta independiente, como ` python/myFolder/my_canary_filename.py`. Si lo almacena en una carpeta independiente, especifique esa ruta en el punto de entrada del script, como ` myFolder/my_canary_filename.functionName`. 

## Cambio de un script de Puppeteer existente para usarlo como un valor controlado de Synthetics
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Python_Selenium"></a>

Se puede modificar rápidamente un script existente para Python y Selenium para ser utilizado como un valor controlado. Para obtener más información acerca de Selenium, consulte [www.selenium.dev/](https://www.selenium.dev/).

Para este ejemplo comenzaremos con el siguiente script de 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()
```

Los pasos de conversión son los siguientes:

**Para convertir un script de Selenio para ser utilizado como un valor controlado**

1. Cambie la instrucción `import` para usar Selenium del módulo ` aws_synthetics`:

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

   El módulo Selenium de `aws_synthetics` garantiza que el valor controlado pueda emitir métricas y registros, generar un archivo HAR y trabajar con otras características de CloudWatch Synthetics.

1. Cree una función de controlador y llame al método de Selenium. El controlador es la función de punto de entrada para el script.

   Si utiliza `syn-python-selenium-1.0`, la función del controlador debe denominarse `handler`. Si utiliza `syn-python-selenium-1.1` o uno posterior, la función puede tener cualquier nombre, pero debe ser el mismo nombre que se usa en el script. Además, si utiliza `syn-python-selenium-1.1` o uno posterior, puede almacenar los scripts en cualquier carpeta y especificar dicha carpeta como parte del nombre del controlador.

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

El script ahora se ha actualizado para ser un valor controlado de CloudWatch Synthetics. Aquí está el script actualizado:

El `webdriver` es una instancia de la clase [SyntheticsWebDriver](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library_Python.html#CloudWatch_Synthetics_Library_Python_SyntheticsWebDriver), y el navegador devuelto por `webdriver.Chrome()` es una instancia de [SyntheticsBrowser](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library_Python.html#CloudWatch_Synthetics_Library_Python_SyntheticsBrowser).

```
from aws_synthetics.selenium import synthetics_webdriver as webdriver

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

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

## Cambio de un script existente de Puppeteer Synthetics para autenticar certificados no estándar
<a name="Canaries_Non-Standard_Certificates"></a>

Un caso de uso importante de canarios de Synthetics es poder supervisar sus propios puntos de conexión. Si quiere supervisar un punto de conexión que no está preparado para el tráfico externo, esta supervisión puede significar a veces que no dispone de un certificado adecuado firmado por una autoridad de certificación externa de confianza.

Dos posibles soluciones para este escenario son las siguientes:
+ Para autenticar un certificado de cliente, consulte [How to validate authentication using Amazon CloudWatch Synthetics – Part 2](https://aws.amazon.com/blogs/mt/how-to-validate-authentication-using-amazon-cloudwatch-synthetics-part-2/).
+ Para autenticar un certificado autofirmado, consulte [How to validate authentication with self-signed certificates in Amazon CloudWatch Synthetics](https://aws.amazon.com/blogs/mt/how-to-validate-authentication-with-self-signed-certificates-in-amazon-cloudwatch-synthetics/).

No solo tiene estas dos opciones cuando utiliza canarios de CloudWatch Synthetics. Puede ampliar estas características y agregar su lógica empresarial mediante la ampliación del código del canario.

**nota**  
Los canarios de Synthetics que se ejecutan en tiempos de ejecución de Python tienen la marca ` --ignore-certificate-errors` habilitada de forma innata, por lo que esos canarios no deberían tener problemas para llegar a sitios con configuraciones de certificados no estándar.

# Escritura de una configuración JSON para un esquema de comprobaciones múltiples de Node.js
<a name="CloudWatch_Synthetics_WritingCanary_Multichecks"></a>

El esquema de comprobaciones múltiples de Node.js le permite crear canarios que lleven a cabo múltiples comprobaciones de validación en una sola ejecución de canario. Este esquema resulta útil cuando se desean probar varios puntos de conexión, validar diferentes aspectos de la aplicación o llevar a cabo una serie de comprobaciones relacionadas de forma secuencial. 

**Topics**
+ [Estructura de configuración raíz](#root-configuration-structure)
+ [Configuración global](#global-settings)
+ [Administración de datos y variables](#variables-data-management)
+ [Definiciones de pasos](#step-definitions)
+ [Tipos de comprobación](#check-types)
+ [Métodos de autenticación](#authentication-methods)
+ [Aserciones y validación](#assertions-validation)
+ [Extracción de datos](#data-extraction)

## Estructura de configuración raíz
<a name="root-configuration-structure"></a>

La configuración raíz define la estructura general del canario de esquema avanzado de la API.


**Propiedades del esquema**  

| Propiedad | Tipo | Obligatorio | Descripción | 
| --- | --- | --- | --- | 
|  globalSettings  | Objeto | No | Configuraciones predeterminadas aplicadas a todos los pasos | 
|  variables  | Objeto | No | Valores reutilizables en todos los pasos (máximo 10) | 
|  steps  | Objeto |  Sí  | Recopilación de pasos de supervisión (de 1 a 10 pasos) | 

 **Ejemplo** 

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

 **Reglas de validación** 
+ Debe contener un paso como mínimo.
+ Se permiten 10 pasos como máximo.
+ No se permiten propiedades adicionales que no sean `globalSettings`, ` variables` y `steps`.

## Configuración global
<a name="global-settings"></a>

La configuración global proporciona configuraciones predeterminadas que se aplican a todos los pasos, a menos que se anulen por paso.

 **Propiedades de** 


**Propiedades de la configuración global**  

| Propiedad | Tipo | Predeterminado | Range | Descripción | 
| --- | --- | --- | --- | --- | 
|  stepTimeout  | entero | 30000 | 5000-300000 | Tiempo de espera predeterminado para todos los pasos (milisegundos) | 

 **Ejemplo** 

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

## Administración de datos y variables
<a name="variables-data-management"></a>

Las variables le permiten definir valores reutilizables a los que se puede hacer referencia en toda la configuración mediante la sintaxis `${variableName}`.

 **Propiedades de variables** 


| Propiedad | Tipo | Descripción | 
| --- | --- | --- | 
| Nombres de variable | cadena | Debe coincidir con el patrón ^[a-zA-Z][a-zA-Z0-9\$1]\$1\$1 | 
| Valores de variable | cadena | Cualquier valor de cadena | 

 **Limitaciones** 
+ Se permiten 10 variables por configuración como máximo.
+ Los nombres de variable deben comenzar por una letra.
+ Los nombres de variable solo pueden contener letras, números y guiones bajos.
+ La longitud máxima no se especifica en el esquema.

 **Ejemplo** 

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

 **Uso de la configuración** 

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

## Definiciones de pasos
<a name="step-definitions"></a>

Los pasos definen las operaciones de supervisión individuales. Cada paso está numerado del 1 al 10 y contiene un tipo específico de comprobación.

 *Propiedades comunes de los pasos* 


| Propiedad | Tipo | Obligatorio | Descripción | 
| --- | --- | --- | --- | 
|  stepName  | string |  Sí  | Identificador único del paso | 
|  checkerType  | cadena |  Sí  | Tipo de comprobación: HTTP, DNS, SSL,  TCP | 
|  extractors  | matriz | No | Configuración de la extracción de datos | 

 *Validación del nombre del paso* 
+ Patrón: ^[a-zA-Z][a-zA-Z0-9\$1-]\$1\$1
+ Longitud máxima: 64 caracteres
+ Letra como carácter inicial

 *Numeración de los pasos* 
+ Los pasos se numeran como claves de cadena: “1”, “2”,..., “10”
+ Patrón: ^([1-9]\$110)\$1
+ Se requiere 1 paso como mínimo.
+ Se permiten 10 pasos como máximo.

 *Ejemplo* 

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

## Tipos de comprobación
<a name="check-types"></a>

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

Supervise los puntos de conexión y las API web con una validación exhaustiva de las solicitudes y las respuestas.

 **Propiedades necesarias** 


| Propiedad | Tipo | Descripción | 
| --- | --- | --- | 
|  url  | cadena | URL de destino (debe tener un formato de URI válido) | 
|  httpMethod  | cadena | Método HTTP: GET, POST, PUT,  PATCH, DELETE, HEAD, OPTIONS | 

 **Propiedades opcionales** 


| Propiedad | Tipo | Predeterminado | Range | Descripción | 
| --- | --- | --- | --- | --- | 
|  timeout  | entero | 30000 | 5000-300000 | Tiempo de espera de la solicitud (milisegundos) | 
|  waitTime  | entero | 0 | 0-60 | Retraso antes de la solicitud (segundos) | 
|  headers  | objeto | - | - | Encabezados HTTP personalizados | 
|  body  | cadena | - | - | Cuerpo de la solicitud para operaciones POST y PUT | 
|  authentication  | objeto | - | - | Configuración de la autenticación | 
|  assertions  | matriz | - | - | Reglas de validación de respuestas | 

 **Ejemplo** 

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

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

Valide la resolución de DNS y registre la información.

 **Propiedades necesarias** 


| Propiedad | Tipo | Descripción | 
| --- | --- | --- | 
|  domain  | cadena | Nombre del dominio que se consultará (formato de nombre de host) | 

 **Propiedades opcionales** 


| Propiedad | Tipo | Predeterminado | Descripción | 
| --- | --- | --- | --- | 
|  recordType  | cadena | “A” | Tipo de registro de DNS: A, CNAME, MX,  TXT, NS | 
|  nameserver  | cadena | - | Servidor de DNS específico que se consultará | 
|  timeout  | entero | 30000 | Tiempo de espera de la consulta (5000-300000 ms) | 
|  port  | entero | 53 | Puerto de servidor de DNS (1-65535) | 
|  protocol  | cadena | “UDP” | Protocolo: UDP o TCP | 
|  assertions  | matriz | - | Reglas de validación de respuestas de DNS | 

 **Ejemplo** 

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

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

Supervise el estado y la configuración de los certificados SSL.

 **Propiedades necesarias** 


| Propiedad | Tipo | Descripción | 
| --- | --- | --- | 
|  hostname  | cadena | Nombre de host de destino (formato de nombre de host) | 

 **Propiedades opcionales** 


| Propiedad | Tipo | Predeterminado | Descripción | 
| --- | --- | --- | --- | 
|  port  | entero | 443 | Puerto SSL (1-65535) | 
|  timeout  | entero | 30000 | Tiempo de espera de conexión (5000-300000 ms) | 
|  sni  | booleano | TRUE | Indicación del nombre del servidor | 
|  verifyHostname  | booleano | TRUE | Verificación de nombres de host | 
|  allowSelfSigned  | valor booleano | FALSO | Aceptación de certificados autofirmados | 
|  assertions  | matriz | - | Reglas de validación de certificados | 

 **Ejemplo** 

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

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

Pruebe la conectividad de los puertos TCP y la validación de respuestas.

 **Propiedades necesarias** 


| Propiedad | Tipo | Descripción | 
| --- | --- | --- | 
|  hostname  | cadena | Nombre de host de destino (formato de nombre de host) | 
|  port  | entero | Puerto de destino (1-65535) | 

 **Propiedades opcionales** 


| Propiedad | Tipo | Predeterminado | Descripción | 
| --- | --- | --- | --- | 
|  timeout  | entero | 30000 | Tiempo de espera general (5000-300000 ms) | 
|  connectionTimeout  | entero | 3 000 | Tiempo de espera de conexión (5000-300000 ms) | 
|  readTimeout  | entero | 2000 | Tiempo de espera de lectura de datos (5000-300000 ms) | 
|  sendData  | cadena | - | Datos que se enviarán después de la conexión | 
|  expectedResponse  | cadena | - | Datos de respuesta esperados | 
|  encoding  | cadena | “UTF-8” | Codificación de datos: UTF-8, ASCII, HEX | 
|  assertions  | matriz | - | Validación de respuestas y conexiones | 

 **Ejemplo** 

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

## Métodos de autenticación
<a name="authentication-methods"></a>

 **Sin autenticación** 

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

 **Autenticación básica** 


| Propiedad | Tipo | Obligatorio | Descripción | 
| --- | --- | --- | --- | 
|  type  | string |  Sí  | Debe ser "BASIC" | 
|  username  | cadena |  Sí  | Nombre de usuario para la autenticación | 
|  password  | cadena |  Sí  | Contraseña para la autenticación | 

 **Ejemplo** 

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

 **Autenticación de la clave de API** 


| Propiedad | Tipo | Obligatorio/a | Predeterminado | Descripción | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Sí  | - | Debe ser "API\$1KEY" | 
|  apiKey  | cadena |  Sí  | - | Valor de la clave de API | 
|  headerName  | cadena | No | “X-API-Key” | Nombre del encabezado para la clave de API | 

 **Ejemplo** 

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

 **Credenciales del cliente OAuth** 


| Propiedad | Tipo | Obligatorio/a | Predeterminado | Descripción | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Sí  | - | Debe ser "OAUTH\$1CLIENT\$1CREDENTIALS" | 
|  tokenUrl  | cadena |  Sí  | - | URL del punto de conexión del token de OAuth | 
|  clientId  | cadena |  Sí  | - | ID de cliente de OAuth | 
|  clientSecret  | cadena |  Sí  | - | Secreto de cliente de OAuth | 
|  scope  | cadena | No | - | Ámbito de OAuth | 
|  audience  | cadena | No | - | Audiencia de OAuth | 
|  resource  | cadena | No | - | Recurso de OAuth | 
|  tokenApiAuth  | matriz | No | - | Métodos de autenticación de la API del token: BASIC\$1AUTH\$1HEADER, REQUEST\$1BODY | 
|  tokenCacheTtl  | entero | No | 3600 | TTL de caché de token (mínimo 60 segundos) | 

 **Ejemplo** 

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

 **AWS Signature (Versión 4)** 


| Propiedad | Tipo | Obligatorio | Descripción | 
| --- | --- | --- | --- | 
|  type  | string |  Sí  | Debe ser "SIGV4" | 
|  service  | cadena |  Sí  | Nombre del servicio de AWS (por ejemplo, “execute-api”») | 
|  region  | cadena |  Sí  | AWS región | 
|  roleArn  | cadena |  Sí  | ARN del rol de IAM para la firma | 

 **Ejemplo** 

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

## Aserciones y validación
<a name="assertions-validation"></a>

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

 **Aserciones de código de estado** 


| Propiedad | Tipo | Obligatorio | Descripción | 
| --- | --- | --- | --- | 
|  type  | string |  Sí  | Debe ser "STATUS\$1CODE" | 
|  operator  | cadena |  Sí  | EQUALS, NOT\$1EQUALS, GREATER\$1THAN,  LESS\$1THAN, IN\$1RANGE | 
|  value  | entero | Condicional | Código de estado HTTP (100-599) | 
|  rangeMin  | entero | Condicional | Valor de intervalo mínimo (para IN\$1RANGE) | 
|  rangeMax  | entero | Condicional | Valor de intervalo máximo (para IN\$1RANGE) | 

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

 **Aserciones de tiempo de respuesta** 


| Propiedad | Tipo | Obligatorio/a | Predeterminado | Descripción | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Sí  | - | Debe ser "RESPONSE\$1TIME" | 
|  operator  | cadena |  Sí  | - | LESS\$1THAN, GREATER\$1THAN, EQUALS | 
|  value  | número |  Sí  | - | Valor de tiempo (mínimo 0) | 
|  unit  | cadena | No | “MILLISECONDS” | Debe ser "MILLISECONDS" | 

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

 **Aserciones de encabezado** 


| Propiedad | Tipo | Obligatorio | Descripción | 
| --- | --- | --- | --- | 
|  type  | string |  Sí  | Debe ser "HEADER" | 
|  headerName  | cadena |  Sí  | Nombre del encabezado que se validará | 
|  operator  | cadena |  Sí  | EQUALS, NOT\$1EQUALS, CONTAINS,  NOT\$1CONTAINS, REGEX\$1MATCH, EXIST | 
|  value  | Cadena o booleano | Condicional | Valor esperado (booleano para el operador EXIST) | 

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

 **Aserciones de cuerpo** 


| Propiedad | Tipo | Obligatorio/a | Predeterminado | Descripción | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Sí  | - | Debe ser "BODY" | 
|  target  | cadena | No | “JSON” | JSON o TEXT | 
|  path  | cadena | Condicional | - | JSONPath (obligatorio para el destino JSON) | 
|  operator  | cadena |  Sí  | - | CONTAINS, NOT\$1CONTAINS, EQUALS,  NOT\$1EQUALS, EXISTS | 
|  value  | Cadena o booleano |  Sí  | - | Valor esperado (booleano para el operador EXISTS) | 

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

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

 **Aserciones de valor de registro** 


| Propiedad | Tipo | Obligatorio/a | Range | Descripción | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Sí  | - | Debe ser "RECORD\$1VALUE" | 
|  operator  | cadena |  Sí  | - | EQUALS, NOT\$1EQUALS, CONTAINS,  NOT\$1CONTAINS, REGEX\$1MATCH | 
|  value  | cadena |  Sí  | - | Valor de registro esperado | 

 **Aserciones de recuento de registros** 


| Propiedad | Tipo | Obligatorio/a | Range | Descripción | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Sí  | - | Debe ser "RECORD\$1COUNT" | 
|  operator  | cadena |  Sí  | - | EQUALS, GREATER\$1THAN, LESS\$1THAN | 
|  value  | entero |  Sí  | ≥ 0 | Recuento esperado (mínimo 0) | 

 **Aserciones autoritarias** 


| Propiedad | Tipo | Obligatorio/a | Range | Descripción | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Sí  | - | Debe ser "AUTHORITATIVE" | 
|  value  | booleano |  Sí  | - | Estado autoritario esperado | 

 **Aserciones TTL** 


| Propiedad | Tipo | Obligatorio/a | Range | Descripción | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Sí  | - | Debe ser "TTL" | 
|  operator  | cadena |  Sí  | - | EQUALS, GREATER\$1THAN, LESS\$1THAN | 
|  value  | entero |  Sí  | ≥ 0 | TTL esperado (mínimo 0) | 

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

 **Aserciones de expiración de certificados** 


| Propiedad | Tipo | Obligatorio/a | Predeterminado | Descripción | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Sí  | - | Debe ser "CERTIFICATE\$1EXPIRY" | 
|  operator  | cadena |  Sí  | - | GREATER\$1THAN, LESS\$1THAN | 
|  value  | entero |  Sí  | - | Valor de tiempo (mínimo 0) | 
|  unit  | cadena | No | “DAYS” | DAYS, HOURS | 

 **Aserciones de asunto de certificado** 


| Propiedad | Tipo | Obligatorio/a | Predeterminado | Descripción | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Sí  | - | Debe ser "CERTIFICATE\$1SUBJECT" | 
|  field  | cadena |  Sí  | - | Campo de asunto: CN, O, OU, C, ST, L | 
|  operator  | cadena |  Sí  | - | CONTAINS, EQUALS, REGEX\$1MATCH | 
|  value  | cadena |  Sí  | - | Valor de campo esperado | 

 **Aserciones de emisor de certificado** 


| Propiedad | Tipo | Obligatorio/a | Predeterminado | Descripción | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Sí  | - | Debe ser "CERTIFICATE\$1ISSUER" | 
|  field  | cadena |  Sí  | - | Campo emisor: CN, O | 
|  operator  | cadena |  Sí  | - | CONTAINS, EQUALS | 
|  value  | cadena |  Sí  | - | Valor de campo esperado | 

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

 **Aserciones de éxito de conexión** 


| Propiedad | Tipo | Obligatorio/a | Predeterminado | Descripción | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Sí  | - | Debe ser "CONNECTION\$1SUCCESSFUL" | 
|  value  | booleano |  Sí  | - | Estado de conexión esperado | 

 **Aserciones de datos de respuesta** 


| Propiedad | Tipo | Obligatorio/a | Predeterminado | Descripción | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Sí  | - | Debe ser "RESPONSE\$1DATA" | 
|  operator  | cadena |  Sí  | - | CONTAINS, EQUALS, NOT\$1CONTAINS,  REGEX\$1MATCH, STARTS\$1WITH, ENDS\$1WITH | 
|  value  | cadena |  Sí  | - | Datos de respuesta esperados | 
|  encoding  | cadena | No | “UTF-8” | UTF-8, ASCII, HEX | 

## Extracción de datos
<a name="data-extraction"></a>

Los extractores permiten capturar datos de las respuestas para usarlos en pasos posteriores o con fines de elaboración de informes.

 **Propiedades de extracción** 


| Propiedad | Tipo | Obligatorio/a | Predeterminado | Descripción | 
| --- | --- | --- | --- | --- | 
|  name  | string |  Sí  | - | Nombre de variable para datos extraídos | 
|  type  | cadena |  Sí  | - | Tipo de extracción: BODY | 
|  path  | cadena | No | - | JSONPath para la extracción de cuerpo | 
|  regex  | cadena | No | - | Patrón de expresión regular | 
|  regexGroup  | entero | No | 0 | Grupo de captura de expresión regular (mínimo 0) | 

 **Validación de nombre de extracción** 
+ Patrón: `^[a-zA-Z][a-zA-Z0-9_]*$`
+ Letra como carácter inicial
+ Pueden contener letras, números y guiones bajos.

**Limitación**: la sustitución no se aplica a los campos del esquema que tengan valores ENUM específicos.

 **Tipos de extracción** 

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

# Funciones de la biblioteca disponibles para los scripts de valor controlado
<a name="CloudWatch_Synthetics_Canaries_Function_Library"></a>

CloudWatch Synthetics incluye varias funciones y clases integradas a las que puede llamar cuando escriba scripts de Node.js para su uso como canaries.

Algunas aplican a los canaries de la UI y a la API. Otras se aplican únicamente a los canaries de la interfaz de usuario. Un valor controlado de interfaz de usuario es aquel que utiliza la función `getPage()` y que usa Puppeteer como controlador web para navegar e interactuar con páginas web.

**nota**  
Siempre que actualice un valor controlado para utilizar una nueva versión del tiempo de ejecución de Synthetics, todas las funciones de la biblioteca Synthetics que utilice su valor controlado también se actualizarán automáticamente a la misma versión de NodeJS que admita el tiempo de ejecución de Synthetics.

**Topics**
+ [Funciones de biblioteca disponibles para el canario de Node.js](Library_function_Nodejs.md)
+ [Funciones de la biblioteca disponibles para el canario Java](CloudWatch_Synthetics_Canaries_Java.md)
+ [Funciones de la biblioteca disponibles para los scripts de canarios de Node.js con Playwright](CloudWatch_Synthetics_Canaries_Nodejs_Playwright.md)
+ [Funciones de la biblioteca disponibles para los scripts de canarios de Node.js mediante Puppeteer](CloudWatch_Synthetics_Canaries_Library_Nodejs.md)
+ [Funciones de la biblioteca disponibles para los scripts de valores controlados de Python que usan Selenium](CloudWatch_Synthetics_Canaries_Library_Python.md)

# Funciones de biblioteca disponibles para el canario de Node.js
<a name="Library_function_Nodejs"></a>

En esta sección, se describen las funciones de biblioteca disponibles para los scripts de canarios que utilizan el tiempo de ejecución de Node.js.

**Topics**
+ [addExecutionError(errorMessage, ex);](#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, functionToExecute, [stepConfig])](#Library_function_Nodejs_executestep_Nodecanary)
+ [executeHttpStep(stepName, requestOptions, [callback], [stepConfig])](#Library_function_Nodejs_executeHttpStep)

## addExecutionError(errorMessage, ex);
<a name="Library_function_Nodejs_addExecutionError_Nodecanary"></a>

`errorMessage` describe el error y `ex` es la excepción que se ha encontrado

`addExecutionError` puede usarse para establecer errores de ejecución para el valor controlado. Se produce un error en el valor controlado sin interrumpir la ejecución del script. Tampoco afecta a las métricas de `successPercent`.

Debe realizar un seguimiento de los errores como errores de ejecución sólo si no son importantes para indicar el éxito o el error del script valor controlado.

A continuación, se muestra un ejemplo del uso de un `addExecutionError`. Está supervisando la disponibilidad de su punto de conexión y tomando capturas de pantalla después de que la página se haya cargado. Debido a que el hecho de no tomar una captura de pantalla no determina la disponibilidad del punto de enlace, puede detectar cualquier error que encuentre al tomar capturas de pantalla y agregarlos como errores de ejecución. Las métricas de disponibilidad seguirán indicando que el punto de conexión está activo y en ejecución, pero el estado del valor controlado se marcará como fallido. El siguiente bloque de código de muestra detecta dicho error y lo agrega como un error de ejecución.

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

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

Devuelve el nombre del valor controlado.

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

Devuelve el ARN del valor controlado.

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

Devuelve el agente de usuario personalizado del valor controlado.

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

Esta función está disponible en la versión de tiempo de ejecución `syn-nodejs-3.0` y posteriores. Devuelve la versión de tiempo de ejecución de Synthetics del valor controlado. Por ejemplo, el valor de devuelto podría ser `syn-nodejs-3.0`.

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

Recupera el nivel de registro actual para la biblioteca de Synthetics. Los valores posibles son los siguientes:
+ `0`: depuración
+ `1`: información
+ `2`: advertencia
+ `3`: error

Ejemplo:

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

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

Establece el nivel de registro de la biblioteca de Synthetics. Los valores posibles son los siguientes:
+ `0`: depuración
+ `1`: información
+ `2`: advertencia
+ `3`: error

Ejemplo:

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

## executeStep(stepName, functionToExecute, [stepConfig])
<a name="Library_function_Nodejs_executestep_Nodecanary"></a>

Ejecuta el paso proporcionado y lo integra con iniciar/superar/fallar el registro, superar/fallar y métricas de duración.

La función `executeStep` también hace lo siguiente:
+ Registra que el paso se haya iniciado.
+ Inicia un temporizador.
+ Ejecuta la función proporcionada.
+ Cuando la función devuelve resultados normalmente, cuenta como superada. Si la función falla, cuenta como error.
+ Finaliza el temporizador.
+ Registra si el paso se ha superado o no.
+ Emite la métrica `stepName SuccessPercent`, 100 para superado o 0 para no superado.
+ Emite la `stepName Duration metric`, con un valor basado en las horas de inicio y de finalización del paso.
+ Devuelve lo que devolvió functionToExecute o vuelve a lanzar lo que lanzó ` functionToExecute`.
+ Agrega un resumen de ejecución de pasos al informe del canario.

 **Ejemplo** 

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

Ejecuta la solicitud HTTP proporcionada como un paso y publica `SuccessPercent` (aprobar o no aprobar) y las métricas `Duration`.

**executeHttpStep** utiliza funciones nativas HTTP o HTTPS que no son visibles a simple vista de acuerdo al protocolo que se ha especificado en la solicitud.

Esta función también agrega un resumen de ejecución de pasos al informe del valor controlado. El resumen incluye detalles sobre cada solicitud HTTP, como los siguientes:
+ Hora de inicio
+ Hora de finalización
+ Estado (APROBADO o NO APROBADO)
+ Razón del error, si hubo
+ Detalles de llamada HTTP como cabeceras de solicitud o respuesta, cuerpo, código de estado, mensaje de estado y tiempos de rendimiento. 

**Topics**
+ [Parameters](#Library_function_Nodejs_executeHttpStep_parameters_Nodecanary)
+ [Ejemplos de uso de executeHttpStep](#Library_function_Nodejs_executeHttpStep_examples_Nodecanary)

### Parameters
<a name="Library_function_Nodejs_executeHttpStep_parameters_Nodecanary"></a>

 **stepName(*String*)** 

Especifica el nombre del paso. Este nombre también se utiliza para publicar métricas de CloudWatch para este paso.

 **requestOptions(*Object or String*)** 

El valor de este parámetro puede ser una URL, una cadena URL o un objeto. Si es un objeto, entonces debe ser un conjunto de opciones configurables para realizar una solicitud HTTP. Es compatible con todas las opciones en [http.request(options[, callback])](https://nodejs.org/api/http.html#http_http_request_options_callback) en el documento de Node.js.

Además de estas opciones de Node.js, **requestOptions** admite el parámetro adicional `body`. Puede utilizar el parámetro `body` para pasar datos como un cuerpo de la solicitud.

 **callback(*response*)** 

(Opcional) Esta es una función de usuario que se invoca con la respuesta HTTP. La respuesta es del tipo [Clase: http.IncomingMessage](https://nodejs.org/api/http.html#http_class_http_incomingmessage).

 **stepConfig(*object*)** 

(Opcional) Utilice este parámetro para anular configuraciones globales de Synthetics con una configuración diferente para este paso.

### Ejemplos de uso de executeHttpStep
<a name="Library_function_Nodejs_executeHttpStep_examples_Nodecanary"></a>

La siguiente serie de ejemplos se crean entre sí para ilustrar los diversos usos de esta opción.

Este primer ejemplo configura los parámetros de solicitud. Puede pasar una URL como **requestOptions**:

```
let requestOptions = 'https://www.amazon.com';
```

O puede pasar un conjunto de opciones:

```
let requestOptions = {
        'hostname': 'myproductsEndpoint.com',
        'method': 'GET',
        'path': '/test/product/validProductName',
        'port': 443,
        'protocol': 'https:'
    };
```

El siguiente ejemplo crea una función de devolución de llamada que acepta una respuesta. De forma predeterminada, si no se especifica **callback** (devolución de llamada), CloudWatch Synthetics valida que el estado esté entre 200 y 299 inclusive.

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

El siguiente ejemplo crea una configuración para este paso que reemplaza la configuración global de CloudWatch Synthetics. La configuración de pasos de este ejemplo permite las cabeceras de solicitud, las cabeceras de respuesta, el cuerpo de la solicitud (datos posteriores) y el cuerpo de la respuesta en el informe y restringe los valores de las cabeceras de ‘X-Amz-Security-Token’ y de ‘Autorización’. De forma predeterminada, estos valores no se incluyen en el informe por motivos de seguridad. Si elige incluirlos, los datos solo se almacenan en su bucket de 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
};
```

Este último ejemplo pasa su solicitud a **executeHttpStep** y nombra el paso.

```
await synthetics.executeHttpStep('Verify GET products API', requestOptions, callback, stepConfig);
```

Con este conjunto de ejemplos, CloudWatch Synthetics agrega los detalles de cada paso al informe y genera métricas para cada paso mediante **stepName**.

 Se podrán ver `successPercent` y métricas `duration` para el paso `Verify GET products API`. Puede supervisar el rendimiento de la API si supervisa las métricas de los pasos de llamadas a la API. 

Para obtener un script completo de ejemplo que utilice estas funciones, consulte [Valor controlado de la API de varios pasos](CloudWatch_Synthetics_Canaries_Samples.md#CloudWatch_Synthetics_Canaries_Samples_APIsteps).

# Funciones de la biblioteca disponibles para el canario Java
<a name="CloudWatch_Synthetics_Canaries_Java"></a>

La función `executeStep` se usa para modularizar el código del canario y ejecutarlo por pasos. En CloudWatch Synthetics, un paso de Synthetics es una forma de dividir el script de canario en una serie de acciones claramente definidas, lo que le permite supervisar distintas partes del recorrido de la aplicación por separado. Para cada paso, CloudWatch Synthetics hace lo siguiente:
+ Para cada ejecución de canarios, se crea un informe que incluye un resumen de los detalles de la ejecución de los pasos, como la duración de un paso, el estado *pass* o *fail*, entre otras cosas. Al elegir una ejecución en la consola de CloudWatch Synthetics, puede ver los detalles de ejecución de cada paso en la pestaña **Paso**.
+ Las métricas de CloudWatch *SuccessPercent* y *Duration* se emiten para cada paso, lo que permite a los usuarios supervisar la disponibilidad y la latencia de cada paso.

   **Uso** 

  ```
  synthetics.executeStep(stepName,()->{
      try {
          //step code to be executed
          return null;
      } catch (Exception e) {
          throw e;
      }
  }).get();
  ```

   **Parameters** 
  + *stepName*, String (obligatorio): nombre descriptivo del paso de Synthetics
  + *function to execute*, Callable<T> (obligatorio): representa las tareas que se ejecutarán
  + *stepOptions*, `com.amazonaws.synthetics.StepOptions (optional)`: objeto StepOptions que se puede utilizar para configurar la ejecución del paso. 

    *stepConfiguration*, ` com.amazonaws.synthetics.StepConfiguration` (obligatorio como parte de stepOptions)

 **Devuelve** 

El valor devuelto es *CompletableFuture<T>*.

**nota**  
Synthetics solo admite pasos secuenciales. Asegúrese de llamar al método `.get()` como se muestra en el ejemplo para asegurarse de que el paso se complete antes de continuar con el paso siguiente.

# Funciones de la biblioteca disponibles para los scripts de canarios de Node.js con Playwright
<a name="CloudWatch_Synthetics_Canaries_Nodejs_Playwright"></a>

En esta sección se describen las funciones de biblioteca disponibles para los scripts de canarios que utilizan el tiempo de ejecución de Playwright para Node.js.

**Topics**
+ [lanzamiento](#Synthetics_Library_Nodejs_Playwright_functions)
+ [newPage](#Synthetics_Library_Nodejs_Playwright_function_newPage)
+ [close](#Synthetics_Library_Nodejs_Playwright_function_close)
+ [getDefaultLaunchOptions](#Synthetics_Library_Nodejs_Playwright_function_getDefaultLaunchOptions)
+ [executeStep](#Synthetics_Library_Nodejs_Playwright_function_executeStep)

## lanzamiento
<a name="Synthetics_Library_Nodejs_Playwright_functions"></a>

Esta función inicia un navegador Chromium mediante una función de lanzamiento de Playwright y devuelve el objeto del navegador. Descomprime los archivos binarios del navegador y lanza el navegador Chromium mediante las opciones predeterminadas adecuadas para un navegador sin periféricos. Para obtener más información sobre la función `launch`, consulte [https://playwright.dev/docs/api/class-browsertype#browser-type-launch](https://playwright.dev/docs/api/class-browsertype#browser-type-launch) en la documentación de Playwright.

 **Uso** 

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

 **Argumentos** 

`options` [opciones](https://playwright.dev/docs/api/class-browsertype#browser-type-launch) (opcional) es un conjunto configurable de opciones para el navegador.

 **Devuelve** 

La promesa `<Browser>` en la que [Browser](https://playwright.dev/docs/api/class-browser) es una instancia de navegador de Playwright.

Si se vuelve a llamar a esta función, se cierra un navegador abierto anteriormente antes de iniciar un navegador nuevo. Se pueden anular los parámetros de lanzamiento que utiliza CloudWatch Synthetics y pasar parámetros adicionales al lanzar el navegador. Por ejemplo, el siguiente fragmento de código lanza un navegador con argumentos predeterminados y una ruta ejecutable predeterminada, pero con una ventana gráfica de 800 x 600 píxeles. Para obtener más información, consulte las [opciones de lanzamiento de Playwright](https://playwright.dev/docs/api/class-browsertype#browser-type-launch) en la documentación de Playwright.

```
const browser = await synthetics.launch({
  defaultViewport: { 
      "deviceScaleFactor": 1, 
      "width": 800,
      "height": 600 
}});
```

 También puede agregar o anular los marcadores de Chromium que se envían de forma predeterminada al navegador. Por ejemplo, puede deshabilitar la seguridad web si agrega un indicador `--disable-web-security` a los argumentos en los parámetros de lanzamiento de CloudWatch Synthetics: 

```
// This function adds the --disable-web-security flag to the launch parameters
const defaultOptions = await synthetics.getDefaultLaunchOptions();
const launchArgs = [...defaultOptions.args, '--disable-web-security'];
const browser = await synthetics.launch({
    args: launchArgs
  });
```

## newPage
<a name="Synthetics_Library_Nodejs_Playwright_function_newPage"></a>

La función `newPage()` crea y devuelve una nueva página de Playwright. Synthetics configura automáticamente una conexión de Chrome DevTools Protocol (CDP) para permitir las capturas de red para la generación de archivos (HAR) HTTP.

 **Uso** 

Utilice `newPage()` en cualquiera de las siguientes maneras:

 **1. Crear una página nueva en un nuevo contexto de navegador:** 

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

 **2. Crear una página nueva en un contexto de navegador especificado:** 

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

 **Argumentos** 

Acepta la instancia de [Browser](https://playwright.dev/docs/api/class-browser) o [BrowserContext](https://playwright.dev/docs/api/class-browsercontext) de Playwright. 

 **Devuelve** 

La promesa <Page> en la que Page es una instancia de [Page](https://playwright.dev/docs/api/class-page) de Playwright.

## close
<a name="Synthetics_Library_Nodejs_Playwright_function_close"></a>

Cierra el navegador actualmente abierto.

 **Uso** 

```
await synthetics.close();
```

Se recomienda cerrar el navegador en un bloque `finally` del script.

 **Argumentos** 

Ninguno 

 **Devuelve** 

Devuelve la promesa <void> que se utiliza en la función de lanzamiento de Synthetics para lanzar el navegador.

## getDefaultLaunchOptions
<a name="Synthetics_Library_Nodejs_Playwright_function_getDefaultLaunchOptions"></a>

La función `getDefaultLaunchOptions()` muestra los resultados de las opciones de lanzamiento del navegador que CloudWatch Synthetics utiliza.

 **Uso** 

```
const defaultOptions = await synthetics.getDefaultLaunchOptions();
```

 **Argumentos** 

Ninguno 

 **Devuelve** 

Devuelve las [opciones de lanzamiento](https://playwright.dev/docs/api/class-browsertype#browser-type-launch) de Playwright que se utilizan en la función `launch` de Synthetics para lanzar el navegador.

## executeStep
<a name="Synthetics_Library_Nodejs_Playwright_function_executeStep"></a>

La función `executeStep` se usa para ejecutar un paso en un script de Synthetics. En CloudWatch Synthetics, un paso de Synthetics es una forma de dividir el script de canario en una serie de acciones claramente definidas, lo que le permite supervisar distintas partes del recorrido de la aplicación por separado. Para cada paso, CloudWatch Synthetics hace lo siguiente:
+ Hace automáticamente una captura de pantalla antes de iniciar y completar el paso. También puede hacer capturas de pantalla dentro de un paso. Las capturas de pantalla se hacen de forma predeterminada, pero se pueden desactivar mediante las configuraciones de Synthetics.
+ Para cada ejecución de canarios, se crea un informe que incluye un resumen de los detalles de la ejecución de los pasos, como la duración de un paso, el estado `pass` o `fail`, las URL de las páginas de origen y destino, las capturas de pantalla asociadas, etc. Al elegir una ejecución en la consola de CloudWatch Synthetics, puede ver los detalles de ejecución de cada paso en la pestaña **Paso**.
+ Las métricas de CloudWatch `SuccessPercent` y `Duration` se emiten para cada paso, lo que permite a los usuarios supervisar la disponibilidad y la latencia de cada paso.

 **Uso** 

```
await synthetics.executeStep("mystepname", async function () {
  await page.goto(url, { waitUntil: 'load', timeout: 30000 });
}
```

**nota**  
Los pasos deben ejecutarse de forma secuencial. Asegúrese de usar `await` en las promesas.

 **Argumentos** 
+ Cadena `stepName` (obligatoria) (booleano): nombre del paso de Synthetics. 
+ Función asíncrona `functionToExecute` (obligatoria): la función que quiere que ejecute Synthetics. Esta función debe contener la lógica del paso.
+ Objeto `stepConfig` (opcional): la configuración del paso anula la configuración global de Synthetics para este paso.
  + Booleano `continueOnStepFailure` (opcional): indica si se debe continuar ejecutando el script de canarios después de que se produzca un error en este paso. 
  + Booleano `screenshotOnStepStart` (opcional): si se toma una captura de pantalla al inicio de este paso. 
  + Booleano `screenshotOnStepSuccess` (opcional): si se toma una captura de pantalla si este paso es correcto. 
  + Booleano `screenshotOnStepFailure` (opcional): si se toma una captura de pantalla si se produce un error en este paso. 
+ `page`: objeto de página de Playwright (opcional)

  Objeto de página de Playwright. Synthetics usa este objeto de página para hacer capturas de pantalla y URL. De forma predeterminada, Synthetics usa la página de Playwright que se crea cuando se llama a la función `synthetics.newPage()` para capturar detalles de la página, como capturas de pantalla y URL.

 **Devuelve** 

Devuelve una promesa que se resuelve con el valor que devuelve la función ` functionToExecute`. Para ver un script de ejemplo, consulte [Código de muestra para scripts de valores controlados](CloudWatch_Synthetics_Canaries_Samples.md) en esta guía.

# Funciones de la biblioteca disponibles para los scripts de canarios de Node.js mediante Puppeteer
<a name="CloudWatch_Synthetics_Canaries_Library_Nodejs"></a>

En esta sección se describen las funciones de biblioteca disponibles para los scripts de canarios de Node.js.

**Topics**
+ [Funciones y clases de biblioteca aplicables a todos los canaries](#CloudWatch_Synthetics_Library_allcanaries)
+ [Funciones y clases de biblioteca Node.js que solo se aplican a los canaries de la UI](#CloudWatch_Synthetics_Library_UIcanaries)
+ [Clases y funciones de biblioteca Node.js que se aplican sólo a los canaries de la API](#CloudWatch_Synthetics_Library_APIcanaries)

## Funciones y clases de biblioteca aplicables a todos los canaries
<a name="CloudWatch_Synthetics_Library_allcanaries"></a>

Las siguientes funciones de biblioteca de CloudWatch Synthetics para Node.js son útiles para todos los canaries.

**Topics**
+ [Clase de Synthetics](#CloudWatch_Synthetics_Library_Synthetics_Class_all)
+ [Clase SyntheticsConfiguration](#CloudWatch_Synthetics_Library_SyntheticsConfiguration)
+ [Registrador de Synthetics](#CloudWatch_Synthetics_Library_SyntheticsLogger)
+ [Clase de SyntheticSloghelper](#CloudWatch_Synthetics_Library_SyntheticsLogHelper)

### Clase de Synthetics
<a name="CloudWatch_Synthetics_Library_Synthetics_Class_all"></a>

Las siguientes funciones para todos los canaries están en la clase de Synthetics.

**Topics**
+ [addExecutionError(errorMessage, ex);](#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, ex);
<a name="CloudWatch_Synthetics_Library_addExecutionError"></a>

`errorMessage` describe el error y `ex` es la excepción que se ha encontrado

`addExecutionError` puede usarse para establecer errores de ejecución para el valor controlado. Se produce un error en el valor controlado sin interrumpir la ejecución del script. Tampoco afecta a las métricas de `successPercent`.

Debe realizar un seguimiento de los errores como errores de ejecución sólo si no son importantes para indicar el éxito o el error del script valor controlado.

A continuación, se muestra un ejemplo del uso de un `addExecutionError`. Está supervisando la disponibilidad de su punto de conexión y tomando capturas de pantalla después de que la página se haya cargado. Debido a que el hecho de no tomar una captura de pantalla no determina la disponibilidad del punto de enlace, puede detectar cualquier error que encuentre al tomar capturas de pantalla y agregarlos como errores de ejecución. Las métricas de disponibilidad seguirán indicando que el punto de conexión está activo y en ejecución, pero el estado del valor controlado se marcará como fallido. El siguiente bloque de código de muestra detecta dicho error y lo agrega como un error de ejecución.

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

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

Devuelve el nombre del valor controlado.

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

Devuelve el ARN del valor controlado.

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

Devuelve el agente de usuario personalizado del valor controlado.

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

Esta función está disponible en la versión de tiempo de ejecución `syn-nodejs-puppeteer-3.0` y en posteriores. Devuelve la versión de tiempo de ejecución de Synthetics del valor controlado. Por ejemplo, el valor de devuelto podría ser `syn-nodejs-puppeteer-3.0`.

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

Recupera el nivel de registro actual para la biblioteca de Synthetics. Los valores posibles son los siguientes:
+ `0`: depuración
+ `1`: información
+ `2`: advertencia
+ `3`: error

Ejemplo:

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

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

Establece el nivel de registro de la biblioteca de Synthetics. Los valores posibles son los siguientes:
+ `0`: depuración
+ `1`: información
+ `2`: advertencia
+ `3`: error

Ejemplo:

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

### Clase SyntheticsConfiguration
<a name="CloudWatch_Synthetics_Library_SyntheticsConfiguration"></a>

Esta clase solo está disponible en la versión de tiempo de ejecución de `syn-nodejs-2.1` o en posteriores.

La clase `SyntheticsConfiguration` se puede utilizar para configurar el comportamiento de las funciones de biblioteca de Synthetics. Por ejemplo, puede utilizar esta clase para configurar la función `executeStep()` para no tomar capturas de pantalla.

Pueden establecerse configuraciones de CloudWatch Synthetics a nivel global, que se aplican a todos los pasos de canaries. También se pueden anular estas configuraciones en el nivel de paso al pasar los pares clave y valor de configuración.

Se pueden pasar opciones en el nivel de paso. Para ver ejemplos, consulte [async executeStep(stepName, functionToExecute, [stepConfig]);](#CloudWatch_Synthetics_Library_executeStep) y [executeHttpStep(stepName, requestOptions, [callback], [stepConfig])](#CloudWatch_Synthetics_Library_executeHttpStep).

**Topics**
+ [setConfig(options)](#CloudWatch_Synthetics_Library_setConfig)
+ [Supervisión visual](#CloudWatch_Synthetics_Library_SyntheticsLogger_VisualTesting)

#### setConfig(options)
<a name="CloudWatch_Synthetics_Library_setConfig"></a>

` options ` es un objeto, que es un conjunto de opciones configurables para el valor controlado. En las siguientes secciones se explican los posibles campos en ` options `.

##### setConfig(options) para todos los canaries
<a name="CloudWatch_Synthetics_Library_setConfigall"></a>

Para los canarios que utilizan `syn-nodejs-puppeteer-3.2` o versiones posteriores, las **(opciones)** para **setConfig** pueden incluir los siguientes parámetros:
+ `includeRequestHeaders` (booleano): si se deben incluir cabeceras de solicitud en el informe. El valor predeterminado es `false`.
+ `includeResponseHeaders` (booleano): si se deben incluir cabeceras de respuesta en el informe. El valor predeterminado es `false`.
+ `restrictedHeaders` (matriz): lista de valores de cabecera que se deben ignorar si se incluyen cabeceras. Esto aplica a las cabeceras de solicitud y respuesta. Por ejemplo, puede ocultar las credenciales al pasar **includeRequestHeaders** como `true` y **restrictedHeaders** como `['Authorization']`. 
+ `includeRequestBody` (booleano): si se debe incluir el cuerpo de la solicitud en el informe. El valor predeterminado es `false`.
+ `includeResponseBody` (booleano): si se debe incluir el cuerpo de respuesta en el informe. El valor predeterminado es `false`.
**importante**  
Si habilita `includeResponseBody` o ` logResponseBody`, el objeto de datos no se devuelve en la respuesta de algunas API, como los clientes de la versión 3 de aws-sdk. Esto se debe a una limitación de Node.js y al tipo de objeto de respuesta utilizado.

 **setConfig(options) con respecto a las métricas de CloudWatch** 

Para los canarios que utilizan `syn-nodejs-puppeteer-3.1` o versiones posteriores, las **(opciones)** para **setConfig** pueden incluir los siguientes parámetros booleanos que determinan qué métricas publica el canario. El valor predeterminado para cada una de estas opciones es `true`. Las opciones que comienzan con `aggregated` determinan si la métrica se emite sin la dimensión ` CanaryName`. Se pueden utilizar estas métricas para ver los resultados agregados de todos los canaries. Las otras opciones determinan si la métrica se emite con la dimensión `CanaryName`. Se pueden usar estas métricas para ver los resultados de cada valor controlado individualmente.

Para obtener una lista de las métricas de CloudWatch que los canaries emiten, consulte [Métricas de CloudWatch que los canaries publican](CloudWatch_Synthetics_Canaries_metrics.md).
+ `failedCanaryMetric` (booleano): si se debe emitir la métrica ` Failed` (con la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `failedRequestsMetric` (booleano): si se debe emitir la métrica `Failed requests` (con la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `_2xxMetric` (booleano): si se debe emitir la métrica `2xx` (con la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `_4xxMetric` (booleano): si se debe emitir la métrica `4xx` (con la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `_5xxMetric` (booleano): si se debe emitir la métrica `5xx` (con la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `stepDurationMetric` (booleano): si se debe emitir la métrica `Step duration` (con las dimensiones `CanaryName` y `StepName`) para este valor controlado. El valor predeterminado es `true`.
+ `stepSuccessMetric` (booleano): si se debe emitir la métrica `Step success` (con las dimensiones `CanaryName` y `StepName`) para este valor controlado. El valor predeterminado es `true`.
+ `aggregatedFailedCanaryMetric` (booleano): si se debe emitir la métrica `Failed` (sin la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `aggregatedFailedRequestsMetric` (booleano): si se debe emitir la métrica `Failed Requests` (sin la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `aggregated2xxMetric` (booleano): si se debe emitir la métrica ` 2xx` (sin la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `aggregated4xxMetric` (booleano): si se debe emitir la métrica ` 4xx` (sin la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `aggregated5xxMetric` (booleano): si se debe emitir la métrica ` 5xx` (sin la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `visualMonitoringSuccessPercentMetric` (booleano): si se debe emitir la métrica `visualMonitoringSuccessPercent` para este valor controlado. El valor predeterminado es `true`.
+ `visualMonitoringTotalComparisonsMetric` (booleano): si se debe emitir la métrica `visualMonitoringTotalComparisons` para este valor controlado. El valor predeterminado es `false`.
+ `includeUrlPassword` (booleano): si se debe incluir una contraseña que aparezca en la dirección URL. De forma predeterminada, las contraseñas que aparecen en las direcciones URL se eliminan de los registros e informes para evitar que se divulgue información confidencial. El valor predeterminado es `false`.
+ `restrictedUrlParameters` (matriz): lista de la ruta URL o los parámetros de consulta que se van a editar. Esto aplica a las URL que aparecen en registros, informes y en errores. El parámetro no distingue entre mayúsculas y minúsculas. Puede pasar un asterisco (\$1) como un valor para editar todos los valores de ruta de URL y los parámetros de consulta. El valor predeterminado es una matriz vacía.
+ `logRequest` (booleano): si se debe registrar cada solicitud en los registros de valores controlados. Para canaries de UI, esto registra cada solicitud que el navegador envía. El valor predeterminado es `true`.
+ `logResponse` (booleano): si se debe registrar cada respuesta en los registros de valores controlados. Para canaries de UI, esto registra todas las respuestas que el navegador recibe. El valor predeterminado es `true`.
+ `logRequestBody` (booleano): si se deben registrar los cuerpos de la solicitud junto con las solicitudes en los registros de valores controlados. Esta configuración sólo aplica si `logRequest` es `true`. El valor predeterminado es `false` .
+ `logResponseBody` (booleano): si se deben registrar los cuerpos de respuesta junto con las respuestas en los registros de valores controlados. Esta configuración sólo aplica si `logResponse` es `true`. El valor predeterminado es ` false`.
**importante**  
Si habilita `includeResponseBody` o ` logResponseBody`, el objeto de datos no se devuelve en la respuesta de algunas API, como los clientes de la versión 3 de aws-sdk. Esto se debe a una limitación de Node.js y al tipo de objeto de respuesta utilizado.
+ `logRequestHeaders` (booleano): si se deben registrar cabeceras de solicitud junto con las solicitudes en registros de valores controlados. Esta configuración sólo aplica si `logRequest` es `true`. El valor predeterminado es ` false`.

  Debe tener en cuenta que `includeRequestHeaders` habilita cabeceras en artefactos.
+ `logResponseHeaders` (booleano): si se deben registrar cabeceras de respuesta junto con las respuestas en los registros de valores controlados. Esta configuración sólo aplica si `logResponse` es `true`. El valor predeterminado es ` false`.

  Debe tener en cuenta que `includeResponseHeaders` habilita cabeceras en artefactos.

**nota**  
Las métricas de `Duration` y de `SuccessPercent` se emiten siempre para cada valor controlado con la métrica `CanaryName` y sin ella.

##### Métodos para habilitar o desactivar métricas
<a name="CloudWatch_Synthetics_Library_setConfig_metrics"></a>

 **disableAggregatedRequestMetrics()** 

Desactiva que el valor controlado emita todas las métricas de solicitud que se emiten sin dimensión `CanaryName`.

 **disableRequestMetrics()** 

Deshabilita todas las métricas de solicitud, incluidas las métricas por valor controlado y las métricas agregadas en todos los valores controlados.

 **disableStepMetrics()** 

Desactiva todas las métricas de pasos, incluidas las métricas de éxito y de duración de los pasos.

 **enableAggregatedRequestMetrics()** 

Permite que el valor controlado emita todas las métricas de solicitud que se emiten sin dimensión ` CanaryName`.

 **enableRequestMetrics()** 

Habilita todas las métricas de solicitud, incluidas las métricas por valor controlado y las métricas agregadas en todos los valores controlados.

 **enableStepMetrics()** 

Habilita todas las métricas de pasos, incluidas las métricas de éxito y de duración de los pasos.

 **get2xxMetric()** 

Muestra si el valor controlado emite una métrica `2xx` con la dimensión ` CanaryName`.

 **get4xxMetric()** 

Muestra si el valor controlado emite una métrica `4xx` con la dimensión ` CanaryName`.

 **get5xxMetric()** 

Muestra si el valor controlado emite una métrica `5xx` con la dimensión ` CanaryName`.

 **getAggregated2xxMetric()** 

Muestra si el valor controlado emite una métrica `2xx` sin dimensión.

 **getAggregated4xxMetric()** 

Muestra si el valor controlado emite una métrica `4xx` sin dimensión.

 **getAggregatedFailedCanaryMetric()** 

Muestra si el valor controlado emite una métrica `Failed` sin dimensión.

 **getAggregatedFailedRequestsMetric()** 

Muestra si el valor controlado emite una métrica `Failed requests` sin dimensión.

 **getAggregated5xxMetric()** 

Muestra si el valor controlado emite una métrica `5xx` sin dimensión.

 **getFailedCanaryMetric()** 

Muestra si el valor controlado emite una métrica `Failed` con la dimensión ` CanaryName`.

 **getFailedRequestsMetric()** 

Muestra si el valor controlado emite una métrica `Failed requests` con la dimensión `CanaryName`.

 **getStepDurationMetric()** 

Muestra si el valor controlado emite una métrica `Duration` con la dimensión ` CanaryName` para este valor controlado.

 **getStepSuccessMetric()** 

Muestra si el valor controlado emite una métrica `StepSuccess` con la dimensión ` CanaryName` para este valor controlado.

 **with2xxMetric(\$12xxMetric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `2xx` con la dimensión `CanaryName` para este valor controlado.

 **with4xxMetric(\$14xxMetric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `4xx` con la dimensión `CanaryName` para este valor controlado.

 **with5xxMetric(\$15xxMetric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `5xx` con la dimensión `CanaryName` para este valor controlado.

 **withAggregated2xxMetric(aggregated2xxMetric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `2xx` sin dimensión para este valor controlado.

 **withAggregated4xxMetric(aggregated4xxMetric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `4xx` sin dimensión para este valor controlado.

 **withAggregated5xxMetric(aggregated5xxMetric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `5xx` sin dimensión para este valor controlado.

 ** withAggregatedFailedCanaryMetric(aggregatedFailedCanaryMetric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `Failed` sin dimensión para este valor controlado.

 ** withAggregatedFailedRequestsMetric(aggregatedFailedRequestsMetric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `Failed requests` sin dimensión para este valor controlado.

 **withFailedCanaryMetric(failedCanaryMetric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `Failed` con la dimensión `CanaryName` para este valor controlado.

 **withFailedRequestsMetric(failedRequestsMetric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `Failed requests` con la dimensión `CanaryName` para este valor controlado.

 **withStepDurationMetric(stepDurationMetric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `Duration` con la dimensión `CanaryName` para este valor controlado.

 **withStepSuccessMetric(stepSuccessMetric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica ` StepSuccess` con la dimensión `CanaryName` para este valor controlado.

##### Métodos para habilitar o desactivar otras características
<a name="CloudWatch_Synthetics_Library_setConfig_methods"></a>

 **withHarFile()** 

Acepta un argumento booleano, que especifica si se debe crear un archivo HAR para este valor controlado.

 **withStepsReport()** 

Acepta un argumento booleano, que especifica si se debe informar de un resumen de ejecución de pasos para este valor controlado.

 **withIncludeUrlPassword()** 

Acepta un argumento booleano, que especifica si se deben incluir las contraseñas que aparecen en las URL de los registros e informes.

 **withRestrictedUrlParameters()** 

Acepta una matriz de ruta de URL o parámetros de consulta para editar. Esto aplica a las URL que aparecen en registros, informes y en errores. Se puede pasar un asterisco (\$1) como un valor para redactar todos los valores de ruta de URL y los parámetros de consulta

 **withLogRequest()** 

Acepta un argumento booleano, que especifica si se debe registrar cada solicitud en los registros del valor controlado.

 **withLogResponse()** 

Acepta un argumento booleano, que especifica si se debe registrar cada respuesta en los registros del valor controlado.

 **withLogRequestBody()** 

Acepta un argumento booleano, que especifica si se debe registrar cada cuerpo de la solicitud en los registros del valor controlado.

 **withLogResponseBody()** 

Acepta un argumento booleano, que especifica si se debe registrar cada cuerpo de respuesta en los registros del valor controlado.

 **withLogRequestHeaders()** 

Acepta un argumento booleano, que especifica si se debe registrar cada cabecera de solicitud en los registros del valor controlado.

 **withLogResponseHeaders()** 

Acepta un argumento booleano, que especifica si se debe registrar cada cabecera de respuesta en los registros del valor controlado.

 **getHarFile()** 

Muestra si el valor controlado crea un archivo HAR.

 **getStepsReport()** 

Muestra si el valor controlado informa un resumen de ejecución de pasos.

 **getIncludeUrlPassword()** 

Muestra si el valor controlado incluye contraseñas que aparecen en las URL en los registros e informes.

 **getRestrictedUrlParameters()** 

Muestra si el valor controlado redacta la ruta de URL o los parámetros de consulta.

 **getLogRequest()** 

Muestra si el valor controlado registra cada solicitud en los registros del valor controlado.

 **getLogResponse()** 

Muestra si el valor controlado registra cada respuesta en los registros del valor controlado.

 **getLogRequestBody()** 

Muestra si el valor controlado registra cada cuerpo de la solicitud en los registros del valor controlado.

 **getLogResponseBody()** 

Muestra si el valor controlado registra cada cuerpo de respuesta en los registros del valor controlado.

 **getLogRequestHeaders()** 

Muestra si el valor controlado registra cada cabecera de solicitud en los registros del valor controlado.

 **getLogResponseHeaders()** 

Muestra si el valor controlado registra cada cabecera de respuesta en los registros del valor controlado.

 **Funciones para todos los valores controlados** 
+ `withIncludeRequestHeaders`(includeRequestHeaders)
+ `withIncludeResponseHeaders`(includeResponseHeaders)
+ `withRestrictedHeaders`(restrictedHeaders)
+ `withIncludeRequestBody`(includeRequestBody)
+ `withIncludeResponseBody`(includeResponseBody)
+ `enableReportingOptions`(): activa todas las opciones de informes-- **includeRequestHeaders**, **includeResponseHeaders**, **includeRequestBody** e **includeResponseBody**.
+ `disableReportingOptions`(): desactiva todas las opciones de informes-- **includeRequestHeaders**, **includeResponseHeaders**, **includeRequestBody** e **includeResponseBody**.

##### setConfig(options) para canaries de la UI
<a name="CloudWatch_Synthetics_Library_setConfigUI"></a>

Para canaries de la UI, **setConfig** puede incluir los siguientes parámetros booleanos:
+ `continueOnStepFailure` (booleano): si se debe continuar con la ejecución del script canario después de que un paso falle (este parámetro hace referencia a la función **executeStep**). Si algún paso falla, la ejecución del valor controlado seguirá marcándose como fallida. El valor predeterminado es `false`.
+ `harFile` (booleano): si se crea un archivo HAR. El valor predeterminado es `True`.
+ `screenshotOnStepStart` (booleano): si se debe tomar una captura de pantalla antes de comenzar un paso.
+ `screenshotOnStepSuccess` (booleano): si se debe tomar una captura de pantalla después de completar un paso correctamente.
+ `screenshotOnStepFailure` (booleano): si se debe tomar una captura de pantalla después de que un paso falla.

##### Métodos para habilitar o desactivar las capturas de pantalla
<a name="CloudWatch_Synthetics_Library_setConfig_screenshots"></a>

 **disableStepScreenshots()** 

Deshabilita todas las opciones de captura de pantalla (screenshotOnStepStart, screenshotOnStepSuccess, y screenshotOnStepFailure).

 **enableStepScreenshots()** 

Habilita todas las opciones de captura de pantalla (screenshotOnStepStart, screenshotOnStepSuccess, y screenshotOnStepFailure). Estos métodos no están habilitados de forma predeterminada.

 **getScreenshotOnStepFailure()** 

Muestra si el valor controlado toma una captura de pantalla después de que un paso falla.

 **getScreenshotOnStepStart()** 

Muestra si el valor controlado toma una captura de pantalla antes de iniciar un paso.

 **getScreenshotOnStepSuccess()** 

Muestra si el valor controlado toma una captura de pantalla después de completar un paso correctamente.

 **withScreenshotOnStepStart(screenshotOnStepStart)** 

Acepta un argumento booleano, que indica si se debe tomar una captura de pantalla antes de iniciar un paso.

 **withScreenshotOnStepSuccess(screenshotOnStepSuccess)** 

Acepta un argumento booleano, que indica si se debe tomar una captura de pantalla después de completar un paso correctamente.

 **withScreenshotOnStepFailure(screenshotOnStepFailure)** 

Acepta un argumento booleano, que indica si se debe tomar una captura de pantalla después de que un paso falla.

 **Uso en valores controlados de la IU** 

Primero, importe la relación de Synthetics y obtenga la configuración.

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

// Get Synthetics configuration
const synConfig = synthetics.getConfiguration();
```

A continuación, establezca la configuración para cada opción mediante llamadas al método SetConfig con una de las siguientes opciones.

```
// Set configuration values
    synConfig.setConfig({
        screenshotOnStepStart: true, 
        screenshotOnStepSuccess: false,
        screenshotOnStepFailure: false
    });
```

O

```
synConfig.withScreenshotOnStepStart(false).withScreenshotOnStepSuccess(true).withScreenshotOnStepFailure(true)
```

Para deshabilitar todas las capturas de pantalla, utilice la función `disableStepScreenshots()` como en este ejemplo.

```
synConfig.disableStepScreenshots();
```

Puede habilitar y desactivar las capturas de pantalla en cualquier punto del código. Por ejemplo, para desactivar las capturas de pantalla solo para un paso, se deben desactivar antes de ejecutar ese paso y habilitarlas después del paso.

##### setConfig(options) para canaries de la API
<a name="CloudWatch_Synthetics_Library_setConfigAPI"></a>

Para los canaries de la API, **setConfig** puede incluir los siguientes parámetros booleanos:
+ `continueOnHttpStepFailure` (booleano): si se continúa con la ejecución del script valor controlado después de que se produce un error en un paso HTTP (esto se refiere a la función **executeHttpStep**). Si algún paso falla, la ejecución del valor controlado seguirá marcándose como fallida. El valor predeterminado es `true`.

#### Supervisión visual
<a name="CloudWatch_Synthetics_Library_SyntheticsLogger_VisualTesting"></a>

La supervisión visual compara las capturas de pantalla que se toman durante una ejecución de un valor controlado con las capturas de pantalla que se toman durante una ejecución de un valor controlado de línea de base. Si la discrepancia entre las dos capturas de pantalla está más allá de un porcentaje umbral, el valor controlado falla y se podrán ver las áreas con diferencias resaltadas en color en el informe de ejecución del valor controlado. La supervisión visual es compatible con canaries que ejecutan **syn-puppeteer-node-3.2** y versiones posteriores. Por el momento no es compatible con canaries que ejecutan Python y Selenium.

Para habilitar la supervisión visual, agregue la siguiente línea de código al script valor controlado. Para obtener más información, consulte [Clase SyntheticsConfiguration](#CloudWatch_Synthetics_Library_SyntheticsConfiguration).

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

La primera vez que el valor controlado se ejecuta correctamente después de agregar esta línea al script, utiliza las capturas de pantalla que se toman durante esa ejecución como línea de base para la comparación. Después de la primera ejecución del valor controlado, se puede usar la consola de CloudWatch para editar el valor controlado para realizar cualquiera de las siguientes acciones:
+ Establecer la siguiente ejecución del valor controlado como la nueva línea de base.
+ Establecer límites en la captura de pantalla de línea de base actual para designar áreas de la captura de pantalla que se ignorarán durante las comparaciones visuales.
+ Eliminar una captura de pantalla de ser utilizada para la supervisión visual.

Para obtener más información sobre cómo usar la consola de CloudWatch para editar un valor controlado, consulte [Edición o eliminación de un valor controlado](synthetics_canaries_deletion.md).

 **Otras opciones para la supervisión visual** 

 ** syntheticsConfiguration.withVisualVarianceThresholdPercentage(desiredPercentage)** 

Establezca el porcentaje aceptable para la desviación de captura de pantalla en las comparaciones visuales.

 ** syntheticsConfiguration.withVisualVarianceHighlightHexColor(“\$1fafa00")** 

Establezca el color de resaltado que designa las áreas de desviación cuando vea los informes de ejecución del valor controlado que utilizan supervisión visual.

 ** syntheticsConfiguration.withFailCanaryRunOnVisualVariance(failCanary)** 

Establezca si el valor controlado falla o no cuando hay una diferencia visual superior al umbral. El valor predeterminado es que el valor controlado falle.

### Registrador de Synthetics
<a name="CloudWatch_Synthetics_Library_SyntheticsLogger"></a>

SyntheticsLogger escribe registros tanto en la consola como en un archivo de registro local, en el mismo nivel de registro. Este archivo de registro se escribe en ambas ubicaciones solo si el nivel de registro coincide con el deseado para la función de registro a la que se llamó o está por debajo de este.

Los valores “DEBUG:“, “INFO:“, etc. se anteponen a las instrucciones de registro del archivo de registro local para que coincidan con el nivel de registro de la función a la que se llamó.

Puede utilizar SyntheticsLogger si desea ejecutar la biblioteca de Synthetics en el mismo nivel de registro que el registro de valores controlados de Synthetics.

No es necesario que se utilice SyntheticsLogger para crear un archivo de registros que se carga en la ubicación de resultados de S3. En su lugar, puede crear un archivo de registro distinto en la carpeta ` /tmp`. Los archivos creados en la carpeta `/tmp` se cargan en la ubicación de resultados de S3 como artefactos. 

Para utilizar el registrador de la biblioteca de Synthetics:

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

Definiciones de funciones útiles:

 **log.debug(*message*, *ex* );** 

Parámetros: *message* es el mensaje que se va a registrar. *ex* es la excepción que se registra, si la hay

Ejemplo:

```
log.debug("Starting step - login.");
```

 **log.error(*message*, *ex* );** 

Parámetros: *message* es el mensaje que se va a registrar. *ex* es la excepción que se registra, si la hay

Ejemplo:

```
try {
  await login();
catch (ex) {
  log.error("Error encountered in step - login.", ex);
}
```

 **log.info(*message*, *ex* );** 

Parámetros: *message* es el mensaje que se va a registrar. *ex* es la excepción que se registra, si la hay

Ejemplo:

```
log.info("Successfully completed step - login.");
```

 **log.log(*message*, *ex* );** 

Este es un alias para `log.info`. 

Parámetros: *message* es el mensaje que se va a registrar. *ex* es la excepción que se registra, si la hay

Ejemplo:

```
 log.log("Successfully completed step - login.");
```

 **log.warn(*message*, *ex* );** 

Parámetros: *message* es el mensaje que se va a registrar. *ex* es la excepción que se registra, si la hay

Ejemplo:

```
log.warn("Exception encountered trying to publish CloudWatch Metric.", ex);
```

### Clase de SyntheticSloghelper
<a name="CloudWatch_Synthetics_Library_SyntheticsLogHelper"></a>

La clase `SyntheticsLogHelper` está disponible en el tiempo de ejecución ` syn-nodejs-puppeteer-3.2` y en tiempos de ejecución posteriores. Ya está inicializado en la biblioteca CloudWatch Synthetics y está configurado con la configuración de Synthetics. Puede agregar esto como una relación en el script. Esta clase le permite borrar las URL, encabezados y mensajes de error para redactar información confidencial.

**nota**  
Synthetics sanitiza todas las URL y los mensajes de error que registra antes de incluirlos en los registros, informes, archivos HAR y errores de ejecución de los valores controlados basados en la configuración `restrictedUrlParameters` de Synthetics. Tiene que usar ` getSanitizedUrl` o `getSanitizedErrorMessage` solo si está registrando direcciones URL o errores en el script. Synthetics no almacena ningún artefacto de valores controlados excepto los errores de valores controlados que el script lanza. Los artefactos de ejecución de valores controlados se almacenan en la cuenta del cliente. Para obtener más información, consulte [Consideraciones de seguridad para los canaries de Synthetics](servicelens_canaries_security.md).

**Topics**
+ [getSanitizedUrl(url, stepConfig = null)](#CloudWatch_Synthetics_Library_getSanitizedUrl)
+ [getSanitizedErrorMessage](#CloudWatch_Synthetics_Library_getSanitizedErrorMessage)
+ [getSanitizedHeaders(headers, stepConfig=null)](#CloudWatch_Synthetics_Library_getSanitizedHeaders)

#### getSanitizedUrl(url, stepConfig = null)
<a name="CloudWatch_Synthetics_Library_getSanitizedUrl"></a>

Esta función está disponible en `syn-nodejs-puppeteer-3.2` y en posteriores. Devuelve cadenas de url sanitizadas basadas en la configuración. Puede optar por eliminar los parámetros de las URL confidenciales como la contraseña y el access\$1token al establecer la propiedad `restrictedUrlParameters`. De forma predeterminada, las contraseñas de las URL se eliminan. Si es necesario, puede habilitar las contraseñas de las URL si configura `includeUrlPassword` a verdadero. 

Esta función arroja un error si la URL pasada no es una URL válida.

 **Parámetros ** 
+ Una *url* es una cadena y es la URL para sanitizar.
+  *stepConfig* (Opcional) anula la configuración global de Synthetics para esta función. Si `stepConfig` no se especifica, la configuración global se utiliza para sanitizar la URL.

 **Ejemplo ** 

En este ejemplo se usa la siguiente URL de ejemplo: ` https://example.com/learn/home?access_token=12345&token_type=Bearer&expires_in=1200`. En este ejemplo, `access_token` contiene su información confidencial que no debe registrarse. Debe tener en cuenta que los servicios de Synthetics no almacenan ningún artefacto de ejecución de valores controlados. Los artefactos como registros, capturas de pantalla e informes se almacenan en un bucket de Amazon S3 de la cuenta de cliente.

El primer paso es configurar la configuración de 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);
```

A continuación, sanitice y registre la 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');
```

Esto registra lo siguiente en el registro del valor controlado.

```
My example url is: https://example.com/learn/home?access_token=REDACTED&token_type=Bearer&expires_in=1200
```

Puede anular la configuración de Synthetics para una URL si especifica un parámetro opcional que contenga las opciones de configuración de Synthetics, como en el siguiente ejemplo .

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

El ejemplo anterior elimina todos los parámetros de consulta y se registra de la siguiente manera:

```
My example url is: https://example.com/learn/home?access_token=REDACTED&token_type=REDACTED&expires_in=REDACTED
```

#### getSanitizedErrorMessage
<a name="CloudWatch_Synthetics_Library_getSanitizedErrorMessage"></a>

Esta función está disponible en `syn-nodejs-puppeteer-3.2` y en posteriores. Devuelve cadenas de error sanitizadas al sanitizar cualquier URL presente en función de la configuración de Synthetics. Puede optar por anular la configuración global de Synthetics cuando llame a esta función mediante la especificación de un parámetro `stepConfig`. 

 **Parámetros ** 
+ *error* es el error para sanitizar. Puede ser un objeto Error o una cadena.
+  *stepConfig* (Opcional) anula la configuración global de Synthetics para esta función. Si `stepConfig` no se especifica, la configuración global se utiliza para sanitizar la URL.

 **Ejemplo ** 

En este ejemplo se utiliza el siguiente error: ` Failed to load url: https://example.com/learn/home?access_token=12345&token_type=Bearer&expires_in=1200`

El primer paso es configurar la configuración de 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'];
});
```

A continuación, sanitice y registre el mensaje de error

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

Esto registra lo siguiente en el registro del valor controlado.

```
Failed to load url: https://example.com/learn/home?access_token=REDACTED&token_type=Bearer&expires_in=1200
```

#### getSanitizedHeaders(headers, stepConfig=null)
<a name="CloudWatch_Synthetics_Library_getSanitizedHeaders"></a>

Esta función está disponible en `syn-nodejs-puppeteer-3.2` y en posteriores. Devuelve encabezados sanitizados basados en la propiedad `restrictedHeaders` de ` syntheticsConfiguration`. Los encabezados especificados en la propiedad `restrictedHeaders` se editan a partir de registros, archivos HAR e informes. 

 **Parámetros ** 
+ *headers* (cabeceras) es un objeto que contiene las cabeceras para desinfectar.
+ *stepConfig* (Opcional) anula la configuración global de Synthetics para esta función. Si `stepConfig` no se especifica, la configuración global se utiliza para desinfectar las cabeceras.

## Funciones y clases de biblioteca Node.js que solo se aplican a los canaries de la UI
<a name="CloudWatch_Synthetics_Library_UIcanaries"></a>

Las siguientes funciones de la biblioteca de CloudWatch Synthetics solo son útiles para los canaries de la UI.

**Topics**
+ [Clase de Synthetics](#CloudWatch_Synthetics_Library_Synthetics_Class)
+ [Clase BrokenLinkCheckerReport](#CloudWatch_Synthetics_Library_BrokenLinkCheckerReport)
+ [Clase SyntheticsLink](#CloudWatch_Synthetics_Library_SyntheticsLink)

### Clase de Synthetics
<a name="CloudWatch_Synthetics_Library_Synthetics_Class"></a>

Las siguientes funciones están en la clase de Synthetics.

**Topics**
+ [async addUserAgent(page, userAgentString);](#CloudWatch_Synthetics_Library_addUserAgent)
+ [async executeStep(stepName, functionToExecute, [stepConfig]);](#CloudWatch_Synthetics_Library_executeStep)
+ [getDefaultLaunchOptions();](#CloudWatch_Synthetics_Library_getDefaultLaunchOptions)
+ [getPage();](#CloudWatch_Synthetics_Library_getPage)
+ [getRequestResponseLogHelper();](#CloudWatch_Synthetics_Library_getRequestResponseLogHelper)
+ [Lanzamiento (opciones)](#CloudWatch_Synthetics_Library_LaunchOptions)
+ [RequestResponseLogHelper class](#CloudWatch_Synthetics_Library_RequestResponseLogHelper)
+ [setRequestResponseLogHelper();](#CloudWatch_Synthetics_Library_setRequestResponseLogHelper)
+ [async takeScreenshot(name, suffix);](#CloudWatch_Synthetics_Library_takeScreenshot)

#### async addUserAgent(page, userAgentString);
<a name="CloudWatch_Synthetics_Library_addUserAgent"></a>

Esta función añade *userAgentString* al encabezado de agente de usuario de la página especificada.

Ejemplo:

```
await synthetics.addUserAgent(page, "MyApp-1.0");
```

Los resultados del encabezado del agente de usuario de la página se establecen en ` browsers-user-agent-header-valueMyApp-1.0`

#### async executeStep(stepName, functionToExecute, [stepConfig]);
<a name="CloudWatch_Synthetics_Library_executeStep"></a>

Ejecuta el paso proporcionado y lo integra con iniciar/superar/fallar el registro, iniciar/superar/fallar capturas de pantalla, superar/fallar y métricas de duración.

**nota**  
Si utiliza el `syn-nodejs-2.1` o una versión posterior de tiempo de ejecución, puede configurar si se toman capturas de pantalla y cuándo. Para obtener más información, consulte [Clase SyntheticsConfiguration](#CloudWatch_Synthetics_Library_SyntheticsConfiguration).

La función `executeStep` también hace lo siguiente:
+ Registra que el paso se ha iniciado.
+ Toma una captura de pantalla denominada `<stepName>-starting`.
+ Inicia un temporizador.
+ Ejecuta la función proporcionada.
+ Si la función devuelve resultados normalmente, cuenta como superada. Si la función falla, cuenta como error.
+ Finaliza el temporizador.
+ Registra si el paso se ha superado o no.
+ Toma una captura de pantalla denominada `<stepName>-succeeded` o ` <stepName>-failed`.
+ Emite la métrica `stepName` `SuccessPercent`, 100 para superado o 0 para no superado.
+ Emite la métrica `stepName` `Duration`, con un valor basado en las horas de inicio y de finalización del paso.
+ Por último, devuelve el mismo resultado que `functionToExecute` o vuelve a arrojar el mismo error que `functionToExecute`.

Si el valor controlado utiliza el tiempo de ejecución `syn-nodejs-2.0` o uno posterior, esta función también agrega un resumen de ejecución de pasos al informe del valor controlado. El resumen incluye detalles acerca de cada paso, como la hora de inicio, la hora de finalización, el estado (SUPERADO o NO SUPERADO), el motivo del error (si hubo) y las capturas de pantalla que se tomaron durante la ejecución de cada paso.

Ejemplo:

```
await synthetics.executeStep('navigateToUrl', async function (timeoutInMillis = 30000) {
           await page.goto(url, {waitUntil: ['load', 'networkidle0'], timeout: timeoutInMillis});});
```

Respuesta:

Devuelve el mismo resultado que `functionToExecute`.

 **Actualizaciones con syn-nodejs-2.2** 

A partir de `syn-nodejs-2.2`, se pueden pasar opcionalmente configuraciones de pasos para anular las configuraciones de CloudWatch Synthetics en el nivel de pasos. Para obtener una lista de opciones que puede pasar a `executeStep`, consulte [Clase SyntheticsConfiguration](#CloudWatch_Synthetics_Library_SyntheticsConfiguration).

En el siguiente ejemplo se anula la configuración predeterminada `false` para ` continueOnStepFailure` a `true` y se especifica cuándo tomar capturas de pantalla.

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

#### getDefaultLaunchOptions();
<a name="CloudWatch_Synthetics_Library_getDefaultLaunchOptions"></a>

La función `getDefaultLaunchOptions()` muestra los resultados de las opciones de lanzamiento del navegador que CloudWatch Synthetics utiliza. Para más información, consulte [Tipo de opciones de lanzamiento](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>

Devuelve la página abierta actual como objeto de Puppeteer. Para obtener más información, consulte [Puppeteer API v1.14.0](https://github.com/puppeteer/puppeteer/blob/v1.14.0/docs/api.md).

Ejemplo:

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

Respuesta:

La página (objeto de Puppeteer) que está abierta en la sesión del explorador actual.

#### getRequestResponseLogHelper();
<a name="CloudWatch_Synthetics_Library_getRequestResponseLogHelper"></a>

**importante**  
En los canaries que utilizan el tiempo de ejecución `syn-nodejs-puppeteer-3.2` o posteriores, esta función está obsoleta junto con la clase `RequestResponseLogHelper`. El uso de esta función hace que aparezca una advertencia en los registros de los valores controlados. Esta función se eliminará en versiones futuras de tiempo de ejecución. Si está utilizando esta función, utilice en su lugar [RequestResponseLogHelper class](#CloudWatch_Synthetics_Library_RequestResponseLogHelper). 

Utilice esta función como patrón generador para modificar las marcas de registro de solicitudes y respuestas.

Ejemplo:

```
synthetics.setRequestResponseLogHelper(getRequestResponseLogHelper().withLogRequestHeaders(false));;
```

Respuesta:

```
{RequestResponseLogHelper}
```

#### Lanzamiento (opciones)
<a name="CloudWatch_Synthetics_Library_LaunchOptions"></a>

Las opciones para esta función sólo están disponibles en la versión de tiempo de ejecución `syn-nodejs-2.1` o en posteriores.

Esta función solo se usa para los canaries de la UI. Cierra el navegador existente y lanza uno nuevo.

**nota**  
CloudWatch Synthetics siempre lanza un navegador antes de comenzar a ejecutar el script. No es necesario que llame un lanzamiento() a menos que desee lanzar un navegador nuevo con opciones personalizadas.

(opciones) es un conjunto configurable de opciones para configurar en el navegador. Para obtener más información, consulte [Tipo de opciones de lanzamiento](https://pptr.dev/browsers-api/browsers.launchoptions/).

Si llama a esta función sin opciones, Synthetics lanza un navegador con argumentos predeterminados, `executablePath` y `defaultViewport`. La ventana gráfica predeterminada en CloudWatch Synthetics es 1920 x 1080.

Se pueden anular los parámetros de lanzamiento que CloudWatch Synthetics utiliza y pasar parámetros adicionales al lanzar el navegador. Por ejemplo, el siguiente fragmento de código inicia un navegador con argumentos predeterminados y una ruta ejecutable predeterminada, pero con una ventana gráfica de 800 x 600.

```
await synthetics.launch({
        defaultViewport: { 
            "deviceScaleFactor": 1, 
            "width": 800,
            "height": 600 
    }});
```

En el siguiente código de muestra se agrega un nuevo parámetro `ignoreHTTPSErrors` a los parámetros de lanzamiento de CloudWatch Synthetics:

```
await synthetics.launch({
        ignoreHTTPSErrors: true
 });
```

Puede desactivar la seguridad web si agrega un indicador `--disable-web-security` a los argumentos en los parámetros de lanzamiento de CloudWatch Synthetics:

```
// This function adds the --disable-web-security flag to the launch parameters
const defaultOptions = await synthetics.getDefaultLaunchOptions();
const launchArgs = [...defaultOptions.args, '--disable-web-security'];
await synthetics.launch({
     args: launchArgs
  });
```

#### RequestResponseLogHelper class
<a name="CloudWatch_Synthetics_Library_RequestResponseLogHelper"></a>

**importante**  
En los canaries que utilizan el tiempo de ejecución `syn-nodejs-puppeteer-3.2` o posteriores, esta clase está obsoleta. El uso de esta clase hace que aparezca una advertencia en los registros de los valores controlados. Esta función se eliminará en versiones futuras de tiempo de ejecución. Si está utilizando esta función, utilice en su lugar [RequestResponseLogHelper class](#CloudWatch_Synthetics_Library_RequestResponseLogHelper).

Controla la configuración y la creación en detalle de las representaciones de cadena de cargas de solicitud y respuesta. 

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

Ejemplo:

```
synthetics.setRequestResponseLogHelper(getRequestResponseLogHelper()
.withLogRequestPostData(true)
.withLogRequestHeaders(true)
.withLogResponseHeaders(true));
```

Respuesta:

```
{RequestResponseLogHelper}
```

#### setRequestResponseLogHelper();
<a name="CloudWatch_Synthetics_Library_setRequestResponseLogHelper"></a>

**importante**  
En los canaries que utilizan el tiempo de ejecución `syn-nodejs-puppeteer-3.2` o posteriores, esta función está obsoleta junto con la clase `RequestResponseLogHelper`. El uso de esta función hace que aparezca una advertencia en los registros de los valores controlados. Esta función se eliminará en versiones futuras de tiempo de ejecución. Si está utilizando esta función, utilice en su lugar [RequestResponseLogHelper class](#CloudWatch_Synthetics_Library_RequestResponseLogHelper). 

Utilice esta función como patrón generador para establecer las marcas de registro de solicitudes y respuestas.

Ejemplo:

```
synthetics.setRequestResponseLogHelper().withLogRequestHeaders(true).withLogResponseHeaders(true);
```

Respuesta:

```
{RequestResponseLogHelper}
```

#### async takeScreenshot(name, suffix);
<a name="CloudWatch_Synthetics_Library_takeScreenshot"></a>

Toma una captura de pantalla (.PNG) de la página actual con nombre y un sufijo (opcional).

Ejemplo:

```
await synthetics.takeScreenshot("navigateToUrl", "loaded")
```

Este ejemplo captura y carga una captura de pantalla denominada ` 01-navigateToUrl-loaded.png` al bucket de S3 del valor controlado.

Puede tomar una captura de pantalla para un paso del valor controlado en particular al pasar ` stepName` como primer parámetro. Las capturas de pantalla están vinculadas al paso del valor controlado en los informes, para ayudarlo a realizar un rastreo de cada paso durante la depuración.

Los valores controlados de CloudWatch Synthetics toman capturas de pantalla automáticamente antes de comenzar un paso (la función `executeStep`) y después de la finalización del paso (a menos que configure el valor controlado para desactivar las capturas de pantalla). Puede tomar más capturas de pantalla si pasa el nombre del paso en la función `takeScreenshot`.

El siguiente ejemplo toma una captura de pantalla con `signupForm` como el valor de `stepName`. La captura de pantalla se denominará ` 02-signupForm-address` y se vinculará al paso denominado ` signupForm` en el informe del valor controlado.

```
await synthetics.takeScreenshot('signupForm', 'address')
```

### Clase BrokenLinkCheckerReport
<a name="CloudWatch_Synthetics_Library_BrokenLinkCheckerReport"></a>

Esta clase proporciona métodos para agregar un enlace Synthetics. Solo se admite en canaries que utilizan la versión `syn-nodejs-2.0-beta` de tiempo de ejecución o posteriores. 

Para utilizar `BrokenLinkCheckerReport`, incluya las siguientes líneas en el script:

```
const BrokenLinkCheckerReport = require('@aws/synthetics-broken-link-checker-report');
            
const brokenLinkCheckerReport = new BrokenLinkCheckerReport();
```

Definiciones de funciones útiles:

 **addLink(*syntheticsLink*, isBroken)** 

` syntheticsLink ` es un objeto ` SyntheticsLink` que representa un enlace. Esta función agrega el enlace de acuerdo con el código de estado. De forma predeterminada, considera que un enlace se rompe si el código de estado no está disponible o si el código de estado es 400 o superior. Puede anular este comportamiento predeterminado si pasa el parámetro opcional `isBrokenLink` con un valor de `true` o `false`.

Esta función no tiene un valor de retorno.

 **getLinks()** 

Esta función muestra los resultados de una matriz de los objetos `SyntheticsLink` que se incluyen en el informe del verificador de enlaces que no funcionan.

 **getTotalBrokenLinks()** 

Esta función muestra los resultados de un número que representa el número total de enlaces que no funcionan.

 **getTotalLinksChecked()** 

Esta función muestra los resultados de un número que representa el número total de enlaces incluidos en el informe.

 **Cómo utilizar BrokenLinkCheckerReport** 

El siguiente fragmento de código de script valor controlado muestra un ejemplo de navegación a un enlace que se agrega al informe del verificador de enlaces que no funcionan.

1. Importe `SyntheticsLink`, `BrokenLinkCheckerReport`, y ` 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. Para agregar un enlace al informe, cree una instancia de ` BrokenLinkCheckerReport`.

   ```
   let brokenLinkCheckerReport = new BrokenLinkCheckerReport();
   ```

1. Desplácese hasta la URL y agréguela al informe del verificador de vínculos que no funcionan.

   ```
   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. Agregue el informe a Synthetics. Esto crea un archivo JSON llamado ` BrokenLinkCheckerReport.json` en el bucket de S3 para cada ejecución del valor controlado. Se puede ver un informe de enlaces en la consola para cada ejecución de valores controlados junto con capturas de pantalla, registros y archivos HAR.

   ```
   await synthetics.addReport(brokenLinkCheckerReport);
   ```

### Clase SyntheticsLink
<a name="CloudWatch_Synthetics_Library_SyntheticsLink"></a>

Esta clase proporciona métodos para ajustar la información. Solo se admite en canaries que utilizan la versión `syn-nodejs-2.0-beta` de tiempo de ejecución o posteriores. 

Para utilizar `SyntheticsLink`, incluya las siguientes líneas en el script:

```
const SyntheticsLink = require('@aws/synthetics-link');

const syntheticsLink = new SyntheticsLink("https://www.amazon.com");
```

La función muestra los resultados de . `syntheticsLinkObject`

Definiciones de funciones útiles:

 **withUrl(*url*)** 

` url ` es una cadena de URL. La función muestra los resultados de `syntheticsLinkObject`.

 **withText(*text*)** 

` text ` es una cadena que representa el texto de anclaje. La función muestra los resultados de `syntheticsLinkObject`. Añade texto de anclaje correspondiente al enlace.

 **withParentUrl(*parentUrl*)** 

` parentUrl ` es una cadena que representa la URL principal (página fuente). La función muestra los resultados de . `syntheticsLink Object`

 **withStatusCode(*statusCode*)** 

` statusCode ` es una cadena que representa el código de estado. La función muestra los resultados de . `syntheticsLinkObject`

 **withFailureReason(*failureReason*)** 

` failureReason ` es una cadena que representa la causa del error. La función muestra los resultados de . `syntheticsLink Object`

 **addScreenshotResult(*screenshotResult*)** 

` screenshotResult ` es un objeto. Es una instancia de `ScreenshotResult` que la función de Synthetics `takeScreenshot` ha mostrado. El objeto incluye lo siguiente:
+ `fileName`— Una cadena que representa el ` screenshotFileName`
+ `pageUrl` (opcional)
+ `error` (opcional)

## Clases y funciones de biblioteca Node.js que se aplican sólo a los canaries de la API
<a name="CloudWatch_Synthetics_Library_APIcanaries"></a>

Las siguientes funciones de biblioteca de CloudWatch Synthetics para Node.js solo son útiles para los API canaries de la UI.

**Topics**
+ [executeHttpStep(stepName, requestOptions, [callback], [stepConfig])](#CloudWatch_Synthetics_Library_executeHttpStep)

### executeHttpStep(stepName, requestOptions, [callback], [stepConfig])
<a name="CloudWatch_Synthetics_Library_executeHttpStep"></a>

Ejecuta la solicitud HTTP proporcionada como un paso y publica `SuccessPercent` (aprobar o no aprobar) y las métricas `Duration`.

**executeHttpStep** utiliza funciones nativas HTTP o HTTPS que no son visibles a simple vista de acuerdo al protocolo que se ha especificado en la solicitud.

Esta función también agrega un resumen de ejecución de pasos al informe del valor controlado. El resumen incluye detalles sobre cada solicitud HTTP, como los siguientes:
+ Hora de inicio
+ Hora de finalización
+ Estado (APROBADO o NO APROBADO)
+ Razón del error, si hubo
+ Detalles de llamada HTTP como cabeceras de solicitud o respuesta, cuerpo, código de estado, mensaje de estado y tiempos de rendimiento. 

**Topics**
+ [Parameters](#CloudWatch_Synthetics_Library_executeHttpStep_parameters)
+ [Ejemplos de uso de executeHttpStep](#CloudWatch_Synthetics_Library_executeHttpStep_examples)

#### Parameters
<a name="CloudWatch_Synthetics_Library_executeHttpStep_parameters"></a>

 **stepName(*String*)** 

Especifica el nombre del paso. Este nombre también se utiliza para publicar métricas de CloudWatch para este paso.

 **requestOptions(*Object or String*)** 

El valor de este parámetro puede ser una URL, una cadena URL o un objeto. Si es un objeto, entonces debe ser un conjunto de opciones configurables para realizar una solicitud HTTP. Es compatible con todas las opciones en [http.request(options[, callback])](https://nodejs.org/api/http.html#http_http_request_options_callback) en el documento de Node.js.

Además de estas opciones de Node.js, **requestOptions** admite el parámetro adicional `body`. Puede utilizar el parámetro `body` para pasar datos como un cuerpo de la solicitud.

 **callback(*response*)** 

(Opcional) Esta es una función de usuario que se invoca con la respuesta HTTP. La respuesta es del tipo [Clase: http.IncomingMessage](https://nodejs.org/api/http.html#http_class_http_incomingmessage).

 **stepConfig(*object*)** 

(Opcional) Utilice este parámetro para anular configuraciones globales de Synthetics con una configuración diferente para este paso.

#### Ejemplos de uso de executeHttpStep
<a name="CloudWatch_Synthetics_Library_executeHttpStep_examples"></a>

La siguiente serie de ejemplos se crean entre sí para ilustrar los diversos usos de esta opción.

Este primer ejemplo configura los parámetros de solicitud. Puede pasar una URL como **requestOptions**:

```
let requestOptions = 'https://www.amazon.com';
```

O puede pasar un conjunto de opciones:

```
let requestOptions = {
        'hostname': 'myproductsEndpoint.com',
        'method': 'GET',
        'path': '/test/product/validProductName',
        'port': 443,
        'protocol': 'https:'
    };
```

El siguiente ejemplo crea una función de devolución de llamada que acepta una respuesta. De forma predeterminada, si no se especifica **callback** (devolución de llamada), CloudWatch Synthetics valida que el estado esté entre 200 y 299 inclusive.

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

El siguiente ejemplo crea una configuración para este paso que reemplaza la configuración global de CloudWatch Synthetics. La configuración de pasos de este ejemplo permite las cabeceras de solicitud, las cabeceras de respuesta, el cuerpo de la solicitud (datos posteriores) y el cuerpo de la respuesta en el informe y restringe los valores de las cabeceras de ‘X-Amz-Security-Token’ y de ‘Autorización’. De forma predeterminada, estos valores no se incluyen en el informe por motivos de seguridad. Si elige incluirlos, los datos solo se almacenan en su bucket de 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
};
```

Este último ejemplo pasa su solicitud a **executeHttpStep** y nombra el paso.

```
await synthetics.executeHttpStep('Verify GET products API', requestOptions, callback, stepConfig);
```

Con este conjunto de ejemplos, CloudWatch Synthetics agrega los detalles de cada paso al informe y genera métricas para cada paso mediante **stepName**.

 Se podrán ver `successPercent` y métricas `duration` para el paso `Verify GET products API`. Puede supervisar el rendimiento de la API si supervisa las métricas de los pasos de llamadas a la API. 

Para obtener un script completo de ejemplo que utilice estas funciones, consulte [Valor controlado de la API de varios pasos](CloudWatch_Synthetics_Canaries_Samples.md#CloudWatch_Synthetics_Canaries_Samples_APIsteps).

# Funciones de la biblioteca disponibles para los scripts de valores controlados de Python que usan Selenium
<a name="CloudWatch_Synthetics_Canaries_Library_Python"></a>

Esta sección enumera las funciones de biblioteca Selenium disponibles para los scripts valores controlados de Python.

**Topics**
+ [Clases y funciones de biblioteca de Python y Selenium que se aplican a todos los canaries](#CloudWatch_Synthetics_Library_allcanaries_Python)
+ [Clases y funciones de biblioteca de Python y Selenium que se aplican solo a canaries de la UI](#CloudWatch_Synthetics_Library_Python_UIcanaries)

## Clases y funciones de biblioteca de Python y Selenium que se aplican a todos los canaries
<a name="CloudWatch_Synthetics_Library_allcanaries_Python"></a>

Las siguientes funciones de biblioteca de CloudWatch Synthetics para Python son útiles para todos los canaries.

**Topics**
+ [Clase SyntheticsConfiguration](#CloudWatch_Synthetics_Library_SyntheticsConfiguration_Python)
+ [Clase SyntheticsLogger](#CloudWatch_Synthetics_Library_SyntheticsLogger_Python)

### Clase SyntheticsConfiguration
<a name="CloudWatch_Synthetics_Library_SyntheticsConfiguration_Python"></a>

Se puede utilizar la clase SyntheticsConfiguration para configurar el comportamiento de las funciones de biblioteca de Synthetics. Por ejemplo, puede utilizar esta clase para configurar la función ` executeStep()` para no tomar capturas de pantalla.

Se pueden establecer las configuraciones de CloudWatch Synthetics a nivel global.

Definiciones de la función

#### set\$1config(options)
<a name="CloudWatch_Synthetics_Library_setConfig_Python"></a>

```
from aws_synthetics.common import synthetics_configuration
```

` options ` es un objeto, que es un conjunto de opciones configurables para el valor controlado. En las siguientes secciones se explican los posibles campos en ` options `.
+ `screenshot_on_step_start` (booleano): si se debe tomar una captura de pantalla antes de comenzar un paso.
+ `screenshot_on_step_success` (booleano): si se debe tomar una captura de pantalla después de completar un paso correctamente.
+ `screenshot_on_step_failure` (booleano): si se debe tomar una captura de pantalla después de que un paso falla.

 **with\$1screenshot\$1on\$1step\$1start(screenshot\$1on\$1step\$1start)** 

Acepta un argumento booleano, que indica si se debe tomar una captura de pantalla antes de iniciar un paso.

 **with\$1screenshot\$1on\$1step\$1success(screenshot\$1on\$1step\$1success)** 

Acepta un argumento booleano, que indica si se debe tomar una captura de pantalla después de completar un paso correctamente.

 **with\$1screenshot\$1on\$1step\$1failure(screenshot\$1on\$1step\$1failure)** 

Acepta un argumento booleano, que indica si se debe tomar una captura de pantalla después de que un paso falla.

 **get\$1screenshot\$1on\$1step\$1start()** 

Muestra si se debe tomar una captura de pantalla antes de iniciar un paso.

 **get\$1screenshot\$1on\$1step\$1success()** 

Muestra si se debe realizar una captura de pantalla después de completar un paso correctamente.

 **get\$1screenshot\$1on\$1step\$1failure()** 

Muestra si se debe tomar una captura de pantalla después de que un paso falla.

 **disable\$1step\$1screenshots()** 

Desactiva todas las opciones de captura de pantalla (get\$1screenshot\$1on\$1step\$1start, get\$1screenshot\$1on\$1step\$1success, y get\$1screenshot\$1on\$1step\$1failure).

 **enable\$1step\$1screenshots()** 

Habilita todas las opciones de captura de pantalla (get\$1screenshot\$1on\$1step\$1start, get\$1screenshot\$1on\$1step\$1success y get\$1screenshot\$1on\$1step\$1failure). Estos métodos no están habilitados de forma predeterminada.

 **setConfig(options) con respecto a las métricas de CloudWatch** 

Para los canarios que utilizan `syn-python-selenium-1.1` o versiones posteriores, las **(opciones)** para **setConfig** pueden incluir los siguientes parámetros booleanos que determinan qué métricas publica el canario. El valor predeterminado para cada una de estas opciones es `true`. Las opciones que comienzan con ` aggregated` determinan si la métrica se emite sin la dimensión ` CanaryName`. Se pueden utilizar estas métricas para ver los resultados agregados de todos los canaries. Las otras opciones determinan si la métrica se emite con la dimensión `CanaryName`. Se pueden usar estas métricas para ver los resultados de cada valor controlado individualmente.

Para obtener una lista de las métricas de CloudWatch que los canaries emiten, consulte [Métricas de CloudWatch que los canaries publican](CloudWatch_Synthetics_Canaries_metrics.md).
+ `failed_canary_metric` (booleano): si se debe emitir la métrica ` Failed` (con la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `failed_requests_metric` (booleano): si se debe emitir la métrica `Failed requests` (con la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `2xx_metric` (booleano): si se debe emitir la métrica `2xx` (con la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `4xx_metric` (booleano): si se debe emitir la métrica `4xx` (con la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `5xx_metric` (booleano): si se debe emitir la métrica `5xx` (con la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `step_duration_metric` (booleano): si se debe emitir la métrica `Step duration` (con las dimensiones `CanaryName` y `StepName`) para este valor controlado. El valor predeterminado es `true`.
+ `step_success_metric` (booleano): si se debe emitir la métrica `Step success` (con las dimensiones `CanaryName` y `StepName`) para este valor controlado. El valor predeterminado es `true`.
+ `aggregated_failed_canary_metric` (booleano): si se debe emitir la métrica `Failed` (sin la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `aggregated_failed_requests_metric` (booleano): si se debe emitir la métrica `Failed Requests` (sin la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `aggregated_2xx_metric` (booleano): si se debe emitir la métrica ` 2xx` (sin la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `aggregated_4xx_metric` (booleano): si se debe emitir la métrica ` 4xx` (sin la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.
+ `aggregated_5xx_metric` (booleano): si se debe emitir la métrica ` 5xx` (sin la dimensión `CanaryName`) para este valor controlado. El valor predeterminado es `true`.

 **with\$12xx\$1metric(2xx\$1metric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `2xx` con la dimensión `CanaryName` para este valor controlado.

 **with\$14xx\$1metric(4xx\$1metric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `4xx` con la dimensión `CanaryName` para este valor controlado.

 **with\$15xx\$1metric(5xx\$1metric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `5xx` con la dimensión `CanaryName` para este valor controlado.

 **withAggregated2xxMetric(aggregated2xxMetric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `2xx` sin dimensión para este valor controlado.

 **withAggregated4xxMetric(aggregated4xxMetric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `4xx` sin dimensión para este valor controlado.

 **with\$1aggregated\$15xx\$1metric(aggregated\$15xx\$1metric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `5xx` sin dimensión para este valor controlado.

 ** with\$1aggregated\$1failed\$1canary\$1metric(aggregated\$1failed\$1canary\$1metric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `Failed` sin dimensión para este valor controlado.

 ** with\$1aggregated\$1failed\$1requests\$1metric(aggregated\$1failed\$1requests\$1metric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `Failed requests` sin dimensión para este valor controlado.

 **with\$1failed\$1canary\$1metric(failed\$1canary\$1metric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `Failed` con la dimensión `CanaryName` para este valor controlado.

 **with\$1failed\$1requests\$1metric(failed\$1requests\$1metric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `Failed requests` con la dimensión `CanaryName` para este valor controlado.

 **with\$1step\$1duration\$1metric(step\$1duration\$1metric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `Duration` con la dimensión `CanaryName` para este valor controlado.

 **with\$1step\$1success\$1metric(step\$1success\$1metric)** 

Acepta un argumento booleano, que especifica si se emitirá una métrica `StepSuccess` con la dimensión `CanaryName` para este valor controlado.

##### Métodos para habilitar o desactivar métricas
<a name="CloudWatch_Synthetics_Python_setConfig_metrics"></a>

 **disable\$1aggregated\$1request\$1metrics()** 

Desactiva que el valor controlado emita todas las métricas de solicitud que se emiten sin dimensión ` CanaryName`.

 **disable\$1request\$1metrics()** 

Deshabilita todas las métricas de solicitud, incluidas las métricas por valor controlado y las métricas agregadas en todos los valores controlados.

 **disable\$1step\$1metrics()** 

Desactiva todas las métricas de pasos, incluidas las métricas de éxito y de duración de los pasos.

 **enable\$1aggregated\$1request\$1metrics()** 

Permite que el valor controlado emita todas las métricas de solicitud que se emiten sin dimensión ` CanaryName`.

 **enable\$1request\$1metrics()** 

Habilita todas las métricas de solicitud, incluidas las métricas por valor controlado y las métricas agregadas en todos los valores controlados.

 **enable\$1step\$1metrics()** 

Habilita todas las métricas de pasos, incluidas las métricas de éxito y de duración de los pasos.

 **Uso en valores controlados de la IU** 

Primero, importe la relación de Synthetics y obtenga la configuración. A continuación, establezca la configuración para cada opción mediante llamadas al método SetConfig con una de las siguientes opciones.

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

O

```
synthetics_configuration.with_screenshot_on_step_start(False).with_screenshot_on_step_success(False).with_screenshot_on_step_failure(True)
```

Para desactivar todas las capturas de pantalla, utilice la función disableStepScreenshots() como en este ejemplo.

```
synthetics_configuration.disable_step_screenshots()
```

Puede habilitar y desactivar las capturas de pantalla en cualquier punto del código. Por ejemplo, para desactivar las capturas de pantalla solo para un paso, se deben desactivar antes de ejecutar ese paso y habilitarlas después del paso.

##### set\$1config(options) para los valores controlados de la interfaz de usuario
<a name="CloudWatch_Synthetics_Library_Python_UI"></a>

A partir de `syn-python-selenium-1.1`, para los valores controlados de la interfaz de usuario, ` set_config` puede incluir los siguientes parámetros booleanos:
+ `continue_on_step_failure` (booleano): si se debe continuar con la ejecución del script canario después de que un paso falle (este parámetro hace referencia a la función **executeStep**). Si algún paso falla, la ejecución del valor controlado seguirá marcándose como fallida. El valor predeterminado es `false`.

### Clase SyntheticsLogger
<a name="CloudWatch_Synthetics_Library_SyntheticsLogger_Python"></a>

`synthetics_logger` ingresa los registros tanto en la consola como en un archivo de registros local, en el mismo nivel de registro. Este archivo de registro se escribe en ambas ubicaciones solo si el nivel de registro coincide con el deseado para la función de registro a la que se llamó o está por debajo de este.

Los valores “DEBUG:”, “INFO:”, etc. se anteponen a las instrucciones de registro del archivo de registro local para que coincidan con el nivel de registro de la función a la que se llamó.

No es necesario utilizar `synthetics_logger` para crear un archivo de registros que se carga en la ubicación de resultados de Amazon S3. En su lugar, puede crear un archivo de registro distinto en la carpeta `/tmp`. Los archivos creados en la carpeta `/tmp` se cargan en la ubicación de resultados del bucket de S3 como artefactos.

Para utilizar . `synthetics_logger`:

```
from aws_synthetics.common import synthetics_logger
```

****Definiciones de funciones útiles:

Obtenga el nivel de registro:

```
log_level = synthetics_logger.get_level()
```

Establezca el nivel de registro:

```
synthetics_logger.set_level()
```

Registre un mensaje con un nivel especificado. El nivel puede ser `DEBUG`, ` INFO`, `WARN` o `ERROR`, como en los siguientes ejemplos de sintaxis:

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

Para obtener información acerca de los parámetros de depuración, consulte los documentos estándar de Python en [logging.debug](https://docs.python.org/3/library/logging.html#logging.debug)

En estas funciones de registro, el `message` es la cadena del formato del mensaje. Los `args` son los argumentos que se fusionan en `msg` que usan el operador de formato de cadena.

Hay tres argumentos de palabras clave en `kwargs`:
+ `exc_info`: si no se evalúa como false, agrega información de excepción al mensaje de registro.
+ `stack_info`: el valor predeterminado es false. Si es VERDADERO, agrega información de pila al mensaje de registro, incluida la llamada de registro real.
+ `extra`: el tercer argumento opcional de palabra clave, que se puede utilizar para especificar un diccionario que se utiliza para rellenar el `__dict__` del `LogRecord` que se ha creado para el evento de registro con atributos definidos por el usuario.

Ejemplos:

Registre un mensaje con el nivel `DEBUG`:

```
synthetics_logger.debug('Starting step - login.')
```

Registre un mensaje con el nivel `INFO`. `logger.log` es sinónimo de `logger.info`:

```
synthetics_logger.info('Successfully completed step - login.')
```

o

```
synthetics_logger.log('Successfully completed step - login.')
```

Registre un mensaje con el nivel `WARN`:

```
synthetics_logger.warning('Warning encountered trying to publish %s', 'CloudWatch Metric')
```

Registre un mensaje con el nivel `ERROR`:

```
synthetics_logger.error('Error encountered trying to publish %s', 'CloudWatch Metric')
```

Registre una excepción:

```
synthetics_logger.exception(message, *args, **kwargs)
```

Registre un mensaje con nivel `ERROR`. La información de excepción se agrega al mensaje de registro. Debe llamar a esta función solo desde un controlador de excepciones.

Para obtener información acerca de los parámetros de excepción, consulte los documentos estándar de Python en [logging.exception](https://docs.python.org/3/library/logging.html#logging.exception)

El `message` es la cadena en formato de mensaje. Los `args` son los argumentos, que se fusionan en `msg` mediante el operador de formato de cadena.

Hay tres argumentos de palabras clave en `kwargs`:
+ `exc_info`: si no se evalúa como false, agrega información de excepción al mensaje de registro.
+ `stack_info`: el valor predeterminado es false. Si es VERDADERO, agrega información de pila al mensaje de registro, incluida la llamada de registro real.
+ `extra`: el tercer argumento opcional de palabra clave, que se puede utilizar para especificar un diccionario que se utiliza para rellenar el `__dict__` del `LogRecord` que se ha creado para el evento de registro con atributos definidos por el usuario.

Ejemplo:

```
synthetics_logger.exception('Error encountered trying to publish %s', 'CloudWatch Metric')
```

## Clases y funciones de biblioteca de Python y Selenium que se aplican solo a canaries de la UI
<a name="CloudWatch_Synthetics_Library_Python_UIcanaries"></a>

Las siguientes funciones de la biblioteca de Selenium de CloudWatch Synthetics para Python solo son útiles para los valores controlados de la UI.

**Topics**
+ [Clase SyntheticsBrowser](#CloudWatch_Synthetics_Library_Python_SyntheticsBrowser)
+ [Clase SyntheticsWebDriver](#CloudWatch_Synthetics_Library_Python_SyntheticsWebDriver)

### Clase SyntheticsBrowser
<a name="CloudWatch_Synthetics_Library_Python_SyntheticsBrowser"></a>

**nota**  
Chrome es el único navegador compatible con `SyntheticsBrowser`.

Cuando se crea una instancia de navegador mediante una llamada a `synthetics_webdriver.Chrome()`, la instancia del navegador devuelta es del tipo `SyntheticsBrowser`. La clase ` SyntheticsBrowser` hereda la clase WebDriver y proporciona acceso a todos los métodos expuestos por [WebDriver](https://www.selenium.dev/documentation/webdriver/). Controla el ChromeDriver y habilita el script del canario para manejar el navegador, lo que permite al WebDriver Selenium trabajar con Synthetics.

**nota**  
Synthetics anula el método [quit](https://www.selenium.dev/selenium/docs/api/py/selenium_webdriver_firefox/selenium.webdriver.firefox.webdriver.html) de WebDriver para no realizar ninguna acción. No debe preocuparse por cerrar el navegador, ya que Synthetics se encarga de ello.

Además de los métodos estándar de Selenium, también proporciona los siguientes métodos. 

**Topics**
+ [set\$1viewport\$1size(ancho, alto)](#CloudWatch_Synthetics_Library_set_viewport_size)
+ [save\$1screenshot(nombre del archivo, sufijo)](#CloudWatch_Synthetics_Library_save_screenshot)

#### set\$1viewport\$1size(ancho, alto)
<a name="CloudWatch_Synthetics_Library_set_viewport_size"></a>

Establece la ventana gráfica del navegador. Ejemplo:

```
browser.set_viewport_size(1920, 1080)
```

#### save\$1screenshot(nombre del archivo, sufijo)
<a name="CloudWatch_Synthetics_Library_save_screenshot"></a>

Guarda capturas de pantalla en el directorio de `/tmp`. Las capturas de pantalla se cargan desde allí a la carpeta de artefactos de valores controlados en el bucket de S3.

*filename* es el nombre del archivo de la captura de pantalla, y *suffix* es una cadena opcional que se utilizará para nombrar la captura de pantalla.

Ejemplo:

```
browser.save_screenshot('loaded.png', 'page1')
```

### Clase SyntheticsWebDriver
<a name="CloudWatch_Synthetics_Library_Python_SyntheticsWebDriver"></a>

Para utilizar esta clase, utilice lo siguiente en su script:

```
from aws_synthetics.selenium import synthetics_webdriver
```

**Topics**
+ [add\$1execution\$1error(errorMessage, ex);](#CloudWatch_Synthetics_Library_Python_addExecutionError)
+ [add\$1user\$1agent(user\$1agent\$1str)](#CloudWatch_Synthetics_Library_add_user_agent)
+ [execute\$1step(step\$1name, function\$1to\$1execute)](#CloudWatch_Synthetics_Library_Python_execute_step)
+ [get\$1http\$1response(url)](#CloudWatch_Synthetics_Library_Python_get_http_response)
+ [Chrome()](#CloudWatch_Synthetics_Library_Python_Chrome)

#### add\$1execution\$1error(errorMessage, ex);
<a name="CloudWatch_Synthetics_Library_Python_addExecutionError"></a>

`errorMessage` describe el error y `ex` es la excepción que se ha encontrado

`add_execution_error` puede usarse para establecer errores de ejecución para el valor controlado. Se produce un error en el valor controlado sin interrumpir la ejecución del script. Tampoco afecta a las métricas de `successPercent`.

Debe realizar un seguimiento de los errores como errores de ejecución sólo si no son importantes para indicar el éxito o el error del script valor controlado.

A continuación, se muestra un ejemplo del uso de un `add_execution_error`. Está supervisando la disponibilidad de su punto de conexión y tomando capturas de pantalla después de que la página se haya cargado. Debido a que el hecho de no tomar una captura de pantalla no determina la disponibilidad del punto de enlace, puede detectar cualquier error que encuentre al tomar capturas de pantalla y agregarlos como errores de ejecución. Las métricas de disponibilidad seguirán indicando que el punto de conexión está activo y en ejecución, pero el estado del valor controlado se marcará como fallido. El siguiente bloque de código de muestra detecta dicho error y lo agrega como un error de ejecución.

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

Añade el valor de `user_agent_str` a la cabecera del agente de usuario del navegador. Debe asignar `user_agent_str` antes de crear la instancia del navegador.

Ejemplo:

```
await synthetics_webdriver.add_user_agent('MyApp-1.0')
```

`add_user_agent` debe usarse dentro de una función `async`.

#### execute\$1step(step\$1name, function\$1to\$1execute)
<a name="CloudWatch_Synthetics_Library_Python_execute_step"></a>

Procesa una función. También hace lo siguiente:
+ Registra que el paso se ha iniciado.
+ Toma una captura de pantalla denominada `<stepName>-starting`.
+ Inicia un temporizador.
+ Ejecuta la función proporcionada.
+ Si la función devuelve resultados normalmente, cuenta como superada. Si la función falla, cuenta como error.
+ Finaliza el temporizador.
+ Registra si el paso se ha superado o no.
+ Toma una captura de pantalla denominada `<stepName>-succeeded` o ` <stepName>-failed`.
+ Emite la métrica `stepName` `SuccessPercent`, 100 para superado o 0 para no superado.
+ Emite la métrica `stepName` `Duration`, con un valor basado en las horas de inicio y de finalización del paso.
+ Por último, devuelve el mismo resultado que `functionToExecute` o vuelve a arrojar el mismo error que `functionToExecute`.

Ejemplo:

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

Realiza una solicitud HTTP a la URL proporcionada y devuelve el código de respuesta de la solicitud HTTP. Si se ha producido una excepción durante la solicitud HTTP, en su lugar se devuelve una cadena con el valor “error”.

Ejemplo:

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

Lanza una instancia del navegador Chromium y muestra la instancia creada del navegador.

Ejemplo:

```
browser = synthetics_webdriver.Chrome()
browser.get("https://example.com/)
```

Para lanzar un navegador en modo de incógnito, utilice lo siguiente:

```
add_argument('——incognito')
```

Para agregar la configuración del proxy, utilice lo siguiente:

```
add_argument('--proxy-server=%s' % PROXY)
```

Ejemplo:

```
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("——incognito")
browser = syn_webdriver.Chrome(chrome_options=chrome_options)
```

# Programación de las ejecuciones de valores controlados con cron
<a name="CloudWatch_Synthetics_Canaries_cron"></a>

El uso de una expresión cron le da flexibilidad cuando programa un valor controlado. Las expresiones Cron contienen cinco o seis campos en el orden que se indica en la siguiente tabla. Los campos están separados por espacios. La sintaxis difiere en función de si está utilizando la consola de CloudWatch para crear el valor controlado o AWS CLI o los SDK de AWS. Cuando utilice la consola, especifique sólo los cinco primeros campos. Cuando utiliza AWS CLI o los SDK de AWS, especifique los seis campos y debe especificar `*` para el campo del `Year` (año).


|  **Campo**  |  **Valores permitidos**  |  **Caracteres especiales permitidos**  | 
| --- | --- | --- | 
|  Minutos  |  0-59  |  , - \$1 /  | 
|  Horas  |  0-23  |  , - \$1 /  | 
|  Día del mes  |  1-31  |  , - \$1 ? / L W  | 
|  Mes  |  1-12 o JAN-DEC  |  , - \$1 /  | 
|  Día de la semana  |  1-7 o SUN-SAT  |  , - \$1 ? L \$1  | 
|  Año  |  \$1  |    | 

**Caracteres especiales**
+ La **,** (coma) incluye varios valores en la expresión de un campo. Por ejemplo, en el campo Month (mes), ENERO, FEBRERO, MARZO incluirían enero, febrero y marzo.
+ El **-** (guion) es un carácter especial que especifica intervalos. En el campo Day, 1-15 incluiría los días del 1 al 15 del mes especificado.
+ El **\$1** (asterisco) es un carácter especial que incluye todos los valores del campo. En el campo (Hours) horas, **\$1** incluye cada hora. No puede utilizar **\$1** en los campos Day-of-month (Día del mes) y Day-of-week (Día de la semana) en la misma expresión. Si lo utiliza en uno, debe utilizar **?** en el otro.
+ La **/** (barra inclinada) especifica incrementos. En el campo Minutes (minutos), puede escribir 1/10 para especificar cada diez minutos, si empieza desde el primer minuto de la hora (por ejemplo, los minutos once, veintiuno y treinta y uno, etc.).
+ El **?** (signo de interrogación) especifica uno u otro. Si ingresa el número **7** en el campo Day-of-month y no es importante especificar qué día de la semana es el séptimo, puede escribir **?** en el campo Day-of-week.
+ El comodín **L** en los campos Día del mes o Día de la semana especifica el último día del mes o de la semana.
+ El comodín **W** en el campo Día del mes especifica un día de la semana. En el campo Día del mes, **3W** especifica el día de la semana más cercano al tercer día del mes.
+ El comodín **\$1** en el campo Día de la semana especifica una instancia concreta del día de la semana de un mes. Por ejemplo, 3\$12 es el segundo martes del mes. El número 3 hace referencia al martes, ya que es el tercer día de la semana en el calendario anglosajón, mientras que 2 hace referencia al segundo día de ese tipo dentro de un mes.

**Limitaciones**
+ No se pueden especificar los campos Día del mes y Día de la semana en la misma expresión cron. Si especifica un valor o un `*` (asterisco) en uno de los campos, debe utilizar un **?** (signo de interrogación) en el otro.
+ No se admiten expresiones cron que produzcan frecuencias superiores a un minuto.
+ No se puede configurar un valor controlado para que espere más de un año antes de la ejecución, por lo que solo se puede especificar `*` en el `Year`.

**Ejemplos**  
Puede consultar las siguientes cadenas cron de muestra al crear un valor controlado. Los siguientes ejemplos son la sintaxis correcta para utilizar AWS CLI o SDK de AWS para crear o actualizar un valor controlado. Si está utilizando la consola de CloudWatch, omita el `*` final en cada ejemplo.


| Expresión | Significado | 
| --- | --- | 
|   `0 10 * * ? *`   |  Ejecutar a las 10:00 h (UTC) todos los días  | 
|   `15 12 * * ? *`   |  Ejecutar a las 12:15 h (UTC) todos los días  | 
|   `0 18 ? * MON-FRI *`   |  Ejecutar a las 18:00 h (UTC) de lunes a viernes  | 
|   `0 8 1 * ? *`   |  Ejecútelo a las 08.00 h (UTC) el primer día de cada mes  | 
|   `0/10 * ? * MON-SAT *`   |  Ejecútelo cada 10 minutos de lunes a sábado de cada semana  | 
|   `0/5 8-17 ? * MON-FRI *`   |  Ejecútelo cada 5 minutos de lunes a viernes entre las 8.00 h y las 17.55 h (UTC)   | 

# Configuración de su canario para que reintente automáticamente
<a name="CloudWatch_Synthetics_Canaries_autoretry"></a>

Al crear o actualizar un canario, puede configurarlo para que intente nuevas ejecuciones automáticamente cuando falle la ejecución programada. Esto ayuda a diferenciar entre los fallos genuinos y los temporales para obtener resultados más fiables. Esta característica es ideal para crear sistemas de monitorización más resistentes y, al mismo tiempo, reducir las falsas alarmas y la intervención manual.

**Creación de un canario con reintento automático**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Señales de aplicación**, **Valores controlados de Synthetics**.

1. Elija **Crear valor controlado**.

1. En **Configuración adicional**, **Reintento automático**, seleccione el número máximo de reintentos deseado.

**Actualización del número máximo de reintentos de un canario**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Señales de aplicación**, **Valores controlados de Synthetics**.

1. Puede elegir una de las opciones siguientes:
   + Seleccione el canario y elija **Acciones**, **Habilitar reintento automático** y ajuste el número máximo de reintentos.
   + Seleccione el canario y elija **Acciones**, **Editar**. En la página **Editar detalles**, en **Configuración adicional**, **Reintento automático**, ajuste la configuración de reintentos.

 **Limitaciones** 

Estas son las limitaciones para configurar el reintento automático.
+ Solo se admite en las versiones de tiempo de ejecución `syn-nodejs-puppeteer-10.0 ` o posteriores, ` syn-nodejs-playwright-2.0` o posteriores, `syn-python-selenium-5.1` o posteriores, o `syn-nodejs-3.0` o posteriores.
+ Los canarios de larga duración cuyo tiempo de espera se agote después de diez minutos tienen un límite de un reintento. Todos los demás canarios admiten hasta dos reintentos.

# Uso de dependencias con canarios de CloudWatch Synthetics
<a name="CloudWatch_Synthetics_Canaries_dependencies"></a>

En esta sección se explica cómo usar `Dependencies` en los canarios de CloudWatch Synthetics. El campo `Dependencies` le permite especificar las dependencias de sus canarios, lo que le permite incluir otras bibliotecas o código personalizado que pueden utilizar los scripts de canarios.

## Descripción general
<a name="overview"></a>

Los canarios de CloudWatch Synthetics permite especificar las capas de Lambda como dependencias. Esta característica le permite hacer lo siguiente:
+ Compartir código común en varios canarios
+ Administrar las dependencias por separado del código del script de canarios
+ Reducir el tamaño del script de canarios al mover las dependencias a una capa de Lambda

## API compatibles:
<a name="supported-apis"></a>

El campo `Dependencies` es compatible con las siguientes API:
+  [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) 

## Sintaxis
<a name="syntax"></a>

El campo `Dependencies` forma parte de la estructura de código de la sintaxis de la solicitud:

```
"Code": { 
  "Handler": "string",
  "S3Bucket": "string",
  "S3Key": "string",
  "S3Version": "string",
  "ZipFile": blob,
  "Dependencies": [
    {
      "Type": "LambdaLayer",
      "Reference": "string"
    }
  ]
}
```

## Uso de dependencias
<a name="usage"></a>

Estos son algunos ejemplos e instrucciones para usar el campo `Dependencies` en diferentes escenarios.

### Crear un canario con dependencias
<a name="creating-canary"></a>

Al crear un canario, puede especificar una capa de Lambda como dependencia:

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

### Actualizar las dependencias de un canario
<a name="updating-canary"></a>

Puede actualizar las dependencias de un canario mediante la API UpdateCanary:

```
{
  "Name": "my-canary",
  "Code": {
    "Dependencies": [
      {
        "Type": "LambdaLayer",
        "Reference": "arn:aws:lambda:us-west-2:123456789012:layer:my-updated-layer:2"
      }
    ]
  }
}
```

### Eliminar dependencias
<a name="removing-dependencies"></a>

Para eliminar las dependencias de un canario, proporcione una matriz vacía para el campo Dependencias:

```
{
  "Name": "my-canary",
  "Code": {
    "Dependencies": []
  }
}
```

### Probar las dependencias con StartCanaryDryRun
<a name="testing-dependencies"></a>

Antes de actualizar un canario con nuevas dependencias, puede probarlas con la API StartCanaryDryRun:

```
{
  "Name": "my-canary",
  "Code": {
    "Dependencies": [
      {
        "Type": "LambdaLayer",
        "Reference": "arn:aws:lambda:us-west-2:123456789012:layer:my-test-layer:3"
      }
    ]
  }
}
```

## Limitaciones y consideraciones
<a name="limitations"></a>
+ Solo se puede especificar una capa de Lambda como dependencia
+ El rol que se utilice para crear un canario con dependencias debe tener acceso de ` lambda:GetLayerVersion` a la capa de dependencias además de los [roles y permisos necesarios](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Roles.html)

## Crear capas de Lambda compatibles
<a name="creating-compatible-layers"></a>

Para obtener información sobre cómo crear y empaquetar capas, consulte [Administrar dependencias de Lambda con capas](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html) y para comprender la estructura de empaquetado de un canario según la estructura de empaquetado del canario, consulte [Escritura de un script de canario](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_WritingCanary.html).

# Grupos
<a name="CloudWatch_Synthetics_Groups"></a>

Puede crear *grupos* para asociar valores controlados entre sí, incluidos los valores controlados interregionales. El uso de grupos puede ayudarlo a administrar y automatizar los valores controlados y también puede ver los resultados de ejecución y las estadísticas agregadas de todos los valores controlados de un grupo. 

Los grupos son recursos globales. Cuando se crea un grupo, se replica en todas las regiones de AWS que admiten grupos y puede agregarle valores controlados de cualquiera de estas regiones y verlos en cualquiera de ellas. Aunque el formato de ARN del grupo refleja el nombre de la región donde se creó, no se limita a ninguna región. Esto significa que puede colocar valores controlados de varias regiones en el mismo grupo y, a continuación, utilizar ese grupo para ver y administrar todos esos valores controlados en una sola vista.

Los grupos se admiten en todas las regiones, excepto en las que están deshabilitadas de forma predeterminada. Para obtener más información sobre estas regiones, consulte [Activar una región](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html#rande-manage-enable).

Cada grupo puede contener hasta 10 valores controlados. Puede tener hasta 20 grupos en la cuenta. Cualquier valor controlado puede ser miembro de hasta 10 grupos.

**Creación de un grupo**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Señales de aplicación**, **Valores controlados de Synthetics**.

   

1. Elija **Crear grupo**.

1. En **Group Name** (nombre del grupo), escriba un nombre para el grupo. 

1. Seleccione valores controlados para asociarlos a este grupo. Para seleccionar un valor controlado, escriba el nombre completo en **Nombre exacto del valor controlado** y elija **Búsqueda**. Seleccione la casilla de verificación que hay junto al nombre del valor controlado. Si hay varios valores controlados con el mismo nombre en diferentes regiones, asegúrese de seleccionar los que desee.

   Puede repetir este paso para asociar hasta 10 valores controlados al grupo.

1. (Opcional) En **Tags** (Etiquetas), agregue uno o más pares de clave-valor como etiquetas para este grupo. Las etiquetas pueden ayudarlo a identificar y organizar sus recursos de AWS y a realizar un seguimiento de sus costes de AWS. Para obtener más información, consulte [Etiquetado de los recursos de Amazon CloudWatch](CloudWatch-Tagging.md).

1. Elija **Crear grupo**.

# Prueba local de un canario
<a name="CloudWatch_Synthetics_Debug_Locally"></a>

En esta sección se explica cómo modificar, probar y depurar los canarios de CloudWatch Synthetics directamente en el editor de código Microsoft Visual Studio o en el editor de código JetBrains IDE. El entorno de depuración local utiliza un contenedor de Serverless Application Model (SAM) para simular una función de Lambda y emular el comportamiento de un canario Synthetics. 

**nota**  
No es práctico realizar una depuración local de canarios que dependan de la supervisión visual. La supervisión visual se basa en hacer capturas de pantalla de base durante una ejecución inicial y, a continuación, compararlas con las capturas de pantalla de las ejecuciones posteriores. En un entorno de desarrollo local, las ejecuciones no se almacenan ni se les realiza un seguimiento, y cada iteración es una ejecución independiente y autónoma. La ausencia de un historial de ejecuciones de canarios hace que no sea práctico depurar los canarios que se basan en la supervisión visual.

 **Requisitos previos** 

1. Elija o cree un bucket de Amazon S3 para almacenar artefactos de las ejecuciones de prueba de canarios locales, como archivos HAR y capturas de pantalla. Esto requiere que esté aprovisionado con IAM. Si se salta la configuración de los buckets de Amazon S3, podrá probar su canario de forma local, pero verá un mensaje de error sobre el bucket que falta y no tendrá acceso a los artefactos del canario.

   Si utiliza un bucket de Amazon S3, se recomienda que configure el ciclo de vida del bucket para eliminar objetos al cabo de unos días, a fin de ahorrar costes. Para obtener más información, consulte [Administración del ciclo de vida del almacenamiento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html).

1. Configure un perfil de AWS predeterminado para su cuenta de AWS. Para obtener más información, consulte [Opciones de los archivos de configuración y credenciales](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html).

1. Defina la región de AWS predeterminada del entorno de depuración en la región que prefiera, por ejemplo ` us-west-2`.

1. Instale la CLI de AWS SAM. Para obtener más información, consulte [ Instalación de la CLI de AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html).

1. Instale Visual Studio Code Editor o JetBrains IDE. Para obtener más información, consulte [https://code.visualstudio.com/](https://code.visualstudio.com/) o [https://www.jetbrains.com/ides/](https://www.jetbrains.com/ides/).

1. Instale Docker para trabajar con la CLI de AWS SAM. Asegúrese de iniciar el docker daemon. Para obtener más información, consulte [Instalación de  Docker para usarlo con la CLI de AWS SAM](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-docker.html).

   Como alternativa, puede instalar otro software de administración de contenedores, por ejemplo  Rancher, siempre que utilice el tiempo de ejecución de Docker.

1. Instale una extensión de un conjunto de herramientas de AWS para su editor de preferencia. Para obtener más información, consulte [Instalación de AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-toolkit.html) o [Instalación de AWS Toolkit for JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/setup-toolkit.html).

**Topics**
+ [Configuración del entorno de pruebas y depuración](#CloudWatch_Synthetics_Debug_Environment)
+ [Uso de Visual Studio Code IDE](#CloudWatch_Synthetics_Debug_VS)
+ [Uso de JetBrains IDE](#CloudWatch_Synthetics_Debug_JetBrains)
+ [Ejecución de un canario de forma local con la CLI de SAM](#CloudWatch_Synthetics_Run_Locally)
+ [Cómo integrar su entorno de pruebas local en un paquete de canarios existente](#CloudWatch_Synthetics_Debug_Integrate)
+ [Cómo cambiar el tiempo de ejecución de CloudWatch Synthetics](#CloudWatch_Synthetics_Debug_DifferentRuntime)
+ [Errores comunes](#CloudWatch_Synthetics_Debug_Errors)

## Configuración del entorno de pruebas y depuración
<a name="CloudWatch_Synthetics_Debug_Environment"></a>

Primero, clone el repositorio de Github que proporciona AWS ejecutando el siguiente comando. El repositorio contiene ejemplos de código para canarios de Node.js y de Python. 

```
git clone https://github.com/aws-samples/synthetics-canary-local-debugging-sample.git
```

Realice una de las siguientes acciones, en función del idioma de los canarios.

**Para los canarios de Node.js**

1. Acceda al directorio de origen del canario de Node.js ejecutando el siguiente comando.

   ```
   cd synthetics-canary-local-debugging-sample/nodejs-canary/src
   ```

1. Ingrese el siguiente comando para instalar las dependencias de canario.

   ```
   npm install
   ```

**Para canarios de Python**

1. Acceda al directorio de origen del canario de Python ejecutando el siguiente comando.

   ```
   cd synthetics-canary-local-debugging-sample/python-canary/src
   ```

1. Ingrese el siguiente comando para instalar las dependencias de canario.

   ```
   pip3 install -r requirements.txt -t .
   ```

## Uso de Visual Studio Code IDE
<a name="CloudWatch_Synthetics_Debug_VS"></a>

El archivo de configuración de inicialización Visual Studio se encuentra en ` .vscode/launch.json`. Contiene configuraciones que permiten que el código Visual Studio detecte el archivo de plantilla. Define una carga de Lambda con los parámetros necesarios para invocar el canario correctamente. Esta es la configuración de inicialización de un archivo canario de 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": {}
            }
        }
    ]
}
```

Si lo desea, también puede proporcionar los siguientes campos en el JSON de la carga:
+ Valores válidos de `s3EncryptionMode`: `SSE_S3` \$1 `SSE_KMS`
+ Valor válido de `s3KmsKeyArn`: *ARN de clave KMS*
+ Valores válidos de `activeTracing`: `true` \$1 `false`
+ Valor válido de `canaryRunId`: *UUID* Este parámetro es obligatorio si el seguimiento activo está habilitado.

Para depurar los canarios de Visual Studio, agregue puntos de interrupción en el código de canario donde desee pausar la ejecución. Para agregar un punto de interrupción, seleccione el margen del editor y vaya al modo **Ejecutar y depurar** en el editor. Ejecute el canario haciendo clic en el botón de reproducción. Cuando se ejecute el canario, los registros se guardarán en la consola de depuración, lo que le proporcionará información en tiempo real sobre el comportamiento del canario. Si agregó puntos de interrupción, la ejecución de canario se detendrá en cada punto de interrupción, lo que le permitirá revisar el código e inspeccionar los valores de las variables, los métodos de instancia, los atributos de los objetos y la pila de llamadas a funciones.

No se incurre en ningún coste por ejecutar y depurar canarios de forma local, excepto por los artefactos almacenados en el bucket de Amazon S3 y las métricas de CloudWatch generadas por cada ejecución local.

![\[Visual Studio Code interface showing JavaScript code for a heartbeat canary function.\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/images/DebugCanaryVS.png)


## Uso de JetBrains IDE
<a name="CloudWatch_Synthetics_Debug_JetBrains"></a>

Una vez instalada la extensión AWS Toolkit for JetBrains, asegúrese de que el complemento Node.js y el depurador de JavaScript estén habilitados para ejecutarse si va a depurar un canario de Node.js. A continuación, siga estos pasos:

**Depuración de un canario con JetBrains IDE**

1. En el panel de navegación izquierdo de JetBrains IDE, elija **Lambda** y, a continuación, elija la plantilla de configuración local.

1. Ingreso de un nombre de configuración de ejecución, por ejemplo **LocalSyntheticsCanary**

1. Elija **Desde plantilla**, seleccione el explorador de archivos en el campo de plantilla y, a continuación, elija el archivo **template.yml** del proyecto, ya sea del directorio **nodejs** o del directorio **python**.

1. En la sección **Entrada**, introduzca la carga del canario, como se muestra en la siguiente pantalla.

   ```
   {
    "canaryName": "LocalSyntheticsCanary",
    "artifactS3Location": {
        "s3Bucket": "cw-syn-results-123456789012-us-west-2",
        "s3Key": "local-run-artifacts"
    },
    "customerCanaryHandlerName": "heartbeat-canary.handler"
   }
   ```

   También puede definir otras variables de entorno en el JSON de carga, como se muestra en [Uso de Visual Studio Code IDE](#CloudWatch_Synthetics_Debug_VS).

![\[Run/Debug Configurations interface for AWS Lambda with LocalSyntheticsCanary settings.\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/images/DebugCanaryIntellij.png)


## Ejecución de un canario de forma local con la CLI de SAM
<a name="CloudWatch_Synthetics_Run_Locally"></a>

Utilice uno de los siguientes procedimientos para ejecutar el canario de forma local mediante la CLI de Serverless Application Model (SAM). Asegúrese de especificar el nombre de su propio bucket de Amazon S3 para `s3Bucket` en `event.json`

**Cómo usar la CLI de SAM para ejecutar un canario de Node.js**

1. Acceda al directorio de origen ejecutando el siguiente comando.

   ```
   cd synthetics-canary-local-debugging-sample/nodejs-canary
   ```

1. Introduzca los comandos siguientes.

   ```
   sam build
   sam local invoke -e ../event.json
   ```

**Cómo usar la CLI de SAM para ejecutar un canario de Python**

1. Acceda al directorio de origen ejecutando el siguiente comando.

   ```
   cd synthetics-canary-local-debugging-sample/python-canary
   ```

1. Introduzca los comandos siguientes.

   ```
   sam build
   sam local invoke -e ../event.json
   ```

## Cómo integrar su entorno de pruebas local en un paquete de canarios existente
<a name="CloudWatch_Synthetics_Debug_Integrate"></a>

Puede integrar la depuración local de canarios en su paquete de canarios existente copiando tres archivos:
+ Copie el archivo `template.yml` en la raíz de su paquete de canarios. Asegúrese de modificar la ruta para que `CodeUri` apunte al directorio donde se encuentra su código de canario.
+ Si está trabajando con un canario de Node.js, copie el archivo `cw-synthetics.js` en su directorio de origen de canarios. Si está trabajando con un canario de Python, copie el ` cw-synthetics.py` en su directorio de origen de canarios.
+ Copie el archivo de configuración de inicialización .`vscode/launch.json` en la raíz del paquete. Asegúrese de colocarlo dentro del directorio `.vscode`; créelo si aún no existe.

## Cómo cambiar el tiempo de ejecución de CloudWatch Synthetics
<a name="CloudWatch_Synthetics_Debug_DifferentRuntime"></a>

Como parte de la depuración, puede intentar ejecutar un canario con un tiempo de ejecución de CloudWatch Synthetics diferente, en lugar del último. Para ello, busque el tiempo de ejecución que desee utilizar en una de las siguientes tablas. Asegúrese de seleccionar el tiempo de ejecución para la región correcta. A continuación, pegue el ARN de ese tiempo de ejecución en el lugar correspondiente del archivo ` template.yml` y, a continuación, ejecute el canario.

### Tiempos de ejecución de Node.js y Puppeteer
<a name="Synthetics_NodeJS_Puppeteer_Runtime_ARNs"></a>

#### ARN para syn-nodejs-puppeteer-15.0
<a name="syn-nodejs-puppeteer-15.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-puppeteer-15.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARN para syn-nodejs-puppeteer-14.0
<a name="syn-nodejs-puppeteer-14.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-puppeteer-14.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARN para syn-nodejs-puppeteer-13.1
<a name="syn-nodejs-puppeteer-13.1"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-puppeteer-13.1` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARN para syn-nodejs-puppeteer-13.0
<a name="syn-nodejs-puppeteer-13.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-puppeteer-13.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARN para syn-nodejs-puppeteer-12.0
<a name="syn-nodejs-puppeteer-12.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-puppeteer-12.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARN para syn-nodejs-puppeteer-11.0
<a name="syn-nodejs-puppeteer-11.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-puppeteer-11.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARN para syn-nodejs-puppeteer-10.0
<a name="syn-nodejs-puppeteer-10.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-puppeteer-10.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:58`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:61`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:59`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:61`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:59`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:59`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:34`   | 
|  Asia-Pacífico (Yakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:41`   | 
|  Asia-Pacífico (Malasia)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics:15`   | 
|  Asia-Pacífico (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:32`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:59`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   `arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics:18`   | 
|  Asia-Pacífico (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:45`   | 
|  Asia-Pacífico (Seúl)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:62`   | 
|  Asia-Pacífico (Singapur)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:63`   | 
|  Asia-Pacífico (Sídney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:58`   | 
|  Asia-Pacífico (Taipéi)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics:24`   | 
|  Asia-Pacífico (Tailandia)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics:6`   | 
|  Asia-Pacífico (Tokio)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:59`   | 
|  Canadá (centro)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:59`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:90`   | 
|  China (Pekín)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:58`   | 
|  China (Ningxia);  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:59`   | 
|  Europa (Fráncfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:59`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:60`   | 
|  Europa (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:58`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:60`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:59`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:34`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:59`   | 
|  Europa (Zúrich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:33`   | 
|  Israel (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:31`   | 
|  México (centro)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics:7`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:58`   | 
|  Medio Oriente (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:34`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:60`   | 
|  AWS GovCloud (Este de EE. UU.)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:54`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:55`   | 

#### ARN para syn-nodejs-puppeteer-9.1
<a name="syn-nodejs-puppeteer-9.1"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-puppeteer-9.1` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:53`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:56`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:54`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:56`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:54`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:54`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:29`   | 
|  Asia-Pacífico (Yakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:36`   | 
|  Asia-Pacífico (Malasia)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics:10`   | 
|  Asia-Pacífico (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:27`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:54`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   `arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics:17`   | 
|  Asia-Pacífico (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:40`   | 
|  Asia-Pacífico (Seúl)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:57`   | 
|  Asia-Pacífico (Singapur)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:58`   | 
|  Asia-Pacífico (Sídney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:53`   | 
|  Asia-Pacífico (Taipéi)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics:25`   | 
|  Asia-Pacífico (Tailandia)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics:1`   | 
|  Asia-Pacífico (Tokio)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:54`   | 
|  Canadá (centro)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:54`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:85`   | 
|  China (Pekín)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:54`   | 
|  China (Ningxia);  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:55`   | 
|  Europa (Fráncfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:54`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:55`   | 
|  Europa (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:53`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:55`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:54`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:29`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:54`   | 
|  Europa (Zúrich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:28`   | 
|  Israel (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:26`   | 
|  México (centro)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics:3`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:53`   | 
|  Medio Oriente (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:29`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:55`   | 
|  AWS GovCloud (Este de EE. UU.)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:50`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:51`   | 

#### ARN para syn-nodejs-puppeteer-9.0
<a name="syn-nodejs-puppeteer-9.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-puppeteer-9.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:51`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:54`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:52`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:54`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:52`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:52`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:27`   | 
|  Asia-Pacífico (Yakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:34`   | 
|  Asia-Pacífico (Malasia)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics:8`   | 
|  Asia-Pacífico (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:25`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:52`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   `arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics:16`   | 
|  Asia-Pacífico (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:38`   | 
|  Asia-Pacífico (Seúl)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:55`   | 
|  Asia-Pacífico (Singapur)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:56`   | 
|  Asia-Pacífico (Sídney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:51`   | 
|  Asia-Pacífico (Taipéi)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics:26`   | 
|  Asia-Pacífico (Tokio)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:52`   | 
|  Canadá (centro)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:52`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:83`   | 
|  China (Pekín)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:52`   | 
|  China (Ningxia);  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:53`   | 
|  Europa (Fráncfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:52`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:53`   | 
|  Europa (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:51`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:53`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:52`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:27`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:52`   | 
|  Europa (Zúrich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:26`   | 
|  Israel (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:24`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:51`   | 
|  Medio Oriente (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:27`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:53`   | 
|  AWS GovCloud (Este de EE. UU.)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:48`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:49`   | 

#### ARN para syn-nodejs-puppeteer-8.0
<a name="syn-nodejs-puppeteer-8.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-puppeteer-8.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:48`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:50`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:48`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:51`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:48`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:49`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:24`   | 
|  Asia-Pacífico (Yakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:30`   | 
|  Asia-Pacífico (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:22`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:48`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   `arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics:15`   | 
|  Asia-Pacífico (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:34`   | 
|  Asia-Pacífico (Seúl)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:51`   | 
|  Asia-Pacífico (Singapur)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:53`   | 
|  Asia-Pacífico (Sídney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:48`   | 
|  Asia-Pacífico (Taipéi)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics:23`   | 
|  Asia-Pacífico (Tokio)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:48`   | 
|  Canadá (centro)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:48`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:80`   | 
|  China (Pekín)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:49`   | 
|  China (Ningxia);  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:50`   | 
|  Europa (Fráncfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:48`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:50`   | 
|  Europa (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:48`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:49`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:48`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:24`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:48`   | 
|  Europa (Zúrich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:23`   | 
|  Israel (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:21`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:48`   | 
|  Medio Oriente (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:23`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:49`   | 
|  AWS GovCloud (Este de EE. UU.)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:45`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:46`   | 

#### ARN para syn-nodejs-puppeteer-7.0
<a name="syn-nodejs-puppeteer-7.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-puppeteer-7.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:44`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:46`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:44`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:47`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:44`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:45`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:20`   | 
|  Asia-Pacífico (Yakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:26`   | 
|  Asia-Pacífico (Malasia)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics:7`   | 
|  Asia-Pacífico (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:18`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:44`   | 
|  Asia-Pacífico (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:30`   | 
|  Asia-Pacífico (Seúl)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:46`   | 
|  Asia-Pacífico (Singapur)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:49`   | 
|  Asia-Pacífico (Sídney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:44`   | 
|  Asia-Pacífico (Tailandia)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics:3`   | 
|  Asia-Pacífico (Tokio)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:44`   | 
|  Canadá (centro)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:44`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:76`   | 
|  China (Pekín)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:45`   | 
|  China (Ningxia);  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:46`   | 
|  Europa (Fráncfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:44`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:46`   | 
|  Europa (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:44`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:45`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:44`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:20`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:44`   | 
|  Europa (Zúrich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:19`   | 
|  Israel (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:17`   | 
|  México (centro)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics:4`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:44`   | 
|  Medio Oriente (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:19`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:45`   | 
|  AWS GovCloud (Este de EE. UU.)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:41`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:42`   | 

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

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-puppeteer-6.2` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:41`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:43`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:41`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:44`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:41`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:42`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:17`   | 
|  Asia-Pacífico (Yakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:23`   | 
|  Asia-Pacífico (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:15`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:41`   | 
|  Asia-Pacífico (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:27`   | 
|  Asia-Pacífico (Seúl)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:42`   | 
|  Asia-Pacífico (Singapur)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:46`   | 
|  Asia-Pacífico (Sídney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:41`   | 
|  Asia-Pacífico (Tokio)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:41`   | 
|  Canadá (centro)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:41`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:73`   | 
|  China (Pekín)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:42`   | 
|  China (Ningxia);  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:43`   | 
|  Europa (Fráncfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:41`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:43`   | 
|  Europa (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:41`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:42`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:41`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:17`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:41`   | 
|  Europa (Zúrich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:16`   | 
|  Israel (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:14`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:41`   | 
|  Medio Oriente (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:16`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:42`   | 
|  AWS GovCloud (Este de EE. UU.)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:39`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:39`   | 

#### ARN para syn-nodejs-puppeteer-5.2
<a name="syn-nodejs-puppeteer-5.2"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-puppeteer-5.2` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:42`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:44`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:42`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:45`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:42`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:43`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:18`   | 
|  Asia-Pacífico (Yakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:24`   | 
|  Asia-Pacífico (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:16`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:42`   | 
|  Asia-Pacífico (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:28`   | 
|  Asia-Pacífico (Seúl)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:44`   | 
|  Asia-Pacífico (Singapur)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:47`   | 
|  Asia-Pacífico (Sídney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:42`   | 
|  Asia-Pacífico (Tokio)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:42`   | 
|  Canadá (centro)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:42`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:74`   | 
|  China (Pekín)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:43`   | 
|  China (Ningxia);  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:44`   | 
|  Europa (Fráncfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:42`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:44`   | 
|  Europa (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:42`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:43`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:42`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:18`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:42`   | 
|  Europa (Zúrich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:17`   | 
|  Israel (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:15`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:42`   | 
|  Medio Oriente (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:17`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:43`   | 
|  AWS GovCloud (Este de EE. UU.)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:40`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:40`   | 

### Tiempos de ejecución de Node.js y Playwright
<a name="Synthetics_Playwright_Runtime_ARNs"></a>

#### ARN para syn-nodejs-playwright-6.0
<a name="syn-nodejs-playwright-6.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-playwright-6.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-playwright-5.1` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-playwright-5.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARN para syn-nodejs-playwright-4.0
<a name="syn-nodejs-playwright-4.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-playwright-4.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-playwright-3.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

#### ARN para syn-nodejs-playwright-2.0
<a name="syn-nodejs-playwright-2.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-playwright-2.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   ` arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Este de EE. UU. (Ohio)  |   ` arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Oeste de EE. UU. (Norte de California)  |   ` arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Oeste de EE. UU. (Oregón)  |   ` arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  África (Ciudad del Cabo)  |   ` arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia-Pacífico (Hong Kong)  |   ` arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia-Pacífico (Hyderabad)  |   ` arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia-Pacífico (Yakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia-Pacífico (Malasia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia-Pacífico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia-Pacífico (Mumbai)  |   ` arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJsPlaywright:7`   | 
|  Asia-Pacífico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia-Pacífico (Seúl)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia-Pacífico (Singapur)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia-Pacífico (Sídney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia-Pacífico (Taipéi)  |   ` arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJsPlaywright:9`   | 
|  Asia-Pacífico (Tailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  Asia-Pacífico (Tokio)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Canadá (centro)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Oeste de Canadá (Calgary)  |   ` arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  China (Pekín)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  China (Ningxia);  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  Europa (Fráncfort)  |   ` 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 (Londres)  |   ` arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europa (Milán)  |   ` arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europa (París)  |   ` arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europa (España)  |   ` arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europa (Estocolmo)  |   ` arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Europa (Zúrich)  |   ` arn:aws:lambda:eu-central-2:224218992030:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Israel (Tel Aviv)  |   ` arn:aws:lambda:il-central-1:313249807427:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  México (centro)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJsPlaywright:5`   | 
|  Medio Oriente (Baréin)  |   ` arn:aws:lambda:me-south-1:823195537320:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Medio Oriente (EAU)  |   ` arn:aws:lambda:me-central-1:239544149032:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  América del Sur (São Paulo)  |   ` arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  AWS GovCloud (Este de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 

#### ARN para syn-nodejs-playwright-1.0
<a name="syn-nodejs-playwright-1.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-nodejs-playwright-1.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   ` arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Este de EE. UU. (Ohio)  |   ` arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Oeste de EE. UU. (Norte de California)  |   ` arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Oeste de EE. UU. (Oregón)  |   ` arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  África (Ciudad del Cabo)  |   ` arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia-Pacífico (Hong Kong)  |   ` arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia-Pacífico (Hyderabad)  |   ` arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia-Pacífico (Yakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia-Pacífico (Malasia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia-Pacífico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia-Pacífico (Mumbai)  |   ` arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJsPlaywright:8`   | 
|  Asia-Pacífico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia-Pacífico (Seúl)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia-Pacífico (Singapur)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia-Pacífico (Sídney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia-Pacífico (Taipéi)  |   ` arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJsPlaywright:10`   | 
|  Asia-Pacífico (Tailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia-Pacífico (Tokio)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Canadá (centro)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Oeste de Canadá (Calgary)  |   ` arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  China (Pekín)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  China (Ningxia);  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europa (Fráncfort)  |   ` 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 (Londres)  |   ` arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europa (Milán)  |   ` arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europa (París)  |   ` arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europa (España)  |   ` arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europa (Estocolmo)  |   ` arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Europa (Zúrich)  |   ` arn:aws:lambda:eu-central-2:224218992030:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Israel (Tel Aviv)  |   ` arn:aws:lambda:il-central-1:313249807427:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  México (centro)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  Medio Oriente (Baréin)  |   ` arn:aws:lambda:me-south-1:823195537320:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Medio Oriente (EAU)  |   ` arn:aws:lambda:me-central-1:239544149032:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  América del Sur (São Paulo)  |   ` arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  AWS GovCloud (Este de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 

### Tiempos de ejecución de Node.js
<a name="Synthetics_NodeJS_Runtime_ARNs"></a>

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

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión `syn-nodejs-4.1` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  África (Ciudad del Cabo)  |   ` arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia-Pacífico (Hyderabad)  |   ` arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia-Pacífico (Yakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia-Pacífico (Malasia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia-Pacífico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia-Pacífico (Mumbai)  |   ` arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia-Pacífico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia-Pacífico (Seúl)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia-Pacífico (Singapur)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia-Pacífico (Sídney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia-Pacífico (Taipéi)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia-Pacífico (Tailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia-Pacífico (Tokio)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Canadá (centro)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  China (Pekín)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  China (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europa (Fráncfort)  |   ` 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 (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europa (Milán)  |   ` arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europa (España)  |   ` arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europa (Estocolmo)  |   ` arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Europa (Zúrich)  |   ` arn:aws:lambda:eu-central-2:224218992030:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Israel (Tel Aviv)  |   ` arn:aws:lambda:il-central-1:313249807427:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  México (centro)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  AWS GovCloud (Este de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJs:12`   | 

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

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión `syn-nodejs-4.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  África (Ciudad del Cabo)  |   ` arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia-Pacífico (Hyderabad)  |   ` arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia-Pacífico (Yakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia-Pacífico (Malasia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia-Pacífico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia-Pacífico (Mumbai)  |   ` arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia-Pacífico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia-Pacífico (Seúl)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia-Pacífico (Singapur)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia-Pacífico (Sídney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia-Pacífico (Taipéi)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia-Pacífico (Tailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia-Pacífico (Tokio)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Canadá (centro)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  China (Pekín)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  China (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europa (Fráncfort)  |   ` 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 (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europa (Milán)  |   ` arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europa (España)  |   ` arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europa (Estocolmo)  |   ` arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Europa (Zúrich)  |   ` arn:aws:lambda:eu-central-2:224218992030:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Israel (Tel Aviv)  |   ` arn:aws:lambda:il-central-1:313249807427:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  México (centro)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  AWS GovCloud (Este de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJs:11`   | 

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

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión `syn-nodejs-3.1` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia-Pacífico (Yakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia-Pacífico (Malasia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia-Pacífico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia-Pacífico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia-Pacífico (Seúl)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia-Pacífico (Singapur)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia-Pacífico (Sídney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia-Pacífico (Taipéi)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia-Pacífico (Tailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia-Pacífico (Tokio)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Canadá (centro)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  China (Pekín)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  China (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europa (Fráncfort)  |   ` 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 (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Europa (Zúrich)  |   ` arn:aws:lambda:eu-central-2:224218992030:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Israel (Tel Aviv)  |   ` arn:aws:lambda:il-central-1:313249807427:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  México (centro)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Medio Oriente (EAU)  |   ` arn:aws:lambda:me-central-1:239544149032:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  AWS GovCloud (Este de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJs:9`   | 

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

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión `syn-nodejs-3.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia-Pacífico (Yakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia-Pacífico (Malasia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia-Pacífico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia-Pacífico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia-Pacífico (Seúl)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia-Pacífico (Singapur)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia-Pacífico (Sídney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia-Pacífico (Taipéi)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia-Pacífico (Tailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia-Pacífico (Tokio)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Canadá (centro)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  China (Pekín)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  China (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europa (Fráncfort)  |   ` 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 (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Europa (Zúrich)  |   ` arn:aws:lambda:eu-central-2:224218992030:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Israel (Tel Aviv)  |   ` arn:aws:lambda:il-central-1:313249807427:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  México (centro)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Medio Oriente (EAU)  |   ` arn:aws:lambda:me-central-1:239544149032:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  AWS GovCloud (Este de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJs:1`   | 

### Tiempos de ejecución de Python y Selenium
<a name="Synthetics_Python_Runtime_ARNs"></a>

#### ARN para syn-python-selenium-10.0
<a name="syn-python-selenium-10.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-python-selenium-10.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:62`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:65`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:63`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:64`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:63`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:62`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:50`   | 
|  Asia-Pacífico (Yakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:57`   | 
|  Asia-Pacífico (Malasia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:32`   | 
|  Asia-Pacífico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:48`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:63`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:38`   | 
|  Asia-Pacífico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:61`   | 
|  Asia-Pacífico (Seúl)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:66`   | 
|  Asia-Pacífico (Singapur)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:67`   | 
|  Asia-Pacífico (Sídney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:62`   | 
|  Asia-Pacífico (Taipéi)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:25`   | 
|  Asia-Pacífico (Tailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:23`   | 
|  Asia-Pacífico (Tokio)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:63`   | 
|  Canadá (centro)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:63`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:106`   | 
|  China (Pekín)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:61`   | 
|  China (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:61`   | 
|  Europa (Fráncfort)  |   `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 (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:62`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:64`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:63`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:50`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:63`   | 
|  Europa (Zúrich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:49`   | 
|  Israel (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:47`   | 
|  México (centro)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:24`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:64`   | 
|  AWS GovCloud (Este de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:59`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:60`   | 

#### ARN para syn-python-selenium-9.0
<a name="syn-python-selenium-9.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-python-selenium-9.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:61`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:64`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:62`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:63`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:62`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:61`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:49`   | 
|  Asia-Pacífico (Yakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:56`   | 
|  Asia-Pacífico (Malasia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:31`   | 
|  Asia-Pacífico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:47`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:62`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:37`   | 
|  Asia-Pacífico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:60`   | 
|  Asia-Pacífico (Seúl)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:65`   | 
|  Asia-Pacífico (Singapur)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:66`   | 
|  Asia-Pacífico (Sídney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:61`   | 
|  Asia-Pacífico (Taipéi)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:24`   | 
|  Asia-Pacífico (Tailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:22`   | 
|  Asia-Pacífico (Tokio)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:62`   | 
|  Canadá (centro)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:62`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:105`   | 
|  China (Pekín)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:60`   | 
|  China (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:60`   | 
|  Europa (Fráncfort)  |   `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 (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:61`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:63`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:62`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:49`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:62`   | 
|  Europa (Zúrich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:48`   | 
|  Israel (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:46`   | 
|  México (centro)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:23`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:61`   | 
|  Medio Oriente (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:49`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:63`   | 
|  AWS GovCloud (Este de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:58`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:59`   | 

#### ARN para syn-python-selenium-8.0
<a name="syn-python-selenium-8.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-python-selenium-8.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:57`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:60`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:58`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:59`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:58`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:57`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:45`   | 
|  Asia-Pacífico (Yakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:52`   | 
|  Asia-Pacífico (Malasia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:27`   | 
|  Asia-Pacífico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:43`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:58`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:33`   | 
|  Asia-Pacífico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:56`   | 
|  Asia-Pacífico (Seúl)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:61`   | 
|  Asia-Pacífico (Singapur)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:62`   | 
|  Asia-Pacífico (Sídney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:57`   | 
|  Asia-Pacífico (Taipéi)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:20`   | 
|  Asia-Pacífico (Tailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:18`   | 
|  Asia-Pacífico (Tokio)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:58`   | 
|  Canadá (centro)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:58`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:101`   | 
|  China (Pekín)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:56`   | 
|  China (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:56`   | 
|  Europa (Fráncfort)  |   `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 (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:57`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:59`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:58`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:45`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:58`   | 
|  Europa (Zúrich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:44`   | 
|  Israel (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:42`   | 
|  México (centro)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:19`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:57`   | 
|  Medio Oriente (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:45`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:59`   | 
|  AWS GovCloud (Este de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:54`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:55`   | 

#### ARN para syn-python-selenium-7.0
<a name="syn-python-selenium-7.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-python-selenium-7.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:49`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:52`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:50`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:51`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:50`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:49`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:37`   | 
|  Asia-Pacífico (Yakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:44`   | 
|  Asia-Pacífico (Malasia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:19`   | 
|  Asia-Pacífico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:35`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:50`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:25`   | 
|  Asia-Pacífico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:48`   | 
|  Asia-Pacífico (Seúl)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:53`   | 
|  Asia-Pacífico (Singapur)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:54`   | 
|  Asia-Pacífico (Sídney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:49`   | 
|  Asia-Pacífico (Taipéi)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:12`   | 
|  Asia-Pacífico (Tailandia)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:10`   | 
|  Asia-Pacífico (Tokio)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:50`   | 
|  Canadá (centro)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:50`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:93`   | 
|  China (Pekín)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:48`   | 
|  China (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:48`   | 
|  Europa (Fráncfort)  |   `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 (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:49`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:51`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:50`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:37`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:50`   | 
|  Europa (Zúrich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:36`   | 
|  Israel (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:34`   | 
|  México (centro)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:11`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:49`   | 
|  Medio Oriente (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:37`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:51`   | 
|  AWS GovCloud (Este de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:46`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:47`   | 

#### ARN para syn-python-selenium-6.0
<a name="syn-python-selenium-6.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-python-selenium-6.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:47`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:50`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:48`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:49`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:48`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:47`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:35`   | 
|  Asia-Pacífico (Yakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:42`   | 
|  Asia-Pacífico (Malasia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:17`   | 
|  Asia-Pacífico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:33`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:48`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:25`   | 
|  Asia-Pacífico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:46`   | 
|  Asia-Pacífico (Seúl)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:51`   | 
|  Asia-Pacífico (Singapur)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:52`   | 
|  Asia-Pacífico (Sídney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:47`   | 
|  Asia-Pacífico (Taipéi)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:10`   | 
|  Asia-Pacífico (Tailandia)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:8`   | 
|  Asia-Pacífico (Tokio)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:48`   | 
|  Canadá (centro)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:48`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:91`   | 
|  China (Pekín)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:46`   | 
|  China (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:46`   | 
|  Europa (Fráncfort)  |   `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 (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:47`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:49`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:48`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:35`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:48`   | 
|  Europa (Zúrich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:34`   | 
|  Israel (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:32`   | 
|  México (centro)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:9`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:47`   | 
|  Medio Oriente (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:35`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:49`   | 
|  AWS GovCloud (Este de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:44`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:45`   | 

#### ARN para syn-python-selenium-5.1
<a name="syn-python-selenium-5.1"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-python-selenium-5.1` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:45`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:48`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:46`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:47`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:46`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:45`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:33`   | 
|  Asia-Pacífico (Yakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:40`   | 
|  Asia-Pacífico (Malasia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:15`   | 
|  Asia-Pacífico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:31`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:46`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:24`   | 
|  Asia-Pacífico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:44`   | 
|  Asia-Pacífico (Seúl)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:49`   | 
|  Asia-Pacífico (Singapur)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:50`   | 
|  Asia-Pacífico (Sídney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:45`   | 
|  Asia-Pacífico (Taipéi)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:8`   | 
|  Asia-Pacífico (Tailandia)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:6`   | 
|  Asia-Pacífico (Tokio)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:46`   | 
|  Canadá (centro)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:44`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:89`   | 
|  China (Pekín)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:44`   | 
|  China (Ningxia);  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:44`   | 
|  Europa (Fráncfort)  |   `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 (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:45`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:47`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:46`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:33`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:46`   | 
|  Europa (Zúrich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:32`   | 
|  Israel (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:30`   | 
|  México (centro)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:7`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:45`   | 
|  Medio Oriente (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:33`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:47`   | 
|  AWS GovCloud (Este de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:42`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:43`   | 

#### ARN para syn-python-selenium-5.0
<a name="syn-python-selenium-5.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-python-selenium-5.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:43`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:46`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:44`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:45`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:44`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:43`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:31`   | 
|  Asia-Pacífico (Yakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:38`   | 
|  Asia-Pacífico (Malasia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:13`   | 
|  Asia-Pacífico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:29`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:44`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:23`   | 
|  Asia-Pacífico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:42`   | 
|  Asia-Pacífico (Seúl)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:47`   | 
|  Asia-Pacífico (Singapur)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:48`   | 
|  Asia-Pacífico (Sídney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:43`   | 
|  Asia-Pacífico (Taipéi)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:3`   | 
|  Asia-Pacífico (Tailandia)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:4`   | 
|  Asia-Pacífico (Tokio)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:44`   | 
|  Canadá (centro)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:44`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:87`   | 
|  China (Pekín)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:43`   | 
|  China (Ningxia);  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:43`   | 
|  Europa (Fráncfort)  |   `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 (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:43`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:45`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:44`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:31`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:44`   | 
|  Europa (Zúrich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:30`   | 
|  Israel (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:28`   | 
|  México (centro)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:5`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:43`   | 
|  Medio Oriente (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:31`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:45`   | 
|  AWS GovCloud (Este de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:41`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:42`   | 

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

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-python-selenium-4.1` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:40`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:43`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:41`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:42`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:41`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:40`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:28`   | 
|  Asia-Pacífico (Yakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:35`   | 
|  Asia-Pacífico (Malasia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:10`   | 
|  Asia-Pacífico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:26`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:41`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:22`   | 
|  Asia-Pacífico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:39`   | 
|  Asia-Pacífico (Seúl)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:44`   | 
|  Asia-Pacífico (Singapur)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:45`   | 
|  Asia-Pacífico (Sídney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:40`   | 
|  Asia-Pacífico (Taipéi)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:4`   | 
|  Asia-Pacífico (Tailandia)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:1`   | 
|  Asia-Pacífico (Tokio)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:41`   | 
|  Canadá (centro)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:41`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:84`   | 
|  China (Pekín)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:40`   | 
|  China (Ningxia);  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:40`   | 
|  Europa (Fráncfort)  |   `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 (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:40`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:42`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:41`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:28`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:41`   | 
|  Europa (Zúrich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:27`   | 
|  Israel (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:25`   | 
|  México (centro)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:3`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:40`   | 
|  Medio Oriente (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:28`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:42`   | 
|  AWS GovCloud (Este de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:38`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:39`   | 

#### ARNs para syn-python-selenium-4.0
<a name="syn-python-selenium-4.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-python-selenium-4.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:38`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:41`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:39`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:40`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:39`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:38`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:26`   | 
|  Asia-Pacífico (Yakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:33`   | 
|  Asia-Pacífico (Malasia)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:8`   | 
|  Asia-Pacífico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:24`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:39`   | 
|  Asia-Pacífico (Nueva Zelanda)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:21`   | 
|  Asia-Pacífico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:37`   | 
|  Asia-Pacífico (Seúl)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:42`   | 
|  Asia-Pacífico (Singapur)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:43`   | 
|  Asia-Pacífico (Sídney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:38`   | 
|  Asia-Pacífico (Taipéi)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:5`   | 
|  Asia-Pacífico (Tokio)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:39`   | 
|  Canadá (centro)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:39`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:82`   | 
|  China (Pekín)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:38`   | 
|  China (Ningxia);  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:38`   | 
|  Europa (Fráncfort)  |   `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 (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:38`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:40`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:39`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:26`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:39`   | 
|  Europa (Zúrich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:25`   | 
|  Israel (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:23`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:38`   | 
|  Medio Oriente (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:26`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:40`   | 
|  AWS GovCloud (Este de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:36`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:37`   | 

#### ARN para syn-python-selenium-3.0
<a name="syn-python-selenium-3.0"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-python-selenium-3.0` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:32`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:34`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:32`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:34`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:32`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:32`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:20`   | 
|  Asia-Pacífico (Yakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:26`   | 
|  Asia-Pacífico (Malasia)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:7`   | 
|  Asia-Pacífico (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:18`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:32`   | 
|  Asia-Pacífico (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:30`   | 
|  Asia-Pacífico (Seúl)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:34`   | 
|  Asia-Pacífico (Singapur)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:37`   | 
|  Asia-Pacífico (Sídney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:32`   | 
|  Asia-Pacífico (Tailandia)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:3`   | 
|  Asia-Pacífico (Tokio)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:32`   | 
|  Canadá (centro)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:32`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:76`   | 
|  China (Pekín)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:32`   | 
|  China (Ningxia);  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:32`   | 
|  Europa (Fráncfort)  |   `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 (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:32`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:33`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:32`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:20`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:32`   | 
|  Europa (Zúrich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics_Selenium:19`   | 
|  Israel (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics_Selenium:17`   | 
|  México (centro)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:4`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:32`   | 
|  Medio Oriente (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:19`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:33`   | 
|  AWS GovCloud (Este de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:30`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:31`   | 

#### ARN para syn-python-selenium-2.1
<a name="syn-python-selenium-2.1"></a>

En la siguiente tabla se muestran los ARN que se deben utilizar para la versión ` syn-python-selenium-2.1` del tiempo de ejecución de CloudWatch Synthetics en cada región de AWS en la que está disponible.


| Región | ARN | 
| --- | --- | 
|  Este de EE. UU. (Norte de Virginia)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:29`   | 
|  Este de EE. UU. (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:31`   | 
|  Oeste de EE. UU. (Norte de California)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:29`   | 
|  Oeste de EE. UU. (Oregón)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:31`   | 
|  África (Ciudad del Cabo)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:29`   | 
|  Asia-Pacífico (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:29`   | 
|  Asia-Pacífico (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:17`   | 
|  Asia-Pacífico (Yakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:23`   | 
|  Asia-Pacífico (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:15`   | 
|  Asia-Pacífico (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:29`   | 
|  Asia-Pacífico (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:27`   | 
|  Asia-Pacífico (Seúl)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:30`   | 
|  Asia-Pacífico (Singapur)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:34`   | 
|  Asia-Pacífico (Sídney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:29`   | 
|  Asia-Pacífico (Tokio)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:29`   | 
|  Canadá (centro)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:29`   | 
|  Oeste de Canadá (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:73`   | 
|  China (Pekín)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:29`   | 
|  China (Ningxia);  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:29`   | 
|  Europa (Fráncfort)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:29`   | 
|  Europa (Irlanda)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:31`   | 
|  Europa (Londres)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:29`   | 
|  Europa (Milán)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:30`   | 
|  Europa (París)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:29`   | 
|  Europa (España)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:17`   | 
|  Europa (Estocolmo)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:29`   | 
|  Europa (Zúrich)  |   `arn:aws:lambda:eu-central-2:224218992030:layer:Synthetics:16`   | 
|  Israel (Tel Aviv)  |   `arn:aws:lambda:il-central-1:313249807427:layer:Synthetics:14`   | 
|  Medio Oriente (Baréin)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:29`   | 
|  Medio Oriente (EAU)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:16`   | 
|  América del Sur (São Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:30`   | 
|  AWS GovCloud (Este de EE. UU.)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:29`   | 
|  AWS GovCloud (Oeste de EE. UU.)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:29`   | 

## Errores comunes
<a name="CloudWatch_Synthetics_Debug_Errors"></a>

 **Error: ejecutar proyectos SAM de AWS de forma local requiere Docker. Lo tiene instalado y se está ejecutando?** 

Asegúrese de iniciar Docker en su equipo.

 **Error en la invocación local de SAM: se produjo un error (ExpiredTokenException) al llamar a la operación GetLayerVersion: el token de seguridad incluido en la solicitud ha caducado** 

Asegúrese de que el perfil predeterminado de AWS esté configurado.

 **Errores más comunes** 

Para obtener más información sobre los errores comunes con el SAM, consulte [Solución de problemas de la CLI de SAM de AWS](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-troubleshooting.html).

# Solución de problemas de un valor controlado
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot"></a>

En caso de que el valor controlado falle, verifique lo siguiente para solucionar el problema.

 **Solución de problemas generales** 
+ Utilice la página de detalles de valores controlados para encontrar más información. En la consola de CloudWatch, elija **Canarios** en el panel de navegación y, a continuación, elija el nombre del canario para abrir su página de detalles. En la pestaña **Disponibilidad**, elija la métrica **SuccessPercent** para ver si el problema es constante o intermitente.

  Mientras todavía está en la pestaña **Availability** (Disponibilidad), elija un punto de datos fallido para verlas capturas de pantalla, registros y los informes de pasos (si están disponibles) para esa ejecución fallida.

  Si hay un informe de pasos disponible debido a que los pasos forman parte de su script, verifique qué paso ha fallado y vea las capturas de pantalla asociadas para ver el problema que los clientes están viendo.

  También puede comprobar los archivos HAR para ver si una o más solicitudes están fallando. Puede profundizar en el uso de registros para analizar a fondo las solicitudes y errores fallidos. Finalmente, puede comparar estos artefactos con los artefactos de un valor controlado exitoso para identificar el problema.

  De forma predeterminada, CloudWatch Synthetics toma capturas de pantalla para cada paso en un valor controlado de la UI. Sin embargo, es posible que el script esté configurado para desactivar las capturas de pantalla. Durante la depuración, es posible que desee habilitar las capturas de pantalla de nuevo. Del mismo modo, para los canaries de la API, es posible que desee ver las cabeceras y cuerpos de solicitud y respuesta HTTP durante la depuración. Para obtener más información acerca de cómo incluir los datos en el informe, consulte [executeHttpStep(stepName, requestOptions, [callback], [stepConfig])](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_executeHttpStep).
+ Si ha tenido una implementación reciente en su aplicación, retroceda y ejecute la depuración más tarde.
+ Conéctese al punto de enlace de manera manual para verificar si puede reproducir el mismo problema.

**Topics**
+ [El valor controlado falla tras la actualización del entorno de Lambda](#Troubleshoot_upgradeLambda)
+ [Mi valor controlado está bloqueado por AWS WAF](#Canary_Blocked_WAF)
+ [En la espera de un elemento](#CloudWatch_Synthetics_Canaries_Troubleshoot_waiting)
+ [El nodo no es visible o no es un HTMLElement para page.click()](#CloudWatch_Synthetics_Canaries_Troubleshoot_notvisible)
+ [No se pueden cargar artefactos en S3; excepción: no se puede obtener la ubicación del bucket de S3: acceso denegado](#CloudWatch_Synthetics_Canaries_Troubleshoot_noupload)
+ [Error: error de protocolo (Runtime.CallFunctionOn): destino cerrado.](#CloudWatch_Synthetics_Canaries_Troubleshoot_protocolError)
+ [Error de valor controlado. Error: no hay punto de datos, el valor controlado muestra error de tiempo de espera](#CloudWatch_Synthetics_Canaries_Troubleshoot_nodatapoint)
+ [Acceso a un punto de enlace interno](#CloudWatch_Synthetics_Canaries_Troubleshoot_internalendpoint)
+ [Problemas con la actualización y las versiones anteriores de tiempo de ejecución de valores controlados](#CloudWatch_Synthetics_Canaries_Troubleshoot_upgradeissues)
+ [Problema del intercambio de recursos de origen cruzado (CORS)](#CloudWatch_Synthetics_Canaries_CORS)
+ [Problemas de condiciones de carrera de los canarios](#CloudWatch_Synthetics_Canaries_RaceCondition)
+ [Solución de problemas de un valor controlado en una VPC](#CloudWatch_Synthetics_Canaries_VPC_troubleshoot)
+ [Solución de problemas de un canario con reintento automático](#CloudWatch_Synthetics_Canaries_autoretry)

## El valor controlado falla tras la actualización del entorno de Lambda
<a name="Troubleshoot_upgradeLambda"></a>

Los valores controlados de CloudWatch Synthetics se implementan como funciones de Lambda en su cuenta. Estas funciones de Lambda están sujetas a actualizaciones del tiempo de ejecución de Lambda periódicas que incluyen actualizaciones de seguridad, correcciones de errores y otras mejoras. Lambda se esfuerza por proporcionar actualizaciones de tiempo de ejecución que sean compatibles con versiones anteriores a las funciones existentes. Sin embargo, al igual que ocurre con los parches de software, hay casos excepcionales en los que una actualización del tiempo de ejecución puede afectar negativamente a una función ya existente. Si cree que un valor controlado se ha visto afectado por una actualización del tiempo de ejecución de Lambda, puede utilizar el modo manual de administración del tiempo de ejecución de Lambda (en las regiones compatibles) para revertir temporalmente la versión del tiempo de ejecución de Lambda. Esto mantiene al valor controlado en funcionamiento y minimiza las interrupciones, lo que proporciona tiempo para corregir la incompatibilidad antes de volver a la última versión del tiempo de ejecución.

Si el valor controlado falla después de una actualización del tiempo de ejecución de Lambda, la mejor solución es actualizar a uno de los tiempos de ejecución más recientes de Synthetics. Para obtener más información sobre los tiempos de ejecución más recientes, consulte [Versiones de tiempo de ejecución de Synthetics](CloudWatch_Synthetics_Canaries_Library.md).

Como solución alternativa, en las regiones en las que estén disponibles los controles de administración del tiempo de ejecución de Lambda, puede revertir un valor controlado a un tiempo de ejecución administrado por Lambda anterior, mediante el modo manual con los controles de administración del tiempo de ejecución. Puede configurar el modo manual mediante la AWS CLI o la consola de Lambda con los pasos que se indican a continuación en las siguientes secciones.

**aviso**  
Al cambiar la configuración del tiempo de ejecución al modo manual, la función de Lambda no recibirá actualizaciones de seguridad automáticas hasta que vuelva al modo automático. Durante este periodo, la función de Lambda podría estar expuesta a vulnerabilidades de seguridad.

 **Requisitos previos** 
+ Instalar [jq](https://jqlang.github.io/jq/)
+ Instale la versión más reciente de AWS CLI. Para obtener más información, consulte las [instrucciones sobre la instalación y actualización de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html#getting-started-install-instructions).

### Paso 1: obtener el ARN de la función de Lambda
<a name="UpgradeLambda_ObtainFunctionARN"></a>

Ejecute el siguiente comando para recuperar el campo `EngineArn` de la respuesta. Este `EngineArn` es el ARN de la función de Lambda asociada al valor controlado. Utilice este ARN en los siguientes pasos.

```
aws synthetics get-canary --name my-canary | jq '.Canary.EngineArn'
```

Resultado de ejemplo para `EngingArn`:

```
"arn:aws:lambda:us-west-2:123456789012:function:cwsyn-my-canary-dc5015c2-db17-4cb5-afb1-EXAMPLE991:8"
```

### Paso 2: obtener el ARN de la última versión válida del tiempo de ejecución de Lambda
<a name="UpgradeLambda_RuntimeARN"></a>

Para saber si su valor controlado se vio afectado por una actualización del tiempo de ejecución de Lambda, compruebe si la fecha y la hora de los cambios del ARN de la versión del tiempo de ejecución de Lambda en sus registros coinciden con la fecha y la hora en que vio los problemas en su valor controlado. Si no coinciden, probablemente no sea una actualización del tiempo de ejecución de Lambda lo que esté causando los problemas.

Si su valor controlado se ve afectado por una actualización del tiempo de ejecución de Lambda, debe identificar el ARN de la versión del tiempo de ejecución de Lambda en funcionamiento que utilizaba anteriormente. Siga las instrucciones de [Identificación de los cambios de versión del tiempo de ejecución](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-update.html#runtime-management-identify.html) para buscar el ARN del tiempo de ejecución anterior. Registre el ARN de la versión del tiempo de ejecución y continúe con el paso 3 para establecer la configuración de administración del tiempo de ejecución.

Si su valor controlado aún no se ha visto afectado por una actualización del entorno de Lambda, puede buscar el ARN de la versión del tiempo de ejecución de Lambda que utiliza actualmente. Ejecute el siguiente comando para recuperar el `RuntimeVersionArn` de la función de Lambda de la respuesta. 

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

Resultado de ejemplo para `RuntimeVersionArn`:

```
"arn:aws:lambda:us-west-2::runtime:EXAMPLE647b82f490a45d7ddd96b557b916a30128d9dcab5f4972911ec0f"
```

### Paso 3: actualizar la configuración de administración del tiempo de ejecución de Lambda
<a name="UpgradeLambda_Update"></a>

Puede utilizar la AWS CLI o la consola de Lambda para actualizar la configuración de administración del tiempo de ejecución.

 **Para establecer el modo manual de la configuración de administración del tiempo de ejecución de Lambda mediante la AWS CLI** 

Ingrese el siguiente comando para cambiar la administración del tiempo de ejecución de la función de Lambda al modo manual. Asegúrese de reemplazar *function-name* y *qualifier* por el ARN de la función de Lambda y el número de versión de la función de Lambda, respectivamente, con los valores que encontró en el paso 1. Sustituya también *runtime-version-arn* por el ARN de la versión que encontró en el paso 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"
```

**Para cambiar un valor controlado al modo manual mediante la consola de Lambda**

1. Abra la consola de AWS Lambda en [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Elija la pestaña **Versiones**, elija el enlace del número de versión que corresponda a su ARN y elija la pestaña **Código**.

1. Desplácese hacia abajo hasta **Configuración de tiempo de ejecución**, expanda la **Configuración de administración del tiempo de ejecución** y copie el **ARN de la versión del tiempo de ejecución**.  
![\[Muestra la sección Configuración del tiempo de ejecución de la pantalla y dónde aparece el ARN del tiempo de ejecución en esta sección.\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/images/SyntheticsManual1.png)

1. Elija **Editar la configuración de administración del tiempo de ejecución**, elija **Manual** y pegue el ARN de la versión del tiempo de ejecución que copió anteriormente en el campo **ARN de la versión del tiempo de ejecución**. A continuación, elija **Guardar**.  
![\[Muestra la pantalla Configuración de administración del tiempo de ejecución y dónde se debe pegar el ARN de la versión del tiempo de ejecución que copió anteriormente.\]](http://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/images/SyntheticsManual2.png)

## Mi valor controlado está bloqueado por AWS WAF
<a name="Canary_Blocked_WAF"></a>

Para permitir el paso del tráfico de canarios a través de AWS WAF, cree una condición de coincidencia de cadenas de AWS WAF que permita obtener una cadena personalizada especificada por usted. Para obtener más información, consulte [Trabajar con condiciones de coincidencia de cadena](https://docs.aws.amazon.com/waf/latest/developerguide/classic-web-acl-string-conditions.html) en la documentación de AWS WAF.

Le recomendamos encarecidamente que utilice su propia cadena usuario-agente personalizada en lugar de utilizar los valores predeterminados. Esto proporciona un mejor control del filtrado de AWS WAF y mejora la seguridad.

Para configurar una cadena usuario-agente personalizada, haga lo siguiente:
+ Para los tiempos de ejecución de Playwright, puede añadir su cadena usuario-agente personalizada aprobada por AWS WAF mediante el archivo de configuración de Synthetics. Para obtener más información, consulte [Configuraciones de CloudWatch Synthetics](Synthetics_WritingCanary_Nodejs_Playwright.md#Synthetics_canary_configure_Playwright_script).
+ Para los tiempos de ejecución de Puppeteer o Selenium, puede añadir su cadena usuario-agente personalizada mediante el uso de las funciones de biblioteca compatibles. Para los tiempos de ejecución de Puppeteer, consulte [async addUserAgent(page, userAgentString);](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_addUserAgent). Para los tiempos de ejecución de Selenium, consulte [add\$1user\$1agent(user\$1agent\$1str)](CloudWatch_Synthetics_Canaries_Library_Python.md#CloudWatch_Synthetics_Library_add_user_agent).

## En la espera de un elemento
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_waiting"></a>

Después de analizar los registros y las capturas de pantalla, si nota que el script está esperando que aparezca un elemento en la pantalla y agota el tiempo de espera, verifique la captura de pantalla correspondiente para ver si el elemento aparece en la página. Verifique el `xpath` para asegurarse de que es correcto.

Para problemas relacionados con el Puppeteer, consulte [Puppeteer's GitHub page](https://github.com/puppeteer/puppeteer/issues) (Página de GitHub de Puppeteer) o foros de Internet.

## El nodo no es visible o no es un HTMLElement para page.click()
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_notvisible"></a>

Si un nodo no es visible o no es un `HTMLElement` para `page.click()`, verifique primero el `xpath` que está utilizando para hacer clic en el elemento. Además, si el elemento se encuentra en la parte inferior de la pantalla, ajuste la ventana gráfica. CloudWatch Synthetics utiliza de forma predeterminada una ventana gráfica de 1920 x 1080. Puede establecer una ventana gráfica diferente al lanzar el navegador o mediante la función Puppeteer `page.setViewport`.

## No se pueden cargar artefactos en S3; excepción: no se puede obtener la ubicación del bucket de S3: acceso denegado
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_noupload"></a>

Si el valor controlado no funciona debido a un error de Amazon S3, esto significa que CloudWatch Synthetics no ha podido cargar las capturas de pantalla, los registros o los informes creados para el valor controlado debido a problemas de permisos. Comprueba lo siguiente:
+ Verifique que el rol de IAM del valor controlado tenga el permiso `s3:ListAllMyBuckets`, el permiso `s3:GetBucketLocation` para el bucket de Amazon S3 correcto y el permiso `s3:PutObject` para el bucket y donde el valor controlado almacena sus artefactos. Si el valor controlado lleva a cabo una supervisión visual, el rol también necesita el permiso ` s3:GetObject` para el bucket. Estos mismos permisos también se requieren en la política del punto de conexión de la puerta de enlace de Amazon VPC S3, si el valor controlado se implementa en una VPC con un punto de conexión de VPC.
+  Si el valor controlado utiliza una clave administrada por el cliente de AWS KMS para cifrado en lugar de la clave administrada de AWS estándar (predeterminada), es posible que el rol de IAM del valor controlado no tenga permiso para cifrar o descifrar con esa clave. Para obtener más información, consulte [Cifrado de artefactos de un valor controlado](CloudWatch_Synthetics_artifact_encryption.md).
+ Es posible que la política de bucket no permita el mecanismo de cifrado que utiliza el valor controlado. Por ejemplo, si la política de bucket obliga a utilizar un mecanismo de cifrado específico o una clave de KMS, debe seleccionar el mismo modo de cifrado para su valor controlado.

Si el valor controlado lleva a cabo una supervisión visual, consulte [Actualización de la ubicación y el cifrado de artefactos al utilizar supervisión visual](CloudWatch_Synthetics_artifact_encryption.md#CloudWatch_Synthetics_artifact_encryption_visual) para obtener más información.

## Error: error de protocolo (Runtime.CallFunctionOn): destino cerrado.
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_protocolError"></a>

Este error aparece si hay algunas solicitudes de red después de cerrar la página o el navegador. Es posible que haya olvidado esperar una operación asíncrona. Después de ejecutar el script, CloudWatch Synthetics cierra el navegador. La ejecución de cualquier operación asíncrona después de cerrar el navegador puede causar `target closed error`. 

## Error de valor controlado. Error: no hay punto de datos, el valor controlado muestra error de tiempo de espera
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_nodatapoint"></a>

Esto significa que la ejecución del valor controlado superó el tiempo de espera. La ejecución del valor controlado se detuvo antes de que CloudWatch Synthetics pudiera publicar métricas porcentuales exitosas de CloudWatch o actualizar artefactos como archivos HAR, registros y capturas de pantalla. Si su tiempo de espera es demasiado corto, puede aumentarlo.

De forma predeterminada, un valor de tiempo de espera del valor controlado es igual a su frecuencia. Puede ajustar manualmente el valor de tiempo de espera para que sea menor o igual que la frecuencia de los valores controlados. Si la frecuencia del valor controlado es baja, debe aumentar la frecuencia para aumentar el tiempo de espera. Puede ajustar tanto la frecuencia como el valor de tiempo de espera en **Programa** cuando cree o actualice un valor controlado mediante la consola de CloudWatch Synthetics.

Asegúrese de que el valor de tiempo de espera del valor controlado no sea inferior a 15 segundos para permitir arranques en frío de Lambda y el tiempo que tarda en arrancar la instrumentación de valor controlado.

Los artefactos de valores controlados no se pueden ver en la consola de CloudWatch Synthetics cuando se produce este error. Se puede utilizar Registros de CloudWatch para ver los registros de valores controlados.

**Cómo utilizar Registros de CloudWatch para ver los registros de un valor controlado**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación a la izquierda, elija **Log groups** (Grupos de registros).

1. Busque el grupo de registro con el nombre del valor controlado en el cuadro de filtro. Los grupos de registro para canarios tienen el nombre **/aws/lambda/cwsyn-*canaryName* -randomId**.

## Acceso a un punto de enlace interno
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_internalendpoint"></a>

Si desea que el valor controlado acceda a un punto de conexión de la red interna, se recomienda que configure CloudWatch Synthetics para que utilice VPC. Para obtener más información, consulte [Ejecución de un valor controlado en una VPC](CloudWatch_Synthetics_Canaries_VPC.md).

## Problemas con la actualización y las versiones anteriores de tiempo de ejecución de valores controlados
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_upgradeissues"></a>

Si ha actualizado recientemente el valor controlado de la versión de tiempo de ejecución `syn-1.0` a una versión posterior, puede ocurrir un problema de intercambio de recursos de origen cruzado (CORS). Para obtener más información, consulte [Problema del intercambio de recursos de origen cruzado (CORS)](#CloudWatch_Synthetics_Canaries_CORS).

Si recientemente ha instalado una versión anterior de tiempo de ejecución del valor controlado, verifique que las funciones de CloudWatch Synthetics que está utilizando están disponibles en la versión de tiempo de ejecución anterior a la que ha instalado. Por ejemplo, la función `executeHttpStep` está disponible para la versión de tiempo de ejecución `syn-nodejs-2.2` y posteriores. Para verificar la disponibilidad de las funciones, consulte [Escritura de un script de valor controlado](CloudWatch_Synthetics_Canaries_WritingCanary.md). 

**nota**  
Si planea actualizar o instalar versiones anteriores de tiempo de ejecución de un valor controlado, se recomienda que primero clone el valor controlado y actualice la versión del tiempo de ejecución en el valor controlado clonado. Una vez que haya verificado que el clon con la nueva versión de tiempo de ejecución funciona, puede actualizar la versión de tiempo de ejecución del valor controlado original y eliminar el clon.

## Problema del intercambio de recursos de origen cruzado (CORS)
<a name="CloudWatch_Synthetics_Canaries_CORS"></a>

En un valor controlado de la UI, si algunas solicitudes de red fallan con `403` o ` net::ERR_FAILED`, verifique si el valor controlado tiene habilitado el rastreo activo y también si utiliza la función Puppeteer `page.setExtraHTTPHeaders` para agregar cabeceras. Si es así, las solicitudes de red fallidas podrían deberse a restricciones de intercambio de recursos de origen cruzado (CORS). Puede confirmar si este es el caso al desactivar el rastreo activo o al eliminar las cabeceras HTTP adicionales.

 **Por qué sucede esto?** 

Cuando se utiliza el rastreo activo, se agrega una cabecera adicional a todas las solicitudes salientes para rastrear la llamada. La modificación de las cabeceras de solicitud al agregar una cabecera de seguimiento o cabeceras adicionales con Puppeteer’s `page.setExtraHTTPHeaders` provoca una verificación de CORS para las solicitudes XMLHttpRequest (XHR).

Si no desea desactivar el rastreo activo o eliminar las cabeceras adicionales, se puede actualizar la aplicación web para permitir el acceso de origen cruzado o puede desactivar la seguridad web mediante el indicador `disable-web-security` cuando lance el navegador Chrome en el script.

Puede anular los parámetros de lanzamiento que CloudWatch Synthetics ha utilizado y pasar los parámetros adicionales del indicador ` disable-web-security` mediante la función de lanzamiento de CloudWatch Synthetics. Para obtener más información, consulte [Funciones de la biblioteca disponibles para los scripts de canarios de Node.js mediante Puppeteer](CloudWatch_Synthetics_Canaries_Library_Nodejs.md).

**nota**  
Se pueden anular los parámetros de lanzamiento que CloudWatch Synthetics ha utilizado cuando utiliza la versión de tiempo de ejecución `syn-nodejs-2.1` o posteriores.

## Problemas de condiciones de carrera de los canarios
<a name="CloudWatch_Synthetics_Canaries_RaceCondition"></a>

Para disfrutar de la mejor experiencia al usar CloudWatch Synthetics, asegúrese de que el código escrito para los canarios sea idempotente. De lo contrario, en raras ocasiones, las ejecuciones de canarios pueden encontrarse con condiciones de carrera cuando el canario interactúa con el mismo recurso en distintas ejecuciones.

## Solución de problemas de un valor controlado en una VPC
<a name="CloudWatch_Synthetics_Canaries_VPC_troubleshoot"></a>

Si tiene problemas después de crear o actualizar un valor controlado en una VPC, puede encontrar la solución en una de las siguientes secciones.

### Un valor controlado nuevo muestra estado de error o no se puede actualizar
<a name="CloudWatch_Synthetics_Canaries_VPC_troubleshoot_errorstate"></a>

Si crea un valor controlado para ejecutarlo en una VPC y este entra inmediatamente en estado de error, o bien no puede actualizar un valor controlado para ejecutarlo en una VPC, es posible que el rol del valor controlado no tenga los permisos correctos. Para ejecutarse en una VPC, un valor controlado debe tener los permisos ` ec2:CreateNetworkInterface`, `ec2:DescribeNetworkInterfaces` y ` ec2:DeleteNetworkInterface`. Todos estos permisos están contenidos en la política administrada ` AWSLambdaVPCAccessExecutionRole`. Para obtener más información, consulte [Rol de ejecución y permisos de usuario](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-permissions).

Si el problema se produjo al crear un valor controlado, debe eliminarlo y crear uno nuevo. Si utiliza la consola de CloudWatch para crear el nuevo valor controlado, en **Permisos de acceso**, seleccione **Crear un nuevo rol**. Se crea un nuevo rol que incluye todos los permisos necesarios para ejecutar el valor controlado.

Si el problema ocurre al actualizar un valor controlado, puede volver a actualizarlo y proporcionar un nuevo rol que tenga los permisos necesarios.

### Error “No se devolvió ningún resultado de prueba”
<a name="CloudWatch_Synthetics_Canaries_VPC_troubleshoot_noresult"></a>

Si un valor controlado muestra un error de tipo “no se devolvió ningún resultado de prueba”, la causa puede ser uno de los problemas siguientes: 
+ Si la VPC no tiene acceso a Internet, debe utilizar los puntos de conexión de VPC para proporcionar al valor controlado acceso a CloudWatch y a Amazon S3. Debe habilitar las opciones **DNS Resolution (Resolución de DNS)** y **DNS hostname (Nombre de host DNS)** en la VPC para que estas direcciones de punto de enlace se resuelvan correctamente. Para obtener más información, consulte [Atributos DNS para la VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html) y [Uso de CloudWatch y CloudWatch Synthetics con los puntos de conexión de VPC de tipo interfaz](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-and-interface-VPC.html).
+ Los Canaries deben ejecutarse en subredes privadas dentro de una VPC. Para comprobarlo, abra la página **Subredes** en la consola de VPC. Compruebe las subredes que seleccionó al configurar el valor controlado. Si tienen una ruta a una gateway de Internet (**igw-**), no son subredes privadas.

Para ayudarlo a solucionar estos problemas, consulte los registros del valor controlado.

**Cómo ver los eventos de registro de un valor controlado**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, seleccione **Grupos de registro**.

1. Elija el nombre del grupo de registro del valor controlado. El nombre del grupo de registro comienza por ` /aws/lambda/cwsyn-canary-name`.

## Solución de problemas de un canario con reintento automático
<a name="CloudWatch_Synthetics_Canaries_autoretry"></a>

Para entender por qué el canario está fallando o para analizar intentos fallidos específicos, siga estos pasos de solución de problemas.

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Señales de aplicación**, **Valores controlados de Synthetics**.

1. Elija la pestaña **Canario**.

1. En la pestaña **Disponibilidad**, puede examinar los detalles de la ejecución de las siguientes maneras:
   + Selección de un punto específico en el gráfico de ejecuciones del canario
   + En **Problemas**, seleccione un registro. Tenga en cuenta que los reintentos están etiquetados y comparten marcas de tiempo con sus ejecuciones programadas.

   Puede ver información adicional en **Pasos**, **Captura de pantalla**, **Registros**, **Archivo HAR** o **Seguimientos (si está habilitado el seguimiento activo)**.

1. En **Artefactos del canario y ubicación de Amazon S3**, puede acceder al artefacto y navegar hasta las carpetas o buckets de Amazon S3 a través de los enlaces disponibles.

1. El gráfico de **Ejecuciones del canario** utiliza puntos de diferentes colores para indicar distintos estados:
   + Puntos azules: indican ejecuciones programadas exitosas con un valor constante del 100 %.
   + Puntos rojos: muestran fallos tanto de las ejecuciones programadas como de todos los reintentos, marcados con un 0 %.
   + Puntos anaranjados: muestran 0 % o 100 %. El 0 % indica que se está reintentando tras un intento anterior fallido, y el 100 % significa que se ha conseguido el éxito tras el reintento.

# Código de muestra para scripts de valores controlados
<a name="CloudWatch_Synthetics_Canaries_Samples"></a>

Esta sección contiene muestras de códigos que ilustran algunas funciones posibles para los scripts valores controlados de CloudWatch Synthetics.

## Muestras para Node.js y Playwright
<a name="Synthetics_Canaries_Samples_nodejs_playwright"></a>

### Canario de Playwright con varios pasos
<a name="Synthetics_canary_example_nodejs_playwright_multistep"></a>

El siguiente script es un ejemplo de un canario de Playwright en Node.js con varios pasos.

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

### Canarios de Playwright que establecen cookies
<a name="Synthetics_canaries_nodejs_playwright_cookies"></a>

El siguiente script es un ejemplo de un canario de Playwright en Node.js que establece tres cookies.

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

## Muestras para Node.js y Puppeteer
<a name="CloudWatch_Synthetics_Canaries_Samples_nodejspup"></a>

### Configuración de cookies
<a name="CloudWatch_Synthetics_Canaries_Samples_cookies"></a>

Los sitios web se basan en cookies para proporcionar funcionalidad personalizada o realizar un seguimiento de usuarios. Al configurar las cookies en scripts de CloudWatch Synthetics, puede imitar este comportamiento personalizado y validarlo.

Por ejemplo, un sitio web puede mostrar un enlace para **Login** (Iniciar sesión) para un usuario que vuelva a visitar la página en lugar de un enlace para **Register** (Registrarse).

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

### Emulación de dispositivos
<a name="CloudWatch_Synthetics_Canaries_Samples_device"></a>

Puede escribir scripts que emulan varios dispositivos para poder aproximar el aspecto y el comportamiento de una página en esos dispositivos.

El siguiente ejemplo emula un dispositivo iPhone 6. Para obtener más información acerca de la emulación, consulte [page.emulate (options)](https://pptr.dev/#?product=Puppeteer&version=v5.3.1&show=api-pageemulateoptions) en la documentación de 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();
};
```

### Valor controlado de la API de varios pasos
<a name="CloudWatch_Synthetics_Canaries_Samples_APIsteps"></a>

Este código de muestra demuestra un valor controlado de la API con dos pasos HTTP: prueba la misma API para casos de prueba positivos y negativos. La configuración del paso se pasa para habilitar la generación de informes de cabeceras de solicitud o de respuesta. Además, oculta el encabezado Autorización y X-Amz-Security-Token, ya que contienen credenciales de usuario. 

Cuando este script se utiliza como un valor controlado, se pueden ver los detalles sobre cada paso y las solicitudes HTTP asociadas, como el paso aprobar/no aprobar, la duración y las métricas de rendimiento, como el tiempo de búsqueda del DNS y la hora del primer byte. Se puede ver el número de 2xx, 4xx y 5xx para la ejecución del valor controlado. 

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

## Muestras para Python y Selenium
<a name="CloudWatch_Synthetics_Canaries_Samples_pythonsel"></a>

El siguiente código de Selenium de muestra es un valor controlado que falla con un mensaje de error personalizado cuando no se carga un elemento de destino.

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

# Canaries y rastreo X-Ray
<a name="CloudWatch_Synthetics_Canaries_tracing"></a>

Puede elegir habilitar el seguimiento activo de AWS X-Ray en los canaries que utilizan ` syn-nodejs-2.0` o tiempos de ejecución posteriores. Con el seguimiento activado, se envían seguimientos para todas las llamadas que el valor canario haga y que utilizan el navegador, el AWS SDK o los módulos HTTP o HTTPS. Los valores controlados con el seguimiento activado aparecen en el [Mapa de seguimiento de X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-console-servicemap.html) y en [Application Signals](CloudWatch-Application-Monitoring-Sections.md) una vez que lo haya activado para su aplicación. 

**nota**  
La activación del rastreo de X-Ray en canaries aún no se admite en Asia Pacífico (Yakarta).  
Los rastros de X-Ray no son compatibles con los canarios del navegador Firefox.

Cuando aparece un valor controlado en un mapa de seguimiento de X-Ray, aparece como un nuevo tipo de nodo cliente. Puede pasar el ratón sobre un nodo de valor controlado para ver datos sobre la latencia, las solicitudes y sobre los errores. También puede elegir el nodo de valor controlado para ver más datos en la parte inferior de la página. Desde esta área de la página, puede elegir **Ver en Synthetics** para ir a la consola de CloudWatch Synthetics para obtener más detalles sobre el canario, o elija **Consultar seguimientos** para ver más detalles sobre los seguimientos de las ejecuciones del canario.

Un canario con seguimiento habilitado también tiene un **Seguimiento** en la página de detalles, con detalles sobre seguimientos y segmentos de las ejecuciones del canario.

La activación del rastreo aumenta el tiempo de ejecución del valor controlado entre un 2,5 % y un 7 %.

Un valor controlado con rastreo habilitado debe utilizar un rol con los siguientes permisos. Si se utiliza la consola para crear el rol cuando se crea el valor controlado, se le otorgan estos permisos.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Sid230934",
            "Effect": "Allow",
            "Action": [
                "xray:PutTraceSegments"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Los seguimientos generados por los canarios incurren en cargos. Para obtener más información acerca de los precios de X-Ray, consulte [Precios de AWS X-Ray](https://aws.amazon.com/xray/pricing/).

# Ejecución de un valor controlado en una VPC
<a name="CloudWatch_Synthetics_Canaries_VPC"></a>

Puede ejecutar canaries en los puntos de enlace de una VPC, así como en los puntos de enlace internos públicos. Para ejecutar un valor controlado en una VPC, debe tener habilitadas las opciones **DNS Resolution (Resolución de DNS)** y **DNS hostnames (Nombres de host DNS)** en la VPC. Para obtener más información, consulte [Utilización de DNS con su VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html).

Cuando ejecute un valor controlado en un punto de conexión de VPC, debe proporcionar una manera en la que este envíe las métricas a CloudWatch y los artefactos a Amazon S3. Si la VPC ya está habilitada para el acceso a Internet, no hay nada más que hacer. El valor controlado se ejecuta en la VPC, pero puede acceder a Internet para cargar sus métricas y artefactos.

Si la VPC no está habilitada aún para el acceso a Internet, tiene dos opciones:
+ Habilite el acceso a Internet mediante IPv4 para permitir que el canario envíe métricas a CloudWatch y Amazon S3. Para obtener más información, consulte la siguiente sección [Otorgar acceso a Internet para su valor controlado en una VPC](#CloudWatch_Synthetics_VPC_Internet).
+ Si desea mantener la VPC como privada, puede configurar el valor controlado para que envíe los datos a CloudWatch y Amazon S3 mediante los puntos de conexión de VPC privados. Si aún no lo ha hecho, debe crear un punto de conexión de VPC para CloudWatch (com.amazonaws.*region*.monitoring) y un punto de conexión de puerta de enlace para Amazon S3. Para obtener más información, consulte [Uso de CloudWatch, CloudWatch Synthetics y CloudWatch Network Monitoring con los puntos de conexión de VPC de tipo interfaz](cloudwatch-and-interface-VPC.md) y [Puntos de enlace de Amazon VPC para Amazon S3](https://docs.aws.amazon.com/glue/latest/dg/vpc-endpoints-s3.html). 

## Otorgar acceso a Internet para su valor controlado en una VPC
<a name="CloudWatch_Synthetics_VPC_Internet"></a>

Siga estos pasos para dar acceso a Internet a su valor controlado de VPC o para asignarle una dirección IP estática

**Concesión de acceso a Internet (IPv4) a un canario en una VPC**

1. Cree una puerta de enlace NAT en una subred pública en la VPC. Para obtener instrucciones, consulte [Create a NAT gateway](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-creating)(Creación de una puerta de enlace NAT).

1. Agregue una nueva ruta a la tabla de enrutamiento de la subred privada donde se lanza el valor controlado. Especifique lo siguiente:
   + En **Destination** (Destino), ingrese **0.0.0.0/0**
   + En **Objetivo**, elija **Puerta de enlace NAT** y luego, el ID de la puerta de enlace NAT que ha creado.
   + Elija **Guardar rutas**.

   Para obtener más información acerca de la adición de rutas a la tabla de enrutamiento, consulte [Add and remove routes from a route table](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithRouteTables.html#AddRemoveRoutes) (Agregar y eliminar rutas de la tabla de rutas).

**Concesión de acceso a Internet (IPv6) a un canario en una VPC**

1. Configure su VPC para que tenga subredes de Dualstack. Debe agregar una puerta de enlace de Internet solo de salida a la VPC, actualizar las tablas de enrutamiento para permitir el tráfico a la puerta de enlace de Internet y permitir el acceso saliente desde los grupos de seguridad asociados. Para obtener más información, consulte [Adición de compatibilidad de IPv6 con su VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6-add.html).

1. Configure `Ipv6AllowedForDualstack ` en la configuración de la VPC del canario mediante la API `CreateCanary` o `UpdateCanary`. Para obtener más información, consulte [VpcConfigInput](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_VpcConfigInput.html).

   Para habilitar el tráfico IPv6 saliente desde su canario, las subredes de VPC conectadas al canario deben estar habilitadas para Dualstack.

**nota**  
Asegúrese de que las rutas a la puerta de enlace NAT se encuentran en un estado **activo**. Si se elimina la puerta de enlace de NAT y las rutas no están actualizadas, estas están en estado de agujero negro. Para obtener más información, consulte [Work with NAT gateways](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with) (Trabajar con puertas de enlace NAT).

# Cifrado de artefactos de un valor controlado
<a name="CloudWatch_Synthetics_artifact_encryption"></a>

CloudWatch Synthetics almacena artefactos de un valor controlado como capturas de pantalla, archivos HAR e informes en su bucket de Amazon S3. De forma predeterminada, estos artefactos se cifran en reposo mediante una clave administrada por AWS. Para obtener más información sobre los tipos de claves, consulte [Claves de cliente y claves de AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-mgmt.html). 

Puede elegir usar una opción de cifrado diferente. CloudWatch Synthetics es compatible con lo siguiente:
+ **SSE-S3**: cifrado de lado del servidor (SSE) con una clave administrada por Amazon S3.
+ **SSE-KMS**: cifrado de lado de servidor (SSE) con una clave administrada por el cliente de AWS KMS.

Si desea utilizar la opción de cifrado predeterminada con una clave administrada por AWS, no necesita permisos adicionales. 

Para utilizar el cifrado SSE-S3, debe especificar **SE\$1S3** como modo de cifrado cuando crea o actualiza el valor controlado. No necesita permisos adicionales para utilizar este modo de cifrado. Para obtener más información, consulte [Protecting data using server-side encryption with Amazon S3-managed encryption keys (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html) (Proteger los datos con el cifrado del lado del servidor con claves de cifrado administradas por Amazon S3 [SSE-S3]).

Para utilizar una clave administrada por el cliente de AWS KMS, debe especificar **SSE-KMS** como el modo de cifrado al crear o actualizar el valor controlado y también proporcionar el nombre de recurso de Amazon (ARN) de la clave. También puede utilizar una clave de KMS entre cuentas.

Para utilizar una clave administrada por el cliente, necesita la siguiente configuración:
+ El rol de IAM para el valor controlado debe tener permiso para cifrar los artefactos a través de la clave. Si utiliza la supervisión visual, también debe otorgarle permiso para descifrar artefactos.

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

------
+ En lugar de agregarle permisos a su rol de IAM, puede agregar su rol de IAM a la política de clave. Si utiliza el mismo rol para varios canaries, debería considerar este enfoque.

  ```
  {
      "Sid": "Enable IAM User Permissions",
      "Effect": "Allow",
      "Principal": {
          "AWS": "Your synthetics IAM role ARN"
      },
      "Action": [
          "kms:GenerateDataKey",
          "kms:Decrypt"
      ],
      "Resource": "*"
  }
  ```
+ Si utiliza una clave KMS entre cuentas, consulte [Permitir a los usuarios de otras cuentas utilizar una clave KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html).

 **Visualización de artefactos de valores controlados cifrados al utilizar una clave administrada por el cliente** 

Para ver artefactos de valores controlados, actualice la clave administrada por el cliente para otorgarle a AWS KMS el permiso de descifrado para el usuario que ve los artefactos. Como alternativa, agregue permisos de descifrado al usuario o rol de IAM que esté viendo los artefactos.

La política de AWS KMS predeterminada permite que las políticas de IAM de la cuenta permitan el acceso a las claves KMS. Si utiliza una clave de KMS de entre varias cuentas, consulte [¿Por qué los usuarios de varias cuentas reciben errores de acceso denegado cuando intentan acceder a objetos de Amazon S3 cifrados por una clave de AWS KMS personalizada?](https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-denied-error-s3/). 

Para obtener más información acerca de la solución de problemas de acceso denegado por una clave KMS, consulte [Solución de problemas de acceso a las claves](https://docs.aws.amazon.com/kms/latest/developerguide/policy-evaluation.html). 

## Actualización de la ubicación y el cifrado de artefactos al utilizar supervisión visual
<a name="CloudWatch_Synthetics_artifact_encryption_visual"></a>

Para llevar a cabo una supervisión visual, CloudWatch Synthetics compara las capturas de pantalla con las capturas de pantalla de referencia adquiridas en la ejecución seleccionada como punto de referencia. Si actualiza la ubicación de artefacto o la opción de cifrado, debe realizar una de estas acciones:
+ Asegúrese de que el rol de IAM tenga permisos suficientes tanto para la ubicación anterior de Amazon S3 como para la nueva ubicación de Amazon S3 para artefactos. Asegúrese también de que tenga permiso para los métodos de cifrado previos y nuevos y las claves KMS.
+ Cree una nueva base de referencia al seleccionar la siguiente ejecución de un valor controlado como nueva base de referencia. Si utiliza esta opción, solo tiene que asegurarse de que su rol de IAM tenga permisos suficientes para la nueva ubicación de artefactos y la opción de cifrado.

Recomendamos la segunda opción de seleccionar la siguiente ejecución como nueva base de referencia. Esto evita depender de una ubicación de artefacto o una opción de cifrado que ya no está usando para el valor controlado.

Por ejemplo, supongamos que el valor controlado utiliza la ubicación del artefacto A y la clave KMS K para cargar artefactos. Si actualiza el valor controlado a la ubicación del artefacto B y la clave KMS L, puede asegurarse de que su rol de IAM tenga permisos para las ubicaciones de artefactos (A y B) y ambas claves KMS (K y L). Como alternativa, puede seleccionar la siguiente ejecución como nueva base de referencia y asegurarse de que el rol de IAM del valor controlado tenga permisos para la ubicación del artefacto B y la clave KMS L. 

# Visualización de las estadísticas y los detalles de los valores controlados
<a name="CloudWatch_Synthetics_Canaries_Details"></a>

Puede ver detalles sobre sus canaries y ver estadísticas sobre sus ejecuciones.

Para poder ver todos los detalles sobre los resultados de las ejecuciones de valor controlado, debe iniciar sesión en una cuenta con permisos suficientes. Para obtener más información, consulte [Roles y permisos necesarios para los canaries de CloudWatch](CloudWatch_Synthetics_Canaries_Roles.md).

**Para ver estadísticas y detalles de los valores controlados**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Señales de aplicación**, **Valores controlados de Synthetics**.

   En los detalles sobre los canaries que ha creado:
   + **Status (Estado)** muestra visualmente cuántos de sus canaries han superado sus ejecuciones más recientes.
   + **Groups** (Grupos) muestra los grupos que ha creado y cuántos de ellos tienen valores controlados que fallan o son alarmantes.
   + **Slowest performers** (Rendimientos más lentos) muestra el grupo y la región con los valores controlados de rendimiento más lento. Se calculan al agregar la duración media de todos los valores controlados (a lo largo del periodo de tiempo seleccionado) dentro de un grupo o región y dividirla por el número de valores controlados en el grupo o región. Si elige la métrica para grupo más lento, la tabla se filtra para mostrar solo los grupos más lentos y los valores controlados. La tabla se ordena por duración media.
   + Cerca de la parte inferior de la página hay una tabla que muestra todos los canaries. Puede usar la barra de filtrado para filtrar la tabla y mostrar los canarios por nombres de canarios específicos, resultados de la última ejecución, porcentaje de éxito, alarmas, tasas de ejecución, estado de los canarios, tiempos de ejecución y etiquetas únicas. 

     En la columna de alarmas, solo se muestran las alarmas que cumplen con el estándar de nomenclatura para las alarmas de los canarios. Este estándar es `Synthetics-Alarm-canaryName -index`. Las alarmas de los canarios que crea en la sección **Synthetics** de la consola de CloudWatch utiliza automáticamente esta convención de nomenclatura. Si crea alarmas para los valores controlados en la sección **Alarms** (Alarmas) de la consola de CloudWatch o mediante AWS CloudFormation y no utiliza esta convención de nomenclatura, las alarmas funcionan pero no aparecen en esta lista.

1. Para ver más detalles sobre un solo canario, seleccione su nombre en la tabla **Canarios**.

   En los detalles de ese valor controlado:
   + La pestaña **Availability** (Disponibilidad) muestra la información sobre las últimas ejecuciones del valor controlado.

     En **Ejecuciones de valores controlados**, puede elegir una de las líneas para ver detalles sobre esa ejecución.

     En el gráfico, puede elegir **Pasos**, **Captura de pantalla**, **Registros** o **Archivo HAR** para ver este tipo de detalles. Si el canario tiene activado el seguimiento activo, también puede elegir **Seguimientos** para ver la información de seguimiento de las puestas en marcha del canario.

     Los registros para las ejecuciones del valor controlado se almacenan en los buckets de S3 y en Registros de CloudWatch.

     Las capturas de pantalla muestran cómo los clientes ven las páginas web. Puede utilizar los archivos HAR (archivos HTTP) para ver en detalle los datos de rendimiento sobre las páginas web. Puede analizar la lista de solicitudes web y detectar problemas de rendimiento, como el tiempo de carga de un elemento. Los archivos de registros muestran el registro de interacciones entre la ejecución del valor controlado y la página web y se pueden utilizar para identificar detalles de errores.

     Si el valor controlado utiliza el tiempo de ejecución `syn-nodejs-2.0-beta` o uno posterior, puede ordenar los archivos HAR por código de estado, tamaño de solicitud o por duración.

     La pestaña **Steps** (Pasos) muestra una lista de los pasos del valor controlado, el estado de cada paso, el motivo del error, la URL después de la ejecución del paso, capturas de pantalla y la duración de la ejecución del paso. Para canaries de la API con pasos HTTP, puede ver los pasos y las solicitudes HTTP correspondientes si está utilizando el tiempo de ejecución `syn-nodejs-2.2` o uno posterior.

     Elija la pestaña **HTTP Requests** (Solicitudes HTTP) para ver el registro de cada solicitud HTTP que el valor controlado realiza. Puede ver cabeceras de solicitud o de respuesta, el cuerpo de respuesta, el código de estado y los intervalos de error y rendimiento (duración total, tiempo de conexión del TCP, tiempo de enlace de TLS, tiempo de primer byte y tiempo de transferencia de contenido). Todas las solicitudes HTTP que utilizan el módulo HTTP o HTTPS que no se ven a simple vista se capturan aquí.

     De forma predeterminada, en los canaries de la API, la cabecera de solicitud, la de respuesta, el cuerpo de la solicitud y el cuerpo de la respuesta no se incluyen en el informe por razones de seguridad. Si elige incluirlos, los datos se almacenan solo en el bucket de S3. Para obtener más información acerca de cómo incluir los datos en el informe, consulte [executeHttpStep(stepName, requestOptions, [callback], [stepConfig])](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_executeHttpStep).

     Los tipos de contenido del cuerpo de la respuesta que se admiten son texto, HTML y JSON. Los tipos de contenido como texto/HTML, texto/plano, aplicación/JSON y aplicación/x-amz-json-1.0 son compatibles. No se admiten las respuestas comprimidas. 
   + La pestaña **Monitoring** (Supervisión) muestra gráficos de las métricas de CloudWatch que el valor controlado publica. Para obtener más información acerca de estas métricas, consulte [Métricas de CloudWatch que los canaries publican](CloudWatch_Synthetics_Canaries_metrics.md).

     Debajo de los gráficos de CloudWatch que el valor controlado publica se encuentran gráficos de métricas de Lambda relacionadas con el código Lambda del valor controlado.
   + La pestaña **Configuration** (Configuración) muestra información de configuración y programación sobre el valor controlado.
   + La pestaña **Groups** (Grupos) muestra los grupos a los que está asociado este valor controlado, si los hay.
   + La pestaña **Tags** (Etiquetas) muestra las etiquetas asociadas con el valor controlado.

# Métricas de CloudWatch que los canaries publican
<a name="CloudWatch_Synthetics_Canaries_metrics"></a>

Los canaries publican las siguientes métricas en CloudWatch en el espacio de nombres `CloudWatchSynthetics`. Para obtener información sobre cómo ver las métricas de CloudWatch, consulte [Ver métricas disponibles](viewing_metrics_with_cloudwatch.md) .

**nota**  
En el caso de canarios para varios navegadores, las métricas de dimensiones de navegador están habilitadas de forma predeterminada para proporcionar visibilidad del rendimiento entre navegadores, como Chrome, Firefox y otros. Para deshabilitar las métricas de navegador, establezca `browserDimension` en `false`.  
En el caso de los canarios de un solo navegador, las métricas de dimensiones de navegador están deshabilitadas de forma predeterminada para evitar la redundancia. Para ver las métricas desglosadas por navegador, establezca `browserDimension` en ` true`.


| Métrica | Descripción | 
| --- | --- | 
|   `2xx`   |  Número de solicitudes de red que el valor controlado ha realizado que devolvieron respuestas OK, con códigos de respuesta entre 200 y 299. Esta métrica se notifica para los canarios de al UI que utilizan la versión de tiempo de ejecución ` syn-nodejs-2.0` o una posterior, y se informa de los canaries de la API que utilizan la versión de tiempo de ejecución `syn-nodejs-2.2` o una posterior. Dimensiones válidas: CanaryName, Browser Estadísticas válidas: suma Unidades: recuento  | 
|   `4xx`   |  Número de solicitudes de red que el valor controlado ha realizado que devolvieron respuestas de error, con códigos de respuesta entre 400 y 499. Esta métrica se notifica para canarios de la UI que utilizan la versión de tiempo de ejecución ` syn-nodejs-2.0` o una posterior, y se informa de los canaries de la API que utilizan la versión de tiempo de ejecución `syn-nodejs-2.2` o una posterior. Dimensiones válidas: CanaryName, Browser Estadísticas válidas: suma Unidades: recuento  | 
|   `5xx`   |  Número de solicitudes de red que el valor controlado ha realizado que devolvieron respuestas a errores, con códigos de respuesta entre 500 y 599. Esta métrica se notifica para canarios de la UI que utilizan la versión de tiempo de ejecución ` syn-nodejs-2.0` o una posterior, y se informa de los canarios de la API que utilizan la versión de tiempo de ejecución `syn-nodejs-2.2` o una posterior. Dimensiones válidas: CanaryName, Browser Estadísticas válidas: suma Unidades: recuento  | 
|   `Duration`   |  La duración en milisegundos de la ejecución del valor controlado. Dimensiones válidas: CanaryName, Browser Estadísticas válidas: Promedio Unidades: milisegundos  | 
|   `DurationDryRun`   |  La duración de las ejecuciones de DryRun.  Dimensiones válidas: CanaryName, Browser Estadísticas válidas: Promedio Unidades: milisegundos  | 
|   `EphemeralStorageUsagePercent`   |  El porcentaje máximo de almacenamiento efímero utilizado en comparación con el almacenamiento efímero total configurado. Esta métrica se recopila en intervalos de 10 segundos.  | 
|   `Failed`   |  El número de ejecuciones de las ejecuciones del valor controlado que no se ejecutaron. Estos errores están relacionados con el valor controlado en sí. Dimensiones válidas: CanaryName, Browser Estadísticas válidas: suma Unidades: recuento  | 
|   `Failed requests`   |  El número de solicitudes HTTP que el valor controlado ejecuta en el sitio web de destino que fallaron sin respuesta. Dimensiones válidas: CanaryName, Browser Estadísticas válidas: suma Unidades: recuento  | 
|   `RetryCount`   |  El número de veces que el canario lo ha vuelto a intentar. Esta métrica solo se muestra cuando hay reintentos. Dimensiones válidas: CanaryName, Browser Estadísticas válidas: suma Unidades: recuento  | 
|   `SuccessPercent`   |  El porcentaje de las ejecuciones de este valor controlado que tienen éxito y no encuentran errores. Dimensiones válidas: CanaryName, Browser Estadísticas válidas: Promedio Unidad: porcentaje  | 
|   `SuccessPercentDryRun`   |  El porcentaje de éxito de las ejecuciones de DryRun. Dimensiones válidas: CanaryName, Browser Estadísticas válidas: Promedio Unidad: porcentaje  | 
|   `SuccessPercentWithRetries`   |  El porcentaje de las ejecuciones de este canario que tienen éxito después de todos los intentos. Dimensiones válidas: CanaryName, Browser Estadísticas válidas: Promedio Unidad: porcentaje  | 
|   `VisualMonitoringSuccessPercent`   |  Porcentaje de comparaciones visuales que coincidieron correctamente con las capturas de pantalla de línea de base durante una ejecución del valor controlado. Dimensiones válidas: CanaryName, Browser Estadísticas válidas: Promedio Unidad: porcentaje  | 
|   `VisualMonitoringTotalComparisons`   |  El número total de comparaciones visuales que se produjeron durante una ejecución del valor controlado. Dimensiones válidas: CanaryName, Browser Unidades: recuento  | 

**nota**  
Los canaries que utilizan los métodos `executeStep()` o `executeHttpStep()` de la biblioteca de Synthetics también publican las métricas de `SuccessPercent` y ` Duration` con las dimensiones `CanaryName` y `StepName` para cada paso.

 

# Edición o eliminación de un valor controlado
<a name="synthetics_canaries_deletion"></a>

Se puede editar o eliminar un valor controlado existente.

 **Editar el valor controlado** 

Cuando se edita un valor controlado, aunque no se cambie la programación, se restablece la programación correspondiente a cuando se edita el valor controlado. Por ejemplo, si tiene un valor controlado que se ejecuta cada hora y edita ese valor controlado, el valor controlado se ejecutará inmediatamente después de completar la edición y, a continuación, cada hora después de eso.

**Para editar o actualizar un valor controlado**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Señales de aplicación**, **Valores controlados de Synthetics**.

1. Seleccione el botón situado junto al nombre del canario y elija **Acciones**, **Editar**.

1. (Opcional) Si este canario lleva a cabo la supervisión visual de las capturas de pantalla y desea establecer la siguiente ejecución del canario como línea de base, seleccione **Set next run as new baseline** (Establecer la siguiente ejecución como nueva línea de base).

1. (Opcional) Si este canario lleva a cabo un supervisión visual de las capturas de pantalla y usted desea eliminar una captura de pantalla de la supervisión visual o desea designar partes de la captura de pantalla que se ignorarán durante las comparaciones visuales, bajo el título **Visual Monitoring** (Supervisión visual), elija **Edit Baseline** (Editar línea de base).

   Aparece la captura de pantalla y puede elegir una de las siguientes opciones:
   + Para eliminar la captura de pantalla de ser utilizada para la supervisión visual, seleccione **Remove screenshot from visual test baselin** (Eliminar captura de pantalla de la línea de base de prueba visual).
   + Para designar las partes de la captura de pantalla que se ignorarán durante las comparaciones visuales, haga clic y arrastre para dibujar áreas de la pantalla que se deben ignorar. Una vez que haya hecho esto en todas las áreas que desea ignorar durante las comparaciones, elija **Save** (Guardar).

1. En el **Editor de scripts**, **Versión del tiempo de ejecución**, seleccione una versión de tiempo de ejecución de Synthetics para ejecutar el canario. Para obtener información sobre las versiones del tiempo de ejecución de Synthetics, consulte [Versiones de tiempo de ejecución de Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library.html).

   En **Configuración del navegador**, puede habilitar el navegador para probar el canario. Debe seleccionar al menos un navegador.

1. Realice los demás cambios en el valor controlado que desee y elija **Save** (Guardar).

 **Eliminar el valor controlado** 

Al eliminar un valor controlado, puede elegir si desea eliminar también otros recursos utilizados y creados por el valor controlado. Si el campo `ProvisionedResourceCleanup` del canario está establecido en ` AUTOMATIC` o `DeleteLambda` se especifica como `true` cuando se elimina el canario, CloudWatch Synthetics eliminará automáticamente las funciones y capas de Lambda que utilice el canario.

Al eliminar un valor controlado, también debe eliminar lo siguiente:
+ Las capas y funciones de Lambda utilizadas por este valor controlado. Su prefijo es `cwsyn- MyCanaryName`.
+ Las alarmas de CloudWatch que se crearon para este valor controlado. Estas alarmas tienen un nombre que comienza con ` Synthetics-Alarm-MyCanaryName`. Para obtener más información sobre la eliminación de alarmas, consulte [Edición o eliminación de una alarma de CloudWatch](Edit-CloudWatch-Alarm.md).
+ Objetos y buckets de Amazon S3, como la ubicación del artefacto y la ubicación de los resultados del valor controlado.
+ Roles de IAM creados para el valor controlado. Tienen el nombre ` role/service-role/CloudWatchSyntheticsRole-MyCanaryName`. 
+ Grupos de Registros de CloudWatch que se han creado para el valor controlado. Estos grupos de registros tienen los siguientes nombres: `/aws/lambda/cwsyn-MyCanaryName-randomId` . 

Antes de eliminar un valor controlado, es posible que desee ver los detalles del valor controlado y tomar nota de esta información. De esta forma, puede eliminar los recursos correctos después de eliminar el valor controlado.

**Para eliminar un valor controlado**

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Señales de aplicación**, **Valores controlados de Synthetics**.

1. Si el valor controlado se encuentra actualmente en el estado `RUNNING`, debe detenerlo. Solo valores controlados en los estados `STOPPED`, `READY(NOT_STARTED)` o bien `ERROR` se pueden eliminar.

   Seleccione el botón situado junto al nombre del canario y elija **Acciones**, **Detener** para detener el canario.

1. Seleccione el botón situado junto al nombre del canario y elija **Acciones**, **Eliminar**.

1. Elija si desea eliminar también los demás recursos creados y utilizados por el valor controlado. Las funciones y capas de Lambda se eliminarán junto con el canario, pero también puede optar por eliminar el rol de IAM y la política de IAM del canario.

   Escriba **Delete** en el cuadro y elija **Delete** (Eliminar).

1. Elimine los demás recursos utilizados y creados para el valor controlado, como se ha indicado anteriormente en esta sección.

# Inicio, detención, eliminación o actualización del tiempo de ejecución de varios valores controlados
<a name="synthetics_canaries_multi-action"></a>

Puede detener, iniciar, eliminar o actualizar el tiempo de ejecución de hasta cinco valores controlados con una sola acción. Si actualiza el tiempo de ejecución de un valor controlado, se actualiza al último tiempo de ejecución disponible para el idioma y el marco que utilice el valor controlado.

Si selecciona varios valores controlados y solo algunos de ellos se encuentran en un estado válido para la acción que seleccione, la acción se realizará únicamente en los valores controlados en los que esa acción sea válida. Por ejemplo, si selecciona algunos valores controlados que se estén ejecutando actualmente y otros que no, y selecciona iniciar los valores controlados, se iniciarán los valores controlados que aún no estuvieran en ejecución y los que ya estaban en ejecución no se verán afectados.

Si ninguno de los valores controlados que seleccione es válido para una acción, esa acción no estará disponible en el menú.

1. Abra la consola de CloudWatch en [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. En el panel de navegación, elija **Señales de aplicación**, **Valores controlados de Synthetics**.

1. Seleccione las casillas de verificación situadas junto a los valores controlados que quiera detener, iniciar o eliminar.

1. Elija **Acciones** y, a continuación, elija **Iniciar**, **Detener**, **Eliminar**, **Iniciar simulacro** o **Actualizar tiempo de ejecución**.

   Además, al elegir **Actualizar tiempo de ejecución**, puede optar por realizar un simulacro de la actualización en tiempo de ejecución primero antes de ejecutar el cambio.

# Supervisión de eventos del valor controlado con Amazon EventBridge
<a name="monitoring-events-eventbridge"></a>

Las reglas de eventos de Amazon EventBridge pueden notificarle cuando los canaries cambian de estado o completan las ejecuciones. EventBridge proporciona un flujo casi en tiempo real de los eventos del sistema que describen cambios en los recursos de AWS. CloudWatch Synthetics envía estos eventos a EventBridge en una base *el mejor esfuerzo*. La entrega del mejor esfuerzo significa que CloudWatch Synthetics intenta enviar todos los eventos a EventBridge, pero en algunos casos raros es posible que no se entregue un evento. EventBridge procesa todos los eventos que se han recibido al menos una vez. Además, los agentes de escucha de eventos podrían no recibir los eventos en el orden en el que los eventos han ocurrido.

**nota**  
Amazon EventBridge: es un servicio conductor de eventos que se puede utilizar para conectar las aplicaciones con datos de varias fuentes. Para obtener más información, consulte [What is Amazon EventBridge?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) (¿Qué es Amazon EventBridge?) en la *Guía del usuario de Amazon EventBridge*.

CloudWatch Synthetics emite un evento cuando un valor controlado cambia de estado o completa una ejecución. Se puede crear una regla de EventBridge que incluya un patrón de eventos para que coincida con todos los tipos de eventos que se han enviado desde CloudWatch Synthetics o que coincida únicamente con tipos de eventos específicos. Cuando un valor controlado desencadena una regla, EventBridge invoca las acciones de destino definidas en la regla. Esto le permite enviar notificaciones, capturar información sobre el evento y tomar medidas correctivas en respuesta a un cambio de estado del valor controlado o a la terminación de la ejecución del valor controlado. Por ejemplo, puede crear reglas para los siguientes casos de uso:
+ Investigación sobre el fallo de una ejecución de un valor controlado
+ Investigación sobre un valor controlado que ha entrado en estado de `ERROR`
+ Seguimiento del ciclo de vida de un valor controlado
+ Supervisión del éxito o error de ejecución de un canario como parte de un flujo de trabajo

## Eventos de muestra de CloudWatch Synthetics
<a name="synthetics-event-examples"></a>

En esta sección se enumeran los eventos de muestra de CloudWatch Synthetics. Para obtener más información sobre el formato del evento, consulte [Events and Event Patterns in EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-event-patterns.html) (Eventos y patrones de eventos en EventBridge). 

 **Cambio del estado del valor controlado** 

En este tipo de evento, los valores de `current-state` y `previous-state` pueden ser los siguientes:

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

 **Se ha completado con éxito la ejecución del valor controlado** 

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

 **Error en la ejecución del valor controlado** 

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

Es posible que los eventos se dupliquen o estén desordenados. Para determinar el orden de los eventos, utilice la propiedad `time`.

## Prerrequisitos para crear las reglas de EventBridge
<a name="create-events-rule-prereqs"></a>

Antes de crear una regla de EventBridge para CloudWatch Synthetics, debe hacer lo siguiente:
+ Familiarícese con los eventos, las reglas y los destinos de EventBridge.
+ Cree y configure los destinos que las reglas de EventBridge han invocado. Las reglas pueden invocar muchos tipos de destinos, entre los que se incluyen:
  + Temas de Amazon SNS
  + Funciones de AWS Lambda
  + Flujos de Kinesis
  + Colas de Amazon SQS

Para obtener más información, consulte [What is Amazon EventBridge?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) (¿Qué es Amazon EventBridge?) y [Getting started with Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-getting-set-up.html) (Introducción a Amazon EventBridge) en la *Guía del usuario de Amazon EventBridge*.

## Cree una regla de EventBridge (CLI)
<a name="create-events-rule-cli"></a>

Los pasos del ejemplo siguiente crean una regla de EventBridge que publica un tema de Amazon SNS cuando el valor controlado que se denomina `my-canary-name` en `us-east-1`completa una ejecución o cambia de estado.

1. Crear la regla.

   ```
   aws events put-rule \
     --name TestRule \
     --region us-east-1 \ 
     --event-pattern "{\"source\": [\"aws.synthetics\"], \"detail\": {\"canary-name\": [\"my-canary-name\"]}}"
   ```

   Las propiedades que se omiten en el patrón no se tienen en cuenta.

1. Agregue el tema como destino de la regla.
   + Reemplace *tema-arn* por el nombre de recurso de Amazon (ARN) del tema de Amazon SNS.

   ```
   aws events put-targets \
     --rule TestRule \
     --targets "Id"="1","Arn"="topic-arn"
   ```
**nota**  
Para permitir que Amazon EventBridge llame al tema de destino, debe agregar en el tema una política basada en recursos. Para obtener más información, consulte [Amazon SNS permissions](https://docs.aws.amazon.com/eventbridge/latest/userguide/resource-based-policies-eventbridge.html#sns-permissions) (Permisos de Amazon SNS) en la *Guía del usuario de Amazon EventBridge*.

Para obtener más información, consulte [Events and event patterns in EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-event-patterns.html) (Eventos y patrones de eventos en EventBridge) en la *Guía del usuario de Amazon EventBridge*.

# Actualizaciones seguras del canario
<a name="performing-safe-canary-upgrades"></a>

Las actualizaciones seguras de CloudWatch Synthetics le permiten probar las actualizaciones en los canarios existentes antes de aplicarlos. Esta característica le ayuda a validar la compatibilidad del canario con los nuevos tiempos de ejecución y otros cambios de configuración, como cambios en el código o la memoria. Esto ayudará a minimizar las posibles interrupciones en la supervisión causadas por actualizaciones erróneas.

Al utilizar las actualizaciones seguras del canario en las actualizaciones de las versiones en tiempo de ejecución, los cambios de configuración y las modificaciones de los scripts de código, puede mitigar el riesgo, mantener una supervisión ininterrumpida, verificar los cambios antes de confirmarlos, actualizar y reducir el tiempo de inactividad.

**Topics**
+ [Requisitos previos](#performing-safe-canary-upgrades-prereq)
+ [Prácticas recomendadas](#performing-safe-canary-upgrades-best-practices)
+ [Probar el canario mediante simulacros](#performing-safe-canary-upgrades-getting-started)
+ [Limitaciones](#performing-safe-canary-upgrades-limitations)

## Requisitos previos
<a name="performing-safe-canary-upgrades-prereq"></a>

Asegúrese de que los requisitos previos estén completos.
+ Cuenta de AWS con permisos de CloudWatch Synthetics
+ Canario existente en las versiones de tiempo de ejecución compatibles (consulte [Limitaciones](#performing-safe-canary-upgrades-limitations) para ver los tiempos de ejecución compatibles)
+ Incluya tiempos de ejecución compatibles al realizar un simulacro (consulte [Limitaciones](#performing-safe-canary-upgrades-limitations) para ver los tiempos de ejecución compatibles).

## Prácticas recomendadas
<a name="performing-safe-canary-upgrades-best-practices"></a>

Estas son algunas prácticas recomendadas que se deben seguir al realizar un canario.
+ Ejecutar un simulacro para validar una actualización del tiempo de ejecución
+ Realizar un simulacro antes de las actualizaciones de producción del canario
+ Revisar los registros y artefactos del canario después de un simulacro
+ Utilizar simulacros para validar las dependencias y la compatibilidad de las bibliotecas

## Probar el canario mediante simulacros
<a name="performing-safe-canary-upgrades-getting-started"></a>

Puede probar la actualización del canario con las siguientes opciones:

 **Uso del flujo de trabajo de edición de la Consola de administración de AWS** 

1. Vaya a la consola de CloudWatch Synthetics.

1. Seleccione el canario que desea actualizar.

1. En el menú desplegable **Acciones**, elija **Editar**.

   Actualice el canario con los cambios que desea probar. Por ejemplo, cambie la versión de tiempo de ejecución o edite el código del script.

1. En **Script de canario**, elija **Iniciar simulacro** para probar y ver los resultados inmediatamente o elija **Validar y guardar más tarde** en la parte inferior de la página para iniciar la prueba y ver los resultados más tarde en la página **Detalles de canario**.

1. Después de que el simulacro tenga éxito, elija **Enviar** para confirmar sus actualizaciones del canario.

 **Uso de la Consola de administración de AWS para actualizar los canarios en lote** 

1. Vaya a la consola de CloudWatch Synthetics.

1. Seleccione la página de lista de **Synthetics**.

1. Seleccione hasta cinco canarios para los que desea actualizar el tiempo de ejecución.

1. Seleccione el menú desplegable **Acciones** y elija **Actualizar tiempo de ejecución**.

1. Seleccione **Iniciar simulacro para nuevo tiempo de ejecución** para iniciarlo y probar los cambios antes de una actualización.

1. En la página de lista de **Synthetics**, verá un texto junto a la versión de **Tiempo de ejecución** del canario que muestra el progreso del simulacro (esto solo se muestra para simulacros que implican una actualización del tiempo de ejecución).

   Una vez que el simulacro se haya realizado correctamente, verá el texto **Iniciar actualización**.

1. Seleccione **Iniciar actualización** para confirmar la actualización del tiempo de ejecución.

1. Si el simulacro falla, verá el texto **Error en el simulacro de actualización**. Seleccione el texto para ver el enlace de depuración a la página de detalles del canario.

 **Uso de la CLI o el SDK de AWS** 

La API inicia el simulacro para el nombre de canario proporcionado `MyCanary` y actualiza la versión del tiempo de ejecución 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
```

La API devolverá el `DryRunId` dentro del `DryRunConfigOutput`.

Llame a `GetCanary` con el `DryRunId` proporcionado para recibir las configuraciones del simulacro del canario y un campo adicional `DryRunConfig` que contiene el estado del simulacro indicado como `LastDryRunExecutionStatus`.

```
aws synthetics get-canary \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

Para obtener más detalles, utilice `GetCanaryRuns` con el `DryRunId` proporcionado para recuperar la ejecución y la información adicional.

```
aws synthetics get-canary-runs \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

Después de un simulacro exitoso, puede usar `UpdateCanary` con el ` DryRunId` proporcionado para confirmar los cambios.

```
aws synthetics update-canary \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

Cuando falla por cualquier motivo (el resultado de GetCanaryRuns tendrá los detalles), el resultado de `GetCanaryRuns` tiene una ubicación de artefacto que contiene registros para depurar. Cuando no hay registros, el simulacro no se pudo crear. Puede validarlo utilizando ` GetCanary`.

```
aws synthetics get-canary \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

Los campos *State*, *StateReason* y *StateReasonCode* muestran el estado del simulacro.

 **Uso de CloudFormation** 

En su plantilla para un canario de Synthetics, proporcione el campo `DryRunAndUpdate` que acepta un valor booleano `true` o `false`.

Cuando el valor es `true`, cada actualización ejecuta un simulacro para validar los cambios antes de actualizar automáticamente el canario. Cuando el simulacro falla, el canario no se actualiza y falla la implementación y la implementación de CloudFormation por un motivo válido. Para depurar este problema, use la [consola de AWS Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Troubleshoot.html) o, si usa una API, obtenga el `ArtifactS3Location` usando la API `GetCanaryRuns` y descargue los archivos `*-log.txt` para revisar las ejecuciones del registro del canario en busca de errores. Tras la validación, modifique la plantilla del CloudFormation y vuelva a intentar la implementación o utilice la API anterior para validarla.

Cuando el valor es `false`, Synthetics no ejecutará un simulacro para validar los cambios y confirmará directamente las actualizaciones.

Para obtener información sobre cómo solucionar problemas de un canario con errores, consulte [Solución de problemas de un valor controlado](CloudWatch_Synthetics_Canaries_Troubleshoot.md).

Plantilla de ejemplo.

```
SyntheticsCanary:
    Type: 'AWS::Synthetics::Canary'
    Properties:
      Name: MyCanary
      RuntimeVersion: syn-nodejs-puppeteer-10.0
      Schedule: {Expression: 'rate(5 minutes)', DurationInSeconds: 3600}
      ...
      DryRunAndUpdate: true
```

## Limitaciones
<a name="performing-safe-canary-upgrades-limitations"></a>
+ Compatible con las versiones de tiempo de ejecución: syn-nodejs-puppeteer-10.0\$1, syn-nodejs-playwright-2.0\$1, syn-python-selenium-5.1\$1 y syn-nodejs-3.0\$1
+ Solo puede ejecutar un simulacro por canario a la vez.
+ Cuando se produce un error en un simulacro, no se puede actualizar el canario.
+ El simulacro no puede probar ningún cambio en el campo **Programación**.

**nota**  
Cuando inicie un simulacro con cambios de código para un canario de Playwright y desee actualizar el canario sin proporcionar el `DryRunId` asociado, debe especificar explícitamente los parámetros del código.