

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Pemantauan sintetis (kenari)
<a name="CloudWatch_Synthetics_Canaries"></a>

Anda dapat menggunakan Amazon CloudWatch Synthetics untuk membuat *kenari*, skrip yang dapat dikonfigurasi yang berjalan sesuai jadwal, untuk memantau titik akhir dan. APIs Canary mengikuti rute yang sama dan melakukan tindakan yang sama sebagai pelanggan, yang memungkinkan bagi Anda untuk terus memverifikasi pengalaman pelanggan bahkan ketika Anda tidak memiliki lalu lintas pelanggan pada aplikasi Anda. Dengan menggunakan canary, Anda dapat menemukan masalah sebelum para pelanggan Anda menemukannya.

Canary adalah skrip yang ditulis dalam Node.js, Python, atau Java. Mereka membuat fungsi Lambda di akun Anda yang menggunakan Node.js, Python, atau Java sebagai runtime. Canary bekerja di atas protokol HTTP maupun HTTPS. Canary menggunakan lapisan Lambda yang berisi pustaka CloudWatch Synthetics. Pustaka mencakup implementasi CloudWatch Synthetics untuk NodeJS, Python, dan Java.

Canary di Node.js dan runtime Python menawarkan akses terprogram ke browser tanpa kepala melalui Playwright, Puppeteer, atau Selenium Webdriver. Beberapa browser didukung, termasuk browser Google Chrome tanpa kepala, dan Mozilla Firefox. [Untuk informasi lebih lanjut tentang Penulis Naskah, lihat Penulis naskah.](https://playwright.dev/) Untuk informasi selengkapnya tentang Puppeteer, silakan lihat [Puppeteer](https://developer.chrome.com/docs/puppeteer/). Untuk informasi lebih lanjut tentang Selenium, lihat [Selenium](https://www.selenium.dev/). Canary di Selenium hanya mendukung browser Chrome. Canary di Jawa dirancang untuk fleksibilitas dalam memantau semua jenis layanan atau aplikasi dan tidak mengandung dukungan browser atau kerangka kerja.

Canary memeriksa ketersediaan dan latensi titik akhir Anda dan dapat menyimpan data waktu pemuatan dan tangkapan layar UI. Mereka memantau REST Anda APIs, URLs, dan konten situs web, dan mereka dapat memeriksa perubahan yang tidak sah dari phishing, injeksi kode, dan skrip lintas situs.

 CloudWatch Synthetics terintegrasi dengan [Application Signals](CloudWatch-Application-Monitoring-Sections.md), yang dapat menemukan dan memantau layanan aplikasi, klien, kenari Synthetics, dan dependensi layanan Anda. Gunakan Sinyal Aplikasi untuk melihat daftar atau peta visual layanan Anda, melihat metrik kesehatan berdasarkan sasaran tingkat layanan Anda (SLOs), dan menelusuri untuk melihat jejak X-Ray yang berkorelasi untuk pemecahan masalah yang lebih rinci. Untuk melihat canary Anda di Sinyal Aplikasi, [aktifkan pelacakan aktif X-Ray](CloudWatch_Synthetics_Canaries_tracing.md). Kenari Anda ditampilkan di [Peta Aplikasi](ServiceMap.md) yang terhubung ke layanan Anda, dan di halaman [detail Layanan](ServiceDetail.md) dari layanan yang mereka panggil. 

Untuk menonton video demonstrasi tentang canary, silakan lihat tayangan berikut ini:
+  [Pengantar Amazon CloudWatch Synthetics](https://www.youtube.com/watch?v=MItluIsvfTo) 
+  [Amazon CloudWatch Synthetics Demo](https://www.youtube.com/watch?v=hF3NM9j-u7I) 
+  [Buat Canary Menggunakan Amazon CloudWatch Synthetics](https://www.youtube.com/watch?v=DSx65wW7lr0) 
+  [Pemantauan Visual dengan Amazon CloudWatch Synthetics](https://www.youtube.com/watch?v=_PCs-ucZz7E) 



Anda dapat mengoperasikan canary satu kali atau dengan jadwal reguler. Canary dapat berjalan dengan frekuensi sekali per menit. Anda dapat menggunakan ekspresi cron dan ekspresi rate untuk membuat jadwal canary.

Untuk mendapatkan informasi tentang masalah-masalah keamanan yang perlu Anda pertimbangkan sebelum membuat dan mengoperasikan canary, silakan lihat [Pertimbangan keamanan untuk canary Synthetics](servicelens_canaries_security.md). 

Secara default, kenari membuat beberapa CloudWatch metrik di namespace. `CloudWatchSynthetics` Metrik ini memiliki `CanaryName` sebagai dimensi. Canary yang menggunakan fungsi `executeStep()` atau `executeHttpStep()` dari pustaka fungsi juga memiliki `StepName` sebagai dimensi. Untuk informasi selengkapnya tentang pustaka fungsi canary, silakan lihat [Fungsi pustaka tersedia untuk skrip canary](CloudWatch_Synthetics_Canaries_Function_Library.md).

CloudWatch Synthetics terintegrasi dengan baik dengan X-Ray Trace Map, yang digunakan CloudWatch AWS X-Ray untuk memberikan end-to-end tampilan layanan Anda untuk membantu Anda lebih efisien menentukan kemacetan kinerja dan mengidentifikasi pengguna yang terkena dampak. Canary yang Anda buat dengan CloudWatch Synthetics muncul di peta jejak. Untuk informasi selengkapnya, silakan lihat [X-Ray Trace Map](https://docs.aws.amazon.com/xray/latest/devguide/xray-console-servicemap.html). 

CloudWatch Synthetics saat ini tersedia di semua AWS Wilayah komersial dan Wilayah. GovCloud

**catatan**  
Di Asia Pasifik (Osaka), AWS PrivateLink tidak didukung. Di Asia Pasifik (Jakarta), AWS PrivateLink dan X-Ray tidak didukung.

**Topics**
+ [Peran dan izin yang diperlukan untuk kenari CloudWatch](CloudWatch_Synthetics_Canaries_Roles.md)
+ [Membuat canary](CloudWatch_Synthetics_Canaries_Create.md)
+ [Grup](CloudWatch_Synthetics_Groups.md)
+ [Uji kenari secara lokal](CloudWatch_Synthetics_Debug_Locally.md)
+ [Memecahkan masalah canary yang gagal](CloudWatch_Synthetics_Canaries_Troubleshoot.md)
+ [Kode sampel untuk skrip canary](CloudWatch_Synthetics_Canaries_Samples.md)
+ [Penelusuran Canary dan X-Ray](CloudWatch_Synthetics_Canaries_tracing.md)
+ [Menjalankan canary di VPC](CloudWatch_Synthetics_Canaries_VPC.md)
+ [Mengenkripsi artefak canary](CloudWatch_Synthetics_artifact_encryption.md)
+ [Melihat statistik dan detail canary](CloudWatch_Synthetics_Canaries_Details.md)
+ [CloudWatch metrik yang diterbitkan oleh kenari](CloudWatch_Synthetics_Canaries_metrics.md)
+ [Mengedit atau menghapus canary](synthetics_canaries_deletion.md)
+ [Mulai, hentikan, hapus, atau perbarui runtime untuk banyak canary](synthetics_canaries_multi-action.md)
+ [Memantau peristiwa kenari dengan Amazon EventBridge](monitoring-events-eventbridge.md)
+ [Melakukan pembaruan kenari yang aman](performing-safe-canary-upgrades.md)

# Peran dan izin yang diperlukan untuk kenari CloudWatch
<a name="CloudWatch_Synthetics_Canaries_Roles"></a>

Baik pengguna yang membuat maupun yang mengelola canary, dan canary itu sendiri, harus memiliki izin tertentu.

# Peran dan izin yang diperlukan untuk pengguna yang mengelola kenari CloudWatch
<a name="CloudWatch_Synthetics_Canaries_UserPermissions"></a>

Untuk melihat detail canary dan hasil operasi canary, Anda harus masuk sebagai pengguna dengan kebijakan `CloudWatchSyntheticsFullAccess` atau ` CloudWatchSyntheticsReadOnlyAccess` yang dilampirkan. Untuk membaca semua data Synthetics di konsol, Anda juga memerlukan kebijakan `AmazonS3ReadOnlyAccess` dan ` CloudWatchReadOnlyAccess`. Untuk melihat kode sumber yang digunakan oleh canary, Anda juga memerlukan kebijakan `AWSLambda_ReadOnlyAccess`.

Untuk membuat canary, Anda harus masuk sebagai pengguna yang memiliki kebijakan ` CloudWatchSyntheticsFullAccess` atau serangkaian izin serupa. Untuk membuat peran IAM untuk canary, Anda juga memerlukan pernyataan kebijakan selaras berikut:

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

------

**penting**  
Memberikan izin `iam:CreateRole`, `iam:CreatePolicy`, dan ` iam:AttachRolePolicy` kepada pengguna akan memberikan kepada pengguna tersebut akses administratif penuh ke akun AWS Anda. Misalnya, pengguna dengan izin ini dapat membuat kebijakan yang memiliki izin penuh untuk semua sumber daya dan dapat melampirkan kebijakan tersebut ke peran apa pun. Berhati-hatilah dengan orang yang Anda berikan izin ini.

Untuk informasi tentang cara melampirkan kebijakan dan memberikan izin kepada pengguna, silakan lihat [Mengubah Izin untuk Pengguna IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console) dan [Cara menyematkan kebijakan yang selaras bagi pengguna atau peran](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#embed-inline-policy-console).

# Peran dan izin yang diperlukan untuk canary
<a name="CloudWatch_Synthetics_Canaries_CanaryPermissions"></a>

Setiap canary harus dikaitkan dengan peran IAM yang memiliki izin tertentu yang dilampirkan. Saat Anda membuat kenari menggunakan CloudWatch konsol, Anda dapat memilih CloudWatch Synthetics untuk membuat peran IAM untuk kenari. Jika Anda melakukannya, peran tersebut akan memiliki izin yang diperlukan.

Jika Anda ingin membuat peran IAM sendiri, atau membuat peran IAM yang dapat Anda gunakan saat menggunakan AWS CLI atau APIs untuk membuat kenari, peran tersebut harus berisi izin yang tercantum di bagian ini.

Semua peran IAM untuk canary harus menyertakan pernyataan kebijakan kepercayaan berikut.

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

****  

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

------

Selain itu, peran IAM canary membutuhkan salah satu pernyataan berikut.

 **Kenari dasar yang tidak menggunakan AWS KMS atau membutuhkan akses VPC Amazon** 

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

****  

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

------

 **Canary yang digunakan AWS KMS untuk mengenkripsi artefak kenari tetapi tidak memerlukan akses VPC Amazon** 

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

****  

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

------

 **Canary yang tidak menggunakan AWS KMS tetapi membutuhkan akses VPC Amazon** 

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

****  

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

------

 **Canary yang digunakan AWS KMS untuk mengenkripsi artefak kenari dan juga membutuhkan akses VPC Amazon** 

Jika Anda memperbarui canary non-VPC untuk mulai menggunakan VPC, Anda harus memperbarui peran canary tersebut untuk menyertakan izin antarmuka jaringan yang tercantum dalam kebijakan berikut.

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

****  

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

------

## AWS kebijakan terkelola untuk CloudWatch Synthetics
<a name="CloudWatch_Synthetics_IAMManagedPolicies"></a>

Untuk menambahkan izin ke pengguna, grup, dan peran, lebih mudah menggunakan kebijakan AWS terkelola daripada menulis kebijakan sendiri. Dibutuhkan waktu dan keahlian untuk membuat kebijakan yang dikelola pelanggan IAM yang hanya memberi tim Anda izin yang mereka butuhkan. Untuk memulai dengan cepat, Anda dapat menggunakan kebijakan AWS terkelola kami. Kebijakan ini mencakup kasus penggunaan umum dan tersedia di AWS akun Anda. Untuk informasi selengkapnya tentang kebijakan AWS terkelola, lihat [kebijakan AWSAWS terkelola](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) kebijakan terkelola di Panduan Pengguna IAM.

AWS layanan memelihara dan memperbarui kebijakan AWS terkelola. Anda tidak dapat mengubah izin dalam kebijakan AWS terkelola. Layanan kadang-kadang mengubah izin dalam kebijakan terkelola AWS . Jenis pembaruan ini memengaruhi semua identitas (pengguna, grup, dan peran) tempat kebijakan terlampir.

### CloudWatch Synthetics memperbarui kebijakan terkelola AWS
<a name="CloudWatch_Synthetics_IAMManagedPolicies_Updates"></a>

Lihat detail tentang pembaruan kebijakan AWS terkelola untuk CloudWatch Synthetics sejak layanan ini mulai melacak perubahan ini. Untuk peringatan otomatis tentang perubahan pada halaman ini, berlangganan umpan RSS di halaman Riwayat CloudWatch dokumen. 


| Ubah | Deskripsi | Date | 
| --- | --- | --- | 
|  Tindakan berlebihan dihapus dari **CloudWatchSyntheticsFullAccess**  |  CloudWatch Synthetics menghapus ` lambda:GetLayerVersionByArn` tindakan `s3:PutBucketEncryption` dan tindakan dari ** CloudWatchSyntheticsFullAccess**kebijakan karena tindakan tersebut berlebihan dengan izin lain dalam kebijakan. Tindakan yang dihapus tidak memberikan izin apa pun, dan tidak ada perubahan bersih untuk izin yang diberikan oleh kebijakan tersebut.  | 12 Maret 2021 | 
|  CloudWatch Synthetics mulai melacak perubahan  |  CloudWatch Synthetics mulai melacak perubahan untuk kebijakan yang AWS dikelola.  | 10 Maret 2021 | 

 **CloudWatchSyntheticsFullAccess** 

Berikut adalah isi dari kebijakan `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** 

Berikut adalah isi dari kebijakan `CloudWatchSyntheticsReadOnlyAccess`:

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

****  

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

------

# Membatasi pengguna untuk melihat canary tertentu
<a name="CloudWatch_Synthetics_Canaries_Restricted"></a>

Anda dapat membatasi kemampuan pengguna untuk melihat informasi tentang canary, sehingga mereka hanya dapat melihat informasi tentang canary yang Anda tentukan. Untuk melakukan ini, gunakan kebijakan IAM dengan pernyataan ` Condition` yang mirip dengan berikut ini, dan lampirkan kebijakan ini ke pengguna atau peran IAM.

Contoh berikut membatasi pengguna untuk hanya melihat informasi tentang ` name-of-allowed-canary-1` dan `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 mendukung daftar sebanyak lima item dalam array. `synthetics:Names`

Anda juga dapat membuat kebijakan yang menggunakan \$1** sebagai wildcard dalam nama canary yang diizinkan, seperti pada contoh berikut:

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

****  

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

------

Setiap pengguna yang masuk dengan salah satu kebijakan terlampir ini tidak dapat menggunakan CloudWatch konsol untuk melihat informasi kenari apa pun. Mereka dapat melihat informasi kenari hanya untuk kenari yang disahkan oleh kebijakan dan hanya dengan menggunakan [DescribeCanaries](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_DescribeCanaries.html)API atau perintah [AWS CLI deskripsi-kenari](https://docs.aws.amazon.com/cli/latest/reference/synthetics/describe-canaries.html).

# Membuat canary
<a name="CloudWatch_Synthetics_Canaries_Create"></a>

**penting**  
Pastikan Anda menggunakan kenari Synthetics untuk memantau hanya titik akhir dan APIs di mana Anda memiliki kepemilikan atau izin. Bergantung pada pengaturan frekuensi canary, titik akhir ini mungkin mengalami peningkatan lalu lintas.

Saat Anda menggunakan CloudWatch konsol untuk membuat kenari, Anda dapat menggunakan cetak biru yang disediakan oleh CloudWatch untuk membuat kenari Anda atau Anda dapat menulis skrip Anda sendiri. Untuk informasi selengkapnya, lihat [Menggunakan cetak biru canary](CloudWatch_Synthetics_Canaries_Blueprints.md).

Anda juga dapat membuat kenari menggunakan CloudFormation jika Anda menggunakan skrip Anda sendiri untuk kenari. Untuk informasi selengkapnya, lihat [ AWS::Synthetics::Canary](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-synthetics-canary.html)di *Panduan AWS CloudFormation Pengguna*.

Jika Anda menulis skrip Anda sendiri, Anda dapat menggunakan beberapa fungsi yang CloudWatch Synthetics telah dibangun ke dalam perpustakaan. Untuk informasi selengkapnya, lihat [Versi runtime Synthetics](CloudWatch_Synthetics_Canaries_Library.md).

**catatan**  
Saat Anda membuat kenari, salah satu lapisan yang dibuat adalah layer Synthetics yang dilengkapi dengan. ` Synthetics` Lapisan ini dimiliki oleh akun layanan Synthetics dan berisi kode runtime.

**Untuk membuat canary**

1. Buka CloudWatch konsol di [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Di panel navigasi, pilih **Application Signals**, **Synthetics Canaries**.

   

1. Pilih **Buat Canary**.

1. Pilih salah satu dari berikut:
   + Untuk membuat canary Anda di skrip cetak biru, pilih **Gunakan cetak biru**, dan kemudian pilih jenis canary yang ingin Anda buat. Untuk informasi selengkapnya tentang halyang dilakukan oleh setiap jenis cetak biru, silakan lihat [Menggunakan cetak biru canary](CloudWatch_Synthetics_Canaries_Blueprints.md).
   + Untuk mengunggah skrip Node.js Anda sendiri untuk membuat sebuah canary kustom, pilih **Unggah skrip**.

     Kemudian, Anda dapat menyeret skrip Anda ke wilayah **Skrip** atau pilih **Jelajahi file** untuk menavigasi ke skrip di sistem file Anda.
   + Untuk mengimpor skrip dari bucket S3, pilih **Impor dari S3**. Di bawah **Lokasi sumber**, masukkan alur lengkap ke canary Anda atau pilih **Jelajahi S3**.

     Anda harus memiliki izin `s3:GetObject` dan `s3:GetObjectVersion` untuk bucket S3 yang digunakan. Bucket harus berada di Wilayah AWS yang sama tempat Anda membuat canary.

1. Di bawah **Nama**, masukkan nama untuk canary. Nama ini digunakan di banyak halaman, sehingga kami menyarankan Anda memberikan sebuah nama deskriptif yang membedakannya dari canary lainnya.

1. Di bawah **Aplikasi atau URL titik akhir**, masukkan URL yang Anda ingin lakukan pengujian oleh canary. URL ini harus menyertakan protokol (seperti https://).

   Jika Anda ingin canary menguji titik akhir pada VPC, Anda juga harus memasukkan informasi tentang VPC nantinya dalam prosedur ini. 

1. Jika Anda menggunakan skrip milik Anda sendiri untuk canary, di bawah **Pengatur Lambda**, masukkan titik masuk tempat Anda ingin canary tersebut memulai. [Untuk informasi tentang format handler Lambda, lihat Versi runtime Synthetics.](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library.html)

1. Di bawah **Editor skrip**, versi **Runtime, pilih versi** runtime sintetis untuk mengeksekusi kenari. Untuk informasi tentang versi runtime sintetis, lihat Versi runtime [Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library.html).

   Di bawah **konfigurasi Browser**, Anda dapat mengaktifkan browser untuk menguji kenari. Anda harus memilih setidaknya satu browser.

1. Jika Anda menggunakan variabel lingkungan dalam skrip Anda, pilih **Variabel lingkungan** dan kemudian menentukan nilai untuk setiap variabel lingkungan yang didefinisikan dalam skrip Anda. Untuk informasi selengkapnya, lihat [Variabel-variabel lingkungan](CloudWatch_Synthetics_Canaries_WritingCanary_Nodejs_Pup.md#CloudWatch_Synthetics_Environment_Variables).

1. Di bawah **Jadwal**, pilih apakah akan menjalankan canary sekali saja, menjalankannya terus-menerus menggunakan ekspresi rate, atau menjadwalkan menggunakan ekspresi cron.
   + Saat Anda menggunakan CloudWatch konsol untuk membuat kenari yang berjalan terus menerus, Anda dapat memilih tarif di mana saja antara satu menit dan sekali dalam satu jam.
   + Untuk informasi selengkapnya tentang menulis ekspresi cron untuk penjadwalan canary, silakan lihat [Penjadwalan operasi canary yang menggunakan cron](CloudWatch_Synthetics_Canaries_cron.md).

1. (Opsional) Untuk menetapkan nilai batas waktu untuk canary, pilih **Konfigurasi tambahan** lalu tentukan nilai batas waktu. Buat tidak lebih pendek dari 15 detik untuk memungkinkan Lambda dingin dimulai dan waktu yang diperlukan untuk mem-boot instrumentasi canary.

1. Di bawah **Retensi data**, tentukan seberapa lama waktu yang dibutuhkan untuk mempertahankan informasi tentang operasi canary yang gagal dan berhasil. Rentangnya adalah 1-455 hari.

   Pengaturan ini memengaruhi rentang informasi yang dikembalikan oleh [GetCanaryRuns](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_GetCanaryRuns.html)operasi, serta rentang informasi yang ditampilkan di konsol Synthetics.

   Ini tidak memengaruhi data yang disimpan di bucket Amazon S3 Anda, atau log atau metrik yang diterbitkan oleh canary.

   Terlepas dari periode retensi data kenari, rentang informasi yang ditampilkan di konsol memiliki batasan tertentu. Dalam tampilan beranda konsol Synthetics, rentang waktu relatif dan absolut dibatasi hingga tujuh hari. Dalam tampilan konsol Synthetics untuk kenari tertentu, rentang waktu relatif dibatasi hingga tujuh hari dan rentang waktu absolut dibatasi hingga 30 hari.

1. Di bawah **Penyimpanan Data**, pilih bucket Amazon S3 yang akan digunakan untuk menyimpan data dari proses kenari. Nama bucket tidak dapat berisi titik (.). Jika Anda membiarkan ini kosong, bucket Amazon S3 default digunakan atau dibuat.

1. (Opsional) Secara default, kenari menyimpan artefak mereka di Amazon S3, dan artefak dienkripsi saat diam menggunakan kunci -managed. AWS AWS KMS Anda dapat menggunakan opsi enkripsi yang berbeda dengan memilih **Konfigurasi tambahan** di bagian **Penyimpanan Data**. Anda kemudian dapat memilih jenis kunci yang akan digunakan untuk enkripsi. Untuk informasi selengkapnya, lihat [Mengenkripsi artefak canary](CloudWatch_Synthetics_artifact_encryption.md). 

1. Di bawah **Izin akses**, pilih apakah akan membuat peran IAM untuk menjalankan canary atau menggunakan yang sudah ada.

   Jika Anda memiliki CloudWatch Synthetics membuat peran, secara otomatis menyertakan semua izin yang diperlukan. Jika Anda ingin membuat peran sendiri, silakan lihat [Peran dan izin yang diperlukan untuk canary](CloudWatch_Synthetics_Canaries_CanaryPermissions.md) informasi tentang izin yang diperlukan.

   Jika Anda menggunakan CloudWatch konsol untuk membuat peran kenari saat membuat kenari, Anda tidak dapat menggunakan kembali peran tersebut untuk kenari lain, karena peran ini khusus untuk hanya satu kenari. Jika Anda telah membuat secara manual peran yang dapat digunakan untuk beberapa canary, Anda dapat menggunakan peran yang ada tersebut.

   Untuk menggunakan peran yang ada, Anda harus memiliki `iam:PassRole` izin untuk melewati peran tersebut ke Synthetic dan Lambda. Anda juga harus memiliki `iam:GetRole` izin.

1. (Opsional) Di bawah **Alarm**, pilih apakah Anda ingin menerapkan CloudWatch alarm yang akan dibuat untuk canary ini. Jika Anda memilih untuk membuat alarm, alarm tersebut dibuat dengan kesepakatan nama berikut: `Synthetics-Alarm-canaryName -index `

   `index` adalah angka yang mewakili setiap alarm berbeda yang dibuat untuk canary ini. Alarm pertama memiliki indeks 1, alarm kedua memiliki indeks 2, dan seterusnya.

1. (Opsional) Agar uji canary ini menjadi titik akhir pada VPC, pilih **pengaturan VPC**, lalu lakukan hal berikut:

   1. Pilih VPC yang menjadi host titik akhir.

   1. Pilih satu subnet atau lebih di VPC Anda. Anda harus memilih subnet privat karena instans Lambda tidak dapat dikonfigurasi untuk berfungsi di subnet publik ketika alamat IP tidak dapat ditetapkan untuk instans Lambda selama pelaksanaan. Untuk informasi selengkapnya, silakan lihat [Mengonfigurasi Fungsi Lambda untuk Mengakses Sumber Daya dalam VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html).

   1. Pilih satu atau beberapa grup keamanan pada VPC Anda.

   1. Untuk mengizinkan IPv6 lalu lintas keluar untuk kenari ini, pilih **Izinkan IPv6 Lalu Lintas untuk subnet dual-stack**. Hal ini memungkinkan kenari untuk memantau titik akhir IPv6 -only dan dual stack enabled over. IPv6

      Anda dapat memantau titik akhir di luar VPC Anda dengan memberikan akses internet kenari dan mengonfigurasi subnet VPC dengan tepat. Untuk informasi selengkapnya, lihat [Menjalankan canary di VPC](CloudWatch_Synthetics_Canaries_VPC.md).

   Jika titik akhir berada di VPC, Anda harus mengaktifkan canari untuk mengirim informasi ke CloudWatch dan Amazon S3. Untuk informasi selengkapnya, lihat [Menjalankan canary di VPC](CloudWatch_Synthetics_Canaries_VPC.md).

1. (Opsional) Di bawah **Tag**, tambahkan satu atau beberapa pasangan nilai kunci sebagai tanda untuk canary ini. Tag dapat membantu Anda mengidentifikasi dan mengatur AWS sumber daya Anda dan melacak AWS biaya Anda. Untuk informasi selengkapnya, lihat [Menandai sumber daya Amazon CloudWatch Anda](CloudWatch-Tagging.md).

   **Jika Anda ingin tag yang Anda terapkan ke kenari juga diterapkan ke fungsi Lambda yang digunakan kenari, pilih fungsi Lambda di bawah **Replikasi** Tag.** Jika Anda memilih opsi ini, CloudWatch Synthetics akan menyimpan tag pada kenari dan fungsi Lambda disinkronkan:
   + Synthetics akan menerapkan tag yang sama yang Anda tentukan di sini untuk kenari dan fungsi Lambda Anda.
   + Jika nanti Anda memperbarui tag kenari dan tetap memilih opsi ini, Synthetics memodifikasi tag pada fungsi Lambda Anda agar tetap sinkron dengan kenari. 

1. (Opsional) Di bawah **Penelusuran aktif**, pilih apakah mengaktifkan penelusuran X-Ray aktif untuk canary ini. Penelusuran aktif hanya tersedia untuk runtime Puppeteer dan Java. Untuk informasi selengkapnya, lihat [Penelusuran Canary dan X-Ray](CloudWatch_Synthetics_Canaries_tracing.md).

## Sumber daya yang dibuat untuk canary
<a name="CloudWatch_Synthetics_Canaries_Resources_Created"></a>

Ketika Anda membuat canary, sumber daya berikut dibuat:
+ Peran IAM dengan nama `CloudWatchSyntheticsRole-canary-name -uuid` (jika Anda menggunakan CloudWatch konsol untuk membuat kenari dan menentukan peran baru yang akan dibuat untuk kenari)
+ Kebijakan IAM dengan nama `CloudWatchSyntheticsPolicy- canary-name-uuid`.
+ bucket S3 dengan nama `cw-syn-results-accountID -region`.
+ Alarm dengan nama `Synthetics-Alarm-MyCanaryName`, jika Anda ingin alarm dibuat untuk canary.
+ Fungsi Lambda dan lapisan, jika Anda menggunakan cetak biru untuk membuat canary. Sumber daya ini memiliki awalan `cwsyn-MyCanaryName`.
+ CloudWatch Log log grup dengan nama`/aws/lambda/cwsyn-MyCanaryName -randomId`.

# Menggunakan cetak biru canary
<a name="CloudWatch_Synthetics_Canaries_Blueprints"></a>

Bagian ini menyediakan detail tentang setiap cetak biru canary dan tugas yang paling sesuai untuk setiap cetak biru. Cetak biru disediakan untuk jenis canary berikut: 

**Topics**
+ [Pemantauan heartbeat](#CloudWatch_Synthetics_Canaries_Blueprints_Heartbeat)
+ [Canary API](#CloudWatch_Synthetics_Canaries_Blueprints_API)
+ [Pemeriksa tautan yang rusak](#CloudWatch_Synthetics_Canaries_Blueprints_Broken_Links)
+ [Cetak biru pemantauan visual](#CloudWatch_Synthetics_Canaries_Blueprints_VisualTesting)
+ [Perekam canary](#CloudWatch_Synthetics_Canaries_Blueprints_Recorder)
+ [Pembangun alur kerja GUI](#CloudWatch_Synthetics_Canaries_Blueprints_GUI_Workflow)
+ [Cetak biru multi cek](#CloudWatch_Synthetics_Canaries_Blueprints_Multichecks_Blueprint)
+ [Membuat multi cek blueprint canary](CloudWatch_Synthetics_Canaries_MultiCheck_Blueprint.md)

Ketika Anda menggunakan cetak biru untuk membuat canary, ketika mengisi bidang di CloudWatch konsol, **Penyunting naskah** wilayah halaman menampilkan canary yang Anda buat sebagai naskah Node.js. Anda juga dapat menyunting canary di area ini untuk menyesuaikannya lebih lanjut.

## Pemantauan heartbeat
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Heartbeat"></a>

Skrip heartbeat memuat URL tertentu dan menyimpan tangkapan layar halaman dan file arsip HTTP (file HAR). Mereka juga menyimpan log yang diakses URLs. 

Anda dapat menggunakan file HAR untuk melihat data performa terperinci tentang halaman web. Anda dapat menganalisis daftar permintaan web dan menangkap masalah kinerja seperti waktu untuk memuat item.

Jika kenari Anda menggunakan versi runtime `syn-nodejs-puppeteer-3.1` atau yang lebih baru, Anda dapat menggunakan cetak biru pemantauan detak jantung untuk memantau beberapa URLs dan melihat status, durasi, tangkapan layar terkait, dan alasan kegagalan untuk setiap URL dalam ringkasan langkah laporan canary run.

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

Canary API dapat menguji fungsi Baca dan Tulis dasar dari API REST. REST adalah singkatan dari *transfer status representasional* dan merupakan seperangkat aturan yang diikuti pengembang ketika membuat API. Salah satu aturan ini menyatakan bahwa tautan ke URL tertentu harus mengembalikan satu data.

Canary dapat bekerja dengan apa saja APIs dan menguji semua jenis fungsionalitas. Setiap canary dapat membuat beberapa panggilan API.

Di kenari yang menggunakan versi runtime `syn-nodejs-2.2` atau yang lebih baru, cetak biru kenari API mendukung kenari multi-langkah yang memantau Anda sebagai langkah HTTP. APIs Anda dapat menguji beberapa APIs dalam satu kenari. Setiap langkah adalah permintaan terpisah yang dapat mengakses URL yang berbeda, menggunakan header yang berbeda, dan menggunakan aturan yang berbeda untuk apakah header dan bodi respons ditangkap. Dengan tidak menangkap header dan bodi respons, Anda dapat mencegah data sensitif dari perekaman. 

Setiap permintaan di canary API terdiri atas informasi berikut:
+ *Titik akhir*, yang merupakan URL yang Anda minta.
+ *Metode*, yaitu jenis permintaan yang dikirim ke server. REST APIs mendukung operasi GET (read), POST (write), PUT (update), PATCH (update), dan DELETE (delete).
+ *Header*, yang memberikan informasi baik kepada klien maupun server. Cookie ini digunakan untuk autentikasi dan memberikan informasi tentang konten bodi. Untuk daftar header yang valid, silakan lihat [Header HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers).
+ *Data* (atau *bodi*), yang memuat informasi yang akan dikirimkan ke server. Hanya digunakan untuk permintaan POST, PUT, PATCH, atau DELETE.

**catatan**  
Cetak biru kenari API tidak didukung oleh runtime Playwright.

Cetak biru canary API mendukung metode GET dan POST. Ketika Anda menggunakan cetak biru ini, Anda harus menentukan header. Misalnya, Anda dapat menentukan **Authorization** sebagai **Kunci** dan menentukan data otorisasi yang diperlukan sebagai **Nilai** untuk kunci itu.

Jika Anda menguji permintaan POST, Anda juga menentukan konten yang akan diposting di bidang **Data**.

 **Integrasi dengan API Gateway** 

Cetak biru API terintegrasi dengan Amazon API Gateway. Ini memungkinkan Anda memilih API Gateway API dan tahap dari AWS akun dan Wilayah yang sama dengan canary, atau mengunggah template Swagger dari API Gateway untuk pemantauan API lintas akun dan lintas wilayah. Anda kemudian dapat memilih sisa dari detail di konsol untuk membuat canary, bukan memasukkannya dari awal. Untuk informasi selengkapnya tentang API Gateway, silakan lihat [Apa itu Amazon API Gateway?](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) 

 **Menggunakan API privat** 

Anda dapat membuat canary yang menggunakan API privat di Amazon API Gateway. Untuk informasi selengkapnya, silakan lihat [Membuat API privat di Amazon API Gateway?](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html)

## Pemeriksa tautan yang rusak
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Broken_Links"></a>

Pemeriksa tautan yang rusak mengumpulkan semua tautan di dalam URL yang sedang Anda uji dengan menggunakan `document.getElementsByTagName('a')`. Hanya menguji hingga jumlah tautan yang Anda tentukan, dan URL itu sendiri dihitung sebagai tautan pertama. Sebagai contoh, jika Anda ingin memeriksa semua tautan di halaman yang memuat lima tautan, Anda harus menentukan untuk canary mengikuti enam tautan.

Canary pemeriksa tautan yang rusak dibuat menggunakan runtime `syn-nodejs-2.0-beta` atau yang lebih baru mendukung fitur tambahan berikut:
+ Memberikan laporan yang menyertakan tautan yang diperiksa, kode status, alasan kegagalan (jika ada), dan halaman cuplikan layar sumber dan tujuan.
+ Ketika melihat hasil canary, Anda dapat menyaring untuk hanya melihat tautan yang rusak dan kemudian memperbaiki tautan didasarkan pada alasan kegagalan.
+ Versi ini menangkap cuplikan layar halaman sumber berketerangan untuk setiap tautan dan menyoroti jangkar tempat tautan ditemukan. Komponen tersembunyi tidak diberi keterangan.
+ Anda dapat mengonfigurasi versi ini untuk mengambil tangkapan layar dari halaman sumber dan tujuan, hanya halaman sumber, atau hanya halaman tujuan.
+ Versi ini memperbaiki masalah dalam versi sebelumnya tempat skrip canary berhenti setelah tautan pertama yang rusak, bahkan ketika lebih banyak tautan yang diambil dari halaman pertama.

**catatan**  
Cetak biru pemeriksa tautan rusak tidak didukung oleh runtime Playwright.

Untuk memperbarui kenari yang ada menggunakan `syn-1.0` untuk menggunakan runtime baru, Anda harus menghapus dan membuat ulang kenari. Memperbarui canary yang sudah ada ke runtime baru tidak membuat fitur ini tersedia.

Canary pemeriksa tautan yang rusak mendeteksi jenis kesalahan tautan berikut:
+ 404 Halaman Tidak Ditemukan
+ Nama Host Tidak Benar
+ URL Buruk. Misalnya, URL tidak memiliki tanda kurung, memiliki garis miring ekstra, atau menggunakan protokol yang salah.
+ Kode respons HTTP tidak benar.
+ Server host mengembalikan respons kosong dengan tanpa konten dan tidak ada kode respons.
+ Permintaan HTTP secara konstan habis waktu selama berlangsungnya canary.
+ Host secara konsisten menurunkan koneksi karena salah konfigurasi atau terlalu sibuk.

## Cetak biru pemantauan visual
<a name="CloudWatch_Synthetics_Canaries_Blueprints_VisualTesting"></a>

Cetak biru pemantauan visual mencakup kode untuk membandingkan tangkapan layar yang diambil selama berjalannya canary dengan tangkapan layar yang diambil selama berjalannya canary dasar. Jika perbedaan antara kedua tangkapan layar berada di luar persentase ambang batas, canary gagal. Pemantauan visual didukung di kenari yang menjalankan **syn-puppeteer-node-3.2** dan yang lebih baru. Saat ini tidak didukung di kenari yang menjalankan Python dan Selenium, atau menggunakan runtime Playwright.

Cetak biru pemantauan visual mencakup baris kode berikut dalam skrip canary cetak biru default, yang memungkinkan pemantauan visual.

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

Pertama kali canary berjalan dengan sukses setelah baris ini ditambahkan ke skrip, ia menggunakan tangkapan layar yang diambil selama proses itu sebagai dasar untuk perbandingan. Setelah kenari pertama dijalankan, Anda dapat menggunakan CloudWatch konsol untuk mengedit kenari untuk melakukan salah satu hal berikut:
+ Tetapkan putaran canary berikutnya sebagai dasar baru.
+ Gambar batas pada tangkapan layar dasar saat ini untuk menunjuk area tangkapan layar untuk diabaikan selama perbandingan visual.
+ Hapus tangkapan layar agar tidak digunakan untuk pemantauan visual.

Untuk informasi selengkapnya tentang menggunakan CloudWatch konsol untuk mengedit kenari, lihat[Mengedit atau menghapus canary](synthetics_canaries_deletion.md).

Anda juga dapat mengubah canary run yang digunakan sebagai baseline dengan menggunakan ` nextrun` atau `lastrun` parameter atau menentukan ID run canary di API. [UpdateCanary](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_UpdateCanary.html)

Saat Anda menggunakan cetak biru pemantauan visual, Anda memasukkan URL tempat Anda ingin tangkapan layar diambil, dan menentukan ambang batas perbedaan sebagai persentase. Setelah baseline run, future run dari canary yang mendeteksi perbedaan visual yang lebih besar dari ambang batas itu memicu kegagalan canary. Setelah baseline berjalan, Anda juga dapat mengedit canary untuk "menggambar" batas pada tangkapan layar dasar yang ingin Anda abaikan selama pemantauan visual.

Fitur pemantauan visual didukung oleh toolkit perangkat lunak ImageMagick open source. Untuk informasi lebih lanjut, lihat [ ImageMagick](https://imagemagick.org/index.php).

## Perekam canary
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Recorder"></a>

Dengan cetak biru perekam kenari, Anda dapat menggunakan CloudWatch Synthetics Recorder untuk merekam tindakan klik dan ketik Anda di situs web dan secara otomatis menghasilkan skrip Node.js yang dapat digunakan untuk membuat kenari yang mengikuti langkah yang sama. CloudWatch Perekam Sintetis adalah ekstensi Google Chrome yang disediakan oleh Amazon. Perekam kenari tidak didukung untuk kenari yang menggunakan runtime Playwright.

**Kredit**: Perekam CloudWatch Synthetics didasarkan pada perekam Tanpa [Kepala](https://github.com/checkly/headless-recorder).

Untuk informasi selengkapnya, lihat [Menggunakan CloudWatch Synthetics Recorder untuk Google Chrome](CloudWatch_Synthetics_Canaries_Recorder.md).

## Pembangun alur kerja GUI
<a name="CloudWatch_Synthetics_Canaries_Blueprints_GUI_Workflow"></a>

Cetak biru Pembangun Alur Kerja GUI memverifikasi bahwa tindakan dapat diambil di halaman web Anda. Sebagai contoh, jika Anda memiliki halaman web dengan formulir login, canary dapat mengisi bidang pengguna dan kata sandi serta mengirimkan formulir untuk memverifikasi bahwa halaman web berfungsi dengan benar.

Ketika Anda menggunakan cetak biru untuk membuat jenis canary ini, Anda menentukan tindakan yang diinginkan canary untuk dilakukan pada halaman web. Tindakan yang dapat Anda gunakan adalah sebagai berikut:
+ **Klik**— Pilih elemen yang Anda tentukan dan simulasikan pengguna yang mengeklik atau memilih elemen tersebut.

  Untuk menentukan elemen dalam skrip Node.js, gunakan `[id=]` atau ` a[class=]`.

  Untuk menentukan elemen dalam skrip Python, gunakan `xpath //*[@id=]` atau ` //*[@class=]`.
+ **Verifikasi pemilih**— Verifikasi bahwa elemen tertentu ada di halaman web tersebut. Uji ini berguna untuk memverifikasi bahwa tindakan sebelumnya memiliki elemen yang benar untuk mengisi halaman tersebut.

  Untuk menentukan elemen guna memverifikasi dalam skrip Node.js, gunakan `[id=]` atau ` a[class=]`.

  Untuk menentukan elemen guna memverifikasi dalam skrip Python, gunakan `xpath //*[@id=]` atau `//*[class=]`.
+ **Verifikasi teks**— Verifikasi bahwa rangkaian tertentu termuat dalam elemen target. Uji ini berguna untuk memverifikasi bahwa tindakan sebelumnya telah menyebabkan teks yang benar ditampilkan.

  Untuk menentukan elemen dalam skrip Node.js, gunakan format seperti ` div[@id=]//h1` karena tindakan ini menggunakan fungsi `waitForXPath` dalam Puppeteer.

  Untuk menentukan elemen dalam skrip Python, gunakan format xpath seperti ` //*[@id=] ` atau //\$1[@class=] karena tindakan ini menggunakan fungsi `implicitly_wait` dalam Selenium.
+ **Masukkan teks**— Tulis teks tertentu dalam elemen target.

  Untuk menentukan elemen guna memverifikasi dalam skrip Node.js, gunakan `[id=]` atau ` a[class=]`.

  Untuk menentukan elemen guna memverifikasi dalam skrip Python, gunakan `xpath //*[@id=]` atau `//*[@class=]`.
+ **Klik dengan navigasi**— Tunggu seluruh halaman dimuat setelah memilih elemen tertentu. Hal ini paling berguna ketika Anda perlu memuat ulang halaman.

  Untuk menentukan elemen dalam skrip Node.js, gunakan `[id=]` atau ` a[class=]`.

  Untuk menentukan elemen dalam skrip Python, gunakan `xpath //*[@id=]` atau ` //*[@class=]`.

Sebagai contoh, cetak biru berikut menggunakan Node.js. Cetak biru mengeklik **firstButton** pada URL tertentu, memverifikasi bahwa pemilih yang diharapkan dengan teks yang diharapkan muncul, memasukkan nama `Test_Customer` ke dalam bidang **Nama**, mengklik tombol **Login**, dan kemudian memverifikasi bahwa login berhasil dengan memeriksa teks **Sambutan** pada halaman berikutnya.

![\[Laman canary di konsol dibuat, dengan bidang yang diisi untuk cetak biru Alur Kerja GUI.\]](http://docs.aws.amazon.com/id_id/AmazonCloudWatch/latest/monitoring/images/canary_create_gui_workflow.PNG)


Canary alur kerja GUI yang menggunakan runtime berikut juga memberikan ringkasan langkah-langkah yang dilaksanakan untuk masing-masing operasi canary. Anda dapat menggunakan tangkapan layar dan pesan kesalahan yang terkait dengan setiap langkah untuk menemukan akar masalah kegagalan.
+ `syn-nodejs-2.0` atau yang lebih baru
+ `syn-python-selenium-1.0` atau yang lebih baru

## Cetak biru multi cek
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Multichecks_Blueprint"></a>

Cetak biru Multi check menyederhanakan pembuatan kenari. Ini mengurangi biaya dengan menggunakan konfigurasi JSON sederhana yang menyediakan out-of-the-box fungsionalitas untuk melakukan pemeriksaan HTTP, DNS, SSL, dan TCP. Anda dapat mengonfigurasi hingga 10 pemeriksaan. Konfigurasikan setiap pemeriksaan sebagai langkah numerik yang berjalan secara berurutan, memungkinkan pemahaman yang jelas tentang aliran kenari.

Dukungan cetak biru multi cek:
+ Permintaan HTTP dasar, permintaan TCP, memvalidasi catatan DNS dan memantau sertifikat SSL
+ Metode otentikasi HTTP seperti Basic, API Key OAuth, dan Sigv4 terintegrasi dengan Secrets Manager
+ Pernyataan untuk setiap cek

Untuk informasi selengkapnya, lihat [Membuat canary](CloudWatch_Synthetics_Canaries_Create.md).

# Membuat multi cek blueprint canary
<a name="CloudWatch_Synthetics_Canaries_MultiCheck_Blueprint"></a>

Cetak biru multi pemeriksaan Amazon CloudWatch Synthetics membantu Anda membuat kenari Synthetics dengan menyediakan konfigurasi JSON sederhana. Anda dapat menghemat biaya dengan menggabungkan hingga 10 jenis HTTP/DNS/SSL/TCP pemeriksaan yang berbeda secara berurutan berbasis langkah. Setiap pemeriksaan mencakup pernyataan yang memberikan verifikasi dasar terhadap hasil pemeriksaan.

Multi cek kenari dirancang untuk kasus penggunaan sederhana yang hanya memerlukan pemeriksaan dasar tanpa browser tanpa kepala. Untuk kasus penggunaan yang lebih kompleks, tinjau jenis kenari lain yang disediakan Amazon CloudWatch Synthetics.

**Topics**
+ [Prasyarat](#CloudWatch_Synthetics_MultiCheck_Prerequisites)
+ [Batasan](#CloudWatch_Synthetics_MultiCheck_Limitations)
+ [Struktur kemasan, skema JSON, dan pengaturan konfigurasi](#CloudWatch_Synthetics_MultiCheck_Packaging)
+ [Membuat kenari multi cek di Konsol Manajemen AWS](#CloudWatch_Synthetics_MultiCheck_Console)
+ [Membuat kenari multi cek menggunakan AWS Synthetics APIs](#CloudWatch_Synthetics_MultiCheck_API)
+ [Membuat kenari multi cek di CloudFormation](#CloudWatch_Synthetics_MultiCheck_CloudFormation)
+ [Konfigurasi autentikasi](#CloudWatch_Synthetics_MultiCheck_Authentication)
+ [Pemecahan masalah](#CloudWatch_Synthetics_MultiCheck_Troubleshooting)

## Prasyarat
<a name="CloudWatch_Synthetics_MultiCheck_Prerequisites"></a>
+ Harus menggunakan syn-nodejs-3.0\$1 untuk membuat kenari multi cek
+ Saat menggunakan konfigurasi Autentikasi dan Secrets Manager, Anda harus memastikan kenari [ ExecutionRoleArn](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_CreateCanary.html)memungkinkan izin untuk mengakses rahasia ini
+ Saat menggunakan Otentikasi untuk Sigv4, Anda harus memastikan kenari [ ExecutionRoleArn](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_CreateCanary.html)mengizinkan izin untuk mengakses peran terkait

## Batasan
<a name="CloudWatch_Synthetics_MultiCheck_Limitations"></a>
+ Ukuran Respons HTTP tidak boleh lebih besar dari 1 MB
+ Maksimal 10 variabel yang ditentukan.
+ Saat menggunakan JSON RFC, Checks JSON mungkin memiliki bidang duplikat yang disediakan namun hanya bidang sekuensial terakhir yang akan digunakan
+ Dalam Konsol Manajemen AWS, kenari multi cek akan default untuk menampilkan metrik langkah multi cek untuk dengan mudah mengidentifikasi ketersediaan setiap pemeriksaan. Saat cek dihapus, grafik ini mungkin masih menampilkan pemeriksaan dalam grafik ketersediaan hingga metrik berhenti aktif setidaknya selama 3 jam

## Struktur kemasan, skema JSON, dan pengaturan konfigurasi
<a name="CloudWatch_Synthetics_MultiCheck_Packaging"></a>

Konfigurasi JSON Checks yang akan digunakan untuk kenari harus diberi nama. ` blueprint-config.json` Konfigurasi harus mengikuti [skema](https://github.com/aws-samples/synthetics-canary-local-debugging-sample/tree/main) dan mengikuti instruksi di bawah[Menulis konfigurasi JSON untuk cetak biru Node.js multi Checks](CloudWatch_Synthetics_WritingCanary_Multichecks.md).

Kompres `blueprint-config.json` ke dalam file ZIP dan sediakan di salah satu alur kerja pembuatan berikut. Ketika ada `synthetics.json` konfigurasi, maka itu juga dikompresi dalam file ZIP yang sama. Berikut ini adalah contoh file zip yang disebut`multi-checks.zip`.

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

## Membuat kenari multi cek di Konsol Manajemen AWS
<a name="CloudWatch_Synthetics_MultiCheck_Console"></a>

1. Buka konsol CloudWatch sintetis Amazon.

1. Pilih **Buat Canary**.

1. **Di bawah **Gunakan cetak biru**, pilih multi cek.**

   Di bawah **Configure Checks**, Anda akan melihat dua tab, **Checks** dan **Canary configuration**.

1. Pilih versi runtime **syn-nodejs-3.0** atau yang lebih baru.

1. Ikuti prosedur di bawah ini [Menulis konfigurasi JSON untuk cetak biru Node.js multi Checks](CloudWatch_Synthetics_WritingCanary_Multichecks.md) untuk menjelaskan pemeriksaan yang ingin Anda lakukan. Atau, konsol memberi Anda konfigurasi JSON default yang dapat Anda bangun.

1. Pilih **Buat Canary**.

## Membuat kenari multi cek menggunakan AWS Synthetics APIs
<a name="CloudWatch_Synthetics_MultiCheck_API"></a>

Gunakan `CreateCanary` API dan di dalam `Code` parameter, berikan field/value `BlueprintTypes="multi-checks"` sebagai pengganti` Handler`. Ketika `Handler` keduanya `BlueprintTypes` dan ditentukan, a `ValidationException` ditampilkan. Versi runtime yang disediakan harus `syn-nodejs-3.0` atau lebih baru.

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

## Membuat kenari multi cek di CloudFormation
<a name="CloudWatch_Synthetics_MultiCheck_CloudFormation"></a>

Dalam CloudFormation template Anda untuk kenari multi cek, di dalam `Code` parameter, berikan field/value `BlueprintTypes="multi-checks"` alih-alih. ` Handler` Ketika `Handler` keduanya `BlueprintTypes` dan ditentukan, a `ValidationException` ditampilkan. Versi runtime yang disediakan harus. `syn-nodejs-3.0 or later` 

Contoh template:

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

## Konfigurasi autentikasi
<a name="CloudWatch_Synthetics_MultiCheck_Authentication"></a>

Saat kenari Anda membuat permintaan HTTP ke titik akhir yang diautentikasi, Anda dapat mengonfigurasi langkah-langkah canary cetak biru Anda untuk menggunakan salah satu dari empat jenis otentikasi: Dasar, Kunci API, Kredensyal Klien, dan SigV4. OAuth Daripada menyiapkan header permintaan sendiri, Anda dapat menentukan jenis otentikasi dalam definisi cetak biru Anda, dan Synthetics mengikuti jenis otentikasi yang ditentukan untuk mengisi komponen permintaan HTTP Anda dengan informasi otentikasi yang disediakan.

Anda menentukan jenis otentikasi dalam langkah cetak biru Anda dengan bagian Otentikasi. Anda menentukan skema otentikasi yang ingin Anda gunakan, properti yang diperlukan untuk skema otentikasi yang Anda pilih, dan Synthetics menggunakan informasi yang diberikan untuk membuat header otentikasi untuk permintaan HTTP Anda.

Karena menyimpan rahasia (seperti kata sandi atau kunci API) dalam teks biasa adalah masalah keamanan, Synthetics mendukung integrasi dengan. AWS Secrets Manager Saat Anda ingin mengautentikasi permintaan HTTP dalam canary cetak biru Synthetics, Anda dapat merujuk ke rahasia yang menyimpan informasi otentikasi Anda dan Synthetics menangani pengambilan rahasia dan menyimpannya di kenari Anda. Pendekatan ini memberikan rahasia kepada Synthetics sambil menyimpan rahasia Anda dengan aman, tanpa menentukannya dalam teks biasa dalam konfigurasi cetak biru Anda.

Untuk informasi lebih lanjut tentang AWS Secrets Manager, lihat [Apa itu AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)

### Autentikasi dasar
<a name="CloudWatch_Synthetics_MultiCheck_BasicAuth"></a>

Synthetics mengimplementasikan skema otentikasi HTTP Dasar yang didefinisikan dalam RFC 7617. Prosesnya bekerja sebagai berikut:
+ Pasangan nama pengguna dan kata sandi disediakan dari konfigurasi cetak biru.
+ User-pass dibuat dengan menggabungkan nama pengguna, satu karakter titik dua (“:”), dan kata sandi.
+ User-pass dikodekan UTF-8, kemudian diubah menjadi string yang dikodekan base64.
+ User-pass yang disandikan base64 ini disediakan di header “Otorisasi” dengan format berikut: Authorization: Basic \$1base64-\$1 encoded-user-pass

Misalnya, jika agen pengguna ingin mengirim id pengguna “Aladdin” dan kata sandi “buka wijen”, ia menggunakan bidang header berikut: Otorisasi: FtzQ Dasar == QWxh ZGRpbjpvc GVu IHNlc2

Contoh konfigurasi:

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

### Otentikasi kunci API
<a name="CloudWatch_Synthetics_MultiCheck_APIKeyAuth"></a>

Anda dapat memberikan kunci API untuk mengautentikasi permintaan HTTP Anda. Saat Anda menggunakan autentikasi kunci API, kunci API yang Anda berikan dimasukkan ke dalam header HTTP “X-API-key”. Jika Anda memiliki sumber daya khusus yang mencari header kunci API di header selain yang ini, Anda dapat secara opsional menentukan nama header yang berbeda agar Synthetics memasukkan kunci API.

Contoh konfigurasi:

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

### Otentikasi SiGv4
<a name="CloudWatch_Synthetics_MultiCheck_SigV4Auth"></a>

AWS SigV4 (Signature Version 4) adalah protokol AWS penandatanganan untuk menambahkan informasi otentikasi ke AWS permintaan API. Untuk membuat permintaan yang diautentikasi SIGV4, Anda perlu menentukan wilayah dan layanan yang Anda minta, serta ARN (Nama AWS Sumber Daya) yang mengidentifikasi peran IAM yang ingin diasumsikan oleh kenari saat membuat permintaan SigV4 ini. Synthetics mengasumsikan peran IAM yang disediakan di RoLearn, dan menggunakannya untuk mengautentikasi permintaan API Anda. AWS 

Contoh konfigurasi:

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

#### Pertimbangan SiGv4
<a name="CloudWatch_Synthetics_MultiCheck_SigV4Considerations"></a>

Agar Synthetics dapat mengambil peran yang Anda berikan di bagian otentikasi SigV4, kebijakan kepercayaan yang dilampirkan pada peran tersebut harus dikonfigurasi agar kenari dapat mengambil RoLearn yang disediakan. Prinsip AWS utama yang perlu Anda percayai adalah peran yang diasumsikan oleh kenari Anda. AWS STS Dibutuhkan format ` aws:sts::{account_running_the_canary}:assumed-role/<canary_name>/<assumed_role_name>` arn:.

Misalnya, jika Anda memiliki kenari yang berjalan di akun 0123456789012, bernama test-canary, dan peran yang diasumsikan diberi nama canary-assume-role, maka kebijakan kepercayaan perlu menyertakan pernyataan ini agar kenari mengasumsikan otentikasi RoLearn untuk sigV4 dengan benar:

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

### OAuth kredensi klien
<a name="CloudWatch_Synthetics_MultiCheck_OAuthAuth"></a>

Synthetics mengimplementasikan jenis hibah OAuth Client Credentials seperti yang didefinisikan dalam RFC 6479 Bagian 4.4. Jika Anda ingin membuat permintaan HTTP ke titik akhir yang diautentikasi dengan Token Pembawa yang dikeluarkan oleh titik akhir OAuth token, Synthetics dapat meminta dan mengelola token pembawa atas nama Anda. Bila Anda menggunakan OAuth skema, Synthetics melakukan langkah-langkah berikut:
+ Menggunakan skema otentikasi Dasar dengan clientID dan clientSecret untuk mengautentikasi permintaan ke TokenUrl, titik akhir yang mengeluarkan token pembawa
+ Jika Anda menyediakan cakupan opsional, audiens, dan parameter sumber daya, parameter tersebut disertakan dalam permintaan token
+ Menggunakan token akses yang dikembalikan oleh TokenUrl untuk mengautentikasi permintaan HTTP Anda
+ Menyimpan token penyegaran yang dikembalikan dari TokenUrl dengan aman untuk permintaan token masa depan

Contoh konfigurasi:

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

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

Synthetics menyegarkan OAuth token saat respons 401 atau 407 dikembalikan.

### AWS Secrets Manager integrasi
<a name="CloudWatch_Synthetics_MultiCheck_SecretsManager"></a>

Untuk menghindari menyimpan nilai rahasia (seperti kata sandi atau kunci API) dalam teks biasa, Synthetics menyediakan integrasi dengan. AWS Secrets Manager Anda dapat mereferensikan seluruh nilai rahasia dalam konfigurasi cetak biru Anda dengan format` ${aws_SECRET:<secret_name>}`, atau untuk referensi kunci tertentu. ` ${aws_SECRET:<secret_name>:<secret_key>}`

Misalnya, jika Anda memiliki rahasia bernama login/basic-auth-credentials, menyimpan nama pengguna dan kata sandi dengan struktur JSON berikut:

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

Anda dapat mereferensikan nama pengguna dan kata sandi dalam konfigurasi cetak biru Anda sebagai berikut, dan Synthetics menangani pengambilan nilai rahasia dan menggunakan kuncinya untuk mengautentikasi permintaan Anda:

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

Untuk memungkinkan Synthetics mengambil rahasia yang ditentukan, peran ARN yang diasumsikan oleh kenari harus memiliki izin SecretsManager:. GetSecretValue Jika rahasia dienkripsi menggunakan kunci yang dikelola pelanggan alih-alih kunci terkelola AWS/secretsmanager, maka Anda juga perlu Dekripsi izin untuk kunci itu. AWS kms:

Contoh izin:

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

## Pemecahan masalah
<a name="CloudWatch_Synthetics_MultiCheck_Troubleshooting"></a>

### Kegagalan pemecahan masalah umum
<a name="CloudWatch_Synthetics_MultiCheck_Common_Failures"></a>

Kode yang mendasari cetak biru multi cek ditulis dalam TypeScript. Lihat halaman pemecahan masalah kenari untuk kegagalan umum: [Memecahkan masalah](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Troubleshoot.html) kenari yang gagal.

### JSON memeriksa kesalahan sintaks konfigurasi
<a name="CloudWatch_Synthetics_MultiCheck_JSON_Errors"></a>

Ketika ada kesalahan sintaksis yang terkait dengan konfigurasi pemeriksaan JSON kenari, itu Konsol Manajemen AWS akan memberi Anda alasan kegagalan saat Anda mencoba membuat kenari. Jika Anda membuat kenari menggunakan API atau CloudFormation, Anda akan melihat kegagalan saat kenari dijalankan untuk pertama kalinya. Disarankan untuk menggunakan alur kerja pembaruan kenari yang aman untuk kenari multi cek. Untuk informasi selengkapnya, lihat [Melakukan pembaruan kenari aman](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/performing-safe-canary-upgrades.html).

### Kegagalan jaringan atau batas waktu
<a name="CloudWatch_Synthetics_MultiCheck_Network_Failures"></a>

Untuk kegagalan intermiten atau konsisten yang terkait dengan batas waktu, kegagalan koneksi jaringan (misalnya, ENOTFOUND, ECONNRESET) pertimbangkan untuk mengaktifkan ` DEBUG` log sehingga proses berikut akan memberikan rincian tambahan lebih lanjut tentang mengapa Cek gagal. Untuk melakukannya, berikan Variabel Lingkungan CW\$1SYNTHETICS\$1LOG\$1LEVEL: “DEBUG”.

Jika masih ada kegagalan yang tidak dapat Anda debug, pertimbangkan untuk menghubungi AWS Support atau memeriksa apakah ada jenis Canary lain yang disediakan dari CloudWatch Synthetics yang lebih cocok dengan kasus penggunaan Anda.

# Menggunakan CloudWatch Synthetics Recorder untuk Google Chrome
<a name="CloudWatch_Synthetics_Canaries_Recorder"></a>

Amazon menyediakan Perekam CloudWatch Synthetics untuk membantu Anda membuat kenari dengan lebih mudah. Perekam adalah ekstensi Google Chrome.

Perekam mencatat tindakan klik dan jenis tindakan di situs web dan secara otomatis membuat skrip Node.js yang dapat digunakan untuk membuat canary yang mengikuti langkah serupa.

Setelah Anda mulai merekam, CloudWatch Synthetics Recorder mendeteksi tindakan Anda di browser dan mengubahnya menjadi skrip. Anda dapat menjeda dan melanjutkan perekaman sesuai kebutuhan. Ketika Anda berhenti merekam, perekam membuat skrip tindakan Node.js, yang dapat Anda salin dengan mudah bersama tombol **Salin ke Clipboard**. Anda kemudian dapat menggunakan skrip ini untuk membuat kenari di CloudWatch Synthetics. 

**Kredit**: Perekam CloudWatch Synthetics didasarkan pada perekam Tanpa [Kepala](https://github.com/checkly/headless-recorder).

## Memasang ekstensi CloudWatch Synthetics Recorder untuk Google Chrome
<a name="CloudWatch_Synthetics_Canaries_Recorder-install"></a>

**Untuk menggunakan CloudWatch Synthetics Recorder, Anda dapat mulai membuat kenari dan memilih cetak biru Canary Recorder.** Jika Anda melakukan ini ketika Anda belum mengunduh perekam, konsol CloudWatch Synthetics menyediakan tautan untuk mengunduhnya.

Atau, Anda dapat mengikuti langkah-langkah ini untuk mengunduh dan melakukan instalasi perekam secara langsung.

**Untuk menginstal CloudWatch Synthetics Recorder**

1. Menggunakan Google Chrome, kunjungi situs web ini: [ https://chrome.google.com/webstore/detail/cloudwatch-synthetics-rec/bhdnlmmgiplmbcdmkkdfplenecpegfno](https://chrome.google.com/webstore/detail/cloudwatch-synthetics-rec/bhdnlmmgiplmbcdmkkdfplenecpegfno)

1. Pilih **Tambahkan ke Chrome**, lalu pilih **Tambahkan ekstensi**.

## Menggunakan CloudWatch Synthetics Recorder untuk Google Chrome
<a name="CloudWatch_Synthetics_Canaries_Recorder-using"></a>

**Untuk menggunakan CloudWatch Synthetics Recorder untuk membantu Anda membuat kenari, Anda dapat memilih **Buat kenari di CloudWatch konsol, lalu pilih **Gunakan cetak biru**, Perekam Canary**.** Untuk informasi selengkapnya, lihat [Membuat canary](CloudWatch_Synthetics_Canaries_Create.md). 

Atau, Anda dapat menggunakan perekam untuk mencatat langkah-langkah tanpa langsung menggunakannya guna membuat canary.

**Untuk menggunakan CloudWatch Synthetics Recorder untuk merekam tindakan Anda di situs web**

1. Navigasi ke halaman yang ingin Anda pantau.

1. Pilih ikon ekstensi Chrome, dan kemudian pilih **CloudWatch Perekam Sintetis**.

1. Pilih **Mulai Perekaman**.

1. Lakukan langkah-langkah yang ingin Anda catat. Untuk menjeda perekaman, pilih **Jeda**.

1. Setelah selesai merekam alur kerja, pilih **Hentikan perekaman**.

1. Pilih **Salin ke clipboard** untuk menyalin skrip yang dihasilkan ke clipboard Anda. Atau, jika Anda ingin memulai ulang, pilih **Perekaman baru**.

1. Untuk membuat canary dengan skrip salinan, Anda dapat menempelkan skrip salinan ke penyunting selaras cetak biru perekam, atau menyimpannya ke bucket Amazon S3 dan mengimpornya dari sana.

1. Jika tidak segera membuat canary, Anda dapat menyimpan skrip rekaman ke dalam file.

## Keterbatasan yang diketahui dari Perekam CloudWatch Synthetics
<a name="CloudWatch_Synthetics_Canaries_Recorder-limitations"></a>

Perekam CloudWatch Synthetics untuk Google Chrome saat ini memiliki batasan berikut.
+ Elemen HTML yang tidak memiliki IDs akan menggunakan pemilih CSS. Ini dapat memecah canary jika struktur halaman web nanti berubah. Kami berencana untuk menyediakan beberapa pilihan konfigurasi (seperti menggunakan data-id) di sekitar ini dalam versi perekam di masa mendatang. 
+ Perekam tidak mendukung tindakan seperti klik ganda atau salin/tempel, dan tidak mendukung kombinasi utama seperti CMD\$10. 
+ Untuk memverifikasi keberadaan elemen atau teks di halaman, pengguna harus menambahkan pernyataan setelah skrip dibuat. Perekam tidak mendukung verifikasi elemen tanpa melakukan tindakan apa pun pada elemen tersebut. Hal ini mirip dengan pilihan “Verifikasi teks” atau “Verifikasi elemen” di pembangun alur kerja canary. Kami berencana untuk menambahkan beberapa dukungan pernyataan di versi berikutnya dari perekam. 
+ Perekam mencatat semua tindakan dalam tab tempat perekaman dimulai. Ini tidak merekam pop-up (misalnya, untuk memungkinkan penelusuran lokasi) atau navigasi ke berbagai halaman dari pop-up. 

# Versi runtime Synthetics
<a name="CloudWatch_Synthetics_Canaries_Library"></a>

Ketika Anda membuat atau memperbarui canary, Anda memilih versi runtime Synthetic untuk canary. Runtime Synthetic adalah kombinasi kode Synthetic yang memanggil pengatur skrip Anda, dan lapisan Lambda dari Dependensi gabungan.

CloudWatch Synthetics saat ini mendukung runtime yang menggunakan bahasa Node.js, Python, atau Java. Kerangka kerja yang didukung adalah Dalang, Penulis Naskah, dan Selenium.

Kami menyarankan agar Anda selalu menggunakan versi runtime terbaru untuk canary Anda, agar dapat menggunakan fitur dan pembaruan terbaru yang dibuat untuk pustaka Synthetic.

**Harap dicatat**: setiap kali Anda menjalankan kenari untuk menggunakan versi baru runtime Synthetics, semua fungsi pustaka Synthetics yang digunakan kenari Anda juga secara otomatis dipindahkan ke versi NodeJS yang sama dengan yang didukung runtime Synthetics.

**Topics**
+ [Versi runtime menggunakan Java](CloudWatch_Synthetics_Library_Java.md)
+ [Versi runtime menggunakan Node.js dan Playwright](CloudWatch_Synthetics_Library_nodejs_playwright.md)
+ [Versi runtime yang menggunakan Node.js dan Puppeteer](CloudWatch_Synthetics_Library_nodejs_puppeteer.md)
+ [Versi runtime yang menggunakan Python dan Selenium Webdriver](CloudWatch_Synthetics_Library_python_selenium.md)
+ [Versi runtime menggunakan Node.js](CloudWatch_Synthetics_Library_Nodejs.md)
+ [Kebijakan dukungan versi runtime](CloudWatch_Synthetics_Runtime_Support_Policy.md)
+ [Pembaruan versi runtime](CloudWatch_Synthetics_Runtime_Version_Update.md)

# Versi runtime menggunakan Java
<a name="CloudWatch_Synthetics_Library_Java"></a>

Bagian berikut berisi informasi tentang versi runtime CloudWatch Synthetics untuk Java. Runtime ini tidak menyertakan browser atau kerangka kerja apa pun.

Konvensi penamaan untuk versi runtime ini adalah `syn-language -majorversion.minorversion`. 

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

**Dependensi besar**:
+ AWS Lambda runtime Java 21

 **Fitur** 
+ *CloudWatch Integrasi log* - Anda dapat melakukan kueri dan memfilter log melalui konsol CloudWatch Synthetics. Setiap pesan log berisi unik` canaryRunId`, sehingga mudah untuk mencari log untuk menjalankan kenari tertentu.
+ *Metrik* — Anda dapat memantau persentase dan durasi keberhasilan lari kenari melalui CloudWatch metrik. Anda juga dapat mengonfigurasi alarm untuk mengingatkan Anda saat kenari mendeteksi masalah.
+ *Artefak kenari* - Setiap kenari menjalankan mengunggah laporan terperinci yang sesuai dengan proses dan langkah-langkah dalam proses yang dapat diakses melalui Amazon S3.
+ *Support for traces* - Anda dapat memancarkan jejak untuk semua permintaan yang dibuat oleh kenari melalui X-Ray. Setiap lari kenari dikaitkan dengan satu Id jejak.

# Versi runtime menggunakan Node.js dan Playwright
<a name="CloudWatch_Synthetics_Library_nodejs_playwright"></a>

Bagian berikut berisi informasi tentang versi runtime CloudWatch Synthetics untuk Node.js dan Playwright. Playwright adalah pustaka otomatisasi sumber terbuka untuk pengujian browser. [Untuk informasi lebih lanjut tentang Penulis Naskah, lihat https://playwright.dev/](https://playwright.dev) 

Konvensi penamaan untuk versi runtime ini adalah `syn-language -framework-majorversion. minorversion`. 

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

**penting**  
Memulai Synthetics `syn-nodejs-playwright-5.1` dan yang lebih baru, runtime Synthetics menggunakan namespace baru. Silakan memigrasikan skrip canary untuk menggunakan namespace baru. Namespace lama akan ditinggalkan di rilis mendatang.  
@ amzn/synthetics-playwright → @aws/synthetics -penulis naskah

**Dependensi besar**:
+ AWS Lambda runtime Node.js 22.x
+ Penulis naskah versi 1.58.2
+ Playwright/uji versi 1.58.2
+ Chromium versi 145.0.7632.77
+ Firefox versi 146.0.1

 **Perubahan syn-nodejs-playwright -6.0** 
+ Patch keamanan terapan dan versi Playwright dan browser yang diperbarui. 

Untuk informasi selengkapnya, lihat berikut ini:
+  [Log perubahan penulis naskah](https://playwright.dev/docs/release-notes) 
+  [Referensi API penulis naskah](https://playwright.dev/docs/api/class-playwright) 

## Versi runtime sebelumnya untuk Node.js dan Playwright
<a name="Previousversions-nodejs-playwright"></a>

Versi runtime sebelumnya berikut untuk Node.js dan Playwright masih didukung. 

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

**Dependensi besar**:
+ AWS Lambda runtime Node.js 22.x
+ Penulis naskah versi 1.57.0
+ Playwright/test versi 1.57.0
+ Chromium versi 143.0.7499.169
+ Firefox versi 142.0.1

 **Perubahan syn-nodejs-playwright -5.1** 
+ Migrasi namespace runtime Synthetics. 
+ Definisi tipe tersedia di [npm Registry](https://www.npmjs.com/package/@aws/synthetics-playwright). Harap pastikan versi paket definisi tipe cocok dengan versi runtime kenari Anda.

Untuk informasi selengkapnya, lihat berikut ini:
+  [Log perubahan penulis naskah](https://playwright.dev/docs/release-notes) 
+  [Referensi API penulis naskah](https://playwright.dev/docs/api/class-playwright) 

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

**Dependensi besar**:
+ AWS Lambda runtime Node.js 22.x
+ Penulis naskah versi 1.57.0
+ Playwright/test versi 1.57.0
+ Chromium versi 143.0.7499.4
+ Firefox versi 142.0.1

 **Perubahan syn-nodejs-playwright -5.0** 
+ Patch keamanan terapan dan versi Playwright dan browser yang diperbarui. 

Untuk informasi selengkapnya, lihat berikut ini:
+  [Log perubahan penulis naskah](https://playwright.dev/docs/release-notes) 
+  [Referensi API penulis naskah](https://playwright.dev/docs/api/class-playwright) 

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

**Dependensi besar**:
+ AWS Lambda runtime Node.js 22.x
+ Penulis naskah versi 1.55.0
+ Playwright/uji versi 1.55.0
+ Chromium versi 140.0.7339.16
+ Firefox versi 141.0

 **Perubahan syn-nodejs-playwright -4.0** 
+ Patch keamanan terapan dan versi Playwright dan browser yang diperbarui. 

Untuk informasi selengkapnya, lihat berikut ini:
+  [Log perubahan penulis naskah](https://playwright.dev/docs/release-notes) 
+  [Referensi API penulis naskah](https://playwright.dev/docs/api/class-playwright) 

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

**Dependensi besar**:
+ AWS Lambda runtime Node.js 20.x
+ Penulis naskah versi 1.53.0
+ PlayWright/test versi 1.53.0
+ Chromium versi 138.0.7204.168

 **Perubahan syn-nodejs-playwright -3.0** 
+ Dukungan multi-browser - Anda sekarang dapat menjalankan kenari dalang nodejs Anda di Firefox atau Chrome
+ Support untuk pemantauan visual

Untuk informasi selengkapnya, lihat berikut ini:
+  [Log perubahan penulis naskah](https://playwright.dev/docs/release-notes) 
+  [Referensi API penulis naskah](https://playwright.dev/docs/api/class-playwright) 

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

**Dependensi besar**:
+ AWS Lambda runtime Node.js 20.x
+ Penulis naskah versi 1.49.1
+ Playwright/test versi 1.49.1
+ Chromium versi 131.0.6778.264

 **Perubahan syn-nodejs-playwright -2.0** 
+ Ketidakcocokan antara total durasi dan jumlah timing untuk permintaan yang diberikan dalam file HAR diperbaiki.
+ Mendukung dry run untuk kenari yang memungkinkan eksekusi adhoc atau melakukan pembaruan kenari yang aman.

Untuk informasi selengkapnya, lihat berikut ini:
+  [Log perubahan penulis naskah](https://playwright.dev/docs/release-notes) 
+  [Referensi API penulis naskah](https://playwright.dev/docs/api/class-playwright) 

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

**Dependensi besar**:
+ AWS Lambda runtime Node.js 20.x
+ Penulis naskah versi 1.44.1
+ Dramwright/uji versi 1.44.1
+ Chromium versi 126.0.6478.126

**Fitur-fitur**:
+ **PlayWright dukungan** - Anda dapat menulis skrip kenari dengan menggunakan kerangka kerja otomatisasi Playwright. Anda dapat membawa skrip Playwright yang ada untuk dijalankan sebagai kenari, dan meningkatkannya dengan kemampuan pemantauan. AWS 
+ **CloudWatch Integrasi log** - Anda dapat melakukan kueri dan memfilter log melalui konsol CloudWatch Synthetics. Setiap pesan log berisi unik`canaryRunId`, sehingga mudah untuk mencari log untuk menjalankan kenari tertentu. 
+ **Metrik dan artefak kenari** — Anda dapat memantau laju kelulusan lari kenari melalui CloudWatch metrik, dan mengonfigurasi alarm untuk mengingatkan Anda saat kenari mendeteksi masalah. 
+ **Tangkapan layar dan asosiasi langkah** - Anda dapat menangkap tangkapan layar menggunakan fungsionalitas Playwright asli untuk memvisualisasikan tahapan skrip kenari pada setiap proses. Tangkapan layar secara otomatis dikaitkan dengan langkah kenari, dan diunggah ke bucket Amazon S3. 
+ **Beberapa tab** - Anda dapat membuat kenari yang membuka beberapa tab browser, dan mengakses tangkapan layar dari setiap tab. Anda dapat membuat alur kerja pengguna multi-tab dan multi-langkah di Synthetics. 

# Versi runtime yang menggunakan Node.js dan Puppeteer
<a name="CloudWatch_Synthetics_Library_nodejs_puppeteer"></a>

Versi runtime pertama untuk Node.js dan Puppeteer bernama `syn-1.0`. Kemudian versi runtime selanjutnya memiliki konvensi penamaan `syn-language -majorversion.minorversion`. Dimulai dengan `syn-nodejs-puppeteer-3.0`, konvensi penamaannya adalah `syn- language-framework-majorversion .minorversion` 

Tambahan `-beta` akhiran menunjukkan bahwa versi runtime saat ini ada dalam rilis pratinjau beta.

Versi runtime dengan nomor versi utama yang sama kompatibel dengan versi sebelumnya. 

Kode Lambda di canary dikonfigurasi untuk memiliki memori maksimum 1 GB. Setiap proses waktu canary di luar setelah nilai waktu habis yang dikonfigurasi. Jika tidak ada nilai batas waktu yang ditentukan untuk kenari, CloudWatch pilih nilai batas waktu berdasarkan frekuensi kenari. Jika Anda mengonfigurasi nilai batas waktu, buatlah tidak lebih pendek dari 15 detik untuk memungkinkan Lambda cold start dan waktu yang diperlukan untuk mem-boot instrumentasi canary.

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

`syn-nodejs-puppeteer-15.0`adalah runtime Synthetics terbaru untuk Node.js dan Puppeteer. 

**penting**  
Memulai Synthetics `syn-nodejs-puppeteer-13.1` dan yang lebih baru, runtime Synthetics menggunakan namespace baru. Silakan memigrasikan skrip canary untuk menggunakan ruang nama baru. Ruang nama lama akan ditinggalkan di rilis mendatang.  
Synthetics → @aws /synthetics-puppeteer
SyntheticsLink → @aws /tautan-sintetis
SyntheticsLogger → @aws /synthetics-logger
SyntheticsLogHelper → @aws/synthetics-log-helper
BrokenLinkCheckerReport → @aws/synthetics-broken-link-checker-laporan

**penting**  
Synthetics runtime `syn-nodejs-puppeteer-11.0` dan versi yang lebih baru hanya mendukung penggantian konfigurasi tingkat langkah berikut:  
 `screenshotOnStepStart` 
 `screenshotOnStepSuccess` 
 `screenshotOnStepFailure` 
 `stepSuccessMetric` 
 `stepDurationMetric` 
 `continueOnStepFailure/continueOnHttpStepFailure` 
 `stepsReport` 

Untuk informasi selengkapnya, lihat berikut ini:
+  [Dalang Perubahan log](https://pptr.dev/CHANGELOG#24375-2026-02-19) 
+  [Referensi API dalang](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.37.5/docs/api/index.md) 

**Dependensi besar**:
+ Runtime Lambda Node.js 22.x
+ Puppeteer-core versi 24.37.5
+ Chromium versi 145.0.7632.77
+ Firefox versi 147.0.4

 **Perubahan syn-nodejs-puppeteer -15.0** 
+ Patch keamanan terapan dan versi Puppeteer dan browser yang diperbarui.
+ Memperbaiki bug continueOnHttp StepFailure yang tidak dihormati, menyebabkan kenari berjalan salah ditandai sebagai berhasil meskipun terjadi kegagalan langkah HTTP.

## Versi runtime sebelumnya untuk Node.js dan Puppeteer
<a name="Previousversions-nodejs-puppeteer"></a>

Versi runtime sebelumnya berikut untuk Node.js dan Puppeteer masih didukung. 

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

Untuk informasi selengkapnya, lihat berikut ini:
+  [Dalang Perubahan log](https://pptr.dev/CHANGELOG#24340-2025-12-19) 
+  [Referensi API dalang](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.34.0/docs/api/index.md) 

**Dependensi besar**:
+ Runtime Lambda Node.js 22.x
+ Puppeteer-core versi 24.34.0
+ Chromium versi 143.0.7499.169
+ Firefox versi 146.x

 **Perubahan syn-nodejs-puppeteer -14.0** 
+ Patch keamanan terapan dan versi Puppeteer dan browser yang diperbarui.

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

`syn-nodejs-puppeteer-13.1`adalah runtime Synthetics terbaru untuk Node.js dan Puppeteer. 

Untuk informasi selengkapnya, lihat berikut ini:
+  [Dalang Perubahan log](https://pptr.dev/CHANGELOG#24250-2025-10-15) 
+  [Referensi API dalang](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**Dependensi besar**:
+ Runtime Lambda Node.js 22.x
+ Puppeteer-core versi 24.25.0
+ Chromium versi 142.0.7444.175
+ Firefox versi 145.x

 **Perubahan syn-nodejs-puppeteer -13.1** 
+ Migrasi namespace runtime Synthetics.
+ Definisi jenis tersedia di npm Registry. Harap pastikan versi paket definisi tipe cocok dengan versi runtime kenari Anda.
  +  [@aws /sintetis-dalang](https://www.npmjs.com/package/@aws/synthetics-puppeteer) 
  +  [@aws /tautan-sintetis](https://www.npmjs.com/package/@aws/synthetics-link) 
  +  [@aws/synthetics-broken-link-checker-laporan](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>

Untuk informasi selengkapnya, lihat berikut ini:
+  [Dalang Perubahan log](https://pptr.dev/CHANGELOG#24250-2025-10-15) 
+  [Referensi API dalang](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**Dependensi besar**:
+ Runtime Lambda Node.js 22.x
+ Puppeteer-core versi 24.25.0
+ Chromium versi 142.0.7444.175
+ Firefox versi 145.x

 **Perubahan syn-nodejs-puppeteer -13.0** 
+ Patch keamanan terapan dan versi Puppeteer dan browser yang diperbarui.
+ Perbaikan bug - Memperbaiki masalah kerusakan ekstensi runtime intermiten yang disebabkan oleh akses peta bersamaan

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

Untuk informasi selengkapnya, lihat berikut ini:
+  [Dalang Perubahan log](https://pptr.dev/CHANGELOG#24221-2025-09-23) 
+  [Referensi API dalang](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.22.1/docs/api/index.md) 

**Dependensi besar**:
+ Runtime Lambda Node.js 22.x
+ Versi Puppeteer-core 24.22.1
+ Versi Chromium 140.0.7339.185
+ Firefox versi 143.0.1

 **Perubahan syn-nodejs-puppeteer -12,0** 
+ Patch keamanan terapan dan versi Puppeteer dan browser yang diperbarui.
+ Perbaikan bug untuk redaksi header Terbatas - Memperbaiki masalah di mana dalam beberapa situasi header terbatas tidak disunting di executeHttpStep (). Perilaku sekarang konsisten dengan Dalang 10.0.
+ Perbaikan bug untuk includeResponseBody konfigurasi - Memperbaiki masalah di mana pembuatan file HAR dapat salah menerapkan pengaturan includeResponseBody konfigurasi dalam situasi tertentu. HAR sekarang memastikan badan respons dikecualikan saat pengaturan dikonfigurasi.
+ Siklus hidup pengambilan permintaan diperbaiki - Memperbaiki masalah di mana dalam beberapa situasi penangkap permintaan HTTP dapat menyebabkan agregasi permintaan yang berkelanjutan. Perekaman sekarang berakhir dengan benar setelah setiap langkah eksekusi.

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

Untuk informasi selengkapnya, lihat berikut ini:
+  [Dalang Perubahan log](https://pptr.dev/CHANGELOG) 
+  [Referensi API dalang](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**Dependensi besar**:
+ Runtime Lambda Node.js 20.x
+ Puppeteer-core versi 24.15.0
+ Chromium versi 138.0.7204.168

 **Perubahan syn-nodejs-puppeteer -11.0** 
+ Dukungan multi-browser - Anda sekarang dapat menjalankan Node.js Puppeteer canaries baik di Firefox atau Chrome
+ Kemasan yang disederhanakan - Package scripts langsung di bawah root tanpa menggunakan struktur direktori Node.js/node\$1modules
+ Integrasi tangkapan layar - Tangkap tangkapan layar menggunakan fungsi Dalang asli untuk memvisualisasikan tahapan skrip kenari. Synthetics secara otomatis mengaitkan tangkapan layar dengan langkah-langkah kenari dan mengunggahnya ke Amazon S3
+ Kueri log yang disempurnakan — Kueri dan filter log melalui konsol CloudWatch Wawasan. Setiap pesan log menyertakan unik `canaryRunId` untuk pencarian yang lebih mudah
+ Dukungan file konfigurasi - Tentukan dan perbarui pengaturan Synthetics menggunakan file synthetics.json. Pemisahan konfigurasi dari logika skrip ini meningkatkan pemeliharaan dan penggunaan kembali
+ Dukungan beberapa tab - Buat kenari yang membuka beberapa tab browser dan mengakses tangkapan layar dari setiap tab. Buat alur kerja pengguna multi-tab dan multi-langkah di Synthetics
+ Perbaikan keamanan
+ Perbaikan bug pemantauan visual
+ Menambahkan dukungan untuk logging JSON terstruktur dengan tingkat log yang dapat dikonfigurasi - Log sekarang dipancarkan dalam format JSON untuk memungkinkan penguraian dan kueri yang lebih mudah. CloudWatch Level log dapat dikonfigurasi (misalnya, DEBUG, INFO, TRACE) melalui variabel lingkungan yang memungkinkan pengguna untuk mengontrol verbositas berdasarkan kebutuhan mereka
+ Support untuk sintaks ES

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

Untuk informasi selengkapnya, lihat berikut ini:
+  [Dalang Perubahan log](https://pptr.dev/CHANGELOG) 
+  [Referensi API dalang](https://github.com/puppeteer/puppeteer/blob/puppeteer-v24.2.0/docs/api/index.md) 

**Dependensi besar**:
+ Runtime Lambda Node.js 20.x
+ Puppeteer-core versi 24.2.0
+ Chromium versi 131.0.6778.264

 **Perubahan syn-nodejs-puppeteer -10.0** 
+ Bug yang terkait dengan penutupan browser yang memakan waktu terlalu lama telah diperbaiki.
+ Mendukung dry run untuk kenari yang memungkinkan eksekusi adhoc atau melakukan pembaruan kenari yang aman.

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

**Dependensi besar**:
+ Runtime Lambda Node.js 20.x
+ Puppeteer-core versi 22.12.1
+ Chromium versi 126.0.6478.126

**Perubahan syn-nodejs-puppeteer -9.1** - Perbaikan bug yang terkait dengan rentang tanggal dan permintaan tertunda dalam file HAR diperbaiki.

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

**Dependensi besar**:
+ Runtime Lambda Node.js 20.x
+ Puppeteer-core versi 22.12.1
+ Chromium versi 126.0.6478.126

**Perubahan syn-nodejs-puppeteer -9.0** - Perbaikan bug untuk mengaktifkan kemampuan pemantauan visual diperbaiki.

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

**Awas**  
Karena bug, `syn-nodejs-puppeteer-8.0` runtime tidak mendukung pemantauan visual di kenari. Tingkatkan ke [syn-nodejs-puppeteer-9.0](#CloudWatch_Synthetics_runtimeversion-nodejs-puppeteer-9.0) perbaikan bug untuk pemantauan visual.

**penting**  
Lambda Node.js 18 dan runtime yang lebih baru menggunakan AWS SDK untuk V3. JavaScript Jika Anda perlu memigrasikan kenari dari runtime sebelumnya, ikuti Lokakarya [Migrasi aws-sdk-js-v 3](https://github.com/aws-samples/aws-sdk-js-v3-workshop) di. GitHub Untuk informasi selengkapnya tentang AWS SDK untuk JavaScript versi 3, lihat [posting blog ini](https://aws.amazon.com/blogs/developer/modular-aws-sdk-for-javascript-is-now-generally-available/).

**Dependensi besar**:
+ Runtime Lambda Node.js 20.x
+ Puppeteer-core versi 22.10.0
+ Chromium versi 125.0.6422.112

**Pembaruan di syn-nodejs-puppeteer -8.0**:
+  **Support untuk otentikasi dua faktor** 
+ **Perbaikan bug yang** terkait dengan beberapa klien layanan yang kehilangan data dalam respons Node.js SDK V3 diperbaiki.

## Versi runtime usang untuk Node.js dan Puppeteer
<a name="CloudWatch_Synthetics_nodejs-puppeteer-Deprecated"></a>

Runtime berikut untuk Node.js dan Puppeteer telah usang. Untuk informasi tentang tanggal penghentian runtime, lihat. [CloudWatch Tanggal penghentian runtime 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>

**Dependensi besar**:
+ Runtime Lambda Node.js 18.x
+ Puppeteer-core versi 21.9.0
+ Chromium versi 121.0.6167.139

**Ukuran kode**:

Ukuran kode dan dependensi yang dapat Anda paket ke dalam runtime ini adalah 80 MB.

**Pembaruan di syn-nodejs-puppeteer -7.0**:
+ **Versi terbaru dari pustaka yang dibundel di Puppeteer dan Chromium** - Dependensi Dalang dan Chromium diperbarui ke versi baru.
**penting**  
Pindah dari Puppeteer 19.7.0 ke Puppeteer 21.9.0 memperkenalkan perubahan yang melanggar terkait pengujian dan filter. [Untuk informasi lebih lanjut, lihat bagian **BREAKING CHANGES di**[dalang: v20.0.0 dan dalang inti: v21.0.0](https://github.com/puppeteer/puppeteer/releases/tag/puppeteer-v20.0.0).](https://github.com/puppeteer/puppeteer/releases/tag/puppeteer-core-v21.0.0)

 **Direkomendasikan upgrade ke AWS SDK v3** 

Runtime Lambda nodejs18.x tidak mendukung SDK v2. AWS Kami sangat menyarankan Anda bermigrasi ke AWS SDK v3.

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

**Dependensi besar**:
+ Runtime Lambda Node.js 18.x
+ Puppeteer-core versi 19.7.0
+ Chromium versi 111.0.5563.146

**Perubahan syn-nodejs-puppeteer -6.2**:
+  **Versi terbaru dari pustaka yang dibundel di Chromium** 
+ **Pemantauan penyimpanan singkat** - Runtime ini menambahkan pemantauan penyimpanan sementara di akun pelanggan.
+  **Perbaikan bug** 

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

**Dependensi besar**:
+ Runtime Lambda Node.js 18.x
+ Puppeteer-core versi 19.7.0
+ Chromium versi 111.0.5563.146

**Pembaruan di syn-nodejs-puppeteer -6.1**:
+ **Peningkatan stabilitas**— Penambahan logika coba ulang otomatis untuk menangani kesalahan peluncuran Puppeteer intermiten.
+ **Peningkatan Dependensi**— Peningkatan untuk beberapa paket dependensi pihak ketiga.
+ **Canary tanpa izin Amazon S3**— Perbaikan bug, sehingga canary yang tidak memiliki izin Amazon S3 masih dapat berjalan. Canary yang tidak memiliki izin Amazon S3 ini tidak akan dapat mengunggah tangkapan layar atau artefak lainnya ke Amazon S3. Untuk informasi selengkapnya tentang izin-izin untuk canary, silakan lihat [Peran dan izin yang diperlukan untuk canary](CloudWatch_Synthetics_Canaries_CanaryPermissions.md).

**penting**  
PENTING: Dependensi AWS SDK untuk JavaScript v2 yang disertakan akan dihapus dan diperbarui untuk menggunakan AWS SDK untuk JavaScript v3 dalam rilis runtime mendatang. Ketika itu terjadi, Anda dapat memperbarui referensi kode canary Anda. Atau, Anda dapat melanjutkan referensi dan menggunakan AWS SDK yang disertakan untuk ketergantungan JavaScript v2 dengan menambahkannya sebagai dependensi ke file zip kode sumber Anda.

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

**Dependensi besar**:
+ Runtime Lambda Node.js 18.x
+ Puppeteer-core versi 19.7.0
+ Chromium versi 111.0.5563.146

**Pembaruan di syn-nodejs-puppeteer -6.0**:
+ **Peningkatan dependensi** — Dependensi Node.js ditingkatkan ke 18.x.
+ **Dukungan mode intercept** — Dukungan mode intercept kooperatif Puppeteer ditambahkan ke pustaka runtime canary Synthetics.
+ **Melacak perubahan perilaku** — Mengubah perilaku pelacakan default untuk melacak hanya permintaan fetch dan xhr, dan tidak melacak permintaan sumber daya. Anda dapat mengaktifkan pelacakan permintaan sumber daya dengan mengonfigurasi opsi `traceResourceRequests`.
+ **Metrik durasi disempurnakan** — ` Duration` Metrik sekarang mengecualikan waktu operasi yang digunakan kenari untuk mengunggah artefak, mengambil tangkapan layar, dan menghasilkan metrik. CloudWatch `Duration`nilai metrik dilaporkan CloudWatch, dan Anda juga dapat melihatnya di konsol Synthetics.
+ **Perbaikan bug**— Bersihkan dump inti yang dihasilkan saat Chromium crash saat canary dijalankan.

**penting**  
PENTING: Dependensi AWS SDK untuk JavaScript v2 yang disertakan akan dihapus dan diperbarui untuk menggunakan AWS SDK untuk JavaScript v3 dalam rilis runtime mendatang. Ketika itu terjadi, Anda dapat memperbarui referensi kode canary Anda. Atau, Anda dapat melanjutkan referensi dan menggunakan AWS SDK yang disertakan untuk ketergantungan JavaScript v2 dengan menambahkannya sebagai dependensi ke file zip kode sumber Anda.

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

**Dependensi besar**:
+ Runtime Lambda Node.js 16.x
+ Puppeteer-core versi 19.7.0
+ Chromium versi 111.0.5563.146

**Pembaruan di syn-nodejs-puppeteer -5.2**:
+  **Versi terbaru dari pustaka yang dibundel di Chromium** 
+  **Perbaikan bug** 

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

**Dependensi besar**:
+ Runtime Lambda Node.js 16.x
+ Puppeteer-core versi 19.7.0
+ Chromium versi 111.0.5563.146

**Perbaikan bug di syn-nodejs-puppeteer -5.1**:
+ **Perbaikan bug**— Runtime ini memperbaiki bug di ` syn-nodejs-puppeteer-5.0` di mana file HAR yang dibuat oleh bcanarytidak memiliki header permintaan.

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

**Dependensi besar**:
+ Runtime Lambda Node.js 16.x
+ Puppeteer-core versi 19.7.0
+ Chromium versi 111.0.5563.146

**Pembaruan di syn-nodejs-puppeteer -5.0**:
+ **Peningkatan dependensi** — Versi Puppeteer-core diperbarui ke 19.7.0. Versi Chromium ditingkatkan ke 111.0.5563.146.

**penting**  
Versi Puppeteer-Core yang baru tidak sepenuhnya kompatibel dengan versi Puppeteer sebelumnya. Beberapa perubahan dalam versi ini dapat menyebabkan canary yang ada yang menggunakan fungsi Puppeteer yang tidak digunakan lagi gagal. Untuk informasi selengkapnya, silakan lihat perubahan yang melanggar log perubahan untuk Puppeteer-core versi 19.7.0 hingga 6.0, di [log perubahan 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>

**Dependensi besar**:
+ Runtime Lambda Node.js 16.x
+ Puppeteer-core versi 5.5.0
+ Chromium versi 92.0.4512

**Pembaruan di syn-nodejs-puppeteer -4.0**:
+ **Peningkatan Dependensi**— Dependensi Node.js diperbarui ke 16.x.

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

**penting**  
Versi runtime ini tidak digunakan lagi pada 8 Januari 2024. Untuk informasi selengkapnya, lihat [Kebijakan dukungan versi runtime](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependensi besar**:
+ Runtime Lambda Node.js 14.x
+ Puppeteer-core versi 5.5.0
+ Chromium versi 92.0.4512

**Pembaruan di syn-nodejs-puppeteer -3.9**:
+ **Peningkatan Dependensi**— Meningkatkan beberapa paket Dependensi pihak ketiga.

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

**penting**  
Versi runtime ini tidak digunakan lagi pada 8 Januari 2024. Untuk informasi selengkapnya, lihat [Kebijakan dukungan versi runtime](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependensi besar**:
+ Runtime Lambda Node.js 14.x
+ Puppeteer-core versi 5.5.0
+ Chromium versi 92.0.4512

**Pembaruan di syn-nodejs-puppeteer -3.8**:
+ **Pembersihan profil**— Profil Chromium sekarang dibersihkan setelah setiap canary dijalankan.

**Perbaikan bug di syn-nodejs-puppeteer -3.8**:
+ **Perbaikan bug**— Sebelumnya, canary pemantauan visual terkadang berhenti bekerja dengan benar setelah dijalankan tanpa tangkapan layar. Ini sekarang sudah diperbaiki.

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

**penting**  
Versi runtime ini tidak digunakan lagi pada 8 Januari 2024. Untuk informasi selengkapnya, lihat [Kebijakan dukungan versi runtime](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependensi besar**:
+ Runtime Lambda Node.js 14.x
+ Puppeteer-core versi 5.5.0
+ Chromium versi 92.0.4512

**Pembaruan di syn-nodejs-puppeteer -3.7**:
+ **Peningkatan pencatatan** — Canary akan mengunggah log ke Amazon S3 meskipun waktu habis atau macet.
+ **Ukuran lapisan Lambda berkurang**— Ukuran lapisan Lambda yang digunakan untuk canary berkurang sebesar 34%.

**Perbaikan bug di syn-nodejs-puppeteer -3.7**:
+ **Perbaikan bug** — Font Jepang, Mandarin Sederhana, dan Mandarin Tradisional akan di-render dengan benar.

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

**penting**  
Versi runtime ini tidak digunakan lagi pada 8 Januari 2024. Untuk informasi selengkapnya, lihat [Kebijakan dukungan versi runtime](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependensi besar**:
+ Runtime Lambda Node.js 14.x
+ Puppeteer-core versi 5.5.0
+ Chromium versi 92.0.4512

**Pembaruan di syn-nodejs-puppeteer -3.6**:
+ **Stempel waktu yang lebih presisi**— Waktu mulai dan waktu berhenti canary sekarang presisi hingga milidetik.

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

**penting**  
Versi runtime ini tidak digunakan lagi pada 8 Januari 2024. Untuk informasi selengkapnya, lihat [Kebijakan dukungan versi runtime](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependensi besar**:
+ Runtime Lambda Node.js 14.x
+ Puppeteer-core versi 5.5.0
+ Chromium versi 92.0.4512

**Pembaruan di syn-nodejs-puppeteer -3.5**:
+ **Dependensi yang diperbarui**— Satu-satunya fitur baru dalam runtime ini adalah dependensi yang diperbarui.

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

**penting**  
Versi runtime ini telah diusangkan pada 13 November 2022. Untuk informasi selengkapnya, lihat [Kebijakan dukungan versi runtime](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependensi besar**:
+ Runtime Lambda Node.js 12.x
+ Puppeteer-core versi 5.5.0
+ Chromium versi 88.0.4298.0

**Pembaruan di syn-nodejs-puppeteer -3.4**:
+ **Fungsi handler kustom**— Anda sekarang dapat menggunakan fungsi handler kustom untuk skrip canary Anda. Runtime sebelumnya mengharuskan titik masuk skrip untuk menyertakan `.handler`. 

  Anda juga dapat menempatkan skrip canary di folder apa pun dan meneruskan nama folder sebagai bagian dari handler. Misalnya, `MyFolder/MyScriptFile.functionname` dapat digunakan sebagai titik masuk.
+ **Informasi file HAR yang diperluas**— Anda sekarang dapat melihat permintaan yang buruk, tertunda, dan tidak lengkap dalam file HAR yang dihasilkan oleh canary.

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

**penting**  
Versi runtime ini telah diusangkan pada 13 November 2022. Untuk informasi selengkapnya, lihat [Kebijakan dukungan versi runtime](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependensi besar**:
+ Runtime Lambda Node.js 12.x
+ Puppeteer-core versi 5.5.0
+ Chromium versi 88.0.4298.0

**Pembaruan di syn-nodejs-puppeteer -3.3**:
+ **Opsi lainnya untuk enkripsi artefak** — Untuk kenari yang menggunakan runtime ini atau yang lebih baru, alih-alih menggunakan kunci AWS terkelola untuk mengenkripsi artefak yang disimpan kenari di Amazon S3, Anda dapat memilih untuk menggunakan kunci yang dikelola pelanggan atau kunci AWS KMS yang dikelola Amazon S3. Untuk informasi selengkapnya, lihat [Mengenkripsi artefak canary](CloudWatch_Synthetics_artifact_encryption.md). 

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

**penting**  
Versi runtime ini telah diusangkan pada 13 November 2022. Untuk informasi selengkapnya, lihat [Kebijakan dukungan versi runtime](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependensi besar**:
+ Runtime Lambda Node.js 12.x
+ Puppeteer-core versi 5.5.0
+ Chromium versi 88.0.4298.0

**Pembaruan di syn-nodejs-puppeteer -3.2**:
+ **pemantauan visual dengan tangkapan layar**— Canary yang menggunakan runtime ini atau yang lebih baru dapat membandingkan tangkapan layar yang diambil saat dijalankan dengan versi dasar dari tangkapan layar yang sama. Jika tangkapan layar lebih berbeda dari ambang persentase yang ditentukan, canary gagal. Untuk informasi selengkapnya, silakan lihat [Pemantauan visual](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsLogger_VisualTesting) atau [Cetak biru pemantauan visual](CloudWatch_Synthetics_Canaries_Blueprints.md#CloudWatch_Synthetics_Canaries_Blueprints_VisualTesting). 
+ **Fungsi baru terkait data sensitif** Anda dapat mencegah data sensitif muncul di log dan laporan canary. Untuk informasi selengkapnya, lihat [SyntheticsLogHelper kelas](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsLogHelper).
+ **Fungsi usang** Kelas ` RequestResponseLogHelper` ini tidak digunakan lagi demi opsi konfigurasi baru lainnya. Untuk informasi selengkapnya, lihat [RequestResponseLogHelper kelas](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>

**penting**  
Versi runtime ini telah diusangkan pada 13 November 2022. Untuk informasi selengkapnya, lihat [Kebijakan dukungan versi runtime](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependensi besar**:
+ Runtime Lambda Node.js 12.x
+ Puppeteer-core versi 5.5.0
+ Chromium versi 88.0.4298.0

**Pembaruan di syn-nodejs-puppeteer -3.1**:
+ **Kemampuan untuk mengonfigurasi CloudWatch metrik** — Dengan runtime ini, Anda dapat menonaktifkan metrik yang tidak Anda perlukan. Jika tidak, kenari menerbitkan berbagai CloudWatch metrik untuk setiap lari kenari.
+ **Penautan tangkapan layar**— Anda dapat menautkan tangkapan layar ke langkah canary setelah langkah tersebut selesai. Untuk melakukan hal itu, Anda mengambil tangkapan layar dengan menggunakan metode **takeScreenshot**, menggunakan nama langkah yang ingin Anda kaitkan dengan tangkapan layar. Misalnya, Anda mungkin ingin melakukan langkah, menambahkan waktu tunggu, dan kemudian mengambil tangkapan layar.
+ Cetak **biru monitor detak jantung dapat memantau beberapa URLs** — Anda dapat menggunakan cetak biru pemantauan detak jantung di CloudWatch konsol untuk memantau beberapa URLs dan melihat status, durasi, tangkapan layar terkait, dan alasan kegagalan untuk setiap URL dalam ringkasan langkah laporan kenari.

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

**penting**  
Versi runtime ini telah diusangkan pada 13 November 2022. Untuk informasi selengkapnya, lihat [Kebijakan dukungan versi runtime](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependensi besar**:
+ Runtime Lambda Node.js 12.x
+ Puppeteer-core versi 5.5.0
+ Chromium versi 88.0.4298.0

**Pembaruan di syn-nodejs-puppeteer -3.0**:
+ **Dependensi yang ditingkatkan**— Versi ini menggunakan Puppeteer versi 5.5.0, Node.js 12.x, dan Chromium 88.0.4298.0.
+ **Akses bucket lintas Wilayah**— Anda sekarang dapat menentukan sebuah bucket S3 di Wilayah lain sebagai bucket di mana canary Anda menyimpan file log, tangkapan layar, dan file HAR.
+ **Fungsi baru yang tersedia**— Versi ini menambahkan fungsi pustaka untuk mengambil nama canary dan versi runtime Synthetics.

  Untuk informasi selengkapnya, lihat [Kelas 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>

Bagian ini berisi informasi tentang versi runtime `syn-nodejs-2.2`.

**penting**  
Versi runtime ini telah diusangkan pada 28 Mei 2021. Untuk informasi selengkapnya, lihat [Kebijakan dukungan versi runtime](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependensi besar**:
+ Runtime Lambda Node.js 10.x
+ Puppeteer-core versi 3.3.0
+ Chromium versi 83.0.4103.0

**Perubahan syn-nodejs-2.2**:
+ **Pantau kenari Anda sebagai langkah HTTP** - Sekarang Anda dapat menguji beberapa APIs dalam satu kenari. Setiap API diuji sebagai langkah HTTP terpisah, dan CloudWatch Synthetics memantau status setiap langkah menggunakan metrik langkah dan laporan langkah Synthetics CloudWatch . CloudWatch Synthetics membuat ` SuccessPercent` dan `Duration` metrik untuk setiap langkah HTTP.

  Fungsionalitas ini diimplementasikan oleh fungsi **executeHttpStep(stepName, requestOptions, callback,** stepConfig). Untuk informasi selengkapnya, lihat [executeHttpStep(StepName, requestOptions, [callback], [stepConfig])](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_executeHttpStep).

  Cetak biru canary API diperbarui untuk menggunakan fitur baru ini.
+ **Pelaporan permintaan HTTP** — Anda sekarang dapat melihat laporan permintaan HTTP terperinci yang menangkap detail seperti request/response header, badan respons, kode status, waktu kesalahan dan kinerja, waktu koneksi TCP, waktu jabat tangan TLS, waktu byte pertama, dan waktu transfer konten. Semua permintaan HTTP yang menggunakan HTTP/HTTPS modul di bawah tenda ditangkap di sini. Header dan bodi respons tidak ditangkap secara default tetapi dapat diaktifkan dengan mengatur opsi konfigurasi.
+ **Konfigurasi tingkat global dan langkah** - Anda dapat mengatur konfigurasi CloudWatch Synthetics di tingkat global, yang diterapkan ke semua langkah kenari. Anda juga dapat mengganti konfigurasi ini pada tingkat langkah dengan meneruskan key/value pasangan konfigurasi untuk mengaktifkan atau menonaktifkan opsi tertentu.

  Untuk informasi selengkapnya, lihat [SyntheticsConfiguration kelas](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsConfiguration).
+ **Lanjutkan pada konfigurasi kegagalan langkah**— Anda dapat memilih untuk melanjutkan eksekusi canary ketika langkah gagal. Untuk fungsi ` executeHttpStep`, ini diaktifkan secara default. Anda dapat mengatur opsi ini sekali di tingkat global atau mengaturnya berbeda-beda per-langkah. 

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

**penting**  
Versi runtime ini telah diusangkan pada 28 Mei 2021. Untuk informasi selengkapnya, lihat [Kebijakan dukungan versi runtime](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependensi besar**:
+ Runtime Lambda Node.js 10.x
+ Puppeteer-core versi 3.3.0
+ Chromium versi 83.0.4103.0

**Pembaruan di syn-nodejs-2.1**:
+ **Perilaku tangkapan layar yang dapat dikonfigurasi**— Menyediakan kemampuan untuk mematikan tangkapan layar oleh canary UI. Dalam canary yang menggunakan versi runtime sebelumnya, canary UI selalu menangkap tangkapan layar sebelum dan setelah setiap langkah. Dengan `syn-nodejs-2.1`, ini dapat dikonfigurasi. Mematikan tangkapan layar dapat mengurangi biaya penyimpanan Amazon S3, dan dapat membantu Anda mematuhi peraturan HIPAA. Untuk informasi selengkapnya, lihat [SyntheticsConfiguration kelas](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_SyntheticsConfiguration).
+ **Kustomisasi parameter peluncuran Google Chrome** Sekarang, Anda dapat mengonfigurasi argumen yang digunakan ketika canary meluncurkan jendela browser Google Chrome. Untuk informasi selengkapnya, lihat [launch(options)](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_LaunchOptions).

Mungkin ada peningkatan kecil durasi canary ketika menggunakan syn-nodejs-2.0 atau lebih baru, dibandingkan dengan versi sebelumnya dari runtime canary.

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

**penting**  
Versi runtime ini telah diusangkan pada 28 Mei 2021. Untuk informasi selengkapnya, lihat [Kebijakan dukungan versi runtime](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependensi besar**:
+ Runtime Lambda Node.js 10.x
+ Puppeteer-core versi 3.3.0
+ Chromium versi 83.0.4103.0

**Pembaruan di syn-nodejs-2.0**:
+ **Dependensi yang ditingkatkan**— Versi runtime ini menggunakan versi inti Puppeteer 3.3.0 dan versi Chromium 83.0.4103.0
+ **Dukungan untuk penelusuran aktif X-Ray.** Ketika kenari mengaktifkan penelusuran, jejak X-Ray dikirim untuk semua panggilan yang dilakukan oleh kenari yang menggunakan browser, AWS SDK, atau modul HTTP atau HTTPS. Canary dengan pelacakan yang diaktifkan muncul di X-Ray Trace Map, meskipun tidak mengirim permintaan ke layanan atau aplikasi lain yang mengaktifkan pelacakan. Untuk informasi selengkapnya, lihat [Penelusuran Canary dan X-Ray](CloudWatch_Synthetics_Canaries_tracing.md).
+ **Pelaporan Synthetics** — Untuk setiap kenari yang dijalankan, CloudWatch Synthetics membuat laporan bernama ` SyntheticsReport-PASSED.json` atau ` SyntheticsReport-FAILED.json` yang mencatat data seperti waktu mulai, waktu akhir, status, dan kegagalan. Ini juga mencatat PASSED/FAILED status setiap langkah skrip kenari, dan kegagalan serta tangkapan layar yang diambil untuk setiap langkah.
+ **Laporan pemeriksa tautan terputus**— Versi baru dari pemeriksa tautan yang rusak yang disertakan dalam runtime membuat laporan yang menyertakan tautan yang diperiksa, kode status, alasan kegagalan (jika ada), dan tangkapan layar halaman sumber dan tujuan.
+ ** CloudWatch Metrik baru** — Synthetics menerbitkan metrik `2xx` bernama`4xx`,,`5xx`, `RequestFailed` dan di namespace. `CloudWatchSynthetics` Metrik ini menunjukkan jumlah 200 detik, 400 detik, 500 detik, dan meminta kegagalan dalam operasi canary. Dengan versi runtime ini, metrik ini dilaporkan hanya untuk canary UI, dan tidak dilaporkan untuk canary API. Metrik juga dilaporkan untuk API canary yang dimulai dengan versi runtime ` syn-nodejs-puppeteeer-2.2`.
+ **File HAR yang dapat disortir**— Sekarang Anda dapat menyortir file HAR Anda berdasarkan kode status, ukuran permintaan, dan durasi.
+ **Stempel waktu metrik** — CloudWatch metrik sekarang dilaporkan berdasarkan waktu pemanggilan Lambda, bukan waktu akhir kenari.

**Perbaikan bug pada syn-nodejs-2.0**:
+ Memperbaiki masalah kesalahan pengunggahan artefak canary tidak dilaporkan. Kesalahan tersebut sekarang muncul sebagai kesalahan eksekusi.
+ Memperbaiki masalah permintaan pengalihan (3xx) yang salah dicatat sebagai kesalahan.
+ Memperbaiki masalah tangkapan layar yang sedang diberi nomor mulai dari 0. Mereka sekarang harus dimulai dengan 1.
+ Memperbaiki masalah tangkapan layar yang berantakan untuk huruf Mandarin dan Jepang.

Mungkin ada peningkatan kecil durasi canary ketika menggunakan syn-nodejs-2.0 atau lebih baru, dibandingkan dengan versi sebelumnya dari runtime canary.

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

**penting**  
Versi runtime ini telah diusangkan pada 8 Februari 2021. Untuk informasi selengkapnya, lihat [Kebijakan dukungan versi runtime](CloudWatch_Synthetics_Runtime_Support_Policy.md).

**Dependensi besar**:
+ Runtime Lambda Node.js 10.x
+ Puppeteer-core versi 3.3.0
+ Chromium versi 83.0.4103.0

**Perubahan syn-nodejs-2.0-beta**:
+ **Dependensi yang ditingkatkan**— Versi runtime ini menggunakan versi inti Puppeteer 3.3.0 dan versi Chromium 83.0.4103.0
+ **Pelaporan Synthetics** — Untuk setiap kenari yang dijalankan, CloudWatch Synthetics membuat laporan bernama ` SyntheticsReport-PASSED.json` atau ` SyntheticsReport-FAILED.json` yang mencatat data seperti waktu mulai, waktu akhir, status, dan kegagalan. Ini juga mencatat PASSED/FAILED status setiap langkah skrip kenari, dan kegagalan serta tangkapan layar yang diambil untuk setiap langkah.
+ **Laporan pemeriksa tautan terputus**— Versi baru dari pemeriksa tautan yang rusak yang disertakan dalam runtime membuat laporan yang menyertakan tautan yang diperiksa, kode status, alasan kegagalan (jika ada), dan tangkapan layar halaman sumber dan tujuan.
+ ** CloudWatch Metrik baru** — Synthetics menerbitkan metrik `2xx` bernama`4xx`,,`5xx`, `RequestFailed` dan di namespace. `CloudWatchSynthetics` Metrik ini menunjukkan jumlah 200 detik, 400 detik, 500 detik, dan meminta kegagalan dalam operasi canary. Metrik ini dilaporkan hanya untuk canary UI, dan tidak dilaporkan untuk canary API.
+ **File HAR yang dapat disortir**— Sekarang Anda dapat menyortir file HAR Anda berdasarkan kode status, ukuran permintaan, dan durasi.
+ **Stempel waktu metrik** — CloudWatch metrik sekarang dilaporkan berdasarkan waktu pemanggilan Lambda, bukan waktu akhir kenari.

**Perbaikan bug dalam syn-nodejs-2.0-beta**:
+ Memperbaiki masalah kesalahan pengunggahan artefak canary tidak dilaporkan. Kesalahan tersebut sekarang muncul sebagai kesalahan eksekusi.
+ Memperbaiki masalah permintaan pengalihan (3xx) yang salah dicatat sebagai kesalahan.
+ Memperbaiki masalah tangkapan layar yang sedang diberi nomor mulai dari 0. Mereka sekarang harus dimulai dengan 1.
+ Memperbaiki masalah tangkapan layar yang berantakan untuk huruf Mandarin dan Jepang.

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

Versi runtime Synthetic pertama adalah `syn-1.0`.

**Dependensi besar**:
+ Runtime Lambda Node.js 10.x
+ Puppeteer-core versi 1.14.0
+ Versi Chromium yang sesuai dengan Puppeteer-core 1.14.0

# Versi runtime yang menggunakan Python dan Selenium Webdriver
<a name="CloudWatch_Synthetics_Library_python_selenium"></a>

Bagian berikut berisi informasi tentang versi runtime CloudWatch Synthetics untuk Python dan Selenium Webdriver. Selenium adalah alat otomatisasi browser sumber terbuka. [Untuk informasi lebih lanjut tentang Selenium, lihat www.selenium.dev/](https://www.selenium.dev)

[Untuk fitur dan metode yang didukung oleh runtime Synthetics pada kerangka Selenium, lihat [kelas dan fungsi library Python dan Selenium yang hanya berlaku untuk kenari UI dan referensi](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library_Python.html#CloudWatch_Synthetics_Library_Python_UIcanaries) API Selenium.](https://www.selenium.dev/selenium/docs/api/py/api.html)

Konvensi penamaan untuk versi runtime ini adalah `syn-language -framework-majorversion. minorversion`.

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

Versi 10.0 adalah runtime CloudWatch Synthetics terbaru untuk Python dan Selenium.

**Dependensi besar**:
+ Python 3.11
+ Selenium 4.32.0
+ Chromium versi 145.0.7632.77

**Perubahan syn-python-selenium -10.0** 
+ Patch keamanan terapan dan versi browser yang diperbarui.

Untuk informasi selengkapnya, lihat berikut ini:
+  [Log Perubahan Selenium](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Dokumentasi selenium](https://www.selenium.dev/selenium/docs/api/py/api.html) 

## Versi runtime sebelumnya untuk Python dan Selenium
<a name="Previousversions-python-selenium"></a>

Versi runtime sebelumnya berikut untuk Python dan Selenium masih didukung. 

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

**Dependensi besar**:
+ Python 3.11
+ Selenium 4.32.0
+ Chromium versi 143.0.7499.169

**Perubahan syn-python-selenium -9.0** 
+ Patch keamanan terapan dan versi browser yang diperbarui.

Untuk informasi selengkapnya, lihat berikut ini:
+  [Log Perubahan Selenium](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Dokumentasi 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>

Versi 8.0 adalah runtime CloudWatch Synthetics terbaru untuk Python dan Selenium.

**Dependensi besar**:
+ Python 3.11
+ Selenium 4.32.0
+ Chromium versi 142.0.7444.175

**Perubahan syn-python-selenium -8.0** 
+ Patch keamanan terapan dan versi Selenium dan browser yang diperbarui.
+ Modifikasi tingkat log permintaan jaringan HAR yang gagal dari ERROR ke INFO.

Untuk informasi selengkapnya, lihat berikut ini:
+  [Log Perubahan Selenium](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Dokumentasi 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>

**Dependensi besar**:
+ Python 3.11
+ Selenium 4.32.0
+ Chromium versi 138.0.7204.168

 **Perubahan syn-python-selenium -7.0** 
+ Patch keamanan terapan dan versi Selenium dan browser yang diperbarui.

Untuk informasi selengkapnya, lihat berikut ini:
+  [Log Perubahan Selenium](https://www.selenium.dev/blog/2025/selenium-4-32-released) 
+  [Dokumentasi 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>

**Dependensi besar**:
+ Python 3.11
+ Selenium 4.21.0
+ Chromium versi 131.0.6778.264

 **Perubahan syn-python-selenium -6.0** 
+ Upgrade dari Python 3.9 ke Python 3.11.

Untuk informasi selengkapnya, lihat berikut ini:
+  [Log Perubahan Selenium](https://www.selenium.dev/blog/2024/selenium-4-21-released/) 
+  [Dokumentasi 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>

**Dependensi besar**:
+ Python 3.9
+ Selenium 4.21.0
+ Chromium versi 131.0.6778.264

 **Perubahan syn-python-selenium -5.1** 
+ Pembaruan kecil tentang emisi metrik.
+ Mendukung dry run untuk kenari yang memungkinkan eksekusi adhoc atau melakukan pembaruan kenari yang aman.

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

**Dependensi besar**:
+ Python 3.9
+ Selenium 4.21.0
+ Chromium versi 131.0.6778.264

**Perubahan syn-python-selenium -5.0**:
+ Coba lagi otomatis jika browser gagal diluncurkan.

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

**Dependensi besar**:
+ Python 3.9
+ Selenium 4.15.1
+ Chromium versi 126.0.6478.126

**Perubahan syn-python-selenium -4.1**:
+ **Mengatasi kerentanan keamanan** — Runtime ini memiliki pembaruan untuk mengatasi kerentanan [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>

**Dependensi besar**:
+ Python 3.9
+ Selenium 4.15.1
+ Chromium versi 126.0.6478.126

**Perubahan syn-python-selenium -4.0**:
+ **Perbaikan bug** untuk kesalahan dalam logging parser HAR.

## Versi runtime yang tidak digunakan lagi untuk Python dan Selenium
<a name="Deprecated-python-selenium"></a>

Versi runtime sebelumnya berikut untuk Python dan Selenium telah usang. Untuk informasi tentang tanggal penghentian runtime, lihat. [CloudWatch Tanggal penghentian runtime 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>

**Dependensi besar**:
+ Python 3.8
+ Selenium 4.15.1
+ Chromium versi 121.0.6167.139

**Perubahan syn-python-selenium -3.0**:
+ **Versi terbaru dari pustaka yang dibundel di Chromium** — Ketergantungan Chromium diperbarui ke versi baru.

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

**Dependensi besar**:
+ Python 3.8
+ Selenium 4.15.1
+ Chromium versi 111.0.5563.146

**Perubahan syn-python-selenium -2.1**:
+ **Versi terbaru dari pustaka yang dibundel di Chromium** - Dependensi Chromium dan Selenium diperbarui ke versi baru.

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

**Dependensi besar**:
+ Python 3.8
+ Selenium 4.10.0
+ Chromium versi 111.0.5563.146

**Perubahan syn-python-selenium -2.0**:
+ **Dependensi yang diperbarui**— Dependensi Chromium dan Selenium diperbarui ke versi baru.

**Perbaikan bug di syn-python-selenium -2.0**:
+ **Stempel waktu ditambahkan** — Sebuah stempel waktu telah ditambahkan ke log canary.
+ **Penggunaan kembali sesi** — Bug telah diperbaiki sehingga canary sekarang dicegah untuk menggunakan kembali sesi dari canary sebelumnya.

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

**Dependensi besar**:
+ Python 3.8
+ Selenium 3.141.0
+ Chromium versi 92.0.4512.0

**Perubahan syn-python-selenium -1.3**:
+ **Stempel waktu yang lebih presisi**— Waktu mulai dan waktu berhenti canary sekarang presisi hingga milidetik.

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

**Dependensi besar**:
+ Python 3.8
+ Selenium 3.141.0
+ Chromium versi 92.0.4512.0
+ **Dependensi yang diperbarui**— Satu-satunya fitur baru dalam runtime ini adalah dependensi yang diperbarui.

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

**Dependensi besar**:
+ Python 3.8
+ Selenium 3.141.0
+ Chromium versi 83.0.4103.0

**Fitur-fitur**:
+ **Fungsi handler kustom**— Anda sekarang dapat menggunakan fungsi handler kustom untuk skrip canary Anda. Runtime sebelumnya mengharuskan titik masuk skrip untuk menyertakan `.handler`. 

  Anda juga dapat menempatkan skrip canary di folder apa pun dan meneruskan nama folder sebagai bagian dari handler. Misalnya, `MyFolder/MyScriptFile.functionname` dapat digunakan sebagai titik masuk.
+ **Opsi konfigurasi untuk menambahkan metrik dan konfigurasi kegagalan langkah**— Opsi ini sudah tersedia di runtime untuk canary Node.js. Untuk informasi selengkapnya, lihat [SyntheticsConfiguration kelas](CloudWatch_Synthetics_Canaries_Library_Python.md#CloudWatch_Synthetics_Library_SyntheticsConfiguration_Python).
+ **Argumen kustom di Chrome** — Anda sekarang dapat membuka browser dalam mode penyamaran atau meneruskan konfigurasi server proxy. Untuk informasi selengkapnya, lihat [Chrome()](CloudWatch_Synthetics_Canaries_Library_Python.md#CloudWatch_Synthetics_Library_Python_Chrome).
+ **Bucket artefak Lintas Wilayah** — Sebuah canary dapat menyimpan artefaknya di bucket Amazon S3 di Wilayah yang berbeda.
+ **Perbaikan bug, termasuk perbaikan untuk masalah `index.py`** — Dengan runtime sebelumnya, file canary bernama ` index.py` menyebabkan pengecualian karena bertentangan dengan nama file pustaka. Masalah ini sekarang telah diperbaiki.

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

**Dependensi besar**:
+ Python 3.8
+ Selenium 3.141.0
+ Chromium versi 83.0.4103.0

**Fitur-fitur**:
+ **Dukungan selenium**— Anda dapat menulis skrip canary menggunakan kerangka kerja uji Selenium. Anda dapat membawa skrip Selenium Anda dari tempat lain ke CloudWatch Synthetics dengan sedikit perubahan, dan mereka akan bekerja dengan layanan. AWS 

# Versi runtime menggunakan Node.js
<a name="CloudWatch_Synthetics_Library_Nodejs"></a>

Bagian berikut berisi informasi tentang versi runtime CloudWatch Synthetics untuk Node.js. Runtime ini tidak menyertakan browser atau kerangka kerja apa pun.

Konvensi penamaan untuk versi runtime ini adalah `syn-language -majorversion.minorversion`.

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

**penting**  
Memulai Synthetics `syn-nodejs-3.1` dan yang lebih baru, runtime Synthetics menggunakan namespace baru. Silakan memigrasikan skrip canary untuk menggunakan namespace baru. Namespace lama akan ditinggalkan di rilis mendatang.  
@ amzn/synthetics-core → @aws/synthetics -inti

**Dependensi besar**:
+ AWS Lambda runtime Node.js 22.x

 **Perubahan syn-nodejs-4.1** 
+ Tingkatkan `fast-xml-parser` ke 5.5.7 untuk mengatasi hal berikut: CVEs
  + CVE-2026-25128
  + CVE-2026-25896
  + CVE-2026-26278
  + CVE-2026-27942
  + CVE-2026-33036

## Versi runtime sebelumnya untuk Node.js
<a name="Previousversions-nodejs"></a>

Versi runtime sebelumnya berikut untuk Node.js masih didukung. 

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

**Dependensi besar**:
+ AWS Lambda runtime Node.js 22.x

 **Perubahan syn-nodejs-4.0** 
+ Patch keamanan terapan. 

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

**penting**  
Memulai Synthetics `syn-nodejs-3.1` dan yang lebih baru, runtime Synthetics menggunakan namespace baru. Silakan memigrasikan skrip canary untuk menggunakan namespace baru. Namespace lama akan ditinggalkan di rilis mendatang.  
@ amzn/synthetics-core → @aws/synthetics -inti

**Dependensi besar**:
+ AWS Lambda runtime Node.js 20.x

 **Perubahan syn-nodejs-3.1** 
+ Migrasi namespace runtime Synthetics. 
+ Definisi tipe tersedia di [npm Registry](https://www.npmjs.com/package/@aws/synthetics-core). Harap pastikan versi paket definisi tipe cocok dengan versi runtime kenari Anda.

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

**Dependensi besar**:
+ AWS Lambda runtime Node.js 20.x

 **Perubahan syn-nodejs-3.0** 
+ Support untuk cetak biru multi cek. 

# Kebijakan dukungan versi runtime
<a name="CloudWatch_Synthetics_Runtime_Support_Policy"></a>

Versi runtime Synthetic bergantung pada pembaruan pemeliharaan dan keamanan. Ketika komponen mana pun dari sebuah versi runtime tidak lagi didukung, maka versi runtime Synthetics itu tidak lagi digunakan.

Anda tidak dapat membuat canary menggunakan versi runtime yang tidak lagi digunakan. Canary yang menggunakan runtime yang tidak lagi digunakan terus berjalan. Anda dapat menghentikan, memulai, dan menghapus canary ini. Anda dapat memperbarui canary yang sudah ada yang menggunakan versi runtime tercatat dengan memperbarui canary untuk menggunakan versi runtime yang didukung.

CloudWatch Synthetics memberi tahu Anda melalui email jika Anda memiliki kenari yang menggunakan runtime yang dijadwalkan tidak digunakan lagi dalam 60 hari ke depan. Kami merekomendasikan Anda memigrasi canary Anda ke versi runtime yang didukung untuk mendapatkan keuntungan dari peningkatan fungsionalitas, keamanan, dan peningkatan performa baru yang disertakan dalam rilis terbaru. 

## CloudWatch Tanggal penghentian runtime Synthetics
<a name="runtime_deprecation_dates"></a>

Tabel berikut mencantumkan tanggal penghentian setiap runtime Synthetics yang tidak digunakan lagi. CloudWatch 


| Versi Runtime | Tanggal pengusangan | 
| --- | --- | 
|   `syn-python-selenium-5.1`   |  Februari 3, 2026  | 
|   `syn-python-selenium-5.0`   |  Februari 3, 2026  | 
|   `syn-python-selenium-4.1`   |  Februari 3, 2026  | 
|   `syn-python-selenium-4.0`   |  Februari 3, 2026  | 
|   `syn-nodejs-puppeteer-7.0`   |  Januari 22, 2026  | 
|   `syn-nodejs-puppeteer-6.2`   |  Januari 22, 2026  | 
|   `syn-nodejs-puppeteer-5.2`   |  Januari 22, 2026  | 
|   `syn-python-selenium-3.0`   |  Januari 22, 2026  | 
|   `syn-python-selenium-2.1`   |  Januari 22, 2026  | 
|   `syn-nodejs-puppeteer-6.1`   |  8 Maret 2024  | 
|   `syn-nodejs-puppeteer-6.0`   |  8 Maret 2024  | 
|   `syn-nodejs-puppeteer-5.1`   |  8 Maret 2024  | 
|   `syn-nodejs-puppeteer-5.0`   |  8 Maret 2024  | 
|   `syn-nodejs-puppeteer-4.0`   |  8 Maret 2024  | 
|   `syn-nodejs-puppeteer-3.9`   |  8 Januari 2024  | 
|   `syn-nodejs-puppeteer-3.8`   |  8 Januari 2024  | 
|   `syn-python-selenium-2.0`   |  8 Maret 2024  | 
|   `syn-python-selenium-1.3`   |  8 Maret 2024  | 
|   `syn-python-selenium-1.2`   |  8 Maret 2024  | 
|   `syn-python-selenium-1.1`   |  8 Maret 2024  | 
|   `syn-python-selenium-1.0`   |  8 Maret 2024  | 
|   `syn-nodejs-puppeteer-3.7`   |  8 Januari 2024  | 
|   `syn-nodejs-puppeteer-3.6`   |  8 Januari 2024  | 
|   `syn-nodejs-puppeteer-3.5`   |  8 Januari 2024  | 
|   `syn-nodejs-puppeteer-3.4`   |  13 November 2022  | 
|   `syn-nodejs-puppeteer-3.3`   |  13 November 2022  | 
|   `syn-nodejs-puppeteer-3.2`   |  13 November 2022  | 
|   `syn-nodejs-puppeteer-3.1`   |  13 November 2022  | 
|   `syn-nodejs-puppeteer-3.0`   |  13 November 2022  | 
|   `syn-nodejs-2.2`   |  28 Mei 2021  | 
|   `syn-nodejs-2.1`   |  28 Mei 2021  | 
|   `syn-nodejs-2.0`   |  28 Mei 2021  | 
|   `syn-nodejs-2.0-beta`   |  8 Februari 2021  | 
|   `syn-1.0`   |  28 Mei 2021  | 

# Pembaruan versi runtime
<a name="CloudWatch_Synthetics_Runtime_Version_Update"></a>

Anda dapat memperbarui versi runtime kenari dengan menggunakan CloudWatch konsol, AWS CloudFormation, AWS CLI atau SDK. AWS Saat Anda menggunakan CloudWatch konsol, Anda dapat memperbarui hingga lima kenari sekaligus dengan memilihnya di halaman daftar kenari dan kemudian memilih **Tindakan**, **Perbarui** Runtime.

Anda dapat memverifikasi pembaruan dengan mengujinya terlebih dahulu sebelum melakukan pembaruan runtime. Saat memperbarui versi runtime, pilih **Start Dry Run** atau **Validate dan simpan opsi nanti** di CloudWatch konsol untuk membuat dry run kenari asli bersama dengan perubahan apa pun yang Anda buat pada konfigurasi. Dry run akan memperbarui dan mengeksekusi kenari untuk memvalidasi apakah pembaruan runtime aman untuk kenari. Setelah Anda memverifikasi kenari Anda dengan versi runtime baru, Anda dapat memperbarui versi runtime kenari Anda. Untuk informasi selengkapnya, lihat [Melakukan pembaruan kenari yang aman](performing-safe-canary-upgrades.md).

Atau, Anda dapat memverifikasi pembaruan dengan terlebih dahulu mengkloning kenari menggunakan CloudWatch konsol dan memperbarui versi runtime. Hal ini menciptakan canary lain yang merupakan klon dari canary asli Anda. Setelah Anda memverifikasi canary Anda dengan versi runtime yang baru, Anda dapat memperbarui versi runtime canary asli Anda dan menghapus canary klon tersebut.

 Anda juga dapat memperbarui beberapa canary menggunakan skrip peningkatan. Untuk informasi selengkapnya, lihat [Skrip peningkatan runtime canary](#CloudWatch_Synthetics_Canaries_upgrade_script).

Jika Anda meningkatkan canary dan gagal, silakan lihat [Memecahkan masalah canary yang gagal](CloudWatch_Synthetics_Canaries_Troubleshoot.md).

## Skrip peningkatan runtime canary
<a name="CloudWatch_Synthetics_Canaries_upgrade_script"></a>

Untuk meningkatkan skrip canary untuk versi runtime yang didukung, gunakan skrip berikut.

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

# Menulis skrip canary
<a name="CloudWatch_Synthetics_Canaries_WritingCanary"></a>

Bagian berikut menjelaskan cara menulis skrip kenari dan cara mengintegrasikan kenari dengan AWS layanan lain dan dengan dependensi dan pustaka eksternal.

**Topics**
+ [Menulis skrip kenari menggunakan runtime Java](Synthetics_WritingCanary_Java.md)
+ [Menulis skrip canary Node.js menggunakan runtime Playwright](Synthetics_WritingCanary_Nodejs_Playwright.md)
+ [Menulis skrip kenari Node.js menggunakan runtime Puppeteer](CloudWatch_Synthetics_Canaries_WritingCanary_Nodejs_Pup.md)
+ [Menulis skrip canary Python](CloudWatch_Synthetics_Canaries_WritingCanary_Python.md)
+ [Menulis konfigurasi JSON untuk cetak biru Node.js multi Checks](CloudWatch_Synthetics_WritingCanary_Multichecks.md)

# Menulis skrip kenari menggunakan runtime Java
<a name="Synthetics_WritingCanary_Java"></a>

**Topics**
+ [Struktur proyek Java untuk burung kenari](#Synthetics_canary_Java_package)
+ [Mengemas proyek untuk kenari](#Synthetics_canary_Java_package_canary)
+ [Nama handler](#Synthetics_canary_Java_handler)
+ [CloudWatch Konfigurasi Synthetics](#Synthetics_canary_Java_config)
+ [CloudWatch Variabel lingkungan Synthetics](#Synthetics_canary_Java_variables)

## Struktur proyek Java untuk burung kenari
<a name="Synthetics_canary_Java_package"></a>

Untuk membuat kenari di Jawa, Anda perlu menulis kode Anda, mengompilasinya, dan menyebarkan artefak yang dikompilasi ke Synthetics. Anda dapat menginisialisasi proyek Java Lambda dengan berbagai cara. Misalnya, Anda dapat menggunakan pengaturan proyek Java standar di IDE pilihan Anda, seperti IntelliJ IDEA atau Visual Studio Code. Atau, Anda dapat membuat struktur file yang diperlukan secara manual.

Sebuah proyek Java Synthetics berisi struktur umum berikut:

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

Anda dapat menggunakan Maven atau Gradle untuk membangun proyek dan mengelola dependensi.

Dalam struktur di atas, `ExampleCanary` kelas adalah titik masuk atau handler untuk kenari.

 **Contoh kelas kenari Java** 

Contoh ini adalah untuk kenari untuk membuat permintaan get ke URL yang disimpan dalam variabel lingkungan Lambda *TESTING\$1URL*. Canary tidak menggunakan metode apa pun yang disediakan oleh runtime Synthetics.

```
package canarypackage;

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

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

Sangat disarankan untuk memodulasi kenari Anda menggunakan fungsi perpustakaan yang disediakan Synthetics. `executeStep` Kenari membuat `get` panggilan ke dua variabel yang URLs diperoleh dari URL1 dan URL2 lingkungan yang terpisah.

**catatan**  
Untuk menggunakan `executeStep` fungsionalitas, metode handler untuk kenari harus menggunakan parameter tipe Synthetics seperti yang ditunjukkan di bawah ini. 

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

## Mengemas proyek untuk kenari
<a name="Synthetics_canary_Java_package_canary"></a>

*Synthetics menerima kode untuk kenari java dalam format zip.* Zip terdiri dari file kelas untuk kode kenari, toples untuk dependensi pihak ketiga dan file konfigurasi Synthetics.

Sebuah zip Synthetics Java berisi struktur umum berikut.

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

Untuk membangun zip ini dari struktur proyek di atas, Anda dapat menggunakan gradle (build.gradle) atau maven (pom.xml). Inilah contohnya.

[Untuk informasi tentang dependensi waktu kompilasi atau antarmuka untuk pustaka Synthetics, lihat README di bawah -java. aws-cloudwatch-synthetics-sdk](https://github.com/aws/aws-cloudwatch-synthetics-sdk-java/tree/main)

```
plugins {
    id 'java'
}

repositories {
    mavenCentral()
}

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

test {
    useJUnitPlatform()
}

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

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

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

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

## Nama handler
<a name="Synthetics_canary_Java_handler"></a>

Nama handler adalah titik masuk untuk kenari. Untuk runtime Java, handler dalam format berikut.

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

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

Anda dapat mengonfigurasi perilaku runtime Synthetics Java dengan menyediakan file konfigurasi JSON opsional bernama. `synthetics.json` File ini harus dikemas dalam direktori root dari paket zip. Meskipun file konfigurasi bersifat opsional, jika Anda tidak menyediakan file konfigurasi, atau kunci konfigurasi tidak ada, CloudWatch gunakan default.

Berikut ini adalah nilai konfigurasi yang didukung, dan defaultnya.

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

 **Konfigurasi langkah** 
+ *continueOnStepKegagalan* — Menentukan apakah skrip harus dilanjutkan bahkan setelah langkah gagal. Default-nya adalah salah.
+ *stepSuccessMetric*— Menentukan apakah ` SuccessPercent` metrik langkah dipancarkan. `SuccessPercent`Metrik untuk langkah adalah *100* untuk lari kenari jika langkah berhasil, dan *0* jika langkah gagal. Defaultnya *benar*.
+ *stepDurationMetric*— Menentukan apakah metrik *Durasi* langkah dipancarkan. Metrik *Durasi* dipancarkan sebagai durasi, dalam milidetik, dari langkah yang dijalankan. Defaultnya *benar*.

 **Konfigurasi logging** 

Berlaku untuk log yang dihasilkan oleh CloudWatch Synthetics. Mengontrol verbositas log permintaan dan respons.
+ *LogRequest* - Menentukan apakah akan log setiap permintaan di log kenari. Default-nya adalah salah.
+ *LogResponse* - Menentukan apakah akan log setiap respon dalam log kenari. Default-nya adalah salah.

 **Konfigurasi metrik HTTP** 

Konfigurasi untuk metrik yang terkait dengan jumlah permintaan jaringan dengan kode status HTTP yang berbeda, yang dipancarkan oleh CloudWatch Synthetics untuk kenari ini.
+ *metric\$12xx* - Menentukan apakah akan memancarkan metrik *2xx* (dengan dimensi) untuk kenari ini. CanaryName Defaultnya *benar*.
+ *metric\$14xx* - Menentukan apakah akan memancarkan metrik *4xx* (dengan dimensi) untuk kenari ini. CanaryName Defaultnya *benar*.
+ *metric\$15xx* - Menentukan apakah akan memancarkan metrik *5xx* (dengan dimensi) untuk kenari ini. CanaryName Defaultnya *benar*.
+ *Aggregated2xxMetric* - Menentukan apakah akan memancarkan metrik *2xx* (tanpa dimensi) untuk kenari ini. CanaryName Defaultnya *benar*.
+ *Aggregated4xxMetric* - Menentukan apakah akan memancarkan metrik *4xx* (tanpa dimensi) untuk kenari ini. CanaryName Defaultnya *benar*.
+ *Aggregated5xxMetric* - Menentukan apakah akan memancarkan metrik *5xx* (tanpa dimensi) untuk kenari ini. CanaryName Defaultnya *benar*.

 **Konfigurasi metrik kenari** 

Konfigurasi untuk metrik lain yang dipancarkan oleh Synthetics. CloudWatch 
+ *failedCanaryMetric*Network Access Analyzer Menentukan apakah akan memancarkan metrik *Gagal* (dengan CanaryName dimensi) untuk kenari ini. Defaultnya *benar*.
+ *aggregatedFailedCanaryMetrik* - Menentukan apakah akan memancarkan metrik *Gagal* (tanpa CanaryName dimensi) untuk kenari ini. Defaultnya *benar*.

## CloudWatch Variabel lingkungan Synthetics
<a name="Synthetics_canary_Java_variables"></a>

Anda dapat mengonfigurasi tingkat dan format logging dengan menggunakan variabel lingkungan.

 **Format log** 

Runtime CloudWatch Synthetics Java membuat CloudWatch log untuk setiap proses kenari. Log ditulis dalam format JSON untuk query yang nyaman. Secara opsional, Anda dapat mengubah format log menjadi *TEXT*.
+ *Nama variabel lingkungan* - CW\$1SYNTHETICS\$1LOG\$1FORMAT
+ *Nilai yang didukung* - JSON, TEXT
+ *Standar* —JSON

 **Tingkat log** 
+ *Nama variabel lingkungan* - CW\$1SYNTHETICS\$1LOG\$1LEVEL
+ *Nilai yang didukung* - TRACE, DEBUG, INFO, WARN, ERROR, FATAL
+ *Default* — INFO

Terlepas dari variabel lingkungan di atas, ada variabel lingkungan default yang ditambahkan untuk runtime Java, variabel `AWS_LAMBDA-EXEC_WRAPPER` lingkungan ke fungsi Anda, dan menetapkan nilainya. `/opt/synthetics-otel-instrument` Variabel lingkungan ini memodifikasi perilaku startup fungsi Anda untuk telemetri. Jika variabel lingkungan ini sudah ada, pastikan bahwa itu diatur ke nilai yang diperlukan.

# Menulis skrip canary Node.js menggunakan runtime Playwright
<a name="Synthetics_WritingCanary_Nodejs_Playwright"></a>

**Topics**
+ [Mengemas file canary Node.js Anda untuk runtime Playwright](#Synthetics_canary_Nodejs_Playwright_package)
+ [Mengubah skrip Playwright yang ada untuk digunakan sebagai kenari Synthetics CloudWatch](#CloudWatch_Synthetics_canary_edit_Playwright_script)
+ [CloudWatch Konfigurasi Synthetics](#Synthetics_canary_configure_Playwright_script)

## Mengemas file canary Node.js Anda untuk runtime Playwright
<a name="Synthetics_canary_Nodejs_Playwright_package"></a>

 Skrip kenari Anda terdiri dari file `.js` (sintaks CommonJS) atau `.mjs` (sintaks ES) yang berisi kode handler Synthetics Anda, bersama dengan paket dan modul tambahan yang bergantung pada kode Anda. Skrip yang dibuat dalam format ES (ECMAScript) harus menggunakan.mjs sebagai ekstensi atau menyertakan file package.json dengan set bidang “type”: “module”. Tidak seperti runtime lain seperti Node.js Puppeteer, Anda tidak diharuskan menyimpan skrip Anda dalam struktur folder tertentu. Anda dapat mengemas skrip Anda secara langsung. Gunakan `zip` utilitas pilihan Anda untuk membuat `.zip` file dengan file handler Anda di root. Jika skrip canary Anda bergantung pada paket atau modul tambahan yang tidak disertakan dalam runtime Synthetics, Anda dapat menambahkan dependensi ini ke file Anda. `.zip` Untuk melakukannya, Anda dapat menginstal pustaka yang diperlukan fungsi Anda di `node_modules` direktori dengan menjalankan `npm install` perintah. Berikut contoh perintah CLI membuat `.zip` file bernama `my_deployment_package.zip` berisi `index.js` or `index.mjs` file (Synthetics handler) dan dependensinya. Dalam contoh, Anda menginstal dependensi menggunakan manajer `npm` paket.

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

Buat `.zip` file yang berisi isi folder proyek Anda di root. Gunakan opsi `r` (rekursif), seperti yang ditunjukkan pada contoh berikut, untuk memastikan bahwa `zip` kompres subfolder.

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

Tambahkan file konfigurasi Synthetics untuk mengonfigurasi perilaku CloudWatch Synthetics. Anda dapat membuat `synthetics.json` file dan menyimpannya di jalur yang sama dengan titik masuk atau file handler Anda.

Secara opsional, Anda juga dapat menyimpan file titik masuk Anda dalam struktur folder pilihan Anda. Namun, pastikan bahwa path folder ditentukan dalam nama handler Anda.

 **Nama handler** 

Pastikan untuk mengatur titik masuk skrip canary Anda (handler) ` myCanaryFilename.functionName` agar cocok dengan nama file dari titik masuk skrip Anda. Anda dapat menyimpan kenari secara opsional di folder terpisah seperti. ` myFolder/my_canary_filename.mjs` Jika Anda menyimpannya di folder terpisah, tentukan jalur itu di titik entri skrip Anda, seperti ` myFolder/my_canary_filename.functionName`.

## Mengubah skrip Playwright yang ada untuk digunakan sebagai kenari Synthetics CloudWatch
<a name="CloudWatch_Synthetics_canary_edit_Playwright_script"></a>

Anda dapat mengedit skrip yang ada untuk Node.js dan Playwright untuk digunakan sebagai kenari. Untuk informasi selengkapnya tentang Playwright, lihat dokumentasi pustaka [Playwright](https://playwright.dev/docs/api/class-playwright). 

Anda dapat menggunakan skrip Playwright berikut yang disimpan dalam file. ` exampleCanary.mjs`

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

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

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

Konversi skrip dengan melakukan langkah-langkah berikut:

1. Membuat dan mengekspor `handler` fungsi. Penanggung jawab adalah fungsi titik masuk untuk naskah. Anda dapat memilih nama apa pun untuk fungsi handler, tetapi fungsi yang digunakan dalam skrip Anda harus sama seperti di pengendali kenari Anda. Jika nama skrip Anda`exampleCanary.mjs`, dan nama fungsi handler adalah`myhandler`, pengendali kenari Anda diberi nama. `exampleCanary.myhandler` Dalam contoh berikut, nama fungsi handler adalah`handler`.

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

1. Impor `Synthetics Playwright module` sebagai ketergantungan.

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

1. Luncurkan browser menggunakan fungsi Synthetics. `Launch`

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

1. Buat halaman Playwright baru dengan menggunakan fungsi Synthetics. `newPage`

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

Skrip Anda sekarang siap dijalankan sebagai kenari Synthetics. Berikut ini adalah skrip yang diperbarui:

 **Skrip diperbarui dalam ES6 format** 

File skrip disimpan dengan `.mjs` ekstensi.

```
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 diperbarui dalam format CommonJS** 

File skrip disimpan dengan `.js` ekstensi.

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

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

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

Anda dapat mengonfigurasi perilaku runtime Synthetics Playwright dengan menyediakan file konfigurasi JSON opsional bernama. `synthetics.json` File ini harus dikemas di lokasi yang sama dengan file handler. Meskipun file konfigurasi adalah opsional, jika Anda tidak menyediakan file konfigurasi, atau kunci konfigurasi hilang, CloudWatch mengasumsikan default.

 **Mengemas file konfigurasi Anda** 

Berikut ini adalah nilai konfigurasi yang didukung, dan defaultnya.

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

 **Konfigurasi langkah** 
+ `screenshotOnStepStart`— Menentukan apakah Synthetics harus menangkap tangkapan layar sebelum langkah dimulai. Nilai default-nya `true`. 
+ `screenshotOnStepSuccess`— Menentukan apakah Synthetics harus menangkap tangkapan layar setelah langkah berhasil. Nilai default-nya `true`. 
+ `screenshotOnStepFailure`— Menentukan apakah Synthetics harus menangkap tangkapan layar setelah langkah gagal. Nilai default-nya `true`. 
+ `continueOnStepFailure`— Menentukan apakah skrip harus dilanjutkan bahkan setelah langkah gagal. Nilai default-nya `false`. 
+ `stepSuccessMetric`— Menentukan apakah ` SuccessPercent` metrik langkah dipancarkan. `SuccessPercent`Metrik untuk sebuah langkah adalah `100` untuk menjalankan kenari jika langkah berhasil, dan `0` jika langkah gagal. Nilai default-nya `true`. 
+ `stepDurationMetric`— Menentukan apakah `Duration` metrik langkah dipancarkan. `Duration`Metrik dipancarkan sebagai durasi, dalam milidetik, dari langkah yang dijalankan. Nilai default-nya `true`.

 **Laporkan konfigurasi** 

Termasuk semua laporan yang dihasilkan oleh CloudWatch Synthetics, seperti file HAR dan laporan langkah Synthetics. Bidang redaksi data sensitif `restrictedHeaders` dan `restrictedUrlParameters` juga berlaku untuk log yang dihasilkan oleh Synthetics. 
+ `includeRequestHeaders`— Apakah akan menyertakan header permintaan dalam laporan. Nilai default-nya `false`. 
+ `includeResponseHeaders`— Apakah akan menyertakan header respons dalam laporan. Nilai default-nya `false`.
+ `includeUrlPassword`— Apakah akan menyertakan kata sandi yang muncul di URL. Secara default, kata sandi yang muncul URLs disunting dari log dan laporan, untuk mencegah pengungkapan data sensitif. Default-nya adalah `false` . 
+ `includeRequestBody`— Apakah akan memasukkan badan permintaan dalam laporan. Nilai default-nya `false`. 
+ `includeResponseBody`— Apakah akan memasukkan badan respons dalam laporan. Nilai default-nya `false`. 
+ `restrictedHeaders`— Daftar nilai header untuk diabaikan, jika header disertakan. Ini berlaku untuk header permintaan dan respons. Misalnya, Anda dapat menyembunyikan kredensil Anda dengan meneruskan `includeRequestHeaders` sebagai benar dan `restrictedHeaders` sebagai. `['Authorization']` 
+ `restrictedUrlParameters`— Daftar jalur URL atau parameter kueri untuk disunting. Ini berlaku untuk URLs yang muncul di log, laporan, dan kesalahan. Parameter tersebut tidak peka terhadap huruf besar/kecil. Anda dapat meneruskan tanda bintang (`*`) sebagai nilai untuk menyunting semua jalur URL dan nilai parameter kueri. Default-nya adalah array kosong. 
+ `har`— Menentukan apakah arsip HTTP (HAR) harus dihasilkan. Nilai default-nya `true`.

Berikut ini adalah contoh file konfigurasi laporan.

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

 **Konfigurasi logging** 

Berlaku untuk log yang dihasilkan oleh CloudWatch Synthetics. Mengontrol verbositas log permintaan dan respons.
+ `logRequest`— Apakah akan mencatat setiap permintaan di log kenari. Untuk canary UI, ini mencatat setiap permintaan yang dikirim oleh browser. Nilai default-nya ` false`. 
+ `logResponse`— Apakah akan mencatat setiap respons di log kenari. Untuk canary UI, ini membuat log terhadap setiap respons yang diterima oleh browser. Bawaannya adalah ` false`. 
+ `logRequestBody`— Apakah akan mencatat badan permintaan bersama dengan permintaan di log kenari. Konfigurasi ini hanya berlaku `logRequest` jika benar. Nilai default-nya `false`. 
+ `logResponseBody`— Apakah akan mencatat badan respons bersama dengan permintaan di log kenari. Konfigurasi ini hanya berlaku `logResponse` jika benar. Nilai default-nya `false`. 
+ `logRequestHeaders`— Apakah akan mencatat header permintaan bersama dengan permintaan di log kenari. Konfigurasi ini hanya berlaku ` logRequest` jika benar. Nilai default-nya `false`. 
+ `logResponseHeaders`— Apakah akan mencatat header respons bersama dengan tanggapan di log kenari. Konfigurasi ini hanya berlaku ` logResponse` jika benar. Nilai default-nya `false`. 

 **Konfigurasi metrik HTTP** 

Konfigurasi untuk metrik yang terkait dengan jumlah permintaan jaringan dengan kode status HTTP yang berbeda, yang dipancarkan oleh CloudWatch Synthetics untuk kenari ini.
+ `metric_2xx`— Apakah akan memancarkan `2xx` metrik (dengan `CanaryName` dimensi) untuk kenari ini. Nilai default-nya ` true`. 
+ `metric_4xx`— Apakah akan memancarkan `4xx` metrik (dengan `CanaryName` dimensi) untuk kenari ini. Nilai default-nya ` true`. 
+ `metric_5xx`— Apakah akan memancarkan `5xx` metrik (dengan `CanaryName` dimensi) untuk kenari ini. Nilai default-nya ` true`. 
+ `failedRequestsMetric`— Apakah akan memancarkan ` failedRequests` metrik (dengan `CanaryName` dimensi) untuk kenari ini. Nilai default-nya `true`. 
+ `aggregatedFailedRequestsMetric`— Apakah akan memancarkan ` failedRequests` metrik (tanpa `CanaryName` dimensi) untuk kenari ini. Nilai default-nya `true`. 
+ `aggregated2xxMetric`— Apakah akan memancarkan `2xx` metrik (tanpa `CanaryName` dimensi) untuk kenari ini. Nilai default-nya `true`. 
+ `aggregated4xxMetric`— Apakah akan memancarkan `4xx` metrik (tanpa `CanaryName` dimensi) untuk kenari ini. Nilai default-nya `true`. 
+ `aggregated5xxMetric`— Apakah akan memancarkan `5xx` metrik (tanpa `CanaryName` dimensi) untuk kenari ini. Nilai default-nya `true`. 

 **Konfigurasi metrik kenari** 

Konfigurasi untuk metrik lain yang dipancarkan oleh Synthetics. CloudWatch 
+ `failedCanaryMetric`— Apakah akan memancarkan `Failed` metrik (dengan `CanaryName` dimensi) untuk kenari ini. Nilai default-nya ` true`. 
+ `aggregatedFailedCanaryMetric`— Apakah akan memancarkan ` Failed` metrik (tanpa `CanaryName` dimensi) untuk kenari ini. Nilai default-nya `true`. 

 **Konfigurasi lainnya** 
+ `userAgent`— String untuk ditambahkan ke agen pengguna. Agen pengguna adalah string yang disertakan dalam header permintaan, dan mengidentifikasi browser Anda ke situs web yang Anda kunjungi saat Anda menggunakan browser tanpa kepala. CloudWatch Synthetics secara otomatis menambahkan. `CloudWatchSynthetics/canary-arn to the user agent` Konfigurasi yang ditentukan ditambahkan ke agen pengguna yang dihasilkan. Nilai default agen pengguna untuk menambahkan adalah string kosong (`""`).

### CloudWatch Variabel lingkungan Synthetics
<a name="Synthetics_canary_Nodejs_Playwright_script"></a>

Konfigurasikan tingkat dan format logging dengan menggunakan variabel lingkungan.

 **Format log** 

Runtime CloudWatch Synthetics Playwright membuat CloudWatch log untuk setiap lari kenari. Log ditulis dalam format JSON untuk query yang nyaman. Secara opsional, Anda dapat mengubah format log menjadi`TEXT`.
+ `Environment variable name`— CW\$1SYNTHETICS\$1LOG\$1FORMAT 
+ `Supported values`— JSON, TEKS 
+ `Default`— JSON 

 **Tingkat log** 

Meskipun `Debug` mode pengaktifan meningkatkan verbositas, ini dapat berguna untuk pemecahan masalah.
+ `Environment variable name`— CW\$1SYNTHETICS\$1LOG\$1LEVEL
+ `Supported values`— MELACAK, MEN-DEBUG, INFO, PERINGATAN, KESALAHAN, FATAL 
+ `Default`— INFO

# Menulis skrip kenari Node.js menggunakan runtime Puppeteer
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Nodejs_Pup"></a>

**Topics**
+ [Membuat kenari CloudWatch Synthetics dari awal](#CloudWatch_Synthetics_Canaries_write_from_scratch)
+ [Mengemas file kenari Node.js Anda](#CloudWatch_Synthetics_Canaries_package)
+ [Mengubah skrip Puppeteer yang sudah ada untuk digunakan sebagai canary Synthetic](#CloudWatch_Synthetics_Canaries_modify_puppeteer_script)
+ [Variabel-variabel lingkungan](#CloudWatch_Synthetics_Environment_Variables)
+ [Mengintegrasikan kenari Anda dengan layanan lain AWS](#CloudWatch_Synthetics_Canaries_AWS_integrate)
+ [Menyempurnakan canary Anda untuk menggunakan alamat IP statis](#CloudWatch_Synthetics_Canaries_staticIP)

## Membuat kenari CloudWatch Synthetics dari awal
<a name="CloudWatch_Synthetics_Canaries_write_from_scratch"></a>

Berikut adalah contoh skrip Canary Synthetic minimal. skrip ini berhasil dijalani, dan mengembalikan rangkaian. Untuk melihat bentuk canary yang gagal, ubah `let fail = false;` untuk `let fail = true;`. 

Anda harus menetapkan fungsi titik masuk untuk skrip canary. Untuk melihat bagaimana file diunggah ke lokasi Amazon S3 yang ditentukan sebagai kenari, buat file-file ini `ArtifactS3Location` di folder. `/tmp` Semua artefak kenari harus disimpan`/tmp`, karena itu satu-satunya direktori yang dapat ditulis. Pastikan bahwa jalur tangkapan layar diatur `/tmp` untuk tangkapan layar atau file lain yang dibuat oleh skrip. Synthetics secara otomatis mengunggah file ` /tmp` ke bucket S3.

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

Setelah skrip berjalan, metrik pass/fail status dan durasi dipublikasikan CloudWatch dan file di bawah `/tmp` diunggah ke bucket S3.

```
const basicCustomEntryPoint = async function () {

    // Insert your code here

    // Perform multi-step pass/fail check

    // Log decisions made and results to /tmp

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

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

    return "Successfully completed basicCanary checks.";
};

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

Selanjutnya, kita akan memperluas script untuk menggunakan Synthetics logging dan membuat panggilan menggunakan SDK AWS . Untuk tujuan demonstrasi, skrip ini akan menciptakan klien Amazon DynamoDB dan memanggil API listTables DynamoDB. skrip ini mencatat respons terhadap permintaan dan log akan lulus atau gagal bergantung pada permintaan berhasil atau tidak.

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

## Mengemas file kenari Node.js Anda
<a name="CloudWatch_Synthetics_Canaries_package"></a>

 **Untuk syn-nodejs-puppeteer -11.0 dan di atas** 

 Struktur kemasan yang lebih lama (untuk syn-nodejs-puppeteer -10.0 dan di bawah) masih didukung dalam versi yang lebih baru.

Buat skrip menggunakan salah satu opsi berikut:
+ .js file (sintaks CommonJS)
+ .mjs file (sintaks modul ES)

Untuk modul ES, gunakan salah satu opsi berikut:
+ .js file (sintaks CommonJS)
+ .mjs file (sintaks modul ES)

Struktur paket didefinisikan di bawah ini:
+ File penangan tingkat root (index.js/index.mjs)
+ File konfigurasi opsional (synthetics.json)
+ Ketergantungan tambahan di node\$1modules (jika diperlukan)

Contoh struktur kemasan:

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

Untuk paket, ikuti langkah-langkah di bawah ini:

1. Instal dependensi (jika ada).

   ```
   npm install
   ```

1. Buat paket.zip.

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

 **Untuk syn-nodejs-puppeteer -11.0 dan di bawah** 

Struktur berikut diperlukan saat menggunakan Amazon S3:

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

 **Untuk menambahkan dukungan sub-folder opsional di syn-nodejs-puppeteer -3.4\$1:** 

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

**catatan**  
Path handler dalam konfigurasi harus sesuai dengan lokasi file Anda.

 **Nama handler** 

Pastikan untuk mengatur titik masuk skrip canary Anda (handler) ` myCanaryFilename.functionName` agar cocok dengan nama file dari titik masuk skrip Anda. Jika Anda menggunakan runtime yang lebih awal dari `syn-nodejs-puppeteer-3.4`, `functionName` harus `handler`. Jika Anda menggunakan ` syn-nodejs-puppeteer-3.4` atau yang lebih baru, Anda dapat memilih nama fungsi apa pun sebagai handler. Jika Anda menggunakan `syn-nodejs-puppeteer-3.4` atau lebih baru, Anda juga dapat secara opsional menyimpan canary di folder terpisah seperti ` nodejs/node_modules/myFolder/my_canary_filename`. Jika Anda menyimpannya di folder terpisah, tentukan jalur itu di titik entri skrip Anda, seperti ` myFolder/my_canary_filename.functionName`.

## Mengubah skrip Puppeteer yang sudah ada untuk digunakan sebagai canary Synthetic
<a name="CloudWatch_Synthetics_Canaries_modify_puppeteer_script"></a>

Bagian ini menjelaskan cara mengambil skrip Puppeteer dan memodifikasinya untuk berjalan sebagai skrip canary Synthetic. Untuk informasi selengkapnya tentang Puppeteer, silakan lihat [API Puppeteer v1.14.0](https://github.com/puppeteer/puppeteer/blob/v1.14.0/docs/api.md). 

Kita akan mulai dengan contoh skrip 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();
})();
```

Langkah konversinya adalah sebagai berikut:
+ Membuat dan mengekspor `handler` fungsi. Penanggung jawab adalah fungsi titik masuk untuk skrip. Jika Anda menggunakan runtime yang lebih awal dari ` syn-nodejs-puppeteer-3.4`, fungsi handler harus diberi nama `handler`. Jika Anda menggunakan `syn-nodejs-puppeteer-3.4` atau lebih baru, fungsi tersebut dapat memiliki nama apa pun, tetapi harus nama yang sama yang digunakan dalam skrip. Juga, jika Anda menggunakan `syn-nodejs-puppeteer-3.4` atau yang lebih baru, Anda akan dapat menyimpan skrip Anda di bawah folder apa pun dan menentukan folder itu sebagai bagian dari nama handler.

  ```
  const basicPuppeteerExample = async function () {};
  
  exports.handler = async () => {
      return await basicPuppeteerExample();
  };
  ```
+ Gunakan dependensi `Synthetics`.

  ```
  var synthetics = require('@aws/synthetics-puppeteer');
  ```
+ Gunakan fungsi `Synthetics.getPage` untuk mendapatkan objek `Page` Puppeteer.

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

  Objek halaman yang dikembalikan oleh fungsi Synthetics.getPage memiliki **page.on`request`, `response` dan peristiwa yang diinstrumentasi** untuk logging. ` requestfailed` Synthetics juga mengatur pembuatan file HAR untuk permintaan dan respons di halaman tersebut, serta menambahkan ARN canary ke header agen-pengguna atas permintaan keluar di halaman tersebut.

skripnya sekarang siap untuk dijalankan sebagai canary Synthetics. Berikut adalah skrip yang diperbarui:

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

## Variabel-variabel lingkungan
<a name="CloudWatch_Synthetics_Environment_Variables"></a>

Anda dapat menggunakan variabel lingkungan saat membuat canary. Hal ini memungkinkan Anda untuk menulis skrip canary tunggal dan kemudian menggunakan skrip tersebut dengan nilai yang berbeda untuk dengan cepat membuat beberapa canary yang memiliki tugas serupa.

Misalnya, andaikan organisasi Anda memiliki titik akhir seperti `prod`, ` dev`, dan `pre-release` untuk berbagai tahap pengembangan perangkat lunak Anda, dan Anda perlu membuat canary untuk menguji setiap titik akhir ini. Anda dapat menulis skrip canary tunggal yang menguji perangkat lunak Anda dan kemudian menentukan nilai yang berbeda untuk variabel lingkungan titik akhir ketika Anda membuat masing-masing dari tiga canary. Kemudian, ketika Anda membuat canary, Anda menentukan skrip dan nilai-nilai yang akan digunakan untuk variabel lingkungan.

Nama-nama variabel lingkungan dapat memuat huruf, angka, dan karakter garis bawah. Nama variavel harus dimulai dengan sebuah huruf dan setidaknya dua karakter. Ukuran total variabel lingkungan Anda tidak dapat lebih dari 4 KB. Anda tidak dapat menentukan variabel lingkungan yang dicadangkan Lambda sebagai nama variabel lingkungan Anda. Untuk informasi selengkapnya tentang variabel lingkungan yang dicadangkan, silakan lihat [Variabel lingkungan runtime](https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html#configuration-envvars-runtime).

**penting**  
Kunci dan nilai variabel lingkungan dienkripsi saat istirahat menggunakan kunci yang AWS dimiliki AWS KMS . Namun, variabel lingkungan tidak dienkripsi di sisi klien. Jangan menyimpan informasi sensitif di dalamnya.

Contoh skrip berikut menggunakan dua variabel lingkungan. Skrip ini adalah untuk canary yang memeriksa apakah sebuah halaman web tersedia. Ini menggunakan variabel lingkungan untuk membuat parameter URL yang diperiksa dan tingkat log CloudWatch Synthetics yang digunakannya. 

Fungsi berikut menetapkan `LogLevel` ke nilai variabel lingkungan ` LOG_LEVEL`.

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

Fungsi ini menetapkan `URL` ke nilai variabel lingkungan `URL`.

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

Ini adalah skrip yang lengkap. Ketika Anda membuat canary menggunakan skrip ini, Anda menentukan nilai untuk variabel lingkungan `LOG_LEVEL` dan `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();
};
```

### Meneruskan variabel lingkungan ke script Anda
<a name="CloudWatch_Synthetics_Canaries_pass_variables"></a>

Untuk meneruskan variabel lingkungan ke skrip Anda ketika Anda membuat canary di konsol, tentukan kunci dan nilai-nilai variabel lingkungan di bagian **Variabel lingkungan** pada konsol. Untuk informasi selengkapnya, lihat [Membuat canary](CloudWatch_Synthetics_Canaries_Create.md).

Untuk meneruskan variabel lingkungan melalui API atau AWS CLI, gunakan ` EnvironmentVariables` parameter di `RunConfig` bagian. Berikut ini adalah contoh AWS CLI perintah yang menciptakan kenari yang menggunakan dua variabel lingkungan dengan kunci `Environment` dan`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"
}'
```

## Mengintegrasikan kenari Anda dengan layanan lain AWS
<a name="CloudWatch_Synthetics_Canaries_AWS_integrate"></a>

Semua kenari dapat menggunakan pustaka AWS SDK. Anda dapat menggunakan perpustakaan ini ketika Anda menulis kenari Anda untuk mengintegrasikan kenari dengan layanan lain AWS .

Untuk melakukan hal itu, Anda perlu menambahkan kode berikut ke canary. Untuk contoh-contoh AWS Secrets Manager ini, digunakan sebagai layanan yang terintegrasi dengan kenari.
+ Impor AWS SDK.

  ```
  const AWS = require('aws-sdk');
  ```
+ Buat klien untuk AWS layanan yang Anda integrasikan.

  ```
  const secretsManager = new AWS.SecretsManager();
  ```
+ Gunakan klien untuk melakukan panggilan API ke layanan tersebut.

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

Kode skrip snippet canary berikut menunjukkan contoh integrasi dengan Secrets Manager secara lebih terperinci.

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

## Menyempurnakan canary Anda untuk menggunakan alamat IP statis
<a name="CloudWatch_Synthetics_Canaries_staticIP"></a>

Anda dapat menyiapkan canary sehingga menggunakan alamat IP statis.

**Untuk memaksa canary menggunakan alamat IP statis**

1. Buat VPC baru. Untuk informasi selengkapnya, silakan lihat [Menggunakan DNS dengan VPC Anda](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html).

1. Membuat gateway internet baru. Untuk informasi selengkapnya, silakan lihat [Menambahkan gateway internet ke VPC Anda](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html#working-with-igw).

1. Buat subnet publik di dalam VPC Anda yang baru.

1. Tambahkan tabel rute baru ke VPC.

1. Tambahkan rute di tabel rute baru, yang dimulai dari `0.0.0.0/0` ke gateway internet.

1. Kaitkan tabel rute baru dengan subnet publik.

1. Buat alamat IP elastis. Untuk informasi selengkapnya, silakan lihat [Alamat IP elastis](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html).

1. Buat gateway NAT baru dan tetapkan ke subnet publik dan alamat IP elastis.

1. Buat subnet privat di dalam VPC.

1. Tambahkan rute ke tabel rute bawaan VPC, yang dimulai dari `0.0.0.0/0` ke gateway NAT

1. Buat canary Anda. 

# Menulis skrip canary Python
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Python"></a>

Skrip ini berhasil dijalani, dan mengembalikan rangkaian. Untuk melihat bentuk canary yang gagal, ubah fail = False ke fail = True

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

## Mengemas file kenari Python Anda
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Python_package"></a>

Jika Anda memiliki lebih dari satu file .py atau skrip Anda memiliki dependensi, Anda dapat menggabungkan file itu semua ke dalam sebuah paket file ZIP tunggal. Jika Anda menggunakan runtime `syn-python-selenium-1.1`, file ZIP harus berisi file .py canary utama Anda di dalam folder `python`, seperti `python/my_canary_filename.py`. Jika Anda menggunakan ` syn-python-selenium-1.1` atau yang lebih baru, Anda dapat menggunakan folder yang berbeda secara opsional, seperti `python/myFolder/my_canary_filename.py`.

File ZIP ini harus memuat semua folder dan file yang diperlukan, tetapi file lain tidak perlu berada dalam folder `python`.

Pastikan untuk mengatur titik masuk skrip canary Anda agar ` my_canary_filename.functionName` cocok dengan nama file dan nama fungsi dari titik masuk skrip Anda. Jika Anda menggunakan runtime `syn-python-selenium-1.0`, `functionName` harus `handler`. Jika Anda menggunakan ` syn-python-selenium-1.1` atau yang lebih baru, pembatasan nama handler ini tidak berlaku, dan Anda juga dapat secara opsional menyimpan canary di folder terpisah seperti ` python/myFolder/my_canary_filename.py`. Jika Anda menyimpannya di folder terpisah, tentukan jalur itu di titik entri skrip Anda, seperti ` myFolder/my_canary_filename.functionName`. 

## Mengubah skrip Selenium yang sudah ada untuk menggunakan canary Synthetics
<a name="CloudWatch_Synthetics_Canaries_WritingCanary_Python_Selenium"></a>

Anda dapat dengan cepat memodifikasi skrip yang ada untuk Python dan Selenium untuk digunakan sebagai canary. Untuk informasi lebih lanjut tentang Selenium, lihat [www.selenium.dev/](https://www.selenium.dev/).

Untuk contoh ini, kita akan mulai dengan skrip Selenium berikut:

```
from selenium import webdriver

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

basic_selenium_script()
```

Langkah konversinya adalah sebagai berikut.

**Untuk mengkonversi skrip Selenium yang akan digunakan sebagai canary**

1. Ubah pernyataan `import` untuk menggunakan Selenium dari modul ` aws_synthetics`:

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

   Modul Selenium dari `aws_synthetics` memastikan bahwa kenari dapat memancarkan metrik dan log, menghasilkan file HAR, dan bekerja dengan fitur Synthetics lainnya. CloudWatch 

1. Buat fungsi handler dan panggil metode Selenium Anda. Penanggung jawab adalah fungsi titik masuk untuk skrip.

   Jika Anda menggunakan `syn-python-selenium-1.0`, fungsi handler harus diberi nama `handler`. Jika Anda menggunakan `syn-python-selenium-1.1` atau lebih baru, fungsi tersebut dapat memiliki nama apa pun, tetapi harus nama yang sama yang digunakan dalam skrip. Juga, jika Anda menggunakan `syn-python-selenium-1.1` atau yang lebih baru, Anda akan dapat menyimpan skrip Anda di bawah folder apa pun dan menentukan folder itu sebagai bagian dari nama handler.

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

Skrip sekarang diperbarui menjadi kenari CloudWatch Synthetics. Berikut adalah skrip yang diperbarui:

`webdriver`Ini adalah contoh dari kelas [ SyntheticsWebDriver](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library_Python.html#CloudWatch_Synthetics_Library_Python_SyntheticsWebDriver)dan browser yang dikembalikan oleh `webdriver.Chrome()` adalah instance dari [ 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()
```

## Mengubah skrip Puppeteer Synthetics yang ada untuk mengautentikasi sertifikat non-standar
<a name="Canaries_Non-Standard_Certificates"></a>

Salah satu kasus penggunaan penting untuk kenari Synthetics adalah bagi Anda untuk memantau titik akhir Anda sendiri. Jika Anda ingin memantau titik akhir yang tidak siap untuk lalu lintas eksternal, pemantauan ini terkadang dapat berarti bahwa Anda tidak memiliki sertifikat yang tepat yang ditandatangani oleh otoritas sertifikat pihak ketiga tepercaya.

Dua solusi yang mungkin untuk skenario ini adalah sebagai berikut:
+ Untuk mengautentikasi sertifikat klien, lihat [Cara memvalidasi autentikasi menggunakan Amazon CloudWatch Synthetics](https://aws.amazon.com/blogs/mt/how-to-validate-authentication-using-amazon-cloudwatch-synthetics-part-2/) — Bagian 2.
+ Untuk mengautentikasi sertifikat yang ditandatangani sendiri, lihat [Cara memvalidasi autentikasi dengan sertifikat yang ditandatangani](https://aws.amazon.com/blogs/mt/how-to-validate-authentication-with-self-signed-certificates-in-amazon-cloudwatch-synthetics/) sendiri di Amazon Synthetics CloudWatch

Anda tidak terbatas pada dua opsi ini ketika Anda menggunakan kenari CloudWatch Synthetics. Anda dapat memperluas fitur-fitur ini dan menambahkan logika bisnis Anda dengan memperluas kode canary.

**catatan**  
Synthetics canary yang berjalan pada runtime Python secara bawaan mengaktifkan ` --ignore-certificate-errors` flag, jadi kenari tersebut seharusnya tidak memiliki masalah dalam menjangkau situs dengan konfigurasi sertifikat non-standar.

# Menulis konfigurasi JSON untuk cetak biru Node.js multi Checks
<a name="CloudWatch_Synthetics_WritingCanary_Multichecks"></a>

Cetak biru multi cek Node.js memungkinkan Anda membuat kenari yang melakukan beberapa pemeriksaan validasi dalam satu canary run. Cetak biru ini berguna ketika Anda ingin menguji beberapa titik akhir, memvalidasi berbagai aspek aplikasi Anda, atau melakukan serangkaian pemeriksaan terkait secara berurutan. 

**Topics**
+ [Struktur konfigurasi root](#root-configuration-structure)
+ [Pengaturan global](#global-settings)
+ [Variabel dan manajemen data](#variables-data-management)
+ [Definisi langkah](#step-definitions)
+ [Periksa jenis](#check-types)
+ [Metode autentikasi](#authentication-methods)
+ [Pernyataan dan validasi](#assertions-validation)
+ [Ekstraksi data](#data-extraction)

## Struktur konfigurasi root
<a name="root-configuration-structure"></a>

Konfigurasi root mendefinisikan keseluruhan struktur canary cetak biru API tingkat lanjut Anda.


**Properti skema**  

| Properti | Tipe | Diperlukan | Deskripsi | 
| --- | --- | --- | --- | 
|  globalSettings  | Objek | Tidak | Konfigurasi default diterapkan ke semua langkah | 
|  variables  | Objek | Tidak | Nilai yang dapat digunakan kembali di seluruh langkah (maks 10) | 
|  steps  | Objek |  Ya  | Pengumpulan langkah pemantauan (1-10 langkah) | 

 **Contoh** 

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

 **Aturan validasi** 
+ Harus berisi setidaknya satu langkah
+ Maksimal 10 langkah diizinkan
+ Tidak ada properti tambahan yang diizinkan di luar`globalSettings`,` variables`, dan `steps`

## Pengaturan global
<a name="global-settings"></a>

Pengaturan global menyediakan konfigurasi default yang berlaku untuk semua langkah kecuali diganti pada tingkat langkah.

 **Sifat-sifat** 


**Properti pengaturan global**  

| Properti | Tipe | Default | Kisaran | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  stepTimeout  | Integer | 30000 | 5000-300000 | Batas waktu default untuk semua langkah (milidetik) | 

 **Contoh** 

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

## Variabel dan manajemen data
<a name="variables-data-management"></a>

Variabel memungkinkan Anda untuk menentukan nilai yang dapat digunakan kembali yang dapat direferensikan di seluruh konfigurasi Anda menggunakan `${variableName}` sintaks.

 **Properti variabel** 


| Properti | Tipe | Deskripsi | 
| --- | --- | --- | 
| Nama variabel | string | Harus cocok pola ^[a-zA-Z][a-zA-Z0-9\$1]\$1\$1 | 
| Nilai variabel | string | Nilai string apa pun | 

 **Batasan** 
+ Maksimum 10 variabel per konfigurasi
+ Nama variabel harus dimulai dengan huruf
+ Nama variabel hanya dapat berisi huruf, angka, dan garis bawah
+ Panjang maksimum tidak ditentukan dalam skema

 **Contoh** 

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

 **Penggunaan konfigurasi** 

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

## Definisi langkah
<a name="step-definitions"></a>

Langkah-langkah menentukan operasi pemantauan individu. Setiap langkah diberi nomor dari 1 hingga 10 dan berisi jenis cek tertentu.

 *Properti langkah umum* 


| Properti | Tipe | Diperlukan | Deskripsi | 
| --- | --- | --- | --- | 
|  stepName  | string |  Ya  | Pengidentifikasi unik untuk langkah | 
|  checkerType  | string |  Ya  | Jenis cek:HTTP,DNS,SSL,  TCP | 
|  extractors  | array | Tidak | Konfigurasi ekstraksi data | 

 *Validasi nama langkah* 
+ Pola - ^ [A-za-z] [A-za-Z0-9\$1-] \$1\$1
+ Panjang maksimum - 64 karakter
+ Harus dimulai dengan surat

 *Penomoran langkah* 
+ Langkah-langkah diberi nomor sebagai tombol string: “1", “2",..., “10"
+ Pola: ^ ([1-9] \$110) \$1
+ Minimal 1 langkah yang diperlukan
+ Maksimal 10 langkah diizinkan

 *Contoh* 

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

## Periksa jenis
<a name="check-types"></a>

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

Pantau titik akhir web dan APIs dengan validasi permintaan dan respons yang komprehensif.

 **Properti yang dibutuhkan** 


| Properti | Tipe | Deskripsi | 
| --- | --- | --- | 
|  url  | string | URL target (harus format URI yang valid) | 
|  httpMethod  | string | Metode HTTP: GETPOST,PUT, PATCH,DELETE,HEAD, OPTIONS | 

 **Properti opsional** 


| Properti | Tipe | Default | Kisaran | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  timeout  | Integer | 30000 | 5000-300000 | Minta batas waktu (milidetik) | 
|  waitTime  | integer | 0 | 0-60 | Tunda sebelum permintaan (detik) | 
|  headers  | object | - | - | Header HTTP kustom | 
|  body  | string | - | - | Permintaan badan untuk POST/PUT operasi | 
|  authentication  | object | - | - | Konfigurasi autentikasi | 
|  assertions  | array | - | - | Aturan validasi respons | 

 **Contoh** 

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

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

Validasi resolusi DNS dan merekam informasi.

 **Properti yang dibutuhkan** 


| Properti | Tipe | Deskripsi | 
| --- | --- | --- | 
|  domain  | string | Nama domain untuk kueri (format nama host) | 

 **Properti opsional** 


| Properti | Tipe | Default | Deskripsi | 
| --- | --- | --- | --- | 
|  recordType  | string | “A” | Jenis catatan DNS:A,,CNAME,MX,  TXT NS | 
|  nameserver  | string | - | Server DNS khusus untuk kueri | 
|  timeout  | integer | 30000 | Batas waktu kueri (5000-300000ms) | 
|  port  | integer | 53 | Port server DNS (1-65535) | 
|  protocol  | string | “UDP” | Protokol: UDP atau TCP | 
|  assertions  | array | - | Aturan validasi respons DNS | 

 **Contoh** 

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

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

Pantau kesehatan dan konfigurasi sertifikat SSL.

 **Properti yang dibutuhkan** 


| Properti | Tipe | Deskripsi | 
| --- | --- | --- | 
|  hostname  | string | Target nama host (format nama host) | 

 **Properti opsional** 


| Properti | Tipe | Default | Deskripsi | 
| --- | --- | --- | --- | 
|  port  | Integer | 443 | Port SSL (1-65535) | 
|  timeout  | integer | 30000 | Batas waktu koneksi (5000-300000ms) | 
|  sni  | boolean | BETUL | Indikasi Nama Server | 
|  verifyHostname  | boolean | BETUL | Verifikasi nama host | 
|  allowSelfSigned  | boolean | SALAH | Terima sertifikat yang ditandatangani sendiri | 
|  assertions  | array | - | Aturan validasi sertifikat | 

 **Contoh** 

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

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

Uji konektivitas port TCP dan validasi respons.

 **Properti yang dibutuhkan** 


| Properti | Tipe | Deskripsi | 
| --- | --- | --- | 
|  hostname  | string | Target nama host (format nama host) | 
|  port  | integer | Port target (1-65535) | 

 **Properti opsional** 


| Properti | Tipe | Default | Deskripsi | 
| --- | --- | --- | --- | 
|  timeout  | Integer | 30000 | Batas waktu keseluruhan (5000-300000ms) | 
|  connectionTimeout  | integer | 3000 | Batas waktu koneksi (5000-300000ms) | 
|  readTimeout  | integer | 2000 | Batas waktu baca data (5000-300000ms) | 
|  sendData  | string | - | Data untuk dikirim setelah koneksi | 
|  expectedResponse  | string | - | Data respons yang diharapkan | 
|  encoding  | string | “UTF-8" | Pengkodean data:UTF-8,, ASCII HEX | 
|  assertions  | array | - | Koneksi dan validasi respons | 

 **Contoh** 

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

## Metode autentikasi
<a name="authentication-methods"></a>

 **Tidak ada otentikasi** 

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

 **Otentikasi dasar** 


| Properti | Tipe | Diperlukan | Deskripsi | 
| --- | --- | --- | --- | 
|  type  | string |  Ya  | Harus "BASIC" | 
|  username  | string |  Ya  | Nama pengguna untuk otentikasi | 
|  password  | string |  Ya  | Kata sandi untuk otentikasi | 

 **Contoh** 

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

 **Otentikasi kunci API** 


| Properti | Tipe | Diperlukan | Default | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Ya  | - | Harus "API\$1KEY" | 
|  apiKey  | string |  Ya  | - | Nilai kunci API | 
|  headerName  | string | Tidak | “Tombol X-api” | Nama header untuk kunci API | 

 **Contoh** 

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

 **OAuth kredensi klien** 


| Properti | Tipe | Diperlukan | Default | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Ya  | - | Harus "OAUTH\$1CLIENT\$1CREDENTIALS" | 
|  tokenUrl  | string |  Ya  | - | OAuth URL titik akhir token | 
|  clientId  | string |  Ya  | - | OAuth ID klien | 
|  clientSecret  | string |  Ya  | - | OAuth rahasia klien | 
|  scope  | string | Tidak | - | OAuth ruang lingkup | 
|  audience  | string | Tidak | - | OAuth penonton | 
|  resource  | string | Tidak | - | OAuth sumber daya | 
|  tokenApiAuth  | array | Tidak | - | Metode autentikasi Token API:BASIC\$1AUTH\$1HEADER, REQUEST\$1BODY | 
|  tokenCacheTtl  | integer | Tidak | 3600 | Token cache TTL (minimal 60 detik) | 

 **Contoh** 

```
{
  "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 Tanda Tangan (Versi 4)** 


| Properti | Tipe | Diperlukan | Deskripsi | 
| --- | --- | --- | --- | 
|  type  | string |  Ya  | Harus "SIGV4" | 
|  service  | string |  Ya  | Nama AWS layanan (misalnya, “execute-api”) | 
|  region  | string |  Ya  | AWS wilayah | 
|  roleArn  | string |  Ya  | IAM peran ARN untuk penandatanganan | 

 **Contoh** 

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

## Pernyataan dan validasi
<a name="assertions-validation"></a>

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

 **Pernyataan kode status** 


| Properti | Tipe | Diperlukan | Deskripsi | 
| --- | --- | --- | --- | 
|  type  | string |  Ya  | Harus "STATUS\$1CODE" | 
|  operator  | string |  Ya  | EQUALS, NOT\$1EQUALS, GREATER\$1THAN,  LESS\$1THAN, IN\$1RANGE | 
|  value  | bilangan bulat | Bersyarat | Kode status HTTP (100-599) | 
|  rangeMin  | integer | Bersyarat | Nilai rentang minimum (untukIN\$1RANGE) | 
|  rangeMax  | integer | Bersyarat | Nilai rentang maksimum (untukIN\$1RANGE) | 

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

 **Pernyataan waktu respons** 


| Properti | Tipe | Diperlukan | Default | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Ya  | - | Harus "RESPONSE\$1TIME" | 
|  operator  | string |  Ya  | - | LESS\$1THAN, GREATER\$1THAN, EQUALS | 
|  value  | number |  Ya  | - | Nilai waktu (minimum 0) | 
|  unit  | string | Tidak | “MILIDETIK” | Harus "MILLISECONDS" | 

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

 **Pernyataan kepala** 


| Properti | Tipe | Diperlukan | Deskripsi | 
| --- | --- | --- | --- | 
|  type  | string |  Ya  | Harus "HEADER" | 
|  headerName  | string |  Ya  | Nama header untuk memvalidasi | 
|  operator  | string |  Ya  | EQUALS, NOT\$1EQUALS, CONTAINS,  NOT\$1CONTAINS, REGEX\$1MATCH, EXIST | 
|  value  | senar/boolean | Bersyarat | Nilai yang diharapkan (boolean untuk EXIST operator) | 

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

 **Pernyataan tubuh** 


| Properti | Tipe | Diperlukan | Default | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Ya  | - | Harus "BODY" | 
|  target  | string | Tidak | “JSON” | JSON atau TEXT | 
|  path  | string | Bersyarat | - | JSONPath (diperlukan untuk target JSON) | 
|  operator  | string |  Ya  | - | CONTAINS, NOT\$1CONTAINS, EQUALS,  NOT\$1EQUALS, EXISTS | 
|  value  | senar/boolean |  Ya  | - | Nilai yang diharapkan (boolean untuk EXISTS operator) | 

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

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

 **Catat pernyataan nilai** 


| Properti | Tipe | Diperlukan | Kisaran | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Ya  | - | Harus "RECORD\$1VALUE" | 
|  operator  | string |  Ya  | - | EQUALS, NOT\$1EQUALS, CONTAINS,  NOT\$1CONTAINS, REGEX\$1MATCH | 
|  value  | string |  Ya  | - | Nilai rekor yang diharapkan | 

 **Rekam penegasan hitungan** 


| Properti | Tipe | Diperlukan | Kisaran | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Ya  | - | Harus "RECORD\$1COUNT" | 
|  operator  | string |  Ya  | - | EQUALS, GREATER\$1THAN, LESS\$1THAN | 
|  value  | bilangan bulat |  Ya  | ≥ 0 | Jumlah yang diharapkan (minimum 0) | 

 **Pernyataan otoritatif** 


| Properti | Tipe | Diperlukan | Kisaran | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Ya  | - | Harus "AUTHORITATIVE" | 
|  value  | boolean |  Ya  | - | Status otoritatif yang diharapkan | 

 **Pernyataan TTL** 


| Properti | Tipe | Diperlukan | Kisaran | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Ya  | - | Harus "TTL" | 
|  operator  | string |  Ya  | - | EQUALS, GREATER\$1THAN, LESS\$1THAN | 
|  value  | bilangan bulat |  Ya  | ≥ 0 | TTL yang diharapkan (minimal 0) | 

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

 **Pernyataan kedaluwarsa sertifikat** 


| Properti | Tipe | Diperlukan | Default | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Ya  | - | Harus "CERTIFICATE\$1EXPIRY" | 
|  operator  | string |  Ya  | - | GREATER\$1THAN, LESS\$1THAN | 
|  value  | bilangan bulat |  Ya  | - | Nilai waktu (minimum 0) | 
|  unit  | string | Tidak | “HARI” | DAYS, HOURS | 

 **Pernyataan subjek sertifikat** 


| Properti | Tipe | Diperlukan | Default | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Ya  | - | Harus "CERTIFICATE\$1SUBJECT" | 
|  field  | string |  Ya  | - | Bidang subjek:CN,O,OU,C,ST, L | 
|  operator  | string |  Ya  | - | CONTAINS, EQUALS, REGEX\$1MATCH | 
|  value  | string |  Ya  | - | Nilai bidang yang diharapkan | 

 **Pernyataan penerbit sertifikat** 


| Properti | Tipe | Diperlukan | Default | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Ya  | - | Harus "CERTIFICATE\$1ISSUER" | 
|  field  | string |  Ya  | - | Bidang penerbit:CN, O | 
|  operator  | string |  Ya  | - | CONTAINS, EQUALS | 
|  value  | string |  Ya  | - | Nilai bidang yang diharapkan | 

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

 **Pernyataan keberhasilan koneksi** 


| Properti | Tipe | Diperlukan | Default | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Ya  | - | Harus "CONNECTION\$1SUCCESSFUL" | 
|  value  | boolean |  Ya  | - | Status koneksi yang diharapkan | 

 **Pernyataan data respons** 


| Properti | Tipe | Diperlukan | Default | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Ya  | - | Harus "RESPONSE\$1DATA" | 
|  operator  | string |  Ya  | - | CONTAINS, EQUALS, NOT\$1CONTAINS,  REGEX\$1MATCH, STARTS\$1WITH, ENDS\$1WITH | 
|  value  | string |  Ya  | - | Data respons yang diharapkan | 
|  encoding  | string | Tidak | “UTF-8" | UTF-8, ASCII, HEX | 

## Ekstraksi data
<a name="data-extraction"></a>

Ekstraktor memungkinkan Anda untuk menangkap data dari tanggapan untuk digunakan dalam langkah berikutnya atau untuk tujuan pelaporan.

 **Sifat ekstraksi** 


| Properti | Tipe | Diperlukan | Default | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  name  | string |  Ya  | - | Nama variabel untuk data yang diekstraksi | 
|  type  | string |  Ya  | - | Jenis ekstraksi: BODY | 
|  path  | string | Tidak | - | JSONPath untuk ekstraksi tubuh | 
|  regex  | string | Tidak | - | Pola ekspresi reguler | 
|  regexGroup  | integer | Tidak | 0 | Grup penangkapan Regex (minimal 0) | 

 **Validasi nama ekstraksi** 
+ Pola: `^[a-zA-Z][a-zA-Z0-9_]*$`
+ Harus dimulai dengan surat
+ Dapat berisi huruf, angka, dan garis bawah

**Batasan** - Substitusi tidak berlaku untuk bidang dalam skema yang memiliki nilai ENUM tertentu

 **Jenis ekstraksi** 

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

# Fungsi pustaka tersedia untuk skrip canary
<a name="CloudWatch_Synthetics_Canaries_Function_Library"></a>

CloudWatch Synthetics mencakup beberapa kelas dan fungsi bawaan yang dapat Anda panggil saat menulis skrip Node.js untuk digunakan sebagai kenari.

Sebagian berlaku untuk canary UI dan API. Lainnya hanya berlaku untuk canary UI. Canary UI adalah canary yang menggunakan fungsi `getPage()` dan menggunakan Puppeteer sebagai pemicu web untuk menavigasi dan berinteraksi dengan halaman web.

**catatan**  
Setiap kali Anda meningkatkan canary untuk menggunakan versi baru runtime Synthetics, semua fungsi pustaka Synthetics yang digunakan canary Anda juga secara otomatis ditingkatkan ke versi NodeJS yang sama dengan yang didukung runtime Synthetics.

**Topics**
+ [Fungsi perpustakaan tersedia untuk Node.js canary](Library_function_Nodejs.md)
+ [Fungsi perpustakaan tersedia untuk kenari Java](CloudWatch_Synthetics_Canaries_Java.md)
+ [Fungsi pustaka tersedia untuk skrip canary Node.js menggunakan Playwright](CloudWatch_Synthetics_Canaries_Nodejs_Playwright.md)
+ [Fungsi perpustakaan tersedia untuk skrip kenari Node.js menggunakan Puppeteer](CloudWatch_Synthetics_Canaries_Library_Nodejs.md)
+ [Fungsi pustaka tersedia untuk skrip canary Python yang menggunakan Selenium](CloudWatch_Synthetics_Canaries_Library_Python.md)

# Fungsi perpustakaan tersedia untuk Node.js canary
<a name="Library_function_Nodejs"></a>

Bagian ini menjelaskan fungsi pustaka yang tersedia untuk skrip canary menggunakan runtime 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,, [StepConfig] functionToExecute)](#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` menjelaskan kesalahan dan `ex` adalah pengecualian yang ditemui

Anda dapat menggunakan `addExecutionError` untuk mengatur kesalahan eksekusi bagi canary Anda. Itu menggagalkan canary tanpa mengganggu eksekusi skrip. Itu juga tidak memengaruhi metrik `successPercent` Anda.

Anda harus melacak kesalahan sebagai kesalahan eksekusi hanya jika kesalahan itu tidak penting untuk menunjukkan keberhasilan atau kegagalan skrip canary Anda.

Contoh penggunaan `addExecutionError` adalah sebagai berikut. Anda memantau ketersediaan titik akhir Anda dan mengambil tangkapan layar setelah halaman dimuat. Karena kegagalan mengambil tangkapan layar tidak menentukan ketersediaan titik akhir, Anda dapat menangkap kesalahan apa pun yang dihadapi saat mengambil tangkapan layar dan menambahkannya sebagai kesalahan eksekusi. Metrik ketersediaan Anda masih akan menunjukkan bahwa titik akhir telah aktif dan berjalan, namun status canary Anda akan ditandai sebagai gagal. Blok kode sampel berikut menangkap kesalahan tersebut dan menambahkannya sebagai kesalahan eksekusi.

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

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

Mengembalikan nama dari canary.

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

Mengembalikan ARN dari canary.

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

Mengembalikan agen pengguna kustom dari canary.

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

Fungsi ini tersedia pada versi runtime `syn-nodejs-3.0` dan yang lebih baru. Fungsi ini mengembalikan versi runtime Synthetics dari canary. Misalnya,nilai yang dikembalikan bisa menjadi `syn-nodejs-3.0`.

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

Mengambil level log saat ini untuk pustaka Synthetics. Nilai yang mungkin adalah sebagai berikut:
+ `0` – Debug
+ `1` – Info
+ `2` – Peringatan
+ `3` – Kesalahan

Contoh:

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

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

Mengatur tingkat log untuk pustaka Sintetis. Nilai yang mungkin adalah sebagai berikut:
+ `0` – Debug
+ `1` – Info
+ `2` – Peringatan
+ `3` – Kesalahan

Contoh:

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

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

Menjalankan langkah yang disediakan, membungkusnya dengan start/pass/fail logging and pass/fail dan metrik durasi.

Fungsi `executeStep` juga melakukan hal berikut:
+ Log bahwa langkah dimulai
+ Memulai timer
+ Mengeksekusi fungsi yang disediakan
+ Ketika fungsi kembali normal, itu dihitung sebagai passing. Jika fungsi melempar, itu dianggap gagal
+ Mengakhiri timer
+ Mencatat log jika langkah berhasil atau gagal
+ Memancarkan `stepName SuccessPercent` metrik, 100 untuk lulus atau 0 untuk kegagalan
+ Memancarkan`stepName Duration metric`, dengan nilai berdasarkan waktu mulai dan akhir langkah
+ Mengembalikan apa yang functionToExecute dikembalikan atau kembali melempar apa yang dilemparkan ` functionToExecute`
+ Menambahkan ringkasan eksekusi langkah ke laporan kenari

 **Contoh** 

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

Mengeksekusi permintaan HTTP yang disediakan sebagai langkah, dan menerbitkan `SuccessPercent` (lulus/gagal) dan metrik `Duration`.

**executeHttpStep**menggunakan fungsi asli HTTP atau HTTPS di bawah tenda, tergantung pada protokol yang ditentukan dalam permintaan.

Fungsi ini juga menambahkan ringkasan pelaksanaan langkah ke laporan canary. Ringkasan mencakup detail tentang setiap permintaan HTTP, seperti berikut ini:
+ Waktu mulai
+ Waktu akhir
+ Status (LULUS/GAGAL)
+ Alasan kegagalan, jika gagal
+ Detail panggilan HTTP seperti request/response header, body, kode status, pesan status, dan timing kinerja. 

**Topics**
+ [Parameter](#Library_function_Nodejs_executeHttpStep_parameters_Nodecanary)
+ [Contoh penggunaan executeHttpStep](#Library_function_Nodejs_executeHttpStep_examples_Nodecanary)

### Parameter
<a name="Library_function_Nodejs_executeHttpStep_parameters_Nodecanary"></a>

 **StepName () *String*** 

Menentukan nama dari langkah tersebut. Nama ini juga digunakan untuk menerbitkan CloudWatch metrik untuk langkah ini.

 **requestOptions () *Object or String*** 

Nilai parameter ini dapat berupa URL, string URL, atau sebuah objek. Jika itu adalah objek, maka itu harus berupa serangkaian opsi yang dapat dikonfigurasi untuk membuat permintaan HTTP. Ini mendukung semua opsi di [http.request(options[, callback])](https://nodejs.org/api/http.html#http_http_request_options_callback) dalam dokumentasi Node.js.

Selain opsi Node.js ini, **requestOptions** mendukung parameter tambahan `body`. Anda dapat menggunakan parameter `body` untuk meneruskan data sebagai bodi permintaan.

 **panggilan balik () *response*** 

(Opsional) Ini adalah fungsi pengguna yang diinvokasi dengan respons HTTP. Responsnya adalah dari tipe [Class: http. IncomingMessage](https://nodejs.org/api/http.html#http_class_http_incomingmessage).

 **StepConfig () *object*** 

(Opsional) Gunakan parameter ini untuk mengganti konfigurasi synthetics global dengan konfigurasi yang berbeda untuk langkah ini.

### Contoh penggunaan executeHttpStep
<a name="Library_function_Nodejs_executeHttpStep_examples_Nodecanary"></a>

Rangkaian contoh berikut membangun satu sama lain untuk menggambarkan berbagai penggunaan opsi ini.

Contoh pertama ini mengonfigurasi parameter permintaan. Anda dapat meneruskan URL sebagai **requestOptions**:

```
let requestOptions = 'https://www.amazon.com';
```

Atau Anda dapat meneruskan satu set opsi:

```
let requestOptions = {
        'hostname': 'myproductsEndpoint.com',
        'method': 'GET',
        'path': '/test/product/validProductName',
        'port': 443,
        'protocol': 'https:'
    };
```

Contoh berikutnya menciptakan fungsi callback yang menerima respons. Secara default, jika Anda tidak menentukan **callback**, CloudWatch Synthetics memvalidasi bahwa statusnya antara 200 dan 299 inklusif.

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

Contoh berikutnya membuat konfigurasi untuk langkah ini yang mengesampingkan konfigurasi Synthetics global CloudWatch . Konfigurasi langkah dalam contoh ini memungkinkan header permintaan, header respons, bodi permintaan (data posting), dan bodi respons dalam laporan Anda dan membatasi nilai header 'X-Amz-Security-Token' dan 'Authorization'. Secara bawaan, nilai-nilai ini tidak termasuk dalam laporan untuk alasan keamanan. Jika Anda memilih untuk memasukkannya, data hanya disimpan dalam bucket S3 Anda.

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

Contoh terakhir ini meneruskan permintaan Anda ke **executeHttpStep**dan memberi nama langkahnya.

```
await synthetics.executeHttpStep('Verify GET products API', requestOptions, callback, stepConfig);
```

**Dengan kumpulan contoh ini, CloudWatch Synthetics menambahkan detail dari setiap langkah dalam laporan Anda dan menghasilkan metrik untuk setiap langkah menggunakan StepName.**

 Anda akan melihat metrik `successPercent` dan `duration` untuk langkah `Verify GET products API`. Anda dapat memantau performa API Anda dengan memantau metrik untuk langkah panggilan API Anda. 

Untuk sampel skrip lengkap yang menggunakan fungsi-fungsi ini, silakan lihat [Canary API multi-langkah](CloudWatch_Synthetics_Canaries_Samples.md#CloudWatch_Synthetics_Canaries_Samples_APIsteps).

# Fungsi perpustakaan tersedia untuk kenari Java
<a name="CloudWatch_Synthetics_Canaries_Java"></a>

`executeStep`Fungsi ini digunakan untuk memodulasi kode kenari dan menjalankannya dalam langkah-langkah. Dalam CloudWatch Synthetics, langkah Synthetics adalah cara untuk memecah skrip kenari Anda menjadi serangkaian tindakan yang didefinisikan dengan jelas, memungkinkan Anda untuk memantau berbagai bagian perjalanan aplikasi Anda secara terpisah. Untuk setiap langkah, CloudWatch Synthetics melakukan hal berikut:
+ Laporan, termasuk ringkasan detail eksekusi langkah seperti durasi langkah, status *lulus* atau *gagal*, dan sebagainya, dibuat untuk setiap proses kenari. Saat Anda memilih run di konsol CloudWatch Synthetics, Anda dapat melihat detail eksekusi setiap langkah pada tab **Step**.
+ *SuccessPercent*dan CloudWatch Metrik *durasi* dipancarkan untuk setiap langkah, memungkinkan pengguna untuk memantau ketersediaan dan latensi setiap langkah.

   **Penggunaan** 

  ```
  synthetics.executeStep(stepName,()->{
      try {
          //step code to be executed
          return null;
      } catch (Exception e) {
          throw e;
      }
  }).get();
  ```

   **Parameter** 
  + *StepName*, String (wajib) - Sebuah nama deskriptif dari langkah Synthetics
  + *fungsi untuk mengeksekusi*, Callable <T>(wajib) - Merupakan tugas yang akan dieksekusi
  + *StepOptions*, `com.amazonaws.synthetics.StepOptions (optional)` — StepOptions objek yang dapat digunakan untuk mengkonfigurasi eksekusi langkah. 

    *StepConfiguration*, ` com.amazonaws.synthetics.StepConfiguration` (diperlukan sebagai bagian dari StepOptions)

 **Pengembalian** 

Nilai yang dikembalikan adalah *CompletableFuture*<T>.

**catatan**  
Synthetics hanya mendukung langkah berurutan. Pastikan untuk memanggil `.get()` metode seperti yang ditunjukkan pada contoh untuk memastikan bahwa langkah selesai sebelum melanjutkan ke langkah berikutnya.

# Fungsi pustaka tersedia untuk skrip canary Node.js menggunakan Playwright
<a name="CloudWatch_Synthetics_Canaries_Nodejs_Playwright"></a>

Bagian ini menjelaskan fungsi pustaka yang tersedia untuk skrip canary menggunakan runtime Node.js Playwright.

**Topics**
+ [meluncurkan](#Synthetics_Library_Nodejs_Playwright_functions)
+ [Halaman baru](#Synthetics_Library_Nodejs_Playwright_function_newPage)
+ [tutup](#Synthetics_Library_Nodejs_Playwright_function_close)
+ [getDefaultLaunchPilihan](#Synthetics_Library_Nodejs_Playwright_function_getDefaultLaunchOptions)
+ [executeStep](#Synthetics_Library_Nodejs_Playwright_function_executeStep)

## meluncurkan
<a name="Synthetics_Library_Nodejs_Playwright_functions"></a>

Fungsi ini meluncurkan browser Chromium menggunakan fungsi peluncuran Playwright, dan mengembalikan objek browser. Ini mendekompresi binari browser dan meluncurkan browser chromium dengan menggunakan opsi default yang cocok untuk browser tanpa kepala. Untuk informasi selengkapnya tentang `launch` fungsi ini, lihat [https://playwright.dev/docs/api/class-browsertype#browser-type-launch](https://playwright.dev/docs/api/class-browsertype#browser-type-launch)di dokumentasi Playwright.

 **Penggunaan** 

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

 **Argumen** 

`options`[opsi](https://playwright.dev/docs/api/class-browsertype#browser-type-launch) (opsional) adalah serangkaian opsi yang dapat dikonfigurasi untuk browser.

 **Pengembalian** 

Janji `<Browser>` di mana [Browser](https://playwright.dev/docs/api/class-browser) adalah contoh browser Playwright.

Jika fungsi ini dipanggil lagi, browser yang sebelumnya dibuka ditutup sebelum memulai browser baru. Anda dapat mengganti parameter peluncuran yang digunakan oleh CloudWatch Synthetics, dan meneruskan parameter tambahan saat meluncurkan browser. Misalnya, cuplikan kode berikut meluncurkan browser dengan argumen default dan jalur default yang dapat dieksekusi, tetapi dengan viewport 800 x 600 piksel. Untuk informasi selengkapnya, lihat [Opsi peluncuran Playwright di dokumentasi](https://playwright.dev/docs/api/class-browsertype#browser-type-launch) Playwright.

```
const browser = await synthetics.launch({
  defaultViewport: { 
      "deviceScaleFactor": 1, 
      "width": 800,
      "height": 600 
}});
```

 Anda juga dapat menambahkan atau mengganti flag Chromium yang diteruskan secara default ke browser. Misalnya, Anda dapat menonaktifkan keamanan web dengan menambahkan `--disable-web-security` tanda ke argumen dalam parameter peluncuran 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
  });
```

## Halaman baru
<a name="Synthetics_Library_Nodejs_Playwright_function_newPage"></a>

`newPage()`Fungsi membuat dan mengembalikan halaman Playwright baru. Synthetics secara otomatis menyiapkan koneksi Chrome DevTools Protocol (CDP) untuk mengaktifkan tangkapan jaringan untuk pembuatan arsip HTTP (HAR).

 **Penggunaan** 

Gunakan `newPage()` salah satu cara berikut:

 **1. Membuat halaman baru dalam konteks browser baru:** 

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

 **2. Membuat halaman baru dalam konteks browser tertentu:** 

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

 **Argumen** 

Menerima contoh Playwright [Browser](https://playwright.dev/docs/api/class-browser) atau contoh Playwright. [ BrowserContext](https://playwright.dev/docs/api/class-browsercontext) 

 **Pengembalian** 

Janji <Page>di mana Page adalah contoh [Halaman](https://playwright.dev/docs/api/class-page) Penulis Naskah.

## tutup
<a name="Synthetics_Library_Nodejs_Playwright_function_close"></a>

Menutup browser yang saat ini dibuka.

 **Penggunaan** 

```
await synthetics.close();
```

Disarankan untuk menutup browser di `finally` blok skrip Anda.

 **Argumen** 

Tidak ada 

 **Pengembalian** 

Mengembalikan Promise <void>yang digunakan oleh fungsi peluncuran Synthetics untuk meluncurkan browser.

## getDefaultLaunchPilihan
<a name="Synthetics_Library_Nodejs_Playwright_function_getDefaultLaunchOptions"></a>

`getDefaultLaunchOptions()`Fungsi mengembalikan opsi peluncuran browser yang digunakan oleh CloudWatch Synthetics.

 **Penggunaan** 

```
const defaultOptions = await synthetics.getDefaultLaunchOptions();
```

 **Argumen** 

Tidak ada 

 **Pengembalian** 

Mengembalikan [opsi peluncuran](https://playwright.dev/docs/api/class-browsertype#browser-type-launch) Playwright yang digunakan oleh `launch` fungsi Synthetics untuk meluncurkan browser.

## executeStep
<a name="Synthetics_Library_Nodejs_Playwright_function_executeStep"></a>

`executeStep`Fungsi ini digunakan untuk mengeksekusi langkah dalam skrip Synthetics. Dalam CloudWatch Synthetics, langkah Synthetics adalah cara untuk memecah skrip kenari Anda menjadi serangkaian tindakan yang didefinisikan dengan jelas, memungkinkan Anda untuk memantau berbagai bagian perjalanan aplikasi Anda secara terpisah. Untuk setiap langkah, CloudWatch Synthetics melakukan hal berikut:
+ Secara otomatis menangkap tangkapan layar sebelum langkah dimulai dan setelah langkah selesai. Anda juga dapat menangkap tangkapan layar dalam satu langkah. Screenshot ditangkap secara default, tetapi dapat dimatikan dengan menggunakan konfigurasi Synthetics.
+ Laporan, termasuk ringkasan, detail eksekusi langkah seperti durasi langkah, `pass` atau `fail` status, halaman sumber dan tujuan, tangkapan layar terkait URLs, dll. Dibuat untuk setiap proses kenari. Saat Anda memilih run di konsol CloudWatch Synthetics, Anda dapat melihat detail eksekusi setiap langkah pada tab **Step**.
+ `SuccessPercent`dan `Duration` CloudWatch metrik dipancarkan untuk setiap langkah, memungkinkan pengguna untuk memantau ketersediaan dan latensi setiap langkah.

 **Penggunaan** 

```
await synthetics.executeStep("mystepname", async function () {
  await page.goto(url, { waitUntil: 'load', timeout: 30000 });
}
```

**catatan**  
Langkah-langkah harus berjalan secara berurutan. Pastikan untuk menggunakan `await` janji.

 **Argumen** 
+ `stepName`string (wajib) (boolean) — Nama langkah Synthetics. 
+ `functionToExecute`fungsi async (wajib) - Fungsi yang ingin Anda jalankan Synthetics. Fungsi ini harus berisi logika untuk langkah tersebut.
+ `stepConfig`objek (opsional) - Konfigurasi langkah mengesampingkan konfigurasi Synthetics global untuk langkah ini.
  + `continueOnStepFailure`boolean (opsional) - Apakah akan terus menjalankan skrip kenari setelah langkah ini gagal. 
  + `screenshotOnStepStart`boolean (opsional) - Apakah akan mengambil tangkapan layar di awal langkah ini. 
  + `screenshotOnStepSuccess`boolean (opsional) - Apakah akan mengambil tangkapan layar jika langkah ini berhasil. 
  + `screenshotOnStepFailure`boolean (opsional) - Apakah akan mengambil tangkapan layar jika langkah ini gagal. 
+ `page`- Objek halaman penulis naskah (opsional)

  Sebuah objek halaman penulis naskah. Synthetics menggunakan objek halaman ini untuk menangkap tangkapan layar dan. URLs Secara default, Synthetics menggunakan halaman Playwright yang dibuat ketika `synthetics.newPage()` fungsi dipanggil untuk menangkap detail halaman seperti screenshot dan. URLs

 **Pengembalian** 

Mengembalikan Promise yang menyelesaikan dengan nilai yang dikembalikan oleh fungsi. ` functionToExecute` Untuk contoh skrip, lihat [Kode sampel untuk skrip canary](CloudWatch_Synthetics_Canaries_Samples.md) di panduan ini.

# Fungsi perpustakaan tersedia untuk skrip kenari Node.js menggunakan Puppeteer
<a name="CloudWatch_Synthetics_Canaries_Library_Nodejs"></a>

Bagian ini menjelaskan fungsi perpustakaan yang tersedia untuk skrip canary Node.js.

**Topics**
+ [Kelas dan fungsi pustaka Node.js yang berlaku untuk semua canary](#CloudWatch_Synthetics_Library_allcanaries)
+ [Kelas dan fungsi pustaka Node.js yang hanya berlaku untuk canary UI](#CloudWatch_Synthetics_Library_UIcanaries)
+ [Kelas dan fungsi pustaka Node.js yang hanya berlaku untuk canary API](#CloudWatch_Synthetics_Library_APIcanaries)

## Kelas dan fungsi pustaka Node.js yang berlaku untuk semua canary
<a name="CloudWatch_Synthetics_Library_allcanaries"></a>

Fungsi pustaka CloudWatch Synthetics berikut untuk Node.js berguna untuk semua kenari.

**Topics**
+ [Kelas Synthetics](#CloudWatch_Synthetics_Library_Synthetics_Class_all)
+ [SyntheticsConfiguration kelas](#CloudWatch_Synthetics_Library_SyntheticsConfiguration)
+ [Logger Synthetic](#CloudWatch_Synthetics_Library_SyntheticsLogger)
+ [SyntheticsLogHelper kelas](#CloudWatch_Synthetics_Library_SyntheticsLogHelper)

### Kelas Synthetics
<a name="CloudWatch_Synthetics_Library_Synthetics_Class_all"></a>

Fungsi berikut untuk semua canary berada di kelas 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` menjelaskan kesalahan dan `ex` adalah pengecualian yang ditemui

Anda dapat menggunakan `addExecutionError` untuk mengatur kesalahan eksekusi bagi canary Anda. Itu menggagalkan canary tanpa mengganggu eksekusi skrip. Itu juga tidak memengaruhi metrik `successPercent` Anda.

Anda harus melacak kesalahan sebagai kesalahan eksekusi hanya jika kesalahan itu tidak penting untuk menunjukkan keberhasilan atau kegagalan skrip canary Anda.

Contoh penggunaan `addExecutionError` adalah sebagai berikut. Anda memantau ketersediaan titik akhir Anda dan mengambil tangkapan layar setelah halaman dimuat. Karena kegagalan mengambil tangkapan layar tidak menentukan ketersediaan titik akhir, Anda dapat menangkap kesalahan apa pun yang dihadapi saat mengambil tangkapan layar dan menambahkannya sebagai kesalahan eksekusi. Metrik ketersediaan Anda masih akan menunjukkan bahwa titik akhir telah aktif dan berjalan, namun status canary Anda akan ditandai sebagai gagal. Blok kode sampel berikut menangkap kesalahan tersebut dan menambahkannya sebagai kesalahan eksekusi.

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

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

Mengembalikan nama dari canary.

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

Mengembalikan ARN dari canary.

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

Mengembalikan agen pengguna kustom dari canary.

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

Fungsi ini tersedia dalam versi runtime `syn-nodejs-puppeteer-3.0` dan yang lebih baru. Fungsi ini mengembalikan versi runtime Synthetics dari canary. Misalnya,nilai yang dikembalikan bisa menjadi `syn-nodejs-puppeteer-3.0`.

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

Mengambil level log saat ini untuk pustaka Synthetics. Nilai yang mungkin adalah sebagai berikut:
+ `0` – Debug
+ `1` – Info
+ `2` – Peringatan
+ `3` – Kesalahan

Contoh:

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

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

Mengatur tingkat log untuk pustaka Sintetis. Nilai yang mungkin adalah sebagai berikut:
+ `0` – Debug
+ `1` – Info
+ `2` – Peringatan
+ `3` – Kesalahan

Contoh:

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

### SyntheticsConfiguration kelas
<a name="CloudWatch_Synthetics_Library_SyntheticsConfiguration"></a>

Kelas ini hanya tersedia di versi runtime `syn-nodejs-2.1` atau lebih baru.

Anda dapat menggunakan `SyntheticsConfiguration` kelas untuk mengonfigurasi perilaku fungsi pustaka Sintetis. Misalnya, Anda dapat menggunakan kelas ini untuk mengonfigurasi fungsi `executeStep()` untuk tidak menangkap tangkapan layar.

Anda dapat mengatur konfigurasi CloudWatch Synthetics di tingkat global, yang diterapkan ke semua langkah kenari. Anda juga dapat mengganti konfigurasi ini pada tingkat langkah dengan meneruskan kunci konfigurasi dan pasangan nilai.

Anda dapat memberikan opsi di tingkat langkah. Sebagai contoh, silakan lihat [async executeStep (StepName,, [StepConfig]); functionToExecute](#CloudWatch_Synthetics_Library_executeStep) dan [executeHttpStep(StepName, requestOptions, [callback], [stepConfig])](#CloudWatch_Synthetics_Library_executeHttpStep)

**Topics**
+ [setConfig(options)](#CloudWatch_Synthetics_Library_setConfig)
+ [Pemantauan visual](#CloudWatch_Synthetics_Library_SyntheticsLogger_VisualTesting)

#### setConfig(options)
<a name="CloudWatch_Synthetics_Library_setConfig"></a>

` options ` adalah sebuah objek, yang merupakan kumpulan opsi yang dapat dikonfigurasi untuk canary Anda. Bagian berikut menjelaskan bidang-bidang yang memungkinkan dalam ` options `.

##### setConfig(options) untuk semua canary
<a name="CloudWatch_Synthetics_Library_setConfigall"></a>

Untuk kenari yang menggunakan `syn-nodejs-puppeteer-3.2` atau yang lebih baru, **(opsi)** untuk **SetConfig** dapat menyertakan parameter berikut:
+ `includeRequestHeaders` (boolean)— Apakah akan menyertakan header permintaan dalam laporan. Nilai default-nya `false`.
+ `includeResponseHeaders` (boolean)— Apakah akan menyertakan header respons dalam laporan tersebut. Nilai default-nya `false`.
+ `restrictedHeaders` (array)— Sebuah daf.ar nilai header untuk diabaikan, jika header disertakan. Ini berlaku untuk header permintaan dan respons. Misalnya, Anda dapat menyembunyikan kredensyal Anda dengan meneruskan ** includeRequestHeaders**as `true` dan **RestrictedHeaders** as. `['Authorization']` 
+ `includeRequestBody` (boolean)— Apakah akan menyertakan bodi permintaan dalam laporan. Nilai default-nya `false`.
+ `includeResponseBody` (boolean)— Apakah akan menyertakan bodi respons dalam laporan. Nilai default-nya `false`.
**penting**  
Jika Anda mengaktifkan salah satu `includeResponseBody` atau` logResponseBody`, objek data tidak dikembalikan dalam respons dari beberapa APIs, seperti klien aws-sdk v3. Ini karena keterbatasan Node.js dan jenis objek respons yang digunakan.

 **setConfig (opsi) mengenai metrik CloudWatch ** 

Untuk kenari yang menggunakan `syn-nodejs-puppeteer-3.1` atau yang lebih baru, **(opsi)** untuk **SetConfig** dapat menyertakan parameter Boolean berikut yang menentukan metrik mana yang diterbitkan oleh kenari. Bawaan untuk masing-masing opsi ini adalah `true`. Pilihan yang dimulai dengan `aggregated` menentukan apakah metrik dipancarkan tanpa dimensi ` CanaryName`. Anda dapat menggunakan metrik ini untuk melihat hasil gabungan untuk semua canary Anda. Pilihan lain menentukan apakah metrik dipancarkan dengan dimensi `CanaryName`. Anda dapat menggunakan metrik ini untuk melihat hasil untuk setiap canary individu.

Untuk daftar CloudWatch metrik yang dipancarkan oleh burung kenari, lihat. [CloudWatch metrik yang diterbitkan oleh kenari](CloudWatch_Synthetics_Canaries_metrics.md)
+ `failedCanaryMetric` (boolean)— Apakah akan memancarkan metrik ` Failed` (dengan dimensi `CanaryName`) untuk canary ini. Nilai default-nya `true`.
+ `failedRequestsMetric` (boolean)— Apakah akan memancarkan metrik `Failed requests` (dengan dimensi `CanaryName`) untuk canary ini. Nilai default-nya `true`.
+ `_2xxMetric` (boolean)— Apakah akan memancarkan metrik `2xx` (dengan dimensi `CanaryName`) untuk canary ini. Nilai default-nya `true`.
+ `_4xxMetric` (boolean)— Apakah akan memancarkan metrik `4xx` (dengan dimensi `CanaryName`) untuk canary ini. Nilai default-nya `true`.
+ `_5xxMetric` (boolean)— Apakah akan memancarkan metrik `5xx` (dengan dimensi `CanaryName`) untuk canary ini. Nilai default-nya `true`.
+ `stepDurationMetric` (boolean)— Apakah akan memancarkan metrik `Step duration` (dengan dimensi `CanaryName` `StepName`) untuk canary ini. Nilai default-nya `true`.
+ `stepSuccessMetric` (boolean)— Apakah akan memancarkan metrik `Step success` (dengan dimensi `CanaryName` `StepName`) untuk canary ini. Nilai default-nya `true`.
+ `aggregatedFailedCanaryMetric` (boolean)— Apakah akan memancarkan metrik `Failed` (tanpa dimensi `CanaryName`) untuk canary ini. Bawaannya adalah `true`.
+ `aggregatedFailedRequestsMetric` (boolean)— Apakah akan memancarkan metrik `Failed Requests` (tanpa dimensi `CanaryName`) untuk canary ini. Bawaannya adalah `true`.
+ `aggregated2xxMetric` (boolean)— Apakah akan memancarkan metrik ` 2xx` (tanpa dimensi `CanaryName`) untuk canary ini. Bawaannya adalah `true`.
+ `aggregated4xxMetric` (boolean)— Apakah akan memancarkan metrik ` 4xx` (tanpa dimensi `CanaryName`) untuk canary ini. Bawaannya adalah `true`.
+ `aggregated5xxMetric` (boolean)— Apakah akan memancarkan metrik ` 5xx` (tanpa dimensi `CanaryName`) untuk canary ini. Bawaannya adalah `true`.
+ `visualMonitoringSuccessPercentMetric` (boolean)— Apakah akan memancarkan metrik `visualMonitoringSuccessPercent` untuk canary ini. Bawaannya adalah `true`.
+ `visualMonitoringTotalComparisonsMetric` (boolean)— Apakah akan memancarkan metrik `visualMonitoringTotalComparisons` untuk canary ini. Bawaannya adalah `false`.
+ `includeUrlPassword` (boolean)— Apakah akan menyertakan kata sandi yang muncul di URL. Secara default, kata sandi yang muncul URLs disunting dari log dan laporan, untuk mencegah pengungkapan data sensitif. Bawaannya adalah `false`.
+ `restrictedUrlParameters` (array)— Daftar jalur URL atau parameter kueri untuk disunting. Ini berlaku untuk URLs muncul di log, laporan, dan kesalahan. Parameter tersebut tidak peka terhadap huruf besar/kecil. Anda dapat meneruskan tanda bintang (\$1) sebagai nilai untuk menyunting semua jalur URL dan nilai parameter kueri. Default-nya adalah array kosong.
+ `logRequest` (boolean)— Apakah akan mencatat setiap permintaan di log canary. Untuk canary UI, ini mencatat setiap permintaan yang dikirim oleh browser. Nilai default-nya `true`.
+ `logResponse` (boolean)— Apakah akan mencatat setiap respons di log canary. Untuk canary UI, ini membuat log terhadap setiap respons yang diterima oleh browser. Bawaannya adalah `true`.
+ `logRequestBody` (boolean)— Apakah akan mencatat bodi permintaan bersama dengan permintaan di log canary. Konfigurasi ini hanya berlaku jika `logRequest` merupakan `true`. Default-nya adalah `false` .
+ `logResponseBody` (boolean)— Apakah akan mencatat bodi respons bersama dengan respons di log canary. Konfigurasi ini hanya berlaku jika `logResponse` merupakan `true`. Nilai default-nya ` false`.
**penting**  
Jika Anda mengaktifkan salah satu `includeResponseBody` atau` logResponseBody`, objek data tidak dikembalikan dalam respons dari beberapa APIs, seperti klien aws-sdk v3. Ini karena keterbatasan Node.js dan jenis objek respons yang digunakan.
+ `logRequestHeaders` (boolean)— Apakah akan mencatat header permintaan bersama dengan permintaan di log canary. Konfigurasi ini hanya berlaku jika `logRequest` merupakan `true`. Nilai default-nya ` false`.

  Perhatikan bahwa `includeRequestHeaders` memungkinkan header dalam artefak.
+ `logResponseHeaders` (boolean)— Apakah akan mencatat header respons bersama dengan respons di log canary. Konfigurasi ini hanya berlaku jika `logResponse` merupakan `true`. Nilai default-nya ` false`.

  Perhatikan bahwa `includeResponseHeaders` memungkinkan header dalam artefak.

**catatan**  
Metrik `Duration` dan `SuccessPercent` selalu dipancarkan untuk setiap canary, baik dengan dan tanpa metrik `CanaryName`.

##### Metode untuk mengaktifkan atau menonaktifkan metrik
<a name="CloudWatch_Synthetics_Library_setConfig_metrics"></a>

 **disableAggregatedRequestMetrik ()** 

Menonaktifkan canary dari memancarkan semua metrik permintaan yang dipancarkan tanpa dimensi `CanaryName`.

 **disableRequestMetrics()** 

Menonaktifkan semua metrik permintaan, termasuk metrik per canary dan metrik yang dikumpulkan di semua canary.

 **disableStepMetrics()** 

Menonaktifkan semua metrik langkah, termasuk metrik langkah sukses dan metrik durasi langkah.

 **enableAggregatedRequestMetrik ()** 

Mengaktifkan canary untuk memancarkan semua metrik permintaan yang dipancarkan tanpa dimensi ` CanaryName`.

 **enableRequestMetrics()** 

Mengaktifkan semua metrik permintaan, termasuk metrik per canary dan metrik yang dikumpulkan di semua canary.

 **enableStepMetrics()** 

Mengaktifkan semua metrik langkah, termasuk metrik keberhasilan langkah dan metrik durasi langkah.

 **get2xxMetric()** 

Mengembalikan apakah canary memancarkan metrik `2xx` dengan dimensi ` CanaryName`.

 **get4xxMetric()** 

Mengembalikan apakah canary memancarkan metrik `4xx` dengan dimensi ` CanaryName`.

 **get5xxMetric()** 

Mengembalikan apakah canary memancarkan metrik `5xx` dengan dimensi ` CanaryName`.

 **getAggregated2xxMetric()** 

Mengembalikan apakah canary memancarkan metrik `2xx` tanpa dimensi.

 **getAggregated4xxMetric()** 

Mengembalikan apakah canary memancarkan metrik `4xx` tanpa dimensi.

 **getAggregatedFailedCanaryMetric()** 

Mengembalikan apakah canary memancarkan metrik `Failed` tanpa dimensi.

 **getAggregatedFailedRequestsMetric()** 

Mengembalikan apakah canary memancarkan metrik `Failed requests` tanpa dimensi.

 **getAggregated5xxMetric()** 

Mengembalikan apakah canary memancarkan metrik `5xx` tanpa dimensi.

 **getFailedCanaryMetrik ()** 

Mengembalikan apakah canary memancarkan metrik `Failed` dengan dimensi ` CanaryName`.

 **getFailedRequestsMetrik ()** 

Mengembalikan apakah canary memancarkan metrik `Failed requests` dengan dimensi `CanaryName`.

 **getStepDurationMetrik ()** 

Mengembalikan apakah canary memancarkan metrik `Duration` dengan dimensi ` CanaryName` untuk canary ini.

 **getStepSuccessMetrik ()** 

Mengembalikan apakah canary memancarkan metrik `StepSuccess` dengan dimensi ` CanaryName` untuk canary ini.

 **with2xxMetric(\$12xxMetric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `2xx` dengan dimensi `CanaryName` untuk canary ini.

 **with4xxMetric(\$14xxMetric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `4xx` dengan dimensi `CanaryName` untuk canary ini.

 **with5xxMetric(\$15xxMetric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `5xx` dengan dimensi `CanaryName` untuk canary ini.

 **withAggregated2xxMetric(aggregated2xxMetric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `2xx` tanpa dimensi untuk canary ini.

 **withAggregated4xxMetric(aggregated4xxMetric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `4xx` tanpa dimensi untuk canary ini.

 **withAggregated5xxMetric(aggregated5xxMetric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `5xx` tanpa dimensi untuk canary ini.

 ** withAggregatedFailedCanaryMetric(aggregatedFailedCanaryMetrik)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `Failed` tanpa dimensi untuk canary ini.

 ** withAggregatedFailedRequestsMetric(aggregatedFailedRequestsMetrik)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `Failed requests` tanpa dimensi untuk canary ini.

 **withFailedCanaryMetrik (failedCanaryMetric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `Failed` dengan dimensi `CanaryName` untuk canary ini.

 **withFailedRequestsMetrik (failedRequestsMetric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `Failed requests` dengan dimensi `CanaryName` untuk canary ini.

 **withStepDurationMetrik (stepDurationMetric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `Duration` dengan dimensi `CanaryName` untuk canary ini.

 **withStepSuccessMetrik (stepSuccessMetric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik ` StepSuccess` dengan dimensi `CanaryName` untuk canary ini.

##### Metode untuk mengaktifkan atau menonaktifkan fitur lainnya
<a name="CloudWatch_Synthetics_Library_setConfig_methods"></a>

 **withHarFile()** 

Menerima argumen Boolean, yang menentukan apakah akan membuat file HAR untuk canary ini.

 **withStepsReport()** 

Menerima argumen Boolean, yang menentukan apakah akan melaporkan ringkasan eksekusi langkah untuk canary ini.

 **withIncludeUrlKata Sandi ()** 

Menerima argumen Boolean, yang menentukan apakah akan menyertakan kata sandi yang muncul URLs di log dan laporan.

 **withRestrictedUrlParameter ()** 

Menerima array jalur URL atau parameter kueri untuk disunting. Ini berlaku untuk URLs muncul di log, laporan, dan kesalahan. Anda dapat meneruskan tanda bintang (\$1) sebagai nilai untuk menyunting semua jalur URL dan nilai parameter kueri

 **withLogRequest()** 

Menerima argumen Boolean, yang menentukan apakah akan membuat log setiap permintaan di log canary.

 **withLogResponse()** 

Menerima argumen Boolean, yang menentukan apakah akan membuat log setiap respons di log canary.

 **withLogRequestTubuh ()** 

Menerima argumen Boolean, yang menentukan apakah akan membuat log setiap bodi permintaan di log canary.

 **withLogResponseTubuh ()** 

Menerima argumen Boolean, yang menentukan apakah akan mencatat setiap bodi respons di log canary.

 **withLogRequestHeader ()** 

Menerima argumen Boolean, yang menentukan apakah akan mencatat setiap header permintaan di log canary.

 **withLogResponseHeader ()** 

Menerima argumen Boolean, yang menentukan apakah akan mencatat setiap header respons di log canary.

 **getHarFile()** 

Mengembalikan apakah canary membuat file HAR.

 **getStepsReport()** 

Mengembalikan apakah canary melaporkan ringkasan eksekusi langkah.

 **getIncludeUrlKata Sandi ()** 

Mengembalikan apakah kenari menyertakan kata sandi yang muncul URLs di log dan laporan.

 **getRestrictedUrlParameter ()** 

Mengembalikan apakah canary menyunting jalur URL atau parameter kueri.

 **getLogRequest()** 

Mengembalikan apakah canary mencatat setiap permintaan di log canary.

 **getLogResponse()** 

Mengembalikan apakah canary mencatat setiap respons di log canary.

 **getLogRequestTubuh ()** 

Mengembalikan apakah canary mencatat setiap badan permintaan di log canary.

 **getLogResponseTubuh ()** 

Mengembalikan apakah canary mencatat setiap bodi respons di log canary.

 **getLogRequestHeader ()** 

Mengembalikan apakah canary mencatat setiap header permintaan di log canary.

 **getLogResponseHeader ()** 

Mengembalikan apakah canary mencatat setiap header respons di log canary.

 **Fungsi untuk semua canary** 
+ `withIncludeRequestHeaders`(includeRequestHeaders)
+ `withIncludeResponseHeaders`(includeResponseHeaders)
+ `withRestrictedHeaders`(restrictedHeaders)
+ `withIncludeRequestBody`(includeRequestBody)
+ `withIncludeResponseBody`(includeResponseBody)
+ `enableReportingOptions`() - Mengaktifkan semua opsi pelaporan-- **includeRequestHeaders** includeResponseHeaders****,, **includeRequestBody**, dan **includeResponseBody**,.
+ `disableReportingOptions`() — Menonaktifkan semua opsi pelaporan-- **includeRequestHeaders**, ** includeResponseHeaders**, **includeRequestBody**, dan **includeResponseBody**,.

##### setConfig(options) untuk canary UI
<a name="CloudWatch_Synthetics_Library_setConfigUI"></a>

Untuk canary UI, **setConfig** dapat mencakup parameter Boolean berikut.
+ `continueOnStepFailure`**(boolean) - Apakah akan melanjutkan menjalankan skrip canary setelah langkah gagal (ini mengacu pada fungsi executeStep).** Jika ada langkah yang gagal, proses canary akan tetap ditandai sebagai gagal. Bawaannya adalah `false`.
+ `harFile` (boolean)— Apakah akan membuat file HAR. Bawaannya adalah `True`.
+ `screenshotOnStepStart` (boolean)— Apakah mengambil tangkapan layar sebelum memulai langkah.
+ `screenshotOnStepSuccess` (boolean)— Apakah mengambil tangkapan layar setelah menyelesaikan langkah yang berhasil.
+ `screenshotOnStepFailure` (boolean)— Apakah mengambil tangkapan layar setelah langkah gagal.

##### Metode untuk mengaktifkan atau menonaktifkan tangkapan layar
<a name="CloudWatch_Synthetics_Library_setConfig_screenshots"></a>

 **disableStepScreenshots()** 

Menonaktifkan semua opsi tangkapan layar (screenshotOnStepMulai, screenshotOnStep Sukses, dan screenshotOnStep Kegagalan).

 **enableStepScreenshots()** 

Mengaktifkan semua opsi tangkapan layar (screenshotOnStepMulai, screenshotOnStep Sukses, dan screenshotOnStep Kegagalan). Secara bawaan, semua metode ini diaktifkan.

 **getScreenshotOnStepFailure()** 

Mengembalikan apakah canary mengambil tangkapan layar setelah langkah gagal.

 **getScreenshotOnStepStart()** 

Mengembalikan apakah canary mengambil tangkapan layar sebelum memulai langkah.

 **getScreenshotOnStepSuccess()** 

Mengembalikan apakah canary mengambil tangkapan layar setelah menyelesaikan satu langkah dengan sukses.

 **withScreenshotOnStepStart(screenshotOnStepMulai)** 

Menerima argumen Boolean, yang menunjukkan apakah akan mengambil tangkapan layar sebelum memulai sebuah langkah.

 **withScreenshotOnStepSuccess(screenshotOnStepSukses)** 

Menerima argumen Boolean, yang menunjukkan apakah akan mengambil tangkapan layar setelah menyelesaikan langkah dengan sukses.

 **withScreenshotOnStepFailure(screenshotOnStepKegagalan)** 

Menerima argumen Boolean, yang menunjukkan apakah akan mengambil tangkapan layar setelah langkah gagal.

 **Penggunaan di canary UI** 

Pertama, impor dependensi synthetics dan ambil konfigurasinya.

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

// Get Synthetics configuration
const synConfig = synthetics.getConfiguration();
```

Lalu, atur konfigurasi untuk setiap pilihan dengan memanggil metode setConfig menggunakan salah satu pilihan berikut.

```
// Set configuration values
    synConfig.setConfig({
        screenshotOnStepStart: true, 
        screenshotOnStepSuccess: false,
        screenshotOnStepFailure: false
    });
```

Atau

```
synConfig.withScreenshotOnStepStart(false).withScreenshotOnStepSuccess(true).withScreenshotOnStepFailure(true)
```

Untuk menonaktifkan semua tangkapan layar, gunakan `disableStepScreenshots()` fungsi seperti pada contoh ini.

```
synConfig.disableStepScreenshots();
```

Anda dapat mengaktifkan dan menonaktifkan tangkapan layar kapan saja di kode tersebut. Misalnya, untuk menonaktifkan tangkapan layar hanya untuk satu langkah, nonaktifkan sebelum menjalankan langkah tersebut dan kemudian aktifkan setelah langkah.

##### setConfig(options) untuk canary API
<a name="CloudWatch_Synthetics_Library_setConfigAPI"></a>

Untuk canary API, **setConfig** dapat mencakup parameter Boolean berikut:
+ `continueOnHttpStepFailure`(boolean) - Apakah akan melanjutkan menjalankan skrip kenari setelah langkah HTTP gagal (ini mengacu pada **executeHttpStep**fungsi). Jika ada langkah yang gagal, proses canary akan tetap ditandai sebagai gagal. Bawaannya adalah `true`.

#### Pemantauan visual
<a name="CloudWatch_Synthetics_Library_SyntheticsLogger_VisualTesting"></a>

Pemantauan visual membandingkan tangkapan layar yang diambil selama berjalannya canary dengan tangkapan layar yang diambil selama berjalannya canary dasar. Jika perbedaan antara kedua tangkapan layar berada di luar persentase ambang batas, canary gagal dan Anda dapat melihat area dengan perbedaan warna yang disorot dalam laporan lari canary. Pemantauan visual didukung di kenari yang menjalankan **syn-puppeteer-node-3.2** dan yang lebih baru. Saat ini tidak didukung di canary yang menjalankan Python dan Selenium.

Untuk mengaktifkan pemantauan visual, tambahkan baris kode berikut ke skrip canary. Untuk detail selengkapnya, silakan lihat [SyntheticsConfiguration kelas](#CloudWatch_Synthetics_Library_SyntheticsConfiguration).

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

Pertama kali canary berjalan dengan sukses setelah baris ini ditambahkan ke skrip, ia menggunakan tangkapan layar yang diambil selama proses itu sebagai dasar untuk perbandingan. Setelah kenari pertama dijalankan, Anda dapat menggunakan CloudWatch konsol untuk mengedit kenari untuk melakukan salah satu hal berikut:
+ Tetapkan putaran canary berikutnya sebagai dasar baru.
+ Gambar batas pada tangkapan layar dasar saat ini untuk menunjuk area tangkapan layar untuk diabaikan selama perbandingan visual.
+ Hapus tangkapan layar agar tidak digunakan untuk pemantauan visual.

Untuk informasi selengkapnya tentang menggunakan CloudWatch konsol untuk mengedit kenari, lihat[Mengedit atau menghapus canary](synthetics_canaries_deletion.md).

 **Opsi lain untuk pemantauan visual** 

 **SyntheticsConfiguration. withVisualVarianceThresholdPercentage(DiinginkanPersentase**) 

Tetapkan persentase yang dapat diterima untuk varians tangkapan layar dalam perbandingan visual.

 **SyntheticsConfiguration. withVisualVarianceHighlightHexColor(” \$1fafa00 “)** 

Atur warna sorotan yang menunjuk area varians saat Anda melihat laporan canary run yang menggunakan pemantauan visual.

 **SyntheticsConfiguration. withFailCanaryRunOnVisualVariance(FailCanary**) 

Atur apakah canary gagal atau tidak ketika ada perbedaan visual yang lebih dari ambang batas. Default-nya adalah menggagalkan canary.

### Logger Synthetic
<a name="CloudWatch_Synthetics_Library_SyntheticsLogger"></a>

SyntheticsLogger menulis log keluar ke konsol dan ke file log lokal pada tingkat log yang sama. File log ini ditulis ke kedua lokasi hanya jika tingkat log berada pada atau di bawah tingkat log yang diinginkan dari fungsi log yang dipanggil tersebut.

Pernyataan pembuatan log di file log lokal diawali dengan "DEBUG: ", "INFO: ", dan seterusnya untuk mencocokkan tingkat log dari fungsi yang dipanggil tersebut.

Anda dapat menggunakan SyntheticsLogger, dengan asumsi Anda ingin menjalankan Synthetics Library pada tingkat log yang sama dengan logging canary Synthetics Anda.

Menggunakan tidak SyntheticsLogger diperlukan untuk membuat file log yang diunggah ke lokasi hasil S3 Anda. Sebagai penggantinya, Anda dapat membuat file log lain di ` /tmp` folder. File apa pun yang dibuat di bawah `/tmp` folder diunggah ke lokasi hasil dalam S3 sebagai artefak. 

Untuk menggunakan pencatat Pustaka Synthetics:

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

 Definisi fungsi yang berguna:

 **log.debug (*message*,); *ex*** 

Parameter: *message* adalah pesan untuk log. * ex*adalah pengecualian, jika ada, untuk log.

Contoh:

```
log.debug("Starting step - login.");
```

 **log.error (*message*,*ex*);** 

Parameter: *message* adalah pesan untuk log. * ex*adalah pengecualian, jika ada, untuk log.

Contoh:

```
try {
  await login();
catch (ex) {
  log.error("Error encountered in step - login.", ex);
}
```

 **log.info (*message*,*ex*);** 

Parameter: *message* adalah pesan untuk log. * ex*adalah pengecualian, jika ada, untuk log.

Contoh:

```
log.info("Successfully completed step - login.");
```

 **log.log (*message*,*ex*);** 

Ini adalah nama lain untuk `log.info`. 

Parameter: *message* adalah pesan untuk log. * ex*adalah pengecualian, jika ada, untuk log.

Contoh:

```
 log.log("Successfully completed step - login.");
```

 **log.warn (*message*,*ex*);** 

Parameter: *message* adalah pesan untuk log. * ex*adalah pengecualian, jika ada, untuk log.

Contoh:

```
log.warn("Exception encountered trying to publish CloudWatch Metric.", ex);
```

### SyntheticsLogHelper kelas
<a name="CloudWatch_Synthetics_Library_SyntheticsLogHelper"></a>

Kelas `SyntheticsLogHelper` tersedia di runtime ` syn-nodejs-puppeteer-3.2` dan runtime yang lebih baru. Ini sudah diinisialisasi di perpustakaan CloudWatch Synthetics dan dikonfigurasi dengan konfigurasi Synthetics. Anda dapat menambahkan ini sebagai Dependensi dalam skrip Anda. Kelas ini memungkinkan Anda untuk membersihkan URLs, header, dan pesan kesalahan untuk menyunting informasi sensitif.

**catatan**  
Synthetics membersihkan semua URLs dan pesan kesalahan yang dicatat sebelum memasukkannya ke dalam log, laporan, file HAR, dan kesalahan canary run berdasarkan pengaturan konfigurasi Synthetics. `restrictedUrlParameters` Anda harus menggunakan ` getSanitizedUrl` atau `getSanitizedErrorMessage` hanya jika Anda login URLs atau kesalahan dalam skrip Anda. Synthetics tidak menyimpan artefak canary kecuali kesalahan canary yang dilemparkan oleh skrip tersebut. Artefak Canary run disimpan di akun pelanggan Anda. Untuk informasi selengkapnya, lihat [Pertimbangan keamanan untuk canary Synthetics](servicelens_canaries_security.md).

**Topics**
+ [getSanitizedUrl(url, StepConfig = nol)](#CloudWatch_Synthetics_Library_getSanitizedUrl)
+ [getSanitizedErrorPesan](#CloudWatch_Synthetics_Library_getSanitizedErrorMessage)
+ [getSanitizedHeaders(header, StepConfig = null)](#CloudWatch_Synthetics_Library_getSanitizedHeaders)

#### getSanitizedUrl(url, StepConfig = nol)
<a name="CloudWatch_Synthetics_Library_getSanitizedUrl"></a>

Fungsi ini tersedia di `syn-nodejs-puppeteer-3.2` dan nanti. Ia mengembalikan string url sanitasi berdasarkan konfigurasi. Anda dapat memilih untuk menyunting parameter URL sensitif seperti kata sandi dan access\$1token dengan menyetel properti `restrictedUrlParameters`. Secara default, kata sandi di URLs disunting. Anda dapat mengaktifkan kata sandi URL jika diperlukan dengan menyetel `includeUrlPassword` ke true. 

Fungsi ini memunculkan kesalahan jika URL yang dilewatkan bukan sebuah URL yang valid.

 **Parameter ** 
+ *url*adalah string dan merupakan URL untuk membersihkan.
+  *stepConfig*(Opsional) mengganti konfigurasi Synthetics global untuk fungsi ini. Jika `stepConfig` tidak diteruskan, konfigurasi global digunakan untuk membersihkan URL.

 **Contoh ** 

Contoh ini menggunakan URL sampel berikut: ` https://example.com/learn/home?access_token=12345&token_type=Bearer&expires_in=1200`. Dalam contoh ini, `access_token` berisi informasi sensitif Anda yang tidak boleh dibuat log. Perhatikan bahwa layanan Synthetics tidak menyimpan artefak canary run. Artefak seperti log, tangkapan layar, dan laporan semuanya disimpan dalam bucket Amazon S3 di akun pelanggan Anda.

Langkah pertama adalah mengatur konfigurasi 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);
```

Berikutnya, bersihkan dan log 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');
```

Ini mencatat yang berikut ini di log canary Anda.

```
My example url is: https://example.com/learn/home?access_token=REDACTED&token_type=Bearer&expires_in=1200
```

Anda dapat mengganti konfigurasi Synthetics untuk URL dengan meneruskan parameter opsional yang berisi opsi konfigurasi Synthetics, seperti pada contoh berikut.

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

Contoh sebelumnya menyunting semua parameter kueri, dan dibuat log sebagai berikut:

```
My example url is: https://example.com/learn/home?access_token=REDACTED&token_type=REDACTED&expires_in=REDACTED
```

#### getSanitizedErrorPesan
<a name="CloudWatch_Synthetics_Library_getSanitizedErrorMessage"></a>

Fungsi ini tersedia di `syn-nodejs-puppeteer-3.2` dan nanti. Ia mengembalikan string kesalahan yang disanitasi dengan membersihkan setiap hadiah URLs berdasarkan konfigurasi Synthetics. Anda dapat memilih untuk mengganti konfigurasi Synthetics global ketika Anda memanggil fungsi ini dengan meneruskan parameter `stepConfig` opsional. 

 **Parameter ** 
+ *error*adalah kesalahan untuk membersihkan. Ini bisa berupa objek Kesalahan atau string.
+  *stepConfig*(Opsional) mengganti konfigurasi Synthetics global untuk fungsi ini. Jika `stepConfig` tidak diteruskan, konfigurasi global digunakan untuk membersihkan URL.

 **Contoh ** 

Contoh ini menggunakan kesalahan berikut: ` Failed to load url: https://example.com/learn/home?access_token=12345&token_type=Bearer&expires_in=1200`

Langkah pertama adalah mengatur konfigurasi 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'];
});
```

Berikutnya, bersihkan dan buat log pesan kesalahan

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

Ini mencatat yang berikut ini di log canary Anda.

```
Failed to load url: https://example.com/learn/home?access_token=REDACTED&token_type=Bearer&expires_in=1200
```

#### getSanitizedHeaders(header, StepConfig = null)
<a name="CloudWatch_Synthetics_Library_getSanitizedHeaders"></a>

Fungsi ini tersedia di `syn-nodejs-puppeteer-3.2` dan nanti. Ini mengembalikan header yang dibersihkan berdasarkan properti `restrictedHeaders` dari ` syntheticsConfiguration`. Header yang ditentukan dalam `restrictedHeaders` properti disunting dari log, file HAR, dan laporan. 

 **Parameter ** 
+ *headers*adalah objek yang berisi header untuk membersihkan.
+ *stepConfig*(Opsional) mengganti konfigurasi Synthetics global untuk fungsi ini. Jika `stepConfig` tidak diteruskan, konfigurasi global digunakan untuk membersihkan header.

## Kelas dan fungsi pustaka Node.js yang hanya berlaku untuk canary UI
<a name="CloudWatch_Synthetics_Library_UIcanaries"></a>

Fungsi pustaka CloudWatch Synthetics berikut untuk Node.js hanya berguna untuk kenari UI.

**Topics**
+ [Kelas Synthetics](#CloudWatch_Synthetics_Library_Synthetics_Class)
+ [BrokenLinkCheckerReport kelas](#CloudWatch_Synthetics_Library_BrokenLinkCheckerReport)
+ [SyntheticsLink kelas](#CloudWatch_Synthetics_Library_SyntheticsLink)

### Kelas Synthetics
<a name="CloudWatch_Synthetics_Library_Synthetics_Class"></a>

Fungsi-fungsi berikut berada dalam kelas Synthetics.

**Topics**
+ [async addUserAgent (halaman, userAgentString);](#CloudWatch_Synthetics_Library_addUserAgent)
+ [async executeStep (StepName,, [StepConfig]); functionToExecute](#CloudWatch_Synthetics_Library_executeStep)
+ [getDefaultLaunchPilihan ();](#CloudWatch_Synthetics_Library_getDefaultLaunchOptions)
+ [getPage();](#CloudWatch_Synthetics_Library_getPage)
+ [getRequestResponseLogHelper();](#CloudWatch_Synthetics_Library_getRequestResponseLogHelper)
+ [launch(options)](#CloudWatch_Synthetics_Library_LaunchOptions)
+ [RequestResponseLogHelper kelas](#CloudWatch_Synthetics_Library_RequestResponseLogHelper)
+ [setRequestResponseLogHelper();](#CloudWatch_Synthetics_Library_setRequestResponseLogHelper)
+ [async takeScreenshot(name, suffix);](#CloudWatch_Synthetics_Library_takeScreenshot)

#### async addUserAgent (halaman, userAgentString);
<a name="CloudWatch_Synthetics_Library_addUserAgent"></a>

Fungsi ini ditambahkan *userAgentString* ke header user-agent halaman yang ditentukan.

Contoh:

```
await synthetics.addUserAgent(page, "MyApp-1.0");
```

Hasil di header pengguna-agen halaman yang diatur untuk ` browsers-user-agent-header-valueMyApp-1.0`

#### async executeStep (StepName,, [StepConfig]); functionToExecute
<a name="CloudWatch_Synthetics_Library_executeStep"></a>

Menjalankan langkah yang disediakan, membungkusnya dengan start/pass/fail logging, start/pass/fail screenshots, and pass/fail dan metrik durasi.

**catatan**  
Jika Anda menggunakan runtime `syn-nodejs-2.1` atau runtime yang lebih baru, Anda dapat mengonfigurasi apakah dan kapan tangkapan layar diambil. Untuk informasi selengkapnya, lihat [SyntheticsConfiguration kelas](#CloudWatch_Synthetics_Library_SyntheticsConfiguration).

Fungsi `executeStep` juga melakukan hal berikut:
+ Membuat log bahwa langkah tersebut dimulai.
+ Mengambil tangkapan layar yang bernama `<stepName>-starting`.
+ Memulai pengatur waktu.
+ Menjalankan fungsi yang disediakan.
+ Jika fungsi kembali secara normal, ini dihitung sebagai lulus. Jika fungsi tersebut throw, maka ini dihitung sebagai gagal.
+ Mengakhiri pengatur waktu.
+ Mencatat log jika langkah berhasil atau gagal
+ Mengambil tangkapan layar yang bernama `<stepName>-succeeded` atau ` <stepName>-failed`.
+ Memancarkan metrik `stepName` `SuccessPercent`, 100 untuk lulus atau 0 untuk gagal.
+ Memancarkan metrik `stepName` `Duration`, dengan nilai didasarkan pada mulai melangkah dan waktu selesai.
+ Akhirnya, mengembalikan apa yang dikembalikan oleh `functionToExecute` atau melempar kembali apa yang dilempar oleh `functionToExecute`.

Jika canary menggunakan runtime `syn-nodejs-2.0` atau lebih baru, fungsi ini juga menambahkan ringkasan pelaksanaan langkah ke laporan canary. Ringkasan mencakup detail tentang setiap langkah, seperti waktu mulai, waktu akhir, status (LULUS/GAGAL), alasan kegagalan (jika gagal), dan tangkapan layar yang diambil selama pelaksanaan setiap langkah.

Contoh:

```
await synthetics.executeStep('navigateToUrl', async function (timeoutInMillis = 30000) {
           await page.goto(url, {waitUntil: ['load', 'networkidle0'], timeout: timeoutInMillis});});
```

Respons:

Mengembalikan apa yang `functionToExecute` kembalikan.

 **Pembaruan dengan syn-nodejs-2.2** 

Dimulai dengan`syn-nodejs-2.2`, Anda dapat secara opsional meneruskan konfigurasi langkah untuk mengganti konfigurasi CloudWatch Synthetics pada tingkat langkah. Untuk daftar opsi yang dapat Anda teruskan ke `executeStep`, silakan lihat [SyntheticsConfiguration kelas](#CloudWatch_Synthetics_Library_SyntheticsConfiguration).

Contoh berikut menimpa konfigurasi `false` default untuk ` continueOnStepFailure` hingga `true` dan menentukan kapan harus mengambil tangkapan layar.

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

#### getDefaultLaunchPilihan ();
<a name="CloudWatch_Synthetics_Library_getDefaultLaunchOptions"></a>

`getDefaultLaunchOptions()`Fungsi mengembalikan opsi peluncuran browser yang digunakan oleh CloudWatch Synthetics. Untuk informasi selengkapnya, silakan lihat [Jenis opsi peluncuran](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>

Mengembalikan halaman terbuka saat ini sebagai objek Puppeteer. Untuk informasi selengkapnya, silakan lihat [API Puppeteer v1.14.0](https://github.com/puppeteer/puppeteer/blob/v1.14.0/docs/api.md).

Contoh:

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

Respons:

Halaman (objek Puppeteer) yang saat ini terbuka di sesi browser saat ini.

#### getRequestResponseLogHelper();
<a name="CloudWatch_Synthetics_Library_getRequestResponseLogHelper"></a>

**penting**  
Pada canary yang menggunakan `syn-nodejs-puppeteer-3.2` runtime atau yang lebih baru, fungsi ini tidak digunakan lagi bersama dengan kelas `RequestResponseLogHelper`. Setiap penggunaan fungsi ini menyebabkan peringatan muncul di log canary Anda. Fungsi ini akan dihapus di versi runtime yang akan datang. Jika Anda menggunakan fungsi ini, gunakan [RequestResponseLogHelper kelas](#CloudWatch_Synthetics_Library_RequestResponseLogHelper) sebagai gantinya. 

Gunakan fungsi ini sebagai pola pembangun untuk mengubah bendera pembuatan log permintaan dan respons.

Contoh:

```
synthetics.setRequestResponseLogHelper(getRequestResponseLogHelper().withLogRequestHeaders(false));;
```

Respons:

```
{RequestResponseLogHelper}
```

#### launch(options)
<a name="CloudWatch_Synthetics_Library_LaunchOptions"></a>

Opsi untuk fungsi ini hanya tersedia di versi runtime `syn-nodejs-2.1` atau lebih baru.

Fungsi ini hanya digunakan untuk canary UI. Hal ini menutup browser yang sudah ada dan meluncurkan browser baru.

**catatan**  
CloudWatch Synthetics selalu meluncurkan browser sebelum mulai menjalankan skrip Anda. Anda tidak perlu memanggil launch() kecuali ingin meluncurkan browser baru dengan pilihan-pilihan kustom.

(options) adalah serangkaian pilihan yang dapat dikonfigurasi untuk diatur di browser. Untuk informasi selengkapnya, [Ketik opsi peluncuran](https://pptr.dev/browsers-api/browsers.launchoptions/).

Jika Anda memanggil fungsi ini tanpa opsi, Synthetics meluncurkan browser dengan argumen default, `executablePath`, dan `defaultViewport`. Tampilan default di CloudWatch Synthetics adalah 1920 x 1080.

Anda dapat mengganti parameter peluncuran yang digunakan oleh CloudWatch Synthetics dan meneruskan parameter tambahan saat meluncurkan browser. Misalnya, snippet kode berikut meluncurkan browser dengan argumen default dan jalur yang dapat dieksekusi secara default, tetapi dengan viewport berukuran 800 x 600.

```
await synthetics.launch({
        defaultViewport: { 
            "deviceScaleFactor": 1, 
            "width": 800,
            "height": 600 
    }});
```

Kode contoh berikut menambahkan `ignoreHTTPSErrors` parameter baru ke parameter peluncuran CloudWatch Synthetics:

```
await synthetics.launch({
        ignoreHTTPSErrors: true
 });
```

Anda dapat menonaktifkan keamanan web dengan menambahkan `--disable-web-security` flag ke args dalam parameter peluncuran 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 kelas
<a name="CloudWatch_Synthetics_Library_RequestResponseLogHelper"></a>

**penting**  
Pada canary yang menggunakan runtime `syn-nodejs-puppeteer-3.2` atau yang lebih baru, kelas ini tidak digunakan lagi. Setiap penggunaan kelas ini menyebabkan peringatan muncul di log canary Anda. Fungsi ini akan dihapus di versi runtime yang akan datang. Jika Anda menggunakan fungsi ini, gunakan [RequestResponseLogHelper kelas](#CloudWatch_Synthetics_Library_RequestResponseLogHelper) sebagai gantinya.

Menangani konfigurasi halus dan pembuatan representasi string atas muatan permintaan dan respons. 

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

Contoh:

```
synthetics.setRequestResponseLogHelper(getRequestResponseLogHelper()
.withLogRequestPostData(true)
.withLogRequestHeaders(true)
.withLogResponseHeaders(true));
```

Jawaban:

```
{RequestResponseLogHelper}
```

#### setRequestResponseLogHelper();
<a name="CloudWatch_Synthetics_Library_setRequestResponseLogHelper"></a>

**penting**  
Pada canary yang menggunakan `syn-nodejs-puppeteer-3.2` runtime atau yang lebih baru, fungsi ini tidak digunakan lagi bersama dengan kelas `RequestResponseLogHelper`. Setiap penggunaan fungsi ini menyebabkan peringatan muncul di log canary Anda. Fungsi ini akan dihapus di versi runtime yang akan datang. Jika Anda menggunakan fungsi ini, gunakan [RequestResponseLogHelper kelas](#CloudWatch_Synthetics_Library_RequestResponseLogHelper) sebagai gantinya. 

Gunakan fungsi ini sebagai pola pembangun untuk mengatur bendera pembuatan log permintaan dan respons.

Contoh:

```
synthetics.setRequestResponseLogHelper().withLogRequestHeaders(true).withLogResponseHeaders(true);
```

Respons:

```
{RequestResponseLogHelper}
```

#### async takeScreenshot(name, suffix);
<a name="CloudWatch_Synthetics_Library_takeScreenshot"></a>

Mengambil tangkapan layar (.PNG) halaman saat ini dengan nama dan akhiran (opsional).

Contoh:

```
await synthetics.takeScreenshot("navigateToUrl", "loaded")
```

Contoh ini menangkap dan mengunggah tangkapan layar yang dinamai ` 01-navigateToUrl-loaded.png` ke bucket S3 canary.

Anda dapat mengambil tangkapan layar untuk langkah canary tertentu dengan meneruskan ` stepName` sebagai parameter pertama. Tangkapan layar ditautkan ke langkah canary dalam laporan Anda, untuk membantu Anda melacak setiap langkah saat melakukan debug.

CloudWatch Synthetics canaries secara otomatis mengambil tangkapan layar sebelum memulai langkah (`executeStep`fungsi) dan setelah langkah selesai (kecuali jika Anda mengonfigurasi kenari untuk menonaktifkan tangkapan layar). Anda dapat mengambil lebih banyak tangkapan layar dengan meneruskan nama langkah di fungsi `takeScreenshot`.

Contoh berikut mengambil tangkapan layar dengan `signupForm` sebagai nilai dari `stepName`. Tangkapan layar akan dinamai ` 02-signupForm-address` dan akan ditautkan dengan langkah yang dinamai ` signupForm` dalam laporan canary.

```
await synthetics.takeScreenshot('signupForm', 'address')
```

### BrokenLinkCheckerReport kelas
<a name="CloudWatch_Synthetics_Library_BrokenLinkCheckerReport"></a>

Kelas ini menyediakan metode untuk menambahkan tautan synthetics. Dukungannya hanya pada canary yang menggunakan versi `syn-nodejs-2.0-beta` runtime atau lebih baru. 

Untuk menggunakan `BrokenLinkCheckerReport`, sertakan baris berikut dalam skrip:

```
const BrokenLinkCheckerReport = require('@aws/synthetics-broken-link-checker-report');
            
const brokenLinkCheckerReport = new BrokenLinkCheckerReport();
```

 Definisi fungsi yang berguna:

 **addLink (*syntheticsLink*, IsBroken)** 

` syntheticsLink ` adalah objek ` SyntheticsLink` yang mewakili suatu tautan. Fungsi ini menambahkan tautan sesuai dengan kode status. Secara bawaan, ini menganggap tautan rusak jika kode status tidak tersedia atau kode status 400 atau lebih tinggi. Anda dapat mengganti perilaku bawaan ini dengan memasukkan parameter `isBrokenLink` opsional dengan nilai `true` atau `false`.

Fungsi ini tidak memiliki nilai balik.

 **getLinks()** 

Fungsi ini mengembalikan susunan objek `SyntheticsLink` yang disertakan dalam laporan pemeriksa tautan yang rusak.

 **getTotalBrokenTautan ()** 

Fungsi ini mengembalikan angka yang mewakili total tautan yang rusak.

 **getTotalLinksDiperiksa ()** 

Fungsi ini mengembalikan angka yang mewakili total tautan yang disertakan dalam laporan.

 **Cara menggunakan BrokenLinkCheckerReport** 

Snippet kode skrip canary berikut menunjukkan contoh navigasi ke tautan dan menambahkannya ke laporan pemeriksa tautan yang rusak.

1. Impor `SyntheticsLink`, `BrokenLinkCheckerReport`, dan ` 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. Untuk menambahkan tautan ke laporan, buat instans ` BrokenLinkCheckerReport`.

   ```
   let brokenLinkCheckerReport = new BrokenLinkCheckerReport();
   ```

1. Navigasi ke URL dan tambahkan ke laporan pemeriksa tautan yang rusak.

   ```
   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. Tambahkan laporan ke Synthetics. Hal ini membuat file JSON yang diberi nama ` BrokenLinkCheckerReport.json` dalam bucket S3 Anda untuk setiap operasi canary. Anda dapat melihat laporan tautan di konsol untuk setiap operasi canary berikut tangkapan layar, log, dan file HAR.

   ```
   await synthetics.addReport(brokenLinkCheckerReport);
   ```

### SyntheticsLink kelas
<a name="CloudWatch_Synthetics_Library_SyntheticsLink"></a>

Kelas ini menyediakan metode untuk merangkum informasi. Dukungannya hanya pada canary yang menggunakan versi `syn-nodejs-2.0-beta` runtime atau lebih baru. 

Untuk menggunakan `SyntheticsLink`, sertakan baris berikut dalam skrip:

```
const SyntheticsLink = require('@aws/synthetics-link');

const syntheticsLink = new SyntheticsLink("https://www.amazon.com");
```

Fungsi ini mengembalikan `syntheticsLinkObject`

Definisi fungsi yang berguna:

 **denganURL () *url*** 

` url ` adalah sebuah string URL. Fungsi ini mengembalikan `syntheticsLinkObject`

 **withText () *text*** 

` text ` adalah sebuah string yang mewakili teks jangkar. Fungsi ini mengembalikan `syntheticsLinkObject`. Ini menambahkan teks jangkar yang sesuai dengan tautan.

 **withParentUrl(*parentUrl*)** 

` parentUrl ` adalah sebuah string yang mewakili URL induk (halaman sumber). Fungsi ini mengembalikan `syntheticsLink Object`

 **withStatusCode(*statusCode*)** 

` statusCode ` adalah sebuah string yang mewakili kode status. Fungsi ini mengembalikan `syntheticsLinkObject`

 **withFailureReason(*failureReason*)** 

` failureReason ` adalah sebuah string yang mewakili alasan kegagalan. Fungsi ini mengembalikan `syntheticsLink Object`

 **addScreenshotResult(*screenshotResult*)** 

` screenshotResult ` adalah sebuah objek. Ini adalah instans `ScreenshotResult` yang dikembalikan oleh fungsi Synthetics `takeScreenshot`. Objek tersebut meliputi hal berikut:
+ `fileName`— Sebuah string yang mewakili ` screenshotFileName`
+ `pageUrl` (opsional)
+ `error` (opsional)

## Kelas dan fungsi pustaka Node.js yang hanya berlaku untuk canary API
<a name="CloudWatch_Synthetics_Library_APIcanaries"></a>

Fungsi library CloudWatch Synthetics berikut untuk Node.js hanya berguna untuk kenari API.

**Topics**
+ [executeHttpStep(StepName, requestOptions, [callback], [stepConfig])](#CloudWatch_Synthetics_Library_executeHttpStep)

### executeHttpStep(StepName, requestOptions, [callback], [stepConfig])
<a name="CloudWatch_Synthetics_Library_executeHttpStep"></a>

Mengeksekusi permintaan HTTP yang disediakan sebagai langkah, dan menerbitkan `SuccessPercent` (lulus/gagal) dan metrik `Duration`.

**executeHttpStep**menggunakan fungsi asli HTTP atau HTTPS di bawah tenda, tergantung pada protokol yang ditentukan dalam permintaan.

Fungsi ini juga menambahkan ringkasan pelaksanaan langkah ke laporan canary. Ringkasan mencakup detail tentang setiap permintaan HTTP, seperti berikut ini:
+ Waktu mulai
+ Waktu akhir
+ Status (LULUS/GAGAL)
+ Alasan kegagalan, jika gagal
+ Detail panggilan HTTP seperti request/response header, body, kode status, pesan status, dan timing kinerja. 

**Topics**
+ [Parameter](#CloudWatch_Synthetics_Library_executeHttpStep_parameters)
+ [Contoh penggunaan executeHttpStep](#CloudWatch_Synthetics_Library_executeHttpStep_examples)

#### Parameter
<a name="CloudWatch_Synthetics_Library_executeHttpStep_parameters"></a>

 **StepName () *String*** 

Menentukan nama dari langkah tersebut. Nama ini juga digunakan untuk menerbitkan CloudWatch metrik untuk langkah ini.

 **requestOptions () *Object or String*** 

Nilai parameter ini dapat berupa URL, string URL, atau sebuah objek. Jika itu adalah objek, maka itu harus berupa serangkaian opsi yang dapat dikonfigurasi untuk membuat permintaan HTTP. Ini mendukung semua opsi di [http.request(options[, callback])](https://nodejs.org/api/http.html#http_http_request_options_callback) dalam dokumentasi Node.js.

Selain opsi Node.js ini, **requestOptions** mendukung parameter tambahan `body`. Anda dapat menggunakan parameter `body` untuk meneruskan data sebagai bodi permintaan.

 **panggilan balik () *response*** 

(Opsional) Ini adalah fungsi pengguna yang diinvokasi dengan respons HTTP. Responsnya adalah dari tipe [Class: http. IncomingMessage](https://nodejs.org/api/http.html#http_class_http_incomingmessage).

 **StepConfig () *object*** 

(Opsional) Gunakan parameter ini untuk mengganti konfigurasi synthetics global dengan konfigurasi yang berbeda untuk langkah ini.

#### Contoh penggunaan executeHttpStep
<a name="CloudWatch_Synthetics_Library_executeHttpStep_examples"></a>

Rangkaian contoh berikut membangun satu sama lain untuk menggambarkan berbagai penggunaan opsi ini.

Contoh pertama ini mengonfigurasi parameter permintaan. Anda dapat meneruskan URL sebagai **requestOptions**:

```
let requestOptions = 'https://www.amazon.com';
```

Atau Anda dapat meneruskan satu set opsi:

```
let requestOptions = {
        'hostname': 'myproductsEndpoint.com',
        'method': 'GET',
        'path': '/test/product/validProductName',
        'port': 443,
        'protocol': 'https:'
    };
```

Contoh berikutnya menciptakan fungsi callback yang menerima respons. Secara default, jika Anda tidak menentukan **callback**, CloudWatch Synthetics memvalidasi bahwa statusnya antara 200 dan 299 inklusif.

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

Contoh berikutnya membuat konfigurasi untuk langkah ini yang mengesampingkan konfigurasi Synthetics global CloudWatch . Konfigurasi langkah dalam contoh ini memungkinkan header permintaan, header respons, bodi permintaan (data posting), dan bodi respons dalam laporan Anda dan membatasi nilai header 'X-Amz-Security-Token' dan 'Authorization'. Secara bawaan, nilai-nilai ini tidak termasuk dalam laporan untuk alasan keamanan. Jika Anda memilih untuk memasukkannya, data hanya disimpan dalam bucket S3 Anda.

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

Contoh terakhir ini meneruskan permintaan Anda ke **executeHttpStep**dan memberi nama langkahnya.

```
await synthetics.executeHttpStep('Verify GET products API', requestOptions, callback, stepConfig);
```

**Dengan kumpulan contoh ini, CloudWatch Synthetics menambahkan detail dari setiap langkah dalam laporan Anda dan menghasilkan metrik untuk setiap langkah menggunakan StepName.**

 Anda akan melihat metrik `successPercent` dan `duration` untuk langkah `Verify GET products API`. Anda dapat memantau performa API Anda dengan memantau metrik untuk langkah panggilan API Anda. 

Untuk sampel skrip lengkap yang menggunakan fungsi-fungsi ini, silakan lihat [Canary API multi-langkah](CloudWatch_Synthetics_Canaries_Samples.md#CloudWatch_Synthetics_Canaries_Samples_APIsteps).

# Fungsi pustaka tersedia untuk skrip canary Python yang menggunakan Selenium
<a name="CloudWatch_Synthetics_Canaries_Library_Python"></a>

Bagian ini mencantumkan fungsi pustaka Selenium yang tersedia untuk skrip canary Python.

**Topics**
+ [Kelas dan fungsi pustaka Python dan Selenium yang berlaku untuk semua canary](#CloudWatch_Synthetics_Library_allcanaries_Python)
+ [Kelas dan fungsi pustaka Python dan Selenium yang hanya berlaku untuk canary UI](#CloudWatch_Synthetics_Library_Python_UIcanaries)

## Kelas dan fungsi pustaka Python dan Selenium yang berlaku untuk semua canary
<a name="CloudWatch_Synthetics_Library_allcanaries_Python"></a>

Fungsi perpustakaan CloudWatch Synthetics Selenium berikut untuk Python berguna untuk semua burung kenari.

**Topics**
+ [SyntheticsConfiguration kelas](#CloudWatch_Synthetics_Library_SyntheticsConfiguration_Python)
+ [SyntheticsLogger kelas](#CloudWatch_Synthetics_Library_SyntheticsLogger_Python)

### SyntheticsConfiguration kelas
<a name="CloudWatch_Synthetics_Library_SyntheticsConfiguration_Python"></a>

Anda dapat menggunakan SyntheticsConfiguration kelas untuk mengkonfigurasi perilaku fungsi perpustakaan Synthetics. Misalnya, Anda dapat menggunakan kelas ini untuk mengonfigurasi fungsi ` executeStep()` untuk tidak menangkap tangkapan layar.

Anda dapat mengatur konfigurasi CloudWatch Synthetics di tingkat global.

Definisi fungsi:

#### set\$1config(options)
<a name="CloudWatch_Synthetics_Library_setConfig_Python"></a>

```
from aws_synthetics.common import synthetics_configuration
```

` options ` adalah sebuah objek, yang merupakan kumpulan opsi yang dapat dikonfigurasi untuk canary Anda. Bagian berikut menjelaskan bidang-bidang yang memungkinkan dalam ` options `.
+ `screenshot_on_step_start` (boolean)— Apakah mengambil tangkapan layar sebelum memulai langkah.
+ `screenshot_on_step_success` (boolean)— Apakah mengambil tangkapan layar setelah menyelesaikan langkah yang berhasil.
+ `screenshot_on_step_failure` (boolean)— Apakah mengambil tangkapan layar setelah langkah gagal.

 **with\$1screenshot\$1on\$1step\$1start(screenshot\$1on\$1step\$1start)** 

Menerima argumen Boolean, yang menunjukkan apakah akan mengambil tangkapan layar sebelum memulai sebuah langkah.

 **with\$1screenshot\$1on\$1step\$1success(screenshot\$1on\$1step\$1success)** 

Menerima argumen Boolean, yang menunjukkan apakah akan mengambil tangkapan layar setelah menyelesaikan langkah dengan sukses.

 **with\$1screenshot\$1on\$1step\$1failure(screenshot\$1on\$1step\$1failure)** 

Menerima argumen Boolean, yang menunjukkan apakah akan mengambil tangkapan layar setelah langkah gagal.

 **get\$1screenshot\$1on\$1step\$1start()** 

Mengembalikan apakah mengambil tangkapan layar sebelum memulai langkah.

 **get\$1screenshot\$1on\$1step\$1success()** 

Mengembalikan apakah mengambil tangkapan layar setelah menyelesaikan sebuah langkah dengan sukses.

 **get\$1screenshot\$1on\$1step\$1failure()** 

Mengembalikan apakah mengambil tangkapan layar setelah langkah gagal.

 **disable\$1step\$1screenshots()** 

Menonaktifkan semua pilihan tangkapan layar (get\$1screenshot\$1on\$1step\$1start, get\$1screenshot\$1on\$1step\$1success, dan get\$1screenshot\$1on\$1step\$1failure)

 **enable\$1step\$1screenshots()** 

Mengaktifkan semua pilihan tangkapan layar (get\$1screenshot\$1on\$1step\$1start, get\$1screenshot\$1on\$1step\$1success, dan get\$1screenshot\$1on\$1step\$1failure). Secara bawaan, semua metode ini diaktifkan.

 **setConfig (opsi) mengenai metrik CloudWatch ** 

Untuk kenari yang menggunakan `syn-python-selenium-1.1` atau yang lebih baru, **(opsi)** untuk **SetConfig** dapat menyertakan parameter Boolean berikut yang menentukan metrik mana yang diterbitkan oleh kenari. Bawaan untuk masing-masing opsi ini adalah `true`. Pilihan yang dimulai dengan ` aggregated` menentukan apakah metrik dipancarkan tanpa dimensi ` CanaryName`. Anda dapat menggunakan metrik ini untuk melihat hasil gabungan untuk semua canary Anda. Pilihan lain menentukan apakah metrik dipancarkan dengan dimensi `CanaryName`. Anda dapat menggunakan metrik ini untuk melihat hasil untuk setiap canary individu.

Untuk daftar CloudWatch metrik yang dipancarkan oleh burung kenari, lihat. [CloudWatch metrik yang diterbitkan oleh kenari](CloudWatch_Synthetics_Canaries_metrics.md)
+ `failed_canary_metric` (boolean)— Apakah akan memancarkan metrik ` Failed` (dengan dimensi `CanaryName`) untuk canary ini. Nilai default-nya `true`.
+ `failed_requests_metric` (boolean)— Apakah akan memancarkan metrik `Failed requests` (dengan dimensi `CanaryName`) untuk canary ini. Nilai default-nya `true`.
+ `2xx_metric` (boolean)— Apakah akan memancarkan metrik `2xx` (dengan dimensi `CanaryName`) untuk canary ini. Nilai default-nya `true`.
+ `4xx_metric` (boolean)— Apakah akan memancarkan metrik `4xx` (dengan dimensi `CanaryName`) untuk canary ini. Nilai default-nya `true`.
+ `5xx_metric` (boolean)— Apakah akan memancarkan metrik `5xx` (dengan dimensi `CanaryName`) untuk canary ini. Nilai default-nya `true`.
+ `step_duration_metric` (boolean)— Apakah akan memancarkan metrik `Step duration` (dengan dimensi `CanaryName` `StepName`) untuk canary ini. Nilai default-nya `true`.
+ `step_success_metric` (boolean)— Apakah akan memancarkan metrik `Step success` (dengan dimensi `CanaryName` `StepName`) untuk canary ini. Nilai default-nya `true`.
+ `aggregated_failed_canary_metric` (boolean)— Apakah akan memancarkan metrik `Failed` (tanpa dimensi `CanaryName`) untuk canary ini. Bawaannya adalah `true`.
+ `aggregated_failed_requests_metric` (boolean)— Apakah akan memancarkan metrik `Failed Requests` (tanpa dimensi `CanaryName`) untuk canary ini. Bawaannya adalah `true`.
+ `aggregated_2xx_metric` (boolean)— Apakah akan memancarkan metrik ` 2xx` (tanpa dimensi `CanaryName`) untuk canary ini. Bawaannya adalah `true`.
+ `aggregated_4xx_metric` (boolean)— Apakah akan memancarkan metrik ` 4xx` (tanpa dimensi `CanaryName`) untuk canary ini. Bawaannya adalah `true`.
+ `aggregated_5xx_metric` (boolean)— Apakah akan memancarkan metrik ` 5xx` (tanpa dimensi `CanaryName`) untuk canary ini. Bawaannya adalah `true`.

 **with\$12xx\$1metric(2xx\$1metric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `2xx` dengan dimensi `CanaryName` untuk canary ini.

 **with\$14xx\$1metric(4xx\$1metric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `4xx` dengan dimensi `CanaryName` untuk canary ini.

 **with\$15xx\$1metric(5xx\$1metric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `5xx` dengan dimensi `CanaryName` untuk canary ini.

 **withAggregated2xxMetric(aggregated2xxMetric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `2xx` tanpa dimensi untuk canary ini.

 **withAggregated4xxMetric(aggregated4xxMetric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `4xx` tanpa dimensi untuk canary ini.

 **with\$1aggregated\$15xx\$1metric(aggregated\$15xx\$1metric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `5xx` tanpa dimensi untuk canary ini.

 **dengan\$1aggregated\$1failed\$1canary\$1metric (aggregated\$1failed\$1canary\$1metric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `Failed` tanpa dimensi untuk canary ini.

 **dengan\$1aggregated\$1failed\$1requests\$1metric (aggregated\$1failed\$1requests\$1metric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `Failed requests` tanpa dimensi untuk canary ini.

 **with\$1failed\$1canary\$1metric(failed\$1canary\$1metric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `Failed` dengan dimensi `CanaryName` untuk canary ini.

 **with\$1failed\$1requests\$1metric(failed\$1requests\$1metric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `Failed requests` dengan dimensi `CanaryName` untuk canary ini.

 **with\$1step\$1duration\$1metric(step\$1duration\$1metric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `Duration` dengan dimensi `CanaryName` untuk canary ini.

 **with\$1step\$1success\$1metric(step\$1success\$1metric)** 

Menerima argumen Boolean, yang menentukan apakah akan memancarkan metrik `StepSuccess` dengan dimensi `CanaryName` untuk canary ini.

##### Metode untuk mengaktifkan atau menonaktifkan metrik
<a name="CloudWatch_Synthetics_Python_setConfig_metrics"></a>

 **disable\$1aggregated\$1request\$1metrics()** 

Menonaktifkan canary dari memancarkan semua metrik permintaan yang dipancarkan tanpa dimensi ` CanaryName`.

 **disable\$1request\$1metrics()** 

Menonaktifkan semua metrik permintaan, termasuk metrik per canary dan metrik yang dikumpulkan di semua canary.

 **disable\$1step\$1metrics()** 

Menonaktifkan semua metrik langkah, termasuk metrik langkah sukses dan metrik durasi langkah.

 **enable\$1aggregated\$1request\$1metrics()** 

Mengaktifkan canary untuk memancarkan semua metrik permintaan yang dipancarkan tanpa dimensi ` CanaryName`.

 **enable\$1request\$1metrics()** 

Mengaktifkan semua metrik permintaan, termasuk metrik per canary dan metrik yang dikumpulkan di semua canary.

 **enable\$1step\$1metrics()** 

Mengaktifkan semua metrik langkah, termasuk metrik keberhasilan langkah dan metrik durasi langkah.

 **Penggunaan di canary UI** 

Pertama, impor dependensi synthetics dan ambil konfigurasinya. Lalu, atur konfigurasi untuk setiap pilihan dengan memanggil metode setConfig menggunakan salah satu pilihan berikut.

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

Atau

```
synthetics_configuration.with_screenshot_on_step_start(False).with_screenshot_on_step_success(False).with_screenshot_on_step_failure(True)
```

Untuk menonaktifkan semua tangkapan layar, gunakan fungsi disableStepScreenshots () seperti pada contoh ini.

```
synthetics_configuration.disable_step_screenshots()
```

Anda dapat mengaktifkan dan menonaktifkan tangkapan layar kapan saja di kode tersebut. Misalnya, untuk menonaktifkan tangkapan layar hanya untuk satu langkah, nonaktifkan sebelum menjalankan langkah tersebut dan kemudian aktifkan setelah langkah.

##### set\$1config(options) untuk canary UI
<a name="CloudWatch_Synthetics_Library_Python_UI"></a>

Dimulai dengan `syn-python-selenium-1.1`, untuk canary UI, ` set_config` dapat mencakup parameter Boolean berikut:
+ `continue_on_step_failure`**(boolean) - Apakah akan melanjutkan menjalankan skrip canary setelah langkah gagal (ini mengacu pada fungsi executeStep).** Jika ada langkah yang gagal, proses canary akan tetap ditandai sebagai gagal. Bawaannya adalah `false`.

### SyntheticsLogger kelas
<a name="CloudWatch_Synthetics_Library_SyntheticsLogger_Python"></a>

`synthetics_logger` menulis log keluar ke konsol dan ke file log lokal pada tingkat log yang sama. File log ini ditulis ke kedua lokasi hanya jika tingkat log berada pada atau di bawah tingkat log yang diinginkan dari fungsi log yang dipanggil tersebut.

Pernyataan pembuatan log di file log lokal diawali dengan "DEBUG: ", "INFO: ", dan seterusnya untuk mencocokkan tingkat log dari fungsi yang dipanggil tersebut.

Menggunakan `synthetics_logger` tidak diperlukan untuk membuat file log yang diunggah ke lokasi hasil Amazon S3 Anda. Sebagai penggantinya, Anda dapat membuat file log lain di `/tmp` folder. File apa pun yang dibuat di bawah folder `/tmp` diunggah ke lokasi hasil dalam bucket S3 sebagai artefak.

Untuk menggunakan `synthetics_logger`:

```
from aws_synthetics.common import synthetics_logger
```

**** Definisi fungsi yang berguna:

Dapatkan tingkat log:

```
log_level = synthetics_logger.get_level()
```

Atur tingkat log:

```
synthetics_logger.set_level()
```

Buat log sebuah pesan dengan tingkat tertentu. Tingkat dapat `DEBUG`, ` INFO`, `WARN`, atau `ERROR`, seperti dalam contoh sintaks berikut:

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

Untuk informasi tentang parameter debug, silakan lihat dokumentasi Python standar di [logging.debug](https://docs.python.org/3/library/logging.html#logging.debug)

Dalam fungsi pembuatan log ini, `message` adalah string format pesan. `args` adalah argumen yang digabung menjadi `msg` menggunakan operator pemformatan string.

Ada tiga argumen kata kunci di `kwargs`:
+ `exc_info`– Jika tidak dievaluasi sebagai false, tambahkan informasi pengecualian ke pesan pembuatan log.
+ `stack_info`– default ke false. Jika true, tambahkan informasi tumpukan ke pesan pembuatan log, termasuk panggilan pembuatan log yang sebenarnya.
+ `extra`– Argumen kata kunci opsional ketiga, yang dapat Anda gunakan untuk meneruskan kamus yang digunakan untuk mengisi `__dict__` dari `LogRecord` yang dibuat untuk peristiwa pembuatan log dengan atribut yang ditentukan pengguna.

Contoh:

Buat log pesan dengan tingkat `DEBUG`:

```
synthetics_logger.debug('Starting step - login.')
```

Buat log pesan dengan tingkat `INFO`. `logger.log` adalah sinonim untuk `logger.info`:

```
synthetics_logger.info('Successfully completed step - login.')
```

atau

```
synthetics_logger.log('Successfully completed step - login.')
```

Buat log pesan dengan tingkat `WARN`:

```
synthetics_logger.warning('Warning encountered trying to publish %s', 'CloudWatch Metric')
```

Buat log pesan dengan tingkat `ERROR`:

```
synthetics_logger.error('Error encountered trying to publish %s', 'CloudWatch Metric')
```

Buat log pengecualian:

```
synthetics_logger.exception(message, *args, **kwargs)
```

Membuat log pesan dengan tingkat `ERROR`. Informasi pengecualian ditambahkan ke pesan pembuatan log. Anda harus memanggil fungsi ini hanya dari handler pengecualian.

[Untuk informasi tentang parameter pengecualian, lihat dokumentasi Python standar di logging.exception](https://docs.python.org/3/library/logging.html#logging.exception)

`message` adalah string format pesan. `args` adalah argumen, yang digabungkan menjadi `msg` menggunakan operator pemformatan string.

Ada tiga argumen kata kunci di `kwargs`:
+ `exc_info`– Jika tidak dievaluasi sebagai false, tambahkan informasi pengecualian ke pesan pembuatan log.
+ `stack_info`– default ke false. Jika true, tambahkan informasi tumpukan ke pesan pembuatan log, termasuk panggilan pembuatan log yang sebenarnya.
+ `extra`– Argumen kata kunci opsional ketiga, yang dapat Anda gunakan untuk meneruskan kamus yang digunakan untuk mengisi `__dict__` dari `LogRecord` yang dibuat untuk peristiwa pembuatan log dengan atribut yang ditentukan pengguna.

Contoh:

```
synthetics_logger.exception('Error encountered trying to publish %s', 'CloudWatch Metric')
```

## Kelas dan fungsi pustaka Python dan Selenium yang hanya berlaku untuk canary UI
<a name="CloudWatch_Synthetics_Library_Python_UIcanaries"></a>

Fungsi perpustakaan CloudWatch Synthetics Selenium berikut untuk Python hanya berguna untuk kenari UI.

**Topics**
+ [SyntheticsBrowser kelas](#CloudWatch_Synthetics_Library_Python_SyntheticsBrowser)
+ [SyntheticsWebDriver kelas](#CloudWatch_Synthetics_Library_Python_SyntheticsWebDriver)

### SyntheticsBrowser kelas
<a name="CloudWatch_Synthetics_Library_Python_SyntheticsBrowser"></a>

**catatan**  
`SyntheticsBrowser`hanya didukung di browser Chrome.

Ketika Anda membuat instans browser dengan memanggil `synthetics_webdriver.Chrome()`, instans browser yang dikembalikan bertipe `SyntheticsBrowser`. ` SyntheticsBrowser`Kelas mewarisi WebDriver kelas dan menyediakan akses ke semua metode yang diekspos oleh. [WebDriver](https://www.selenium.dev/documentation/webdriver/) Ini mengontrol ChromeDriver, dan memungkinkan skrip kenari untuk menggerakkan browser, memungkinkan Selenium WebDriver bekerja dengan Synthetics.

**catatan**  
Synthetics mengesampingkan metode WebDriver [berhenti](https://www.selenium.dev/selenium/docs/api/py/selenium_webdriver_firefox/selenium.webdriver.firefox.webdriver.html) untuk tidak mengambil tindakan. Anda tidak perlu khawatir untuk berhenti dari browser, karena Synthetics menanganinya untuk Anda.

Selain metode Selenium standar, itu juga menyediakan metode berikut. 

**Topics**
+ [set\$1viewport\$1size(width, height)](#CloudWatch_Synthetics_Library_set_viewport_size)
+ [save\$1screenshot(filename, suffix)](#CloudWatch_Synthetics_Library_save_screenshot)

#### set\$1viewport\$1size(width, height)
<a name="CloudWatch_Synthetics_Library_set_viewport_size"></a>

Mengatur viewport browser. Contoh:

```
browser.set_viewport_size(1920, 1080)
```

#### save\$1screenshot(filename, suffix)
<a name="CloudWatch_Synthetics_Library_save_screenshot"></a>

Menyimpan tangkapan layar ke direktori `/tmp`. Tangkapan layar diunggah dari sana ke folder artefak canary di dalam bucket S3.

nama *file adalah nama* file untuk tangkapan layar, dan *akhiran* adalah string opsional yang akan digunakan untuk penamaan tangkapan layar.

Contoh:

```
browser.save_screenshot('loaded.png', 'page1')
```

### SyntheticsWebDriver kelas
<a name="CloudWatch_Synthetics_Library_Python_SyntheticsWebDriver"></a>

Untuk menggunakan kelas ini, gunakan yang berikut ini dalam skrip Anda:

```
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` menjelaskan kesalahan dan `ex` adalah pengecualian yang ditemui

Anda dapat menggunakan `add_execution_error` untuk mengatur kesalahan eksekusi bagi canary Anda. Itu menggagalkan canary tanpa mengganggu eksekusi skrip. Itu juga tidak memengaruhi metrik `successPercent` Anda.

Anda harus melacak kesalahan sebagai kesalahan eksekusi hanya jika kesalahan itu tidak penting untuk menunjukkan keberhasilan atau kegagalan skrip canary Anda.

Contoh penggunaan `add_execution_error` adalah sebagai berikut. Anda memantau ketersediaan titik akhir Anda dan mengambil tangkapan layar setelah halaman dimuat. Karena kegagalan mengambil tangkapan layar tidak menentukan ketersediaan titik akhir, Anda dapat menangkap kesalahan apa pun yang dihadapi saat mengambil tangkapan layar dan menambahkannya sebagai kesalahan eksekusi. Metrik ketersediaan Anda masih akan menunjukkan bahwa titik akhir telah aktif dan berjalan, namun status canary Anda akan ditandai sebagai gagal. Blok kode sampel berikut menangkap kesalahan tersebut dan menambahkannya sebagai kesalahan eksekusi.

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

Menambahkan nilai dari `user_agent_str` ke header agen pengguna browser. Anda harus menetapkan `user_agent_str` sebelum membuat instans browser.

Contoh:

```
await synthetics_webdriver.add_user_agent('MyApp-1.0')
```

`add_user_agent`harus digunakan di dalam suatu `async` fungsi.

#### execute\$1step(step\$1name, function\$1to\$1execute)
<a name="CloudWatch_Synthetics_Library_Python_execute_step"></a>

Memproses satu fungsi. Ini juga melakukan hal berikut:
+ Membuat log bahwa langkah tersebut dimulai.
+ Mengambil tangkapan layar yang bernama `<stepName>-starting`.
+ Memulai pengatur waktu.
+ Menjalankan fungsi yang disediakan.
+ Jika fungsi kembali secara normal, ini dihitung sebagai lulus. Jika fungsi tersebut throw, maka ini dihitung sebagai gagal.
+ Mengakhiri pengatur waktu.
+ Mencatat log jika langkah berhasil atau gagal
+ Mengambil tangkapan layar yang bernama `<stepName>-succeeded` atau ` <stepName>-failed`.
+ Memancarkan metrik `stepName` `SuccessPercent`, 100 untuk lulus atau 0 untuk gagal.
+ Memancarkan metrik `stepName` `Duration`, dengan nilai didasarkan pada mulai melangkah dan waktu selesai.
+ Akhirnya, mengembalikan apa yang dikembalikan oleh `functionToExecute` atau melempar kembali apa yang dilempar oleh `functionToExecute`.

Contoh:

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

Membuat permintaan HTTP ke URL yang disediakan dan mengembalikan kode respons permintaan HTTP. Jika pengecualian terjadi selama permintaan HTTP, string dengan nilai “kesalahan” dikembalikan sebagai gantinya.

Contoh:

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

Meluncurkan sebuah instans dari browser Chromium dan mengembalikan instans yang dibuat dari browser.

Contoh:

```
browser = synthetics_webdriver.Chrome()
browser.get("https://example.com/)
```

Untuk meluncurkan browser dalam mode penyamaran, gunakan yang berikut ini:

```
add_argument('——incognito')
```

Untuk menambahkan pengaturan proxy, gunakan yang berikut ini:

```
add_argument('--proxy-server=%s' % PROXY)
```

Contoh:

```
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("——incognito")
browser = syn_webdriver.Chrome(chrome_options=chrome_options)
```

# Penjadwalan operasi canary yang menggunakan cron
<a name="CloudWatch_Synthetics_Canaries_cron"></a>

Menggunakan ekspresi cron memberi Anda fleksibilitas saat Anda menjadwalkan canary. Ekspresi cron berisi lima atau enam bidang dalam urutan yang tercantum dalam tabel berikut. Bidang dipisahkan oleh spasi. Sintaksnya berbeda tergantung pada apakah Anda menggunakan CloudWatch konsol untuk membuat kenari, atau atau. AWS CLI AWS SDKs Bila Anda menggunakan konsol, Anda menentukan hanya lima bidang pertama. Bila Anda menggunakan AWS CLI or AWS SDKs, Anda menentukan semua enam bidang, dan Anda harus menentukan `*` untuk `Year` bidang tersebut.


|  **Bidang**  |  **Nilai yang diizinkan**  |  **Karakter khusus yang diizinkan**  | 
| --- | --- | --- | 
|  Menit  |  0-59  |  , - \$1 /  | 
|  Jam  |  0-23  |  , - \$1 /  | 
|  D ay-of-month  |  1-31  |  , - \$1 ? / L W  | 
|  Bulan  |  1-12 atau JAN-DES  |  , - \$1 /  | 
|  D ay-of-week  |  1-7 atau MGG-SBT  |  , - \$1 ? L \$1  | 
|  Tahun  |  \$1  |    | 

**Karakter-karakter khusus**
+ **,** (koma) mencakup beberapa nilai dalam ekspresi untuk suatu bidang. Misalnya, di bidang Bulan, JAN,FEB,MAR akan menyertakan Januari, Februari, dan Maret.
+ **-** (tanda hubung) karakter khusus menentukan rentang. Di bidang Tanggal, 1-15 akan mencakup tanggal 1 hingga 15 pada bulan yang ditentukan.
+ **\$1** (bintang) mencakup semua nilai di bidang tersebut. Di bidang Jam, **\$1** mencakup setiap jam. Anda tidak dapat **menggunakan\$1** di kedua Day-of-week bidang Day-of-month dan dalam ekspresi yang sama. Jika Anda menggunakannya di satu bidang, Anda harus menggunakan **?** di bidang lain.
+ **/** (garis miring) menentukan kenaikan. Di bidang Menit, Anda dapat memasukkan 1/10 untuk menentukan setiap menit kesepuluh, mulai dari menit pertama jam (sebagai contoh, menit kesebelas, dua puluh satu, dan tiga puluh satu, dan seterusnya).
+ **?** (tanda tanya) menentukan satu atau yang lain. **Jika Anda memasukkan **7** di Day-of-month lapangan dan Anda tidak peduli hari apa dalam minggu ketujuh, Anda bisa masuk?** di Day-of-week lapangan.
+ Wildcard **L** di kolom Day-of-month atau Day-of-week menentukan hari terakhir pada bulan atau minggu.
+ **W**Wildcard di Day-of-month lapangan menentukan hari kerja. Di Day-of-month lapangan, **3W** tentukan hari kerja yang paling dekat dengan hari ketiga bulan itu.
+ Wildcard **\$1** di Day-of-week bidang menentukan contoh tertentu dari hari yang ditentukan dalam seminggu dalam sebulan. Sebagai contoh, 3\$12 adalah hari Selasa kedua setiap bulan. Angka 3 mengacu pada hari Selasa karena itu adalah hari ketiga setiap minggu, dan angka 2 mengacu pada hari kedua dari jenis tersebut dalam bulan tersebut.

**Keterbatasan:**
+ Anda tidak dapat menentukan kolom Day-of-month dan Day-of-week dalam ekspresi cron yang sama. Jika Anda menentukan nilai atau `*` (bintang) di salah satu bidang, Anda harus menggunakan **?** (tanda tanya) di bidang lain.
+ Ekspresi cron yang mengarah ke tingkat lebih cepat dari satu menit tidak didukung.
+ Anda tidak dapat mengatur canary untuk menunggu lebih dari satu tahun sebelum berjalan, sehingga Anda dapat menentukan hanya `*` dalam bidang `Year`.

**Contoh**  
Anda dapat merujuk ke string cron sampel berikut ketika Anda membuat canary. Contoh berikut adalah sintaks yang benar untuk menggunakan AWS CLI atau AWS SDKs untuk membuat atau memperbarui kenari. Jika Anda menggunakan CloudWatch konsol, hilangkan final `*` di setiap contoh.


| Ekspresi | Arti | 
| --- | --- | 
|   `0 10 * * ? *`   |  Jalankan pada pukul 10:00 (UTC) setiap hari  | 
|   `15 12 * * ? *`   |  Jalankan pada pukul 12.15 (UTC) setiap hari  | 
|   `0 18 ? * MON-FRI *`   |  Jalankan pada pukul 18.00 (UTC) setiap Senin hingga Jumat  | 
|   `0 8 1 * ? *`   |  Jalankan pada pukul 08.00 (UTC) pada hari pertama setiap bulan  | 
|   `0/10 * ? * MON-SAT *`   |  Jalankan setiap 10 menit Senin hingga Sabtu setiap minggu  | 
|   `0/5 8-17 ? * MON-FRI *`   |  Jalankan setiap lima menit Senin hingga Jumat antara pukul 08.00 dan 17.55 (UTC)   | 

# Mengkonfigurasi kenari Anda untuk mencoba lagi secara otomatis
<a name="CloudWatch_Synthetics_Canaries_autoretry"></a>

Saat membuat atau memperbarui kenari, Anda dapat mengonfigurasi kenari untuk secara otomatis mencoba proses tambahan saat yang dijadwalkan gagal. Ini membantu membedakan antara kegagalan asli dan gangguan sementara, memberikan hasil yang lebih andal. Fitur ini sangat ideal untuk membangun sistem pemantauan yang lebih tangguh sekaligus mengurangi alarm palsu dan intervensi manual.

**Untuk membuat kenari coba lagi otomatis**

1. Buka CloudWatch konsol di [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Di panel navigasi, pilih **Application Signals**, **Synthetics Canaries**.

1. Pilih **Buat Canary**.

1. Di bawah **Konfigurasi tambahan**, **Coba ulang otomatis,** pilih nomor coba ulang maksimum yang diinginkan.

**Untuk memperbarui nomor coba ulang maksimum untuk kenari**

1. Buka CloudWatch konsol di [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Di panel navigasi, pilih **Application Signals**, **Synthetics Canaries**.

1. Anda dapat melakukan salah satu dari yang berikut:
   + Pilih kenari dan pilih **Tindakan**, **Aktifkan coba ulang otomatis**, dan sesuaikan percobaan ulang maksimum.
   + Pilih kenari dan pilih **Tindakan**, **Edit**. Di halaman **Edit detail**, di bawah **Konfigurasi tambahan**, **Coba ulang otomatis**, sesuaikan konfigurasi coba lagi.

 **Batasan** 

Berikut adalah batasan untuk mengkonfigurasi auto retry.
+ Hanya didukung pada versi runtime atau yang lebih baru, `syn-nodejs-puppeteer-10.0 ` atau yang lebih baru, ` syn-nodejs-playwright-2.0` atau yang lebih baru, atau `syn-python-selenium-5.1` atau yang lebih baru. `syn-nodejs-3.0`
+ Burung kenari yang berjalan lama yang batas waktu setelah sepuluh menit terbatas pada satu percobaan lagi. Semua kenari lainnya dapat mendukung hingga dua percobaan ulang

# Menggunakan dependensi dengan kenari Synthetics CloudWatch
<a name="CloudWatch_Synthetics_Canaries_dependencies"></a>

Bagian ini menjelaskan cara menggunakan kenari `Dependencies` CloudWatch Synthetics. `Dependencies`Bidang ini memungkinkan Anda menentukan dependensi untuk kenari Anda, memungkinkan Anda untuk menyertakan pustaka tambahan atau kode khusus yang dapat digunakan skrip kenari Anda.

## Ikhtisar
<a name="overview"></a>

CloudWatch Synthetics canaries mendukung menentukan lapisan Lambda sebagai dependensi. Fitur ini memungkinkan Anda untuk:
+ Bagikan kode umum di beberapa kenari
+ Kelola dependensi secara terpisah dari kode skrip canary Anda
+ Kurangi ukuran skrip kenari Anda dengan memindahkan dependensi ke lapisan Lambda

## Didukung APIs
<a name="supported-apis"></a>

`Dependencies`Bidang ini didukung sebagai berikut APIs:
+  [CreateCanary](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_CreateCanary.html) 
+  [UpdateCanary](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_UpdateCanary.html) 
+  [ StartCanaryDryRun](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_StartCanaryDryRun.html) 

## Sintaksis
<a name="syntax"></a>

`Dependencies`Bidang adalah bagian dari struktur kode dalam sintaks permintaan:

```
"Code": { 
  "Handler": "string",
  "S3Bucket": "string",
  "S3Key": "string",
  "S3Version": "string",
  "ZipFile": blob,
  "Dependencies": [
    {
      "Type": "LambdaLayer",
      "Reference": "string"
    }
  ]
}
```

## Menggunakan dependensi
<a name="usage"></a>

Berikut adalah beberapa contoh dan instruksi untuk menggunakan `Dependencies` bidang dalam skenario yang berbeda.

### Membuat Canary dengan dependensi
<a name="creating-canary"></a>

Saat membuat kenari, Anda dapat menentukan lapisan Lambda sebagai ketergantungan:

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

### Memperbarui dependensi Canary
<a name="updating-canary"></a>

Anda dapat memperbarui dependensi kenari menggunakan API: UpdateCanary 

```
{
  "Name": "my-canary",
  "Code": {
    "Dependencies": [
      {
        "Type": "LambdaLayer",
        "Reference": "arn:aws:lambda:us-west-2:123456789012:layer:my-updated-layer:2"
      }
    ]
  }
}
```

### Menghapus dependensi
<a name="removing-dependencies"></a>

Untuk menghapus dependensi dari kenari, sediakan array kosong untuk bidang Dependencies:

```
{
  "Name": "my-canary",
  "Code": {
    "Dependencies": []
  }
}
```

### Menguji dependensi dengan StartCanaryDryRun
<a name="testing-dependencies"></a>

Sebelum memperbarui kenari dengan dependensi baru, Anda dapat mengujinya menggunakan API: StartCanaryDryRun 

```
{
  "Name": "my-canary",
  "Code": {
    "Dependencies": [
      {
        "Type": "LambdaLayer",
        "Reference": "arn:aws:lambda:us-west-2:123456789012:layer:my-test-layer:3"
      }
    ]
  }
}
```

## Pertimbangan dan batasan
<a name="limitations"></a>
+ Hanya satu lapisan Lambda yang dapat ditentukan sebagai dependensi
+ [Peran yang digunakan untuk membuat kenari dengan dependensi harus memiliki ` lambda:GetLayerVersion` akses ke lapisan ketergantungan selain peran dan izin yang diperlukan](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Roles.html)

## Membuat lapisan Lambda yang kompatibel
<a name="creating-compatible-layers"></a>

[Untuk informasi tentang cara membuat dan mengemas lapisan, lihat [Mengelola dependensi Lambda dengan lapisan](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html) dan untuk memahami struktur kemasan pemeriksaan kenari berdasarkan struktur pengepakan kenari, lihat Menulis skrip kenari.](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_WritingCanary.html)

# Grup
<a name="CloudWatch_Synthetics_Groups"></a>

Anda dapat membuat *grup* untuk mengasosiasikan canary satu sama lain, termasuk canary lintas wilayah. Menggunakan grup dapat membantu Anda mengelola dan mengotomatiskan canary Anda, dan Anda juga dapat melihat hasil dan statistik run gabungan untuk semua canary dalam sebuah grup. 

Grup adalah sumber daya global. Saat Anda membuat grup, grup akan direplikasi di semua AWS Wilayah yang mendukung grup, dan Anda dapat menambahkan kenari dari salah satu Wilayah ini ke dalamnya, dan melihatnya di salah satu Wilayah ini. Meskipun format ARN grup mencerminkan nama Wilayah tempat itu dibuat, grup tidak dibatasi ke Wilayah mana pun. Ini berarti Anda dapat menempatkan canary dari beberapa Wilayah ke dalam grup yang sama, dan kemudian menggunakan grup itu untuk melihat dan mengelola semua canary tersebut dalam satu tampilan.

Grup didukung di semua Wilayah kecuali Wilayah yang dinonaktifkan secara default. Untuk informasi selengkapnya tentang Wilayah ini, silakan lihat [Mengaktifkan sebuah Wilayah](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html#rande-manage-enable).

Setiap kelompok dapat berisi sebanyak 10 canary. Anda dapat memiliki sebanyak 20 grup di akun Anda. Setiap canary tunggal dapat menjadi anggota hingga 10 grup.

**Untuk membuat grup**

1. Buka CloudWatch konsol di [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Di panel navigasi, pilih **Application Signals**, **Synthetics Canaries**.

   

1. Pilih **Buat group**.

1. Di bawah **Nama Grup**, masukkan nama untuk grup tersebut. 

1. Pilih canary untuk dikaitkan dengan grup ini. Untuk memilih canary, ketik nama lengkapnya di **Nama canary yang tepat** dan pilih **Cari**. Kemudian pilih kotak centang di samping nama canary. Jika ada beberapa canary dengan nama yang sama di Wilayah yang berbeda, pastikan untuk memilih canary yang Anda inginkan.

   Anda dapat mengulangi langkah ini untuk mengasosiasikan sebanyak 10 canary dengan grup tersebut.

1. (Opsional) Di bawah **Tag**, tambahkan satu atau beberapa pasangan nilai kunci sebagai tanda untuk grup ini. Tag dapat membantu Anda mengidentifikasi dan mengatur AWS sumber daya Anda dan melacak AWS biaya Anda. Untuk informasi selengkapnya, lihat [Menandai sumber daya Amazon CloudWatch Anda](CloudWatch-Tagging.md).

1. Pilih **Buat group**.

# Uji kenari secara lokal
<a name="CloudWatch_Synthetics_Debug_Locally"></a>

Bagian ini menjelaskan cara memodifikasi, menguji, dan men-debug burung kenari CloudWatch Synthetics secara langsung di dalam Microsoft Visual Studio editor kode atau JetBrains IDE editor kode. Lingkungan debugging lokal menggunakan wadah Serverless Application Model (SAM) untuk mensimulasikan fungsi Lambda untuk meniru perilaku kenari Synthetics. 

**catatan**  
Tidak praktis untuk melakukan debug kenari lokal yang mengandalkan pemantauan visual. Pemantauan visual mengandalkan pengambilan tangkapan layar dasar selama proses awal, dan kemudian membandingkan tangkapan layar ini dengan tangkapan layar dari proses berikutnya. Dalam lingkungan pengembangan lokal, run tidak disimpan atau dilacak, dan setiap iterasi adalah run mandiri yang independen. Tidak adanya riwayat kenari membuatnya tidak praktis untuk men-debug kenari yang mengandalkan pemantauan visual.

 **Prasyarat** 

1. Pilih atau buat bucket Amazon S3 yang akan digunakan untuk menyimpan artefak dari uji kenari lokal, seperti file HAR dan tangkapan layar. Ini mengharuskan Anda untuk disediakan dengan IAM. Jika Anda melewatkan pengaturan bucket Amazon S3, Anda masih dapat menguji kenari Anda secara lokal, tetapi Anda akan melihat pesan kesalahan tentang ember yang hilang dan Anda tidak akan memiliki akses ke artefak kenari.

   Jika Anda menggunakan bucket Amazon S3, sebaiknya atur siklus hidup bucket untuk menghapus objek setelah beberapa hari, untuk menghemat biaya. Untuk informasi selengkapnya, lihat [Mengelola siklus hidup penyimpanan Anda](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html).

1. Siapkan AWS profil default untuk AWS akun Anda. Untuk informasi selengkapnya, lihat [Pengaturan konfigurasi dan file kredensyal](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html).

1. Setel AWS Region default lingkungan debug ke Wilayah pilihan Anda, seperti` us-west-2`.

1. Instal AWS SAM CLI. Untuk informasi selengkapnya, lihat [Menginstal AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html).

1. Instal Visual Studio Code Editor atauJetBrains IDE. Untuk informasi lebih lanjut, lihat [https://code.visualstudio.com/](https://code.visualstudio.com/)atau [https://www.jetbrains.com/ides/](https://www.jetbrains.com/ides/)

1. Instal Docker untuk bekerja dengan AWS SAM CLI. Pastikan untuk memulai daemon docker. Untuk informasi selengkapnya, lihat [Menginstal  Docker untuk digunakan dengan AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-docker.html).

   Atau, Anda dapat menginstal perangkat lunak manajemen kontainer lainnya seperti Rancher, asalkan menggunakan Docker runtime.

1. Instal ekstensi AWS toolkit untuk editor pilihan Anda. Untuk informasi selengkapnya, lihat [Menginstal AWS Toolkit for Visual Studio Code](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-toolkit.html) atau [Menginstal AWS Toolkit for JetBrains](https://docs.aws.amazon.com/toolkit-for-jetbrains/latest/userguide/setup-toolkit.html).

**Topics**
+ [Siapkan lingkungan pengujian dan debugging](#CloudWatch_Synthetics_Debug_Environment)
+ [Gunakan Visual Studio Code IDE](#CloudWatch_Synthetics_Debug_VS)
+ [Gunakan JetBrains IDE](#CloudWatch_Synthetics_Debug_JetBrains)
+ [Jalankan kenari secara lokal dengan SAM CLI](#CloudWatch_Synthetics_Run_Locally)
+ [Integrasikan lingkungan pengujian lokal Anda ke dalam paket kenari yang ada](#CloudWatch_Synthetics_Debug_Integrate)
+ [Mengubah runtime CloudWatch Synthetics](#CloudWatch_Synthetics_Debug_DifferentRuntime)
+ [Kesalahan umum](#CloudWatch_Synthetics_Debug_Errors)

## Siapkan lingkungan pengujian dan debugging
<a name="CloudWatch_Synthetics_Debug_Environment"></a>

Pertama, kloning repositori Github yang AWS menyediakan dengan memasukkan perintah berikut. Repositori berisi contoh kode untuk kenari Node.js dan kenari Python. 

```
git clone https://github.com/aws-samples/synthetics-canary-local-debugging-sample.git
```

Kemudian lakukan salah satu hal berikut, tergantung pada bahasa burung kenari Anda.

**Untuk burung kenari Node.js**

1. Buka direktori sumber kenari Node.js dengan memasukkan perintah berikut.

   ```
   cd synthetics-canary-local-debugging-sample/nodejs-canary/src
   ```

1. Masukkan perintah berikut untuk menginstal dependensi kenari.

   ```
   npm install
   ```

**Untuk kenari Python**

1. Pergi ke direktori sumber kenari Python dengan memasukkan perintah berikut.

   ```
   cd synthetics-canary-local-debugging-sample/python-canary/src
   ```

1. Masukkan perintah berikut untuk menginstal dependensi kenari.

   ```
   pip3 install -r requirements.txt -t .
   ```

## Gunakan Visual Studio Code IDE
<a name="CloudWatch_Synthetics_Debug_VS"></a>

File konfigurasi Visual Studio peluncuran terletak di` .vscode/launch.json`. Ini berisi konfigurasi untuk memungkinkan file template ditemukan oleh isual Studio kode V. Ini mendefinisikan muatan Lambda dengan parameter yang diperlukan untuk memanggil kenari dengan sukses. Berikut konfigurasi peluncuran untuk kenari 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": {}
            }
        }
    ]
}
```

Anda juga dapat secara opsional memberikan bidang-bidang berikut di payload JSON:
+ `s3EncryptionMode`Nilai yang valid: `SSE_S3` \$1 `SSE_KMS`
+ `s3KmsKeyArn`Nilai yang valid: *KMS Key ARN*
+ `activeTracing`Nilai yang valid: `true` \$1 `false`
+ `canaryRunId`Nilai valid: Parameter *UUID* ini diperlukan jika penelusuran aktif diaktifkan.

Untuk men-debug kenariVisual Studio, tambahkan breakpoint dalam kode canary tempat Anda ingin menjeda eksekusi. Untuk menambahkan breakpoint, pilih margin editor dan pergi ke mode **Run dan Debug** di editor. Jalankan kenari dengan mengklik tombol putar. Saat kenari berjalan, log akan dibuntuti di konsol debug, memberi Anda wawasan waktu nyata tentang perilaku kenari. Jika Anda menambahkan breakpoint, eksekusi canary akan berhenti di setiap breakpoint, memungkinkan Anda untuk melangkah melalui kode dan memeriksa nilai variabel, metode instance, atribut objek, dan tumpukan panggilan fungsi.

Tidak ada biaya yang dikeluarkan untuk menjalankan dan men-debug kenari secara lokal, kecuali untuk artefak yang disimpan di bucket Amazon S3 dan metrik yang dihasilkan oleh setiap proses lokal. CloudWatch 

![\[Visual Studio Code interface showing JavaScript code for a heartbeat canary function.\]](http://docs.aws.amazon.com/id_id/AmazonCloudWatch/latest/monitoring/images/DebugCanaryVS.png)


## Gunakan JetBrains IDE
<a name="CloudWatch_Synthetics_Debug_JetBrains"></a>

Setelah Anda menginstal AWS Toolkit for JetBrains ekstensi, pastikan plugin dan JavaScript debugger Node.js diaktifkan untuk dijalankan, jika Anda men-debug kenari Node.js. Kemudian ikuti langkah-langkah ini.

**Debug kenari menggunakan JetBrains IDE**

1. Di panel navigasi kiriJetBrains IDE, pilih **Lambda**, lalu pilih templat konfigurasi lokal.

1. Masukkan nama untuk konfigurasi run, seperti **LocalSyntheticsCanary**

1. ****Pilih **Dari template**, pilih browser file di bidang template, lalu pilih file **template.ymldari** proyek, baik dari direktori nodejs atau direktori python.****

1. Di bagian **Input**, masukkan payload untuk kenari seperti yang ditunjukkan pada layar berikut.

   ```
   {
    "canaryName": "LocalSyntheticsCanary",
    "artifactS3Location": {
        "s3Bucket": "cw-syn-results-123456789012-us-west-2",
        "s3Key": "local-run-artifacts"
    },
    "customerCanaryHandlerName": "heartbeat-canary.handler"
   }
   ```

   Anda juga dapat mengatur variabel lingkungan lainnya di JSON payload, seperti yang tercantum dalam. [Gunakan Visual Studio Code IDE](#CloudWatch_Synthetics_Debug_VS)

![\[Run/Debug Configurations interface for AWS Lambda with LocalSyntheticsCanary settings.\]](http://docs.aws.amazon.com/id_id/AmazonCloudWatch/latest/monitoring/images/DebugCanaryIntellij.png)


## Jalankan kenari secara lokal dengan SAM CLI
<a name="CloudWatch_Synthetics_Run_Locally"></a>

Gunakan salah satu prosedur berikut untuk menjalankan kenari Anda secara lokal menggunakan CLI Model Aplikasi Tanpa Server (SAM). Pastikan untuk menentukan nama bucket Amazon S3 Anda sendiri untuk in `s3Bucket` `event.json`

**Untuk menggunakan SAM CLI untuk menjalankan kenari Node.js**

1. Buka direktori sumber dengan memasukkan perintah berikut.

   ```
   cd synthetics-canary-local-debugging-sample/nodejs-canary
   ```

1. Masukkan perintah berikut.

   ```
   sam build
   sam local invoke -e ../event.json
   ```

**Untuk menggunakan SAM CLI untuk menjalankan kenari Python**

1. Buka direktori sumber dengan memasukkan perintah berikut.

   ```
   cd synthetics-canary-local-debugging-sample/python-canary
   ```

1. Masukkan perintah berikut.

   ```
   sam build
   sam local invoke -e ../event.json
   ```

## Integrasikan lingkungan pengujian lokal Anda ke dalam paket kenari yang ada
<a name="CloudWatch_Synthetics_Debug_Integrate"></a>

Anda dapat mengintegrasikan debugging kenari lokal ke dalam paket kenari yang ada dengan menyalin tiga file:
+ Salin `template.yml` file ke root paket kenari Anda. Pastikan untuk memodifikasi jalur `CodeUri` untuk menunjuk ke direktori tempat kode kenari Anda ada.
+ Jika Anda bekerja dengan canary Node.js, salin `cw-synthetics.js` file ke direktori sumber kenari Anda. Jika Anda bekerja dengan kenari Python, salin ` cw-synthetics.py` ke direktori sumber kenari Anda.
+ Salin file konfigurasi peluncuran. `vscode/launch.json`ke root paket. Pastikan untuk memasukkannya ke dalam `.vscode` direktori; buat jika belum ada.

## Mengubah runtime CloudWatch Synthetics
<a name="CloudWatch_Synthetics_Debug_DifferentRuntime"></a>

Sebagai bagian dari debugging Anda, Anda mungkin ingin mencoba menjalankan kenari dengan runtime CloudWatch Synthetics yang berbeda, bukan runtime terbaru. Untuk melakukannya, temukan runtime yang ingin Anda gunakan dari salah satu tabel berikut. Pastikan untuk memilih runtime untuk Wilayah yang benar. Kemudian rekatkan ARN untuk runtime itu ke tempat yang sesuai di ` template.yml` file Anda, lalu jalankan kenari.

### Node.js dan runtime Puppeteer
<a name="Synthetics_NodeJS_Puppeteer_Runtime_ARNs"></a>

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-puppeteer-15.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-puppeteer-14.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-puppeteer-13.1` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-puppeteer-13.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-puppeteer-12.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-puppeteer-11.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-puppeteer-10.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:58`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:61`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:59`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:61`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:59`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:59`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:34`   | 
|  Asia Pasifik (Jakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:41`   | 
|  Asia Pasifik (Malaysia)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics:15`   | 
|  Asia Pacific (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:32`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:59`   | 
|  Asia Pasifik (Selandia Baru)  |   `arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics:18`   | 
|  Asia Pasifik (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:45`   | 
|  Asia Pasifik (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:62`   | 
|  Asia Pasifik (Singapura)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:63`   | 
|  Asia Pasifik (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:58`   | 
|  Asia Pasifik (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics:24`   | 
|  Asia Pasifik (Thailand)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics:6`   | 
|  Asia Pasifik (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:59`   | 
|  (Canada (Central)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:59`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:90`   | 
|  Tiongkok (Beijing)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:58`   | 
|  Tiongkok (Ningxia);  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:59`   | 
|  Eropa (Frankfurt)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:59`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:60`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:58`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:60`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:59`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:34`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:59`   | 
|  Eropa (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`   | 
|  Meksiko (Tengah)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics:7`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:58`   | 
|  Timur Tengah (UEA)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:34`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:60`   | 
|  AWS GovCloud (AS-Timur)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:54`   | 
|  AWS GovCloud (AS-Barat)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:55`   | 

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-puppeteer-9.1` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:53`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:56`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:54`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:56`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:54`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:54`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:29`   | 
|  Asia Pasifik (Jakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:36`   | 
|  Asia Pasifik (Malaysia)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics:10`   | 
|  Asia Pacific (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:27`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:54`   | 
|  Asia Pasifik (Selandia Baru)  |   `arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics:17`   | 
|  Asia Pasifik (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:40`   | 
|  Asia Pasifik (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:57`   | 
|  Asia Pasifik (Singapura)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:58`   | 
|  Asia Pasifik (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:53`   | 
|  Asia Pasifik (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics:25`   | 
|  Asia Pasifik (Thailand)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics:1`   | 
|  Asia Pasifik (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:54`   | 
|  (Canada (Central)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:54`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:85`   | 
|  Tiongkok (Beijing)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:54`   | 
|  Tiongkok (Ningxia);  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:55`   | 
|  Eropa (Frankfurt)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:54`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:55`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:53`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:55`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:54`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:29`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:54`   | 
|  Eropa (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`   | 
|  Meksiko (Tengah)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics:3`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:53`   | 
|  Timur Tengah (UEA)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:29`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:55`   | 
|  AWS GovCloud (AS-Timur)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:50`   | 
|  AWS GovCloud (AS-Barat)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:51`   | 

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-puppeteer-9.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:51`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:54`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:52`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:54`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:52`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:52`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:27`   | 
|  Asia Pasifik (Jakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:34`   | 
|  Asia Pasifik (Malaysia)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics:8`   | 
|  Asia Pacific (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:25`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:52`   | 
|  Asia Pasifik (Selandia Baru)  |   `arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics:16`   | 
|  Asia Pasifik (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:38`   | 
|  Asia Pasifik (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:55`   | 
|  Asia Pasifik (Singapura)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:56`   | 
|  Asia Pasifik (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:51`   | 
|  Asia Pasifik (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics:26`   | 
|  Asia Pasifik (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:52`   | 
|  (Canada (Central)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:52`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:83`   | 
|  Tiongkok (Beijing)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:52`   | 
|  Tiongkok (Ningxia);  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:53`   | 
|  Eropa (Frankfurt)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:52`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:53`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:51`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:53`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:52`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:27`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:52`   | 
|  Eropa (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`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:51`   | 
|  Timur Tengah (UEA)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:27`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:53`   | 
|  AWS GovCloud (AS-Timur)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:48`   | 
|  AWS GovCloud (AS-Barat)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:49`   | 

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-puppeteer-8.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:48`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:50`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:48`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:51`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:48`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:49`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:24`   | 
|  Asia Pasifik (Jakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:30`   | 
|  Asia Pasifik (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:22`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:48`   | 
|  Asia Pasifik (Selandia Baru)  |   `arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics:15`   | 
|  Asia Pasifik (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:34`   | 
|  Asia Pasifik (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:51`   | 
|  Asia Pasifik (Singapura)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:53`   | 
|  Asia Pasifik (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:48`   | 
|  Asia Pasifik (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics:23`   | 
|  Asia Pasifik (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:48`   | 
|  (Canada (Central)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:48`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:80`   | 
|  Tiongkok (Beijing)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:49`   | 
|  Tiongkok (Ningxia);  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:50`   | 
|  Eropa (Frankfurt)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:48`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:50`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:48`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:49`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:48`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:24`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:48`   | 
|  Eropa (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`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:48`   | 
|  Timur Tengah (UEA)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:23`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:49`   | 
|  AWS GovCloud (AS-Timur)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:45`   | 
|  AWS GovCloud (AS-Barat)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:46`   | 

#### ARNs untuk syn-nodejs-puppeteer -7.0
<a name="syn-nodejs-puppeteer-7.0"></a>

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-puppeteer-7.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:44`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:46`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:44`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:47`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:44`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:45`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:20`   | 
|  Asia Pasifik (Jakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:26`   | 
|  Asia Pasifik (Malaysia)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics:7`   | 
|  Asia Pacific (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:18`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:44`   | 
|  Asia Pasifik (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:30`   | 
|  Asia Pasifik (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:46`   | 
|  Asia Pasifik (Singapura)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:49`   | 
|  Asia Pasifik (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:44`   | 
|  Asia Pasifik (Thailand)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics:3`   | 
|  Asia Pasifik (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:44`   | 
|  (Canada (Central)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:44`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:76`   | 
|  Tiongkok (Beijing)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:45`   | 
|  Tiongkok (Ningxia);  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:46`   | 
|  Eropa (Frankfurt)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:44`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:46`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:44`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:45`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:44`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:20`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:44`   | 
|  Eropa (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`   | 
|  Meksiko (Tengah)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics:4`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:44`   | 
|  Timur Tengah (UEA)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:19`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:45`   | 
|  AWS GovCloud (AS-Timur)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:41`   | 
|  AWS GovCloud (AS-Barat)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:42`   | 

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-puppeteer-6.2` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:41`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:43`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:41`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:44`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:41`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:42`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:17`   | 
|  Asia Pasifik (Jakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:23`   | 
|  Asia Pasifik (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:15`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:41`   | 
|  Asia Pasifik (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:27`   | 
|  Asia Pasifik (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:42`   | 
|  Asia Pasifik (Singapura)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:46`   | 
|  Asia Pasifik (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:41`   | 
|  Asia Pasifik (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:41`   | 
|  (Canada (Central)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:41`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:73`   | 
|  Tiongkok (Beijing)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:42`   | 
|  Tiongkok (Ningxia);  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:43`   | 
|  Eropa (Frankfurt)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:41`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:43`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:41`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:42`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:41`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:17`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:41`   | 
|  Eropa (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`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:41`   | 
|  Timur Tengah (UEA)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:16`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:42`   | 
|  AWS GovCloud (AS-Timur)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:39`   | 
|  AWS GovCloud (AS-Barat)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:39`   | 

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-puppeteer-5.2` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:42`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:44`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:42`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:45`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:42`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:43`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:18`   | 
|  Asia Pasifik (Jakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:24`   | 
|  Asia Pasifik (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:16`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:42`   | 
|  Asia Pasifik (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:28`   | 
|  Asia Pasifik (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:44`   | 
|  Asia Pasifik (Singapura)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:47`   | 
|  Asia Pasifik (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:42`   | 
|  Asia Pasifik (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:42`   | 
|  (Canada (Central)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:42`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:74`   | 
|  Tiongkok (Beijing)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:43`   | 
|  Tiongkok (Ningxia);  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:44`   | 
|  Eropa (Frankfurt)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:42`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:44`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:42`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:43`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:42`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:18`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:42`   | 
|  Eropa (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`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:42`   | 
|  Timur Tengah (UEA)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:17`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:43`   | 
|  AWS GovCloud (AS-Timur)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:40`   | 
|  AWS GovCloud (AS-Barat)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:40`   | 

### Runtime Node.js dan Playwright
<a name="Synthetics_Playwright_Runtime_ARNs"></a>

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-playwright-6.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-playwright-5.1` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-playwright-5.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-playwright-4.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-playwright-3.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Debug_Locally.html)

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-playwright-2.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   ` arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  AS Timur (Ohio)  |   ` arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  AS Barat (California Utara)  |   ` arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  AS Barat (Oregon)  |   ` arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Afrika (Cape Town)  |   ` arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pasifik (Hong Kong)  |   ` arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pasifik (Hyderabad)  |   ` arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pasifik (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pasifik (Malaysia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pacific (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pasifik (Mumbai)  |   ` arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pasifik (Selandia Baru)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJsPlaywright:7`   | 
|  Asia Pasifik (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pasifik (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pasifik (Singapura)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pasifik (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Asia Pasifik (Taipei)  |   ` arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJsPlaywright:9`   | 
|  Asia Pasifik (Thailand)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  Asia Pasifik (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  (Canada (Central)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Kanada Barat (Calgary)  |   ` arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Tiongkok (Beijing)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  Tiongkok (Ningxia);  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  Eropa (Frankfurt)  |   ` arn:aws:lambda:eu-central-1:122305336817:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Eropa (Irlandia)  |   ` arn:aws:lambda:eu-west-1:563204233543:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Eropa (London)  |   ` arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Eropa (Milan)  |   ` arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Eropa (Paris)  |   ` arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Eropa (Spanyol)  |   ` arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Eropa (Stockholm)  |   ` arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Eropa (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`   | 
|  Meksiko (Tengah)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJsPlaywright:5`   | 
|  Timur Tengah (Bahrain)  |   ` arn:aws:lambda:me-south-1:823195537320:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Timur Tengah (UEA)  |   ` arn:aws:lambda:me-central-1:239544149032:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  Amerika Selatan (Sao Paulo)  |   ` arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJsPlaywright:4`   | 
|  AWS GovCloud (AS-Timur)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  AWS GovCloud (AS-Barat)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-nodejs-playwright-1.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   ` arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  AS Timur (Ohio)  |   ` arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  AS Barat (California Utara)  |   ` arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  AS Barat (Oregon)  |   ` arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Afrika (Cape Town)  |   ` arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pasifik (Hong Kong)  |   ` arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pasifik (Hyderabad)  |   ` arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pasifik (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pasifik (Malaysia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pacific (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pasifik (Mumbai)  |   ` arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pasifik (Selandia Baru)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJsPlaywright:8`   | 
|  Asia Pasifik (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pasifik (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pasifik (Singapura)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pasifik (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pasifik (Taipei)  |   ` arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJsPlaywright:10`   | 
|  Asia Pasifik (Thailand)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Asia Pasifik (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  (Canada (Central)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Kanada Barat (Calgary)  |   ` arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Tiongkok (Beijing)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Tiongkok (Ningxia);  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Eropa (Frankfurt)  |   ` arn:aws:lambda:eu-central-1:122305336817:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Eropa (Irlandia)  |   ` arn:aws:lambda:eu-west-1:563204233543:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Eropa (London)  |   ` arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Eropa (Milan)  |   ` arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Eropa (Paris)  |   ` arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Eropa (Spanyol)  |   ` arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Eropa (Stockholm)  |   ` arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Eropa (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`   | 
|  Meksiko (Tengah)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJsPlaywright:3`   | 
|  Timur Tengah (Bahrain)  |   ` arn:aws:lambda:me-south-1:823195537320:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Timur Tengah (UEA)  |   ` arn:aws:lambda:me-central-1:239544149032:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  Amerika Selatan (Sao Paulo)  |   ` arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  AWS GovCloud (AS-Timur)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 
|  AWS GovCloud (AS-Barat)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJsPlaywright:1`   | 

### Runtime Node.js
<a name="Synthetics_NodeJS_Runtime_ARNs"></a>

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk `syn-nodejs-4.1` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Afrika (Cape Town)  |   ` arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pasifik (Hyderabad)  |   ` arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pasifik (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pasifik (Malaysia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pacific (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pasifik (Mumbai)  |   ` arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pasifik (Selandia Baru)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pasifik (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pasifik (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pasifik (Singapura)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pasifik (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pasifik (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pasifik (Thailand)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Asia Pasifik (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  (Canada (Central)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  China (Beijing)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Tiongkok (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Eropa (Frankfurt)  |   ` arn:aws:lambda:eu-central-1:122305336817:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Eropa (Milan)  |   ` arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Eropa (Spanyol)  |   ` arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Eropa (Stockholm)  |   ` arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Eropa (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`   | 
|  Meksiko (Tengah)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  AWS GovCloud (AS-Timur)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJs:12`   | 
|  AWS GovCloud (AS-Barat)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJs:12`   | 

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk `syn-nodejs-4.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Afrika (Cape Town)  |   ` arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pasifik (Hyderabad)  |   ` arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pasifik (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pasifik (Malaysia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pacific (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pasifik (Mumbai)  |   ` arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pasifik (Selandia Baru)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pasifik (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pasifik (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pasifik (Singapura)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pasifik (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pasifik (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pasifik (Thailand)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Asia Pasifik (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  (Canada (Central)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  China (Beijing)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Tiongkok (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Eropa (Frankfurt)  |   ` arn:aws:lambda:eu-central-1:122305336817:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Eropa (Milan)  |   ` arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Eropa (Spanyol)  |   ` arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Eropa (Stockholm)  |   ` arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Eropa (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`   | 
|  Meksiko (Tengah)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  AWS GovCloud (AS-Timur)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJs:11`   | 
|  AWS GovCloud (AS-Barat)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJs:11`   | 

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk `syn-nodejs-3.1` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pasifik (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pasifik (Malaysia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pacific (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pasifik (Selandia Baru)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pasifik (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pasifik (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pasifik (Singapura)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pasifik (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pasifik (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pasifik (Thailand)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Asia Pasifik (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  (Canada (Central)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  China (Beijing)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Tiongkok (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Eropa (Frankfurt)  |   ` arn:aws:lambda:eu-central-1:122305336817:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Eropa (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`   | 
|  Meksiko (Tengah)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Timur Tengah (UEA)  |   ` arn:aws:lambda:me-central-1:239544149032:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  AWS GovCloud (AS-Timur)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJs:9`   | 
|  AWS GovCloud (AS-Barat)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJs:9`   | 

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk `syn-nodejs-3.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pasifik (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pasifik (Malaysia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pacific (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pasifik (Selandia Baru)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pasifik (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pasifik (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pasifik (Singapura)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pasifik (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pasifik (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pasifik (Thailand)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Asia Pasifik (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  (Canada (Central)  |   ` arn:aws:lambda:ca-central-1:236629016841:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  China (Beijing)  |   ` arn:aws-cn:lambda:cn-north-1:422629156088:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Tiongkok (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Eropa (Frankfurt)  |   ` arn:aws:lambda:eu-central-1:122305336817:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Eropa (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`   | 
|  Meksiko (Tengah)  |   ` arn:aws:lambda:mx-central-1:654654265476:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Timur Tengah (UEA)  |   ` arn:aws:lambda:me-central-1:239544149032:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  AWS GovCloud (AS-Timur)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:AWS-CW-SyntheticsNodeJs:1`   | 
|  AWS GovCloud (AS-Barat)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:AWS-CW-SyntheticsNodeJs:1`   | 

### Runtime Python dan Selenium
<a name="Synthetics_Python_Runtime_ARNs"></a>

#### ARNs untuk syn-python-selenium -10.0
<a name="syn-python-selenium-10.0"></a>

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-python-selenium-10.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:62`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:65`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:63`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:64`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:63`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:62`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:50`   | 
|  Asia Pasifik (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:57`   | 
|  Asia Pasifik (Malaysia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:32`   | 
|  Asia Pacific (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:48`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:63`   | 
|  Asia Pasifik (Selandia Baru)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:38`   | 
|  Asia Pasifik (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:61`   | 
|  Asia Pasifik (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:66`   | 
|  Asia Pasifik (Singapura)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:67`   | 
|  Asia Pasifik (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:62`   | 
|  Asia Pasifik (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:25`   | 
|  Asia Pasifik (Thailand)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:23`   | 
|  Asia Pasifik (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:63`   | 
|  (Canada (Central)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:63`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:106`   | 
|  China (Beijing)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:61`   | 
|  Tiongkok (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:61`   | 
|  Eropa (Frankfurt)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:63`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:64`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:62`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:64`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:63`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:50`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:63`   | 
|  Eropa (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`   | 
|  Meksiko (Tengah)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:24`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:64`   | 
|  AWS GovCloud (AS-Timur)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:59`   | 
|  AWS GovCloud (AS-Barat)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:60`   | 

#### ARNs untuk syn-python-selenium -9.0
<a name="syn-python-selenium-9.0"></a>

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-python-selenium-9.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:61`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:64`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:62`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:63`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:62`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:61`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:49`   | 
|  Asia Pasifik (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:56`   | 
|  Asia Pasifik (Malaysia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:31`   | 
|  Asia Pacific (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:47`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:62`   | 
|  Asia Pasifik (Selandia Baru)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:37`   | 
|  Asia Pasifik (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:60`   | 
|  Asia Pasifik (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:65`   | 
|  Asia Pasifik (Singapura)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:66`   | 
|  Asia Pasifik (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:61`   | 
|  Asia Pasifik (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:24`   | 
|  Asia Pasifik (Thailand)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:22`   | 
|  Asia Pasifik (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:62`   | 
|  (Canada (Central)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:62`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:105`   | 
|  China (Beijing)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:60`   | 
|  Tiongkok (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:60`   | 
|  Eropa (Frankfurt)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:62`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:63`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:61`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:63`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:62`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:49`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:62`   | 
|  Eropa (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`   | 
|  Meksiko (Tengah)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:23`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:61`   | 
|  Timur Tengah (UEA)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:49`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:63`   | 
|  AWS GovCloud (AS-Timur)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:58`   | 
|  AWS GovCloud (AS-Barat)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:59`   | 

#### ARNs untuk syn-python-selenium -8.0
<a name="syn-python-selenium-8.0"></a>

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-python-selenium-8.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:57`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:60`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:58`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:59`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:58`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:57`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:45`   | 
|  Asia Pasifik (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:52`   | 
|  Asia Pasifik (Malaysia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:27`   | 
|  Asia Pacific (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:43`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:58`   | 
|  Asia Pasifik (Selandia Baru)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:33`   | 
|  Asia Pasifik (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:56`   | 
|  Asia Pasifik (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:61`   | 
|  Asia Pasifik (Singapura)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:62`   | 
|  Asia Pasifik (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:57`   | 
|  Asia Pasifik (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:20`   | 
|  Asia Pasifik (Thailand)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:18`   | 
|  Asia Pasifik (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:58`   | 
|  (Canada (Central)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:58`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:101`   | 
|  China (Beijing)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:56`   | 
|  Tiongkok (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:56`   | 
|  Eropa (Frankfurt)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:58`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:59`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:57`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:59`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:58`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:45`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:58`   | 
|  Eropa (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`   | 
|  Meksiko (Tengah)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:19`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:57`   | 
|  Timur Tengah (UEA)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:45`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:59`   | 
|  AWS GovCloud (AS-Timur)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:54`   | 
|  AWS GovCloud (AS-Barat)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:55`   | 

#### ARNs untuk syn-python-selenium -7.0
<a name="syn-python-selenium-7.0"></a>

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-python-selenium-7.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:49`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:52`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:50`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:51`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:50`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:49`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:37`   | 
|  Asia Pasifik (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:44`   | 
|  Asia Pasifik (Malaysia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:19`   | 
|  Asia Pacific (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:35`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:50`   | 
|  Asia Pasifik (Selandia Baru)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:25`   | 
|  Asia Pasifik (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:48`   | 
|  Asia Pasifik (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:53`   | 
|  Asia Pasifik (Singapura)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:54`   | 
|  Asia Pasifik (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:49`   | 
|  Asia Pasifik (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:12`   | 
|  Asia Pasifik (Thailand)  |   ` arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:10`   | 
|  Asia Pasifik (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:50`   | 
|  (Canada (Central)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:50`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:93`   | 
|  China (Beijing)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:48`   | 
|  Tiongkok (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:48`   | 
|  Eropa (Frankfurt)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:50`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:51`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:49`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:51`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:50`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:37`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:50`   | 
|  Eropa (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`   | 
|  Meksiko (Tengah)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:11`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:49`   | 
|  Timur Tengah (UEA)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:37`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:51`   | 
|  AWS GovCloud (AS-Timur)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:46`   | 
|  AWS GovCloud (AS-Barat)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:47`   | 

#### ARNs untuk syn-python-selenium -6.0
<a name="syn-python-selenium-6.0"></a>

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-python-selenium-6.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:47`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:50`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:48`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:49`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:48`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:47`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:35`   | 
|  Asia Pasifik (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:42`   | 
|  Asia Pasifik (Malaysia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:17`   | 
|  Asia Pacific (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:33`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:48`   | 
|  Asia Pasifik (Selandia Baru)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:25`   | 
|  Asia Pasifik (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:46`   | 
|  Asia Pasifik (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:51`   | 
|  Asia Pasifik (Singapura)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:52`   | 
|  Asia Pasifik (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:47`   | 
|  Asia Pasifik (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:10`   | 
|  Asia Pasifik (Thailand)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:8`   | 
|  Asia Pasifik (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:48`   | 
|  (Canada (Central)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:48`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:91`   | 
|  China (Beijing)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:46`   | 
|  Tiongkok (Ningxia)  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:46`   | 
|  Eropa (Frankfurt)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:48`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:49`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:47`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:49`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:48`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:35`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:48`   | 
|  Eropa (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`   | 
|  Meksiko (Tengah)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:9`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:47`   | 
|  Timur Tengah (UEA)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:35`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:49`   | 
|  AWS GovCloud (AS-Timur)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:44`   | 
|  AWS GovCloud (AS-Barat)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:45`   | 

#### ARNs untuk syn-python-selenium -5.1
<a name="syn-python-selenium-5.1"></a>

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-python-selenium-5.1` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:45`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:48`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:46`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:47`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:46`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:45`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:33`   | 
|  Asia Pasifik (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:40`   | 
|  Asia Pasifik (Malaysia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:15`   | 
|  Asia Pacific (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:31`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:46`   | 
|  Asia Pasifik (Selandia Baru)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:24`   | 
|  Asia Pasifik (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:44`   | 
|  Asia Pasifik (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:49`   | 
|  Asia Pasifik (Singapura)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:50`   | 
|  Asia Pasifik (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:45`   | 
|  Asia Pasifik (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:8`   | 
|  Asia Pasifik (Thailand)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:6`   | 
|  Asia Pasifik (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:46`   | 
|  (Canada (Central)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:44`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:89`   | 
|  Tiongkok (Beijing)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:44`   | 
|  Tiongkok (Ningxia);  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:44`   | 
|  Eropa (Frankfurt)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:46`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:47`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:45`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:47`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:46`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:33`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:46`   | 
|  Eropa (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`   | 
|  Meksiko (Tengah)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:7`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:45`   | 
|  Timur Tengah (UEA)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:33`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:47`   | 
|  AWS GovCloud (AS-Timur)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:42`   | 
|  AWS GovCloud (AS-Barat)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:43`   | 

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-python-selenium-5.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:43`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:46`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:44`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:45`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:44`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:43`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:31`   | 
|  Asia Pasifik (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:38`   | 
|  Asia Pasifik (Malaysia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:13`   | 
|  Asia Pacific (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:29`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:44`   | 
|  Asia Pasifik (Selandia Baru)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:23`   | 
|  Asia Pasifik (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:42`   | 
|  Asia Pasifik (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:47`   | 
|  Asia Pasifik (Singapura)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:48`   | 
|  Asia Pasifik (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:43`   | 
|  Asia Pasifik (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:3`   | 
|  Asia Pasifik (Thailand)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:4`   | 
|  Asia Pasifik (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:44`   | 
|  (Canada (Central)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:44`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:87`   | 
|  Tiongkok (Beijing)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:43`   | 
|  Tiongkok (Ningxia);  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:43`   | 
|  Eropa (Frankfurt)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:44`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:45`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:43`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:45`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:44`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:31`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:44`   | 
|  Eropa (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`   | 
|  Meksiko (Tengah)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:5`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:43`   | 
|  Timur Tengah (UEA)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:31`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:45`   | 
|  AWS GovCloud (AS-Timur)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:41`   | 
|  AWS GovCloud (AS-Barat)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:42`   | 

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-python-selenium-4.1` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:40`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:43`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:41`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:42`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:41`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:40`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:28`   | 
|  Asia Pasifik (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:35`   | 
|  Asia Pasifik (Malaysia)  |   ` arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:10`   | 
|  Asia Pacific (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:26`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:41`   | 
|  Asia Pasifik (Selandia Baru)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:22`   | 
|  Asia Pasifik (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:39`   | 
|  Asia Pasifik (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:44`   | 
|  Asia Pasifik (Singapura)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:45`   | 
|  Asia Pasifik (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:40`   | 
|  Asia Pasifik (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:4`   | 
|  Asia Pasifik (Thailand)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:1`   | 
|  Asia Pasifik (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:41`   | 
|  (Canada (Central)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:41`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:84`   | 
|  Tiongkok (Beijing)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:40`   | 
|  Tiongkok (Ningxia);  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:40`   | 
|  Eropa (Frankfurt)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:41`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:42`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:40`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:42`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:41`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:28`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:41`   | 
|  Eropa (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`   | 
|  Meksiko (Tengah)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:3`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:40`   | 
|  Timur Tengah (UEA)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:28`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:42`   | 
|  AWS GovCloud (AS-Timur)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:38`   | 
|  AWS GovCloud (AS-Barat)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:39`   | 

#### ARNs untuk syn-python-selenium -4.0
<a name="syn-python-selenium-4.0"></a>

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-python-selenium-4.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:38`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:41`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:39`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:40`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:39`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:38`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:26`   | 
|  Asia Pasifik (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:33`   | 
|  Asia Pasifik (Malaysia)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:8`   | 
|  Asia Pacific (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:24`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:39`   | 
|  Asia Pasifik (Selandia Baru)  |   ` arn:aws:lambda:ap-southeast-6:779414629109:layer:Synthetics_Selenium:21`   | 
|  Asia Pasifik (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:37`   | 
|  Asia Pasifik (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:42`   | 
|  Asia Pasifik (Singapura)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:43`   | 
|  Asia Pasifik (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:38`   | 
|  Asia Pasifik (Taipei)  |   `arn:aws:lambda:ap-east-2:471112897378:layer:Synthetics_Selenium:5`   | 
|  Asia Pasifik (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:39`   | 
|  (Canada (Central)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:39`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:82`   | 
|  Tiongkok (Beijing)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:38`   | 
|  Tiongkok (Ningxia);  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:38`   | 
|  Eropa (Frankfurt)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:39`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:40`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:38`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:40`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:39`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:26`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:39`   | 
|  Eropa (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`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:38`   | 
|  Timur Tengah (UEA)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:26`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:40`   | 
|  AWS GovCloud (AS-Timur)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:36`   | 
|  AWS GovCloud (AS-Barat)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:37`   | 

#### ARNs untuk syn-python-selenium -3.0
<a name="syn-python-selenium-3.0"></a>

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-python-selenium-3.0` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics_Selenium:32`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics_Selenium:34`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics_Selenium:32`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics_Selenium:34`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics_Selenium:32`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics_Selenium:32`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics_Selenium:20`   | 
|  Asia Pasifik (Jakarta)  |   ` arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics_Selenium:26`   | 
|  Asia Pasifik (Malaysia)  |   `arn:aws:lambda:ap-southeast-5:035872523913:layer:Synthetics_Selenium:7`   | 
|  Asia Pacific (Melbourne)  |   ` arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics_Selenium:18`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics_Selenium:32`   | 
|  Asia Pasifik (Osaka)  |   ` arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics_Selenium:30`   | 
|  Asia Pasifik (Seoul)  |   ` arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics_Selenium:34`   | 
|  Asia Pasifik (Singapura)  |   ` arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics_Selenium:37`   | 
|  Asia Pasifik (Sydney)  |   ` arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics_Selenium:32`   | 
|  Asia Pasifik (Thailand)  |   `arn:aws:lambda:ap-southeast-7:851725245975:layer:Synthetics_Selenium:3`   | 
|  Asia Pasifik (Tokyo)  |   ` arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics_Selenium:32`   | 
|  (Canada (Central)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics_Selenium:32`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics_Selenium:76`   | 
|  Tiongkok (Beijing)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics_Selenium:32`   | 
|  Tiongkok (Ningxia);  |   ` arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics_Selenium:32`   | 
|  Eropa (Frankfurt)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics_Selenium:32`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics_Selenium:34`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics_Selenium:32`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics_Selenium:33`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics_Selenium:32`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics_Selenium:20`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics_Selenium:32`   | 
|  Eropa (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`   | 
|  Meksiko (Tengah)  |   `arn:aws:lambda:mx-central-1:654654265476:layer:Synthetics_Selenium:4`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics_Selenium:32`   | 
|  Timur Tengah (UEA)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics_Selenium:19`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics_Selenium:33`   | 
|  AWS GovCloud (AS-Timur)  |   ` arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics_Selenium:30`   | 
|  AWS GovCloud (AS-Barat)  |   ` arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics_Selenium:31`   | 

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

Tabel berikut mencantumkan yang ARNs akan digunakan untuk ` syn-python-selenium-2.1` versi runtime CloudWatch Synthetics di setiap AWS Wilayah yang tersedia.


| Region | ARN | 
| --- | --- | 
|  AS Timur (Virginia Utara)  |   `arn:aws:lambda:us-east-1:378653112637:layer:Synthetics:29`   | 
|  AS Timur (Ohio)  |   `arn:aws:lambda:us-east-2:772927465453:layer:Synthetics:31`   | 
|  AS Barat (California Utara)  |   `arn:aws:lambda:us-west-1:332033056316:layer:Synthetics:29`   | 
|  AS Barat (Oregon)  |   `arn:aws:lambda:us-west-2:760325925879:layer:Synthetics:31`   | 
|  Afrika (Cape Town)  |   `arn:aws:lambda:af-south-1:461844272066:layer:Synthetics:29`   | 
|  Asia Pasifik (Hong Kong)  |   `arn:aws:lambda:ap-east-1:129828061636:layer:Synthetics:29`   | 
|  Asia Pasifik (Hyderabad)  |   `arn:aws:lambda:ap-south-2:280298676434:layer:Synthetics:17`   | 
|  Asia Pasifik (Jakarta)  |   `arn:aws:lambda:ap-southeast-3:246953257743:layer:Synthetics:23`   | 
|  Asia Pasifik (Melbourne)  |   `arn:aws:lambda:ap-southeast-4:200724813040:layer:Synthetics:15`   | 
|  Asia Pasifik (Mumbai)  |   `arn:aws:lambda:ap-south-1:724929286329:layer:Synthetics:29`   | 
|  Asia Pasifik (Osaka)  |   `arn:aws:lambda:ap-northeast-3:608016332111:layer:Synthetics:27`   | 
|  Asia Pasifik (Seoul)  |   `arn:aws:lambda:ap-northeast-2:989515803484:layer:Synthetics:30`   | 
|  Asia Pasifik (Singapura)  |   `arn:aws:lambda:ap-southeast-1:068035103298:layer:Synthetics:34`   | 
|  Asia Pasifik (Sydney)  |   `arn:aws:lambda:ap-southeast-2:584677157514:layer:Synthetics:29`   | 
|  Asia Pasifik (Tokyo)  |   `arn:aws:lambda:ap-northeast-1:172291836251:layer:Synthetics:29`   | 
|  (Canada (Central)  |   `arn:aws:lambda:ca-central-1:236629016841:layer:Synthetics:29`   | 
|  Kanada Barat (Calgary)  |   `arn:aws:lambda:ca-west-1:944448206667:layer:Synthetics:73`   | 
|  Tiongkok (Beijing)  |   `arn:aws-cn:lambda:cn-north-1:422629156088:layer:Synthetics:29`   | 
|  Tiongkok (Ningxia);  |   `arn:aws-cn:lambda:cn-northwest-1:474974519687:layer:Synthetics:29`   | 
|  Eropa (Frankfurt)  |   `arn:aws:lambda:eu-central-1:122305336817:layer:Synthetics:29`   | 
|  Eropa (Irlandia)  |   `arn:aws:lambda:eu-west-1:563204233543:layer:Synthetics:31`   | 
|  Eropa (London)  |   `arn:aws:lambda:eu-west-2:565831452869:layer:Synthetics:29`   | 
|  Eropa (Milan)  |   `arn:aws:lambda:eu-south-1:525618516618:layer:Synthetics:30`   | 
|  Eropa (Paris)  |   `arn:aws:lambda:eu-west-3:469466506258:layer:Synthetics:29`   | 
|  Eropa (Spanyol)  |   `arn:aws:lambda:eu-south-2:029793053121:layer:Synthetics:17`   | 
|  Eropa (Stockholm)  |   `arn:aws:lambda:eu-north-1:162938142733:layer:Synthetics:29`   | 
|  Eropa (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`   | 
|  Timur Tengah (Bahrain)  |   `arn:aws:lambda:me-south-1:823195537320:layer:Synthetics:29`   | 
|  Timur Tengah (UEA)  |   `arn:aws:lambda:me-central-1:239544149032:layer:Synthetics:16`   | 
|  Amerika Selatan (Sao Paulo)  |   `arn:aws:lambda:sa-east-1:783765544751:layer:Synthetics:30`   | 
|  AWS GovCloud (AS-Timur)  |   `arn:aws-us-gov:lambda:us-gov-east-1:946759330430:layer:Synthetics:29`   | 
|  AWS GovCloud (AS-Barat)  |   `arn:aws-us-gov:lambda:us-gov-west-1:946807836238:layer:Synthetics:29`   | 

## Kesalahan umum
<a name="CloudWatch_Synthetics_Debug_Errors"></a>

 **Kesalahan: Menjalankan proyek AWS SAM secara lokal membutuhkan Docker. Sudahkah Anda menginstalnya dan menjalankannya?** 

Pastikan untuk memulai Docker di komputer Anda.

 **Panggilan lokal SAM gagal: Terjadi kesalahan (ExpiredTokenException) saat memanggil GetLayerVersion operasi: Token keamanan yang disertakan dalam permintaan kedaluwarsa** 

Pastikan bahwa profil AWS default sudah diatur.

 **Kesalahan yang lebih umum** 

Untuk informasi selengkapnya tentang kesalahan umum dengan SAM, lihat Pemecahan [AWS masalah SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-troubleshooting.html).

# Memecahkan masalah canary yang gagal
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot"></a>

Jika canary Anda gagal, periksa hal berikut ini untuk pemecahan masalah.

 **Pemecahan masalah umum** 
+ Gunakan halaman detail canary untuk menemukan informasi lebih lanjut. Di CloudWatch konsol, pilih **Canary** di panel navigasi dan kemudian pilih nama kenari untuk membuka halaman detail kenari. Di tab **Ketersediaan**, periksa ** SuccessPercent**metrik untuk melihat apakah masalahnya konstan atau terputus-putus.

  Sementara masih di tab **Ketersediaan**, pilih titik data yang gagal untuk melihat tangkapan layar, log, dan laporan langkah (jika tersedia) untuk proses yang gagal tersebut.

  Jika laporan langkah tersedia karena langkah-langkah adalah bagian dari skrip Anda, periksa untuk melihat langkah mana yang telah gagal dan lihat tangkapan layar terkait untuk melihat masalah yang dilihat pelanggan Anda.

  Anda juga dapat memeriksa file HAR untuk melihat apakah satu atau beberapa permintaan gagal. Anda dapat menggali lebih dalam dengan menggunakan log untuk menelusuri permintaan dan kesalahan yang gagal. Akhirnya, Anda dapat membandingkan artefak ini dengan artefak dari operasi canary yang berhasil untuk menunjukkan masalah.

  Secara default, CloudWatch Synthetics menangkap tangkapan layar untuk setiap langkah dalam kenari UI. Namun demikian, skrip Anda mungkin dikonfigurasi untuk menonaktifkan tangkapan layar. Selama proses debug, Anda mungkin ingin mengaktifkan tangkapan layar lagi. Demikian pula, untuk canary API Anda mungkin ingin melihat header dan isi permintaan dan respons HTTP selama proses debug. Untuk informasi tentang cara menyertakan data ini dalam laporan, silakan lihat [executeHttpStep(StepName, requestOptions, [callback], [stepConfig])](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_executeHttpStep).
+ Jika Anda memiliki deployment terbaru untuk aplikasi Anda, kembalikan ke keadaan semula dan kemudian lakukan debug nanti.
+ Hubungkan ke titik akhir Anda secara manual untuk melihat apakah Anda dapat mereproduksi masalah yang sama.

**Topics**
+ [Canary gagal setelah pembaruan lingkungan Lambda](#Troubleshoot_upgradeLambda)
+ [Kenari saya diblokir oleh AWS WAF](#Canary_Blocked_WAF)
+ [Menunggu elemen untuk muncul](#CloudWatch_Synthetics_Canaries_Troubleshoot_waiting)
+ [Node tidak terlihat atau tidak HTMLElement untuk page.click ()](#CloudWatch_Synthetics_Canaries_Troubleshoot_notvisible)
+ [Tidak dapat mengunggah artefak ke S3, Pengecualian: Tidak dapat mengambil lokasi bucket S3: Akses Ditolak](#CloudWatch_Synthetics_Canaries_Troubleshoot_noupload)
+ [Kesalahan: Kesalahan protokol (Runtime. callFunctionOn): Target ditutup.](#CloudWatch_Synthetics_Canaries_Troubleshoot_protocolError)
+ [Canary Gagal. Kesalahan: Tidak ada datapoint - Canary Menunjukkan kesalahan batas waktu](#CloudWatch_Synthetics_Canaries_Troubleshoot_nodatapoint)
+ [Coba untuk mengakses titik akhir internal](#CloudWatch_Synthetics_Canaries_Troubleshoot_internalendpoint)
+ [Masalah peningkatan dan penurunan versi runtime Canary](#CloudWatch_Synthetics_Canaries_Troubleshoot_upgradeissues)
+ [Masalah berbagi permintaan lintas asal (CORS)](#CloudWatch_Synthetics_Canaries_CORS)
+ [Masalah kondisi balapan kenari](#CloudWatch_Synthetics_Canaries_RaceCondition)
+ [Pemecahan masalah canary di VPC](#CloudWatch_Synthetics_Canaries_VPC_troubleshoot)
+ [Memecahkan masalah kenari coba ulang otomatis](#CloudWatch_Synthetics_Canaries_autoretry)

## Canary gagal setelah pembaruan lingkungan Lambda
<a name="Troubleshoot_upgradeLambda"></a>

CloudWatch Canary Synthetics diimplementasikan sebagai fungsi Lambda di akun Anda. Fungsi Lambda ini tunduk pada pembaruan runtime Lambda reguler yang berisi pembaruan keamanan, perbaikan bug, dan peningkatan lainnya. Lambda berusaha untuk menyediakan pembaruan runtime yang kompatibel dengan fungsi yang ada. Namun, seperti halnya patching perangkat lunak, ada kasus yang jarang terjadi di mana pembaruan runtime dapat berdampak negatif pada fungsi yang ada. Jika Anda yakin kenari Anda telah terpengaruh oleh pembaruan runtime Lambda, Anda dapat menggunakan mode manual manajemen runtime Lambda (di Wilayah yang didukung) untuk memutar kembali versi runtime Lambda sementara. Ini membuat fungsi kenari Anda tetap berfungsi dan meminimalkan gangguan, memberikan waktu untuk memperbaiki ketidakcocokan sebelum kembali ke versi runtime terbaru.

Jika kenari Anda gagal setelah pembaruan runtime Lambda, solusi terbaik adalah meningkatkan ke salah satu runtime Synthetics terbaru. Untuk informasi selengkapnya tentang runtime terbaru, lihat[Versi runtime Synthetics](CloudWatch_Synthetics_Canaries_Library.md).

Sebagai solusi alternatif, di Wilayah di mana kontrol manajemen runtime Lambda tersedia, Anda dapat mengembalikan kenari kembali ke runtime terkelola Lambda yang lebih lama, menggunakan mode manual untuk kontrol manajemen runtime. Anda dapat mengatur mode manual menggunakan AWS CLI atau dengan menggunakan konsol Lambda, menggunakan langkah-langkah di bawah ini di bagian berikut.

**Awas**  
Saat Anda mengubah pengaturan runtime ke mode manual, fungsi Lambda Anda tidak akan menerima pembaruan keamanan otomatis hingga dikembalikan ke mode Otomatis. Selama periode ini, fungsi Lambda Anda mungkin rentan terhadap kerentanan keamanan.

 **Prasyarat** 
+ Instal [jq](https://jqlang.github.io/jq/)
+ Instal versi terbaru dari file AWS CLI. Untuk informasi selengkapnya, lihat [petunjuk AWS CLI pemasangan dan perbarui](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html#getting-started-install-instructions).

### Langkah 1: Dapatkan ARN fungsi Lambda
<a name="UpgradeLambda_ObtainFunctionARN"></a>

Jalankan perintah berikut untuk mengambil `EngineArn` bidang dari respons. Ini `EngineArn` adalah ARN dari fungsi Lambda yang dikaitkan dengan kenari. Anda akan menggunakan ARN ini dalam langkah-langkah berikut.

```
aws synthetics get-canary --name my-canary | jq '.Canary.EngineArn'
```

Contoh keluaran dari`EngingArn`:

```
"arn:aws:lambda:us-west-2:123456789012:function:cwsyn-my-canary-dc5015c2-db17-4cb5-afb1-EXAMPLE991:8"
```

### Langkah 2: Dapatkan ARN versi runtime Lambda terakhir yang bagus
<a name="UpgradeLambda_RuntimeARN"></a>

Untuk membantu memahami apakah kenari Anda terkena dampak pembaruan runtime Lambda, periksa apakah tanggal dan waktu perubahan ARN versi runtime Lambda di log Anda muncul pada tanggal dan waktu ketika Anda melihat dampak pada kenari Anda. Jika tidak cocok, itu mungkin bukan pembaruan runtime Lambda yang menyebabkan masalah Anda.

Jika kenari Anda dipengaruhi oleh pembaruan runtime Lambda, Anda harus mengidentifikasi ARN dari versi runtime Lambda yang berfungsi yang sebelumnya Anda gunakan. Ikuti petunjuk dalam [Mengidentifikasi perubahan versi runtime](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-update.html#runtime-management-identify.html) untuk menemukan ARN dari runtime sebelumnya. Rekam ARN versi runtime, dan lanjutkan ke Langkah 3. untuk mengatur konfigurasi manajemen runtime.

Jika kenari Anda belum terpengaruh oleh pembaruan lingkungan Lambda, maka Anda dapat menemukan ARN dari versi runtime Lambda yang saat ini Anda gunakan. Jalankan perintah berikut untuk mengambil fungsi Lambda dari respons. `RuntimeVersionArn` 

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

Contoh keluaran dari`RuntimeVersionArn`:

```
"arn:aws:lambda:us-west-2::runtime:EXAMPLE647b82f490a45d7ddd96b557b916a30128d9dcab5f4972911ec0f"
```

### Langkah 3: Memperbarui konfigurasi manajemen runtime Lambda
<a name="UpgradeLambda_Update"></a>

Anda dapat menggunakan konsol Lambda AWS CLI atau Lambda untuk memperbarui konfigurasi manajemen runtime.

 **Untuk mengatur mode manual konfigurasi manajemen runtime Lambda menggunakan AWS CLI** 

Masukkan perintah berikut untuk mengubah manajemen runtime fungsi Lambda ke mode manual. Pastikan untuk mengganti *function-name* dan * qualifier* dengan fungsi Lambda ARN dan nomor versi fungsi Lambda masing-masing, menggunakan nilai yang Anda temukan di Langkah 1. Juga ganti * runtime-version-arn* dengan versi ARN yang Anda temukan di Langkah 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"
```

**Untuk mengubah kenari ke mode manual menggunakan konsol Lambda**

1. Buka AWS Lambda konsol di [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Pilih tab **Versi**, pilih tautan nomor versi yang sesuai dengan ARN Anda, dan pilih tab **Kode**.

1. Gulir ke bawah ke **pengaturan Runtime**, perluas **konfigurasi manajemen Runtime**, dan salin ARN **versi Runtime**.  
![\[Menampilkan bagian pengaturan Runtime layar, dan menunjukkan di mana ARN versi Runtime muncul di bagian ini.\]](http://docs.aws.amazon.com/id_id/AmazonCloudWatch/latest/monitoring/images/SyntheticsManual1.png)

1. **Pilih **Edit konfigurasi manajemen runtime**, pilih **Manual**, tempel ARN versi runtime yang Anda salin sebelumnya ke bidang ARN versi Runtime.** Lalu, pilih **Simpan**.  
![\[Menampilkan layar konfigurasi manajemen Runtime, dan menunjukkan tempat untuk menempelkan ARN versi Runtime yang sebelumnya Anda salin..\]](http://docs.aws.amazon.com/id_id/AmazonCloudWatch/latest/monitoring/images/SyntheticsManual2.png)

## Kenari saya diblokir oleh AWS WAF
<a name="Canary_Blocked_WAF"></a>

Untuk mengizinkan lalu lintas kenari AWS WAF, buat kondisi pencocokan AWS WAF string yang memungkinkan string kustom yang Anda tentukan. Untuk informasi selengkapnya, lihat [Bekerja dengan kondisi pencocokan string](https://docs.aws.amazon.com/waf/latest/developerguide/classic-web-acl-string-conditions.html) dalam AWS WAF dokumentasi.

Kami sangat menyarankan agar Anda menggunakan string user-agent kustom Anda sendiri alih-alih menggunakan nilai default. Ini memberikan kontrol yang lebih baik atas AWS WAF penyaringan dan meningkatkan keamanan.

Untuk menyetel string user-agent kustom, lakukan hal berikut:
+ Untuk runtime Playwright, Anda dapat menambahkan string agen pengguna kustom yang AWS WAF disetujui menggunakan file konfigurasi Synthetics. Untuk informasi selengkapnya, lihat [CloudWatch Konfigurasi Synthetics](Synthetics_WritingCanary_Nodejs_Playwright.md#Synthetics_canary_configure_Playwright_script).
+ Untuk runtime Puppeteer atau Selenium, Anda dapat menambahkan string agen pengguna khusus Anda menggunakan fungsi perpustakaan yang didukung. Untuk runtime Dalang, lihat. [async addUserAgent (halaman, userAgentString);](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_addUserAgent) Untuk runtime Selenium, lihat. [add\$1user\$1agent(user\$1agent\$1str)](CloudWatch_Synthetics_Canaries_Library_Python.md#CloudWatch_Synthetics_Library_add_user_agent)

## Menunggu elemen untuk muncul
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_waiting"></a>

Setelah menganalisis log dan tangkapan layar Anda, jika Anda melihat bahwa skrip Anda menunggu elemen muncul di layar dan waktu habis, periksa tangkapan layar yang relevan untuk melihat apakah elemen tersebut muncul di halaman. Verifikasi `xpath` Anda untuk memastikan bahwa itu benar.

Untuk masalah terkait Dalang, periksa halaman [Dalang](https://github.com/puppeteer/puppeteer/issues) atau forum internet. GitHub 

## Node tidak terlihat atau tidak HTMLElement untuk page.click ()
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_notvisible"></a>

Jika simpul tidak terlihat atau bukan merupakan `HTMLElement` untuk `page.click()`, pertama verifikasi `xpath` yang Anda gunakan untuk mengklik elemen tersebut. Juga, jika elemen Anda berada di bagian bawah layar, sesuaikan viewport Anda. CloudWatch Synthetics secara default menggunakan viewport 1920 \$1 1080. Anda dapat mengatur viewport yang berbeda ketika Anda meluncurkan browser atau dengan menggunakan fungsi Puppeteer `page.setViewport`.

## Tidak dapat mengunggah artefak ke S3, Pengecualian: Tidak dapat mengambil lokasi bucket S3: Akses Ditolak
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_noupload"></a>

Jika kenari Anda gagal karena kesalahan Amazon S3, CloudWatch Synthetics tidak dapat mengunggah tangkapan layar, log, atau laporan yang dibuat untuk kenari karena masalah izin. Periksa hal-hal berikut:
+ Periksa apakah peran IAM canary memiliki izin `s3:ListAllMyBuckets`, izin `s3:GetBucketLocation` untuk bucker Amazon S3 yang benar, dan izin `s3:PutObject` untuk bucket tempat canary menyimpan artefaknya. Jika canary melakukan pemantauan visual, peran tersebut juga memerlukan izin ` s3:GetObject` untuk bucket. Izin yang sama ini juga diperlukan dalam Kebijakan Titik Akhir Gateway Amazon VPC S3, jika canary di-deploy di VPC dengan titik akhir VPC.
+  Jika kenari menggunakan kunci yang dikelola AWS KMS pelanggan untuk enkripsi alih-alih kunci AWS terkelola standar (default), peran IAM kenari mungkin tidak memiliki izin untuk mengenkripsi atau mendekripsi menggunakan kunci itu. Untuk informasi selengkapnya, lihat [Mengenkripsi artefak canary](CloudWatch_Synthetics_artifact_encryption.md).
+ Kebijakan bucket Anda mungkin tidak mengizinkan mekanisme enkripsi yang digunakan canary. Sebagai contoh, jika kebijakan bucket Anda mengamanatkan untuk menggunakan mekanisme enkripsi tertentu atau kunci KMS, maka Anda harus memilih mode enkripsi yang sama untuk canary Anda.

Jika canary melakukan pemantauan visual, silakan lihat [Memperbarui lokasi artefak dan enkripsi saat menggunakan pemantauan visual](CloudWatch_Synthetics_artifact_encryption.md#CloudWatch_Synthetics_artifact_encryption_visual) untuk informasi lebih lanjut.

## Kesalahan: Kesalahan protokol (Runtime. callFunctionOn): Target ditutup.
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_protocolError"></a>

Kesalahan ini muncul jika ada beberapa permintaan jaringan setelah halaman atau browser ditutup. Anda mungkin lupa untuk menunggu operasi asynchronous. Setelah menjalankan skrip Anda, CloudWatch Synthetics menutup browser. Eksekusi setiap operasi asynchronous setelah browser ditutup dapat menyebabkan `target closed error`. 

## Canary Gagal. Kesalahan: Tidak ada datapoint - Canary Menunjukkan kesalahan batas waktu
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_nodatapoint"></a>

Ini berarti bahwa canary Anda berjalan melebihi batas waktu. Eksekusi kenari berhenti sebelum CloudWatch Synthetics dapat mempublikasikan metrik CloudWatch persen keberhasilan atau memperbarui artefak seperti file HAR, log, dan tangkapan layar. Jika batas waktu Anda terlalu rendah, Anda dapat meningkatkannya.

Secara bawaan, nilai batas waktu canary sama dengan frekuensinya. Anda dapat secara manual menyesuaikan nilai batas waktu menjadi kurang dari atau sama dengan frekuensi canary. Jika frekuensi canary Anda rendah, Anda harus meningkatkan frekuensi untuk meningkatkan batas waktu. Anda dapat menyesuaikan frekuensi dan nilai batas waktu di bawah **Jadwal** saat Anda membuat atau memperbarui kenari dengan menggunakan konsol Synthetics CloudWatch .

Pastikan nilai batas waktu canary Anda tidak lebih singkat dari 15 detik untuk memungkinkan Lambda melakukan cold start dan waktu yang diperlukan untuk melakukan boot up instrumentasi canary.

Artefak kenari tidak tersedia untuk dilihat di konsol CloudWatch Synthetics saat kesalahan ini terjadi. Anda dapat menggunakan CloudWatch Log untuk melihat log kenari.

**Untuk menggunakan CloudWatch Log untuk melihat log untuk kenari**

1. Buka CloudWatch konsol di [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Pada panel navigasi kiri, pilih **Grup log**.

1. Temukan grup log dengan mengetik nama canary di kotak filter. Grup log untuk kenari memiliki nama**/aws/lambda/cwsyn- *canaryName* -randomId**.

## Coba untuk mengakses titik akhir internal
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_internalendpoint"></a>

Jika Anda ingin kenari Anda mengakses titik akhir di jaringan internal Anda, kami sarankan Anda mengatur CloudWatch Synthetics untuk menggunakan VPC. Untuk informasi selengkapnya, lihat [Menjalankan canary di VPC](CloudWatch_Synthetics_Canaries_VPC.md).

## Masalah peningkatan dan penurunan versi runtime Canary
<a name="CloudWatch_Synthetics_Canaries_Troubleshoot_upgradeissues"></a>

Jika Anda baru saja meningkatkan canary dari versi runtime `syn-1.0` ke versi yang lebih baru, itu mungkin merupakan masalah berbagi permintaan lintas asal (CORS). Untuk informasi selengkapnya, lihat [Masalah berbagi permintaan lintas asal (CORS)](#CloudWatch_Synthetics_Canaries_CORS).

Jika Anda baru-baru ini menurunkan versi kenari ke versi runtime yang lebih lama, periksa untuk memastikan bahwa fungsi CloudWatch Synthetics yang Anda gunakan tersedia dalam versi runtime yang lebih lama yang Anda turunkan. Misalnya, fungsi `executeHttpStep` tersedia untuk versi runtime `syn-nodejs-2.2` dan yang lebih baru. Untuk memeriksa ketersediaan fungsi, silakan lihat [Menulis skrip canary](CloudWatch_Synthetics_Canaries_WritingCanary.md). 

**catatan**  
Saat Anda berencana untuk memutakhirkan atau menurunkan versi runtime untuk kenari, sebaiknya Anda mengkloning kenari terlebih dahulu dan memperbarui versi runtime di kenari kloning. Setelah Anda telah memverifikasi bahwa klon dengan versi runtime baru bekerja, Anda dapat memperbarui versi runtime canary asli Anda dan menghapus klon tersebut.

## Masalah berbagi permintaan lintas asal (CORS)
<a name="CloudWatch_Synthetics_Canaries_CORS"></a>

Dalam UI canary, jika beberapa permintaan jaringan gagal dengan `403` atau ` net::ERR_FAILED`, periksa apakah canary memiliki pelacakan aktif yang diaktifkan dan juga gunakan fungsi Puppeteer `page.setExtraHTTPHeaders` untuk menambahkan header. Jika demikian, permintaan jaringan yang gagal mungkin disebabkan oleh pembatasan berbagi permintaan lintas asal (CORS). Anda dapat mengonfirmasi apakah ini terjadi dengan menonaktifkan pelacakan aktif atau menghapus header HTTP tambahan.

 **Mengapa hal ini terjadi?** 

Ketika pelacakan aktif digunakan, header tambahan ditambahkan ke semua permintaan keluar untuk melacak panggilan. Memodifikasi header permintaan dengan menambahkan header jejak atau menambahkan header tambahan menggunakan Puppeteer `page.setExtraHTTPHeaders` menyebabkan pemeriksaan CORS untuk XMLHttp permintaan Permintaan (XHR).

Jika Anda tidak ingin menonaktifkan pelacakan aktif atau menghapus header tambahan, Anda dapat memperbarui aplikasi web Anda untuk mengizinkan akses lintas asal atau Anda dapat menonaktifkan keamanan web dengan menggunakan bendera `disable-web-security` saat Anda meluncurkan browser Chrome di skrip Anda.

Anda dapat mengganti parameter peluncuran yang digunakan oleh CloudWatch Synthetics dan meneruskan parameter flag ` disable-web-security` tambahan dengan menggunakan fungsi peluncuran CloudWatch Synthetics. Untuk informasi selengkapnya, lihat [Fungsi perpustakaan tersedia untuk skrip kenari Node.js menggunakan Puppeteer](CloudWatch_Synthetics_Canaries_Library_Nodejs.md).

**catatan**  
Anda dapat mengganti parameter peluncuran yang digunakan oleh CloudWatch Synthetics saat Anda menggunakan versi runtime `syn-nodejs-2.1` atau yang lebih baru.

## Masalah kondisi balapan kenari
<a name="CloudWatch_Synthetics_Canaries_RaceCondition"></a>

Untuk pengalaman terbaik saat menggunakan CloudWatch Synthetics, pastikan bahwa kode yang ditulis untuk kenari adalah idempoten. Jika tidak, dalam kasus yang jarang terjadi, lari kenari dapat menghadapi kondisi balapan ketika kenari berinteraksi dengan sumber daya yang sama di lintasan yang berbeda.

## Pemecahan masalah canary di VPC
<a name="CloudWatch_Synthetics_Canaries_VPC_troubleshoot"></a>

Jika Anda memiliki masalah setelah membuat atau memperbarui canary di VPC, salah satu bagian berikut dapat membantu Anda memecahkan masalah.

### Canary baru dalam status kesalahan atau canary tidak dapat diperbarui
<a name="CloudWatch_Synthetics_Canaries_VPC_troubleshoot_errorstate"></a>

Jika Anda membuat canary untuk beroperasi di VPC dan segera masuk ke status error, atau Anda tidak dapat memperbarui canary untuk berjalan di VPC, peran canary tersebut mungkin tidak memiliki izin yang tepat. Untuk berjalan di VPC, canary harus memiliki izin ` ec2:CreateNetworkInterface`, `ec2:DescribeNetworkInterfaces`, dan ` ec2:DeleteNetworkInterface`. Semua izin ini disertakan dalam kebijakan terkelola ` AWSLambdaVPCAccessExecutionRole`. Untuk informasi selengkapnya, silakan lihat [Peran Eksekusi dan Izin Pengguna](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-permissions).

Jika masalah ini terjadi ketika Anda membuat canary, Anda harus menghapus canary tersebut, dan membuat canary yang baru. Jika Anda menggunakan CloudWatch konsol untuk membuat kenari baru, di bawah **Izin Akses**, pilih **Buat peran baru**. Peran baru yang mencakup semua izin yang diperlukan untuk menjalankan canary akan dibuat.

Jika masalah ini terjadi ketika Anda memperbarui canary, Anda dapat memperbarui canary lagi dan memberikan peran baru yang memiliki izin yang diperlukan.

### Kesalahan "Tidak ada hasil uji yang dikembalikan"
<a name="CloudWatch_Synthetics_Canaries_VPC_troubleshoot_noresult"></a>

Jika canary menampilkan kesalahan "tidak ada hasil uji yang dikembalikan", salah satu masalah berikut mungkin menjadi penyebabnya: 
+ Jika VPC Anda tidak memiliki akses internet, Anda harus menggunakan titik akhir VPC untuk memberikan akses kenari ke dan Amazon S3. CloudWatch Anda harus mengaktifkan **Resolusi DNS** dan opsi **nama host DNS** di VPC untuk alamat titik akhir ini agar dapat diselesaikan dengan benar. Untuk informasi selengkapnya, lihat [Menggunakan DNS dengan VPC Anda](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html) dan Menggunakan [ CloudWatch dan CloudWatch Synthetics dengan](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-and-interface-VPC.html) titik akhir VPC antarmuka.
+ Canary harus berjalan di subnet privat di dalam VPC. Untuk memeriksanya, buka halaman **Subnet** di konsol VPC. Periksa subnet yang Anda pilih ketika mengonfigurasikan canary. Jika subnet tersebut memiliki jalur menuju gateway internet (**igw-**), mereka bukan subnet privat.

Untuk membantu Anda memecahkan masalah ini, silakan lihat log untuk canary.

**Untuk melihat peristiwa log dari canary**

1. Buka CloudWatch konsol di [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Pada panel navigasi, silakan pilih **Grup log**.

1. Pilih nama grup log canary. Nama grup log dimulai dengan ` /aws/lambda/cwsyn-canary-name`.

## Memecahkan masalah kenari coba ulang otomatis
<a name="CloudWatch_Synthetics_Canaries_autoretry"></a>

Untuk memahami mengapa kenari Anda gagal atau menganalisis upaya gagal tertentu, ikuti langkah-langkah pemecahan masalah ini.

1. Buka CloudWatch konsol di [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Di panel navigasi, pilih **Application Signals**, **Synthetics Canaries**.

1. Pilih **Canary.**

1. Di bawah tab **Availability**, Anda dapat memeriksa rincian run dengan:
   + Memilih titik tertentu pada grafik Canary Runs
   + Di bawah **Masalah**, memilih catatan. Perhatikan bahwa upaya coba lagi ditandai dan berbagi stempel waktu dengan jadwal berjalan

   Anda dapat melihat informasi tambahan di bawah **Langkah**, **Tangkapan Layar**, **Log**, **file HAR**, atau **Jejak (jika penelusuran aktif diaktifkan**).

1. Di bawah **artefak Canary dan lokasi Amazon S3**, Anda dapat mengakses artefak dan menavigasi ke folder atau ember Amazon S3 melalui tautan yang tersedia.

1. Grafik **Canary menjalankan** menggunakan titik berwarna berbeda untuk menunjukkan berbagai status:
   + Blue Points - Menunjukkan keberhasilan berjalan terjadwal dengan nilai konsisten 100%
   + Red Points - Menampilkan kegagalan dari kedua jadwal berjalan dan semua percobaan ulang, ditandai pada 0%
   + Poin Oranye - Menampilkan 0% atau 100%. 0% menunjukkan percobaan ulang yang sedang berlangsung setelah kegagalan upaya sebelumnya dan 100% berarti keberhasilan tercapai setelah mencoba lagi

# Kode sampel untuk skrip canary
<a name="CloudWatch_Synthetics_Canaries_Samples"></a>

Bagian ini memuat sampel kode yang menggambarkan beberapa kemungkinan fungsi untuk CloudWatch Naskah canary sintetis.

## Sampel untuk Node.js dan Penulis Naskah
<a name="Synthetics_Canaries_Samples_nodejs_playwright"></a>

### Dramawan kenari dengan beberapa langkah
<a name="Synthetics_canary_example_nodejs_playwright_multistep"></a>

Script berikut adalah contoh dari Node.js Playwright canary dengan beberapa langkah.

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

### Penulis naskah kenari mengatur cookie
<a name="Synthetics_canaries_nodejs_playwright_cookies"></a>

Skrip berikut adalah contoh dari Node.js Playwright canary yang mengatur tiga cookie.

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

export const handler = async (event, context) => {
  try {
    let url = "http://smile.amazon.com/";
    const browser = await synthetics.launch();
    const page = await synthetics.getPage(browser);
    const cookies = [{
        'name': 'cookie1',
        'value': 'val1',
        'url': url
    },
    {
        'name': 'cookie2',
        'value': 'val2',
        'url': url
    },
    {
        'name': 'cookie3',
        'value': 'val3',
        'url': url
    }
   ];
   await page.context().addCookies(cookies);
   await page.goto(url, {waitUntil: 'load', timeout: 30000});
   await page.screenshot({ path: '/tmp/smile.png' });
    
  } finally {
    await synthetics.close();
  }
};
```

## Sampel untuk Node.js dan Puppeteer
<a name="CloudWatch_Synthetics_Canaries_Samples_nodejspup"></a>

### Mengatur cookie
<a name="CloudWatch_Synthetics_Canaries_Samples_cookies"></a>

Situs web mengandalkan cookie untuk menyediakan fungsionalitas kustom atau melacak para pengguna. Dengan menyetel cookie dalam skrip CloudWatch Synthetics, Anda dapat meniru perilaku kustom ini dan memvalidasinya.

Misalnya, situs web dapat menampilkan tautan **Login** untuk pengguna yang mengunjungi kembali, bukan tautan **Daftar**.

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

### Emulasi perangkat
<a name="CloudWatch_Synthetics_Canaries_Samples_device"></a>

Anda dapat menulis skrip yang mengemulasi berbagai perangkat sehingga Anda dapat memperkirakan cara halaman terlihat dan berfungsi pada perangkat tersebut.

Sampel berikut mengemulasi perangkat iPhone 6. Untuk informasi selengkapnya tentang emulasi, silakan lihat [page.emulate(options)](https://pptr.dev/#?product=Puppeteer&version=v5.3.1&show=api-pageemulateoptions) dalam dokumentasi Puppeteer.

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

const pageLoadBlueprint = async function () {
    
    const iPhone = puppeteer.devices['iPhone 6'];

    // INSERT URL here
    const URL = "https://amazon.com";

    let page = await synthetics.getPage();
    await page.emulate(iPhone);

    //You can customize the wait condition here. For instance,
    //using 'networkidle2' may be less restrictive.
    const response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000});
    if (!response) {
        throw "Failed to load page!";
    }
    
    await page.waitFor(15000);

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

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

### Canary API multi-langkah
<a name="CloudWatch_Synthetics_Canaries_Samples_APIsteps"></a>

Kode sampel ini menunjukkan API canary dengan dua langkah HTTP: menguji API yang sama untuk kasus uji positif dan negatif. Konfigurasi langkah diteruskan untuk mengaktifkan pelaporan request/response header. Selain itu, ia menyembunyikan header Otorisasi dan X-Amz-Security-Token, karena mengandung kredensil pengguna. 

Ketika skrip ini digunakan sebagai canary, Anda dapat melihat detail tentang setiap langkah dan permintaan HTTP terkait seperti langkah lulus/gagal, durasi, dan metrik performa seperti waktu pencarian DNS dan waktu byte pertama. Anda dapat melihat jumlah 2xx, 4xx dan 5xx untuk berjalannya canary Anda. 

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

## Sampel untuk Python dan Selenium
<a name="CloudWatch_Synthetics_Canaries_Samples_pythonsel"></a>

Sampel kode Selenium berikut adalah sebuah canary yang gagal dengan sebuah pesan kesalahan kustom saat sebuah elemen target tidak dimuat.

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

# Penelusuran Canary dan X-Ray
<a name="CloudWatch_Synthetics_Canaries_tracing"></a>

Anda dapat memilih untuk mengaktifkan AWS X-Ray penelusuran aktif pada kenari yang menggunakan runtime ` syn-nodejs-2.0` atau yang lebih baru. Dengan penelusuran diaktifkan, jejak dikirim untuk semua panggilan yang dilakukan oleh kenari yang menggunakan browser, AWS SDK, atau modul HTTP atau HTTPS. Canary dengan pelacakan diaktifkan muncul di [X-Ray Trace Map](https://docs.aws.amazon.com/xray/latest/devguide/xray-console-servicemap.html), dan di dalam [Sinyal Aplikasi](CloudWatch-Application-Monitoring-Sections.md) setelah Anda mengaktifkannya untuk aplikasi Anda. 

**catatan**  
Mengaktifkan pelacakan X-Ray pada canary belum didukung di Asia Pasifik (Jakarta).  
Penelusuran X-Ray tidak didukung dengan kenari browser Firefox.

Ketika canary muncul di X-Ray Trace Map, itu muncul sebagai jenis simpul klien yang baru. Anda dapat mengarahkan kursor ke simpul canary untuk melihat data tentang latensi, permintaan, dan kesalahan. Anda juga dapat memilih simpul canary untuk melihat lebih banyak data di bagian bawah halaman. Dari area halaman ini, Anda dapat memilih **Lihat di Synthetics** untuk melompat ke konsol CloudWatch Synthetics untuk detail selengkapnya tentang kenari, atau pilih **Lihat Jejak untuk melihat detail selengkapnya tentang jejak** dari jalan kenari ini.

Canary dengan penelusuran aktif juga memiliki tab **Pelacakan** di halaman detailnya, dengan detail tentang jejak dan segmen dari operasi canary.

Mengaktifkan pelacakan meningkatkan runtime canary sebesar 2,5% hingga 7%.

Canary dengan penelusuran yang diaktifkan harus menggunakan peran dengan izin berikut. Jika Anda menggunakan konsol untuk membuat peran ketika membuat canary, maka akan diberikan izin ini.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Sid230934",
            "Effect": "Allow",
            "Action": [
                "xray:PutTraceSegments"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Penelusuran yang dihasilkan akan dikenakan biaya canary. Untuk informasi selengkapnya tentang penetapan harga X-Ray, silakan lihat [Penetapan harga AWS X-Ray](https://aws.amazon.com/xray/pricing/).

# Menjalankan canary di VPC
<a name="CloudWatch_Synthetics_Canaries_VPC"></a>

Anda dapat menjalankan canary pada titik akhir di VPC dan titik akhir internal publik. Untuk menjalankan canary di VPC, Anda harus memiliki **Resolusi DNS** dan opsi **nama host DNS** yang diaktifkan pada VPC. Untuk informasi selengkapnya, silakan lihat [Menggunakan DNS dengan VPC Anda](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html).

Saat Anda menjalankan kenari di titik akhir VPC, Anda harus menyediakan cara untuk mengirim metriknya ke dan artefaknya CloudWatch ke Amazon S3. Jika VPC sudah diaktifkan untuk akses internet, tidak ada lagi yang bisa Anda lakukan. Canary mengeksekusi di VPC Anda, tetapi dapat mengakses internet untuk mengunggah metrik dan artefaknya.

Jika VPC belum diaktifkan untuk akses internet, Anda memiliki dua opsi:
+ Aktifkan akses IPv4 internet untuk memungkinkan kenari mengirim metrik ke CloudWatch dan Amazon S3. Untuk informasi selengkapnya, silakan lihat bagian [Memberikan akses internet ke canary Anda di VPC](#CloudWatch_Synthetics_VPC_Internet) berikut ini.
+ Jika Anda ingin menjaga kerahasiaan VPC Anda, Anda dapat mengonfigurasi canary untuk mengirim data ke CloudWatch dan Amazon S3 melalui titik akhir VPC pribadi. Jika Anda belum melakukannya, Anda harus membuat titik akhir VPC untuk CloudWatch (com.amazonaws. *region*.monitoring) dan titik akhir gateway untuk Amazon S3. Untuk informasi selengkapnya, silakan lihat [Menggunakan CloudWatch, CloudWatch Synthetics, dan CloudWatch Network Monitoring dengan antarmuka VPC endpoint](cloudwatch-and-interface-VPC.md) dan [Amazon titik akhir VPC untuk Amazon S3](https://docs.aws.amazon.com/glue/latest/dg/vpc-endpoints-s3.html). 

## Memberikan akses internet ke canary Anda di VPC
<a name="CloudWatch_Synthetics_VPC_Internet"></a>

Ikuti langkah-langkah ini untuk memberikan akses internet ke kenari VPC Anda, atau untuk menetapkan kenari Anda alamat IP statis

**Untuk memberikan akses internet (IPv4) ke kenari di VPC**

1. Buat gateway NAT di subnet publik di VPC. Untuk petunjuk, silakan lihat [Membuat gateway NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-creating).

1. Tambahkan rute baru ke tabel rute di subnet privat tempat canary diluncurkan. Tentukan hal berikut:
   + Untuk **Tujuan**, masukkan **0.0.0.0/0**
   + Untuk **Target**, pilih **Gateway NAT**, lalu pilih ID gateway NAT yang Anda buat.
   + Pilih **Simpan rute**.

   Untuk informasi selengkapnya tentang menambahkan rute ke tabel rute, silakan lihat [Menambahkan dan menghapus rute dari tabel rute](https://docs.aws.amazon.com/vpc/latest/userguide/WorkWithRouteTables.html#AddRemoveRoutes).

**Untuk memberikan akses internet (IPv6) ke kenari di VPC**

1. Konfigurasikan VPC Anda untuk memiliki subnet Dualstack. Anda harus menambahkan Gateway Internet Hanya Egress ke VPC, memperbarui tabel rute untuk mengizinkan lalu lintas ke Internet Gateway, dan mengizinkan akses keluar dari Grup Keamanan terkait. Untuk informasi selengkapnya, lihat [Menambahkan IPv6 dukungan untuk VPC Anda](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6-add.html).

1. Setel konfigurasi VPC canary Anda menggunakan API or`CreateCanary`. `Ipv6AllowedForDualstack ` `UpdateCanary` Untuk informasi selengkapnya, lihat [VpcConfigInput](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_VpcConfigInput.html).

   Untuk mengaktifkan IPv6 lalu lintas keluar dari kenari Anda, subnet VPC yang terpasang pada kenari harus diaktifkan untuk Dualstack.

**catatan**  
Pastikan rute ke gateway NAT Anda dalam status **aktif**. Jika gateway NAT dihapus dan Anda belum memperbarui rute, mereka berada dalam status lubang hitam. Untuk informasi selengkapnya, silakan lihat [Bekerja dengan gateway NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-working-with).

# Mengenkripsi artefak canary
<a name="CloudWatch_Synthetics_artifact_encryption"></a>

CloudWatch Synthetics menyimpan artefak kenari seperti tangkapan layar, file HAR, dan laporan di bucket Amazon S3 Anda. Secara default, artefak ini dienkripsi saat istirahat menggunakan kunci terkelola AWS . Untuk informasi selengkapnya, lihat [Kunci dan AWS kunci pelanggan](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-mgmt.html). 

Anda dapat memilih untuk menggunakan opsi enkripsi yang berbeda. CloudWatch Synthetics mendukung hal-hal berikut:
+ **SSE–S3** – Enkripsi di sisi server (SSE) dengan kunci yang dikelola Amazon S3.
+ **SSE–KMS** – Enkripsi di sisi server (SSE) dengan Kunci yang dikelola pelanggan AWS KMS .

Jika Anda ingin menggunakan opsi enkripsi default dengan kunci AWS terkelola, Anda tidak memerlukan izin tambahan. 

Untuk menggunakan enkripsi SSE-S3, Anda menentukan **SSE\$1S3** sebagai mode enkripsi saat Anda membuat atau memperbarui canary Anda. Anda tidak memerlukan izin tambahan untuk menggunakan mode enkripsi ini. Untuk informasi selengkapnya, silakan lihat [Melindungi Data Menggunakan Enkripsi di Sisi Server dengan Kunci Enkripsi yang terkelola oleh Amazon S3 (SSE-S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)).

Untuk menggunakan kunci yang dikelola AWS KMS pelanggan, Anda menentukan **SSE-KMS** sebagai mode enkripsi saat membuat atau memperbarui kenari, dan Anda juga memberikan Nama Sumber Daya Amazon (ARN) kunci Anda. Anda juga dapat menggunakan kunci KMS lintas akun.

Untuk menggunakan kunci yang dikelola pelanggan, Anda memerlukan pengaturan berikut ini:
+ Peran IAM untuk canary Anda harus memiliki izin untuk mengenkripsi artefak Anda menggunakan kunci Anda. Jika Anda menggunakan pemantauan visual, Anda juga harus memberikan izin untuk mendekripsi artefak.

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

------
+ Alih-alih menambahkan izin ke peran IAM, Anda dapat menambahkan peran IAM ke kebijakan kunci Anda. Jika Anda menggunakan peran yang sama untuk beberapa canary, Anda harus mempertimbangkan pendekatan ini.

  ```
  {
      "Sid": "Enable IAM User Permissions",
      "Effect": "Allow",
      "Principal": {
          "AWS": "Your synthetics IAM role ARN"
      },
      "Action": [
          "kms:GenerateDataKey",
          "kms:Decrypt"
      ],
      "Resource": "*"
  }
  ```
+ Jika Anda menggunakan kunci KMS lintas akun, silakan lihat [Mengizinkan pengguna di akun lain untuk menggunakan kunci KMS](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html).

 **Melihat artefak canary terenkripsi saat menggunakan kunci yang dikelola pelanggan** 

Untuk melihat artefak kenari, perbarui kunci terkelola pelanggan Anda untuk memberikan AWS KMS izin dekripsi kepada pengguna yang melihat artefak. Atau, tambahkan izin dekripsi ke pengguna atau peran IAM yang melihat artefak tersebut.

 AWS KMS Kebijakan default memungkinkan kebijakan IAM di akun untuk mengizinkan akses ke kunci KMS. Jika Anda menggunakan kunci KMS lintas akun, lihat [Mengapa pengguna lintas akun mendapatkan kesalahan Akses Ditolak saat mereka mencoba mengakses objek Amazon S3 yang dienkripsi](https://aws.amazon.com/premiumsupport/knowledge-center/cross-account-access-denied-error-s3/) oleh kunci khusus? AWS KMS . 

Untuk informasi selengkapnya tentang pemecahan masalah akses yang ditolak karena kunci KMS, silakan lihat [Memecahkan masalah akses kunci](https://docs.aws.amazon.com/kms/latest/developerguide/policy-evaluation.html). 

## Memperbarui lokasi artefak dan enkripsi saat menggunakan pemantauan visual
<a name="CloudWatch_Synthetics_artifact_encryption_visual"></a>

Untuk melakukan pemantauan visual, CloudWatch Synthetics membandingkan tangkapan layar Anda dengan tangkapan layar dasar yang diperoleh dalam proses yang dipilih sebagai baseline. Jika Anda memperbarui lokasi artefak atau opsi enkripsi, Anda harus melakukan salah satu hal berikut:
+ Pastikan bahwa peran IAM Anda memiliki izin yang cukup untuk lokasi Amazon S3 sebelumnya dan lokasi Amazon S3 baru untuk artefak. Juga pastikan bahwa ia memiliki izin untuk metode enkripsi sebelumnya dan metode enkripsi baru dan kunci KMS.
+ Buat baseline baru dengan memilih run canary berikutnya sebagai baseline baru. Jika Anda menggunakan opsi ini, Anda hanya perlu memastikan bahwa peran IAM Anda memiliki izin yang cukup untuk lokasi artefak dan opsi enkripsi baru.

Kami merekomendasikan opsi kedua untuk memilih run berikutnya sebagai baseline baru. Ini menghindari dependensi pada lokasi artefak atau opsi enkripsi yang tidak Anda gunakan lagi untuk canary.

Misalnya, canary Anda menggunakan lokasi artefak A dan kunci KMS K untuk mengunggah artefak. Jika Anda memperbarui canary ke lokasi artefak B dan kunci KMS L, Anda dapat memastikan bahwa peran IAM Anda memiliki izin untuk kedua lokasi artefak (A dan B) dan kedua kunci KMS (K dan L). Atau, Anda dapat memilih proses berikutnya sebagai baseline baru dan memastikan bahwa peran IAM canary Anda memiliki izin untuk artefak lokasi B dan kunci KMS L. 

# Melihat statistik dan detail canary
<a name="CloudWatch_Synthetics_Canaries_Details"></a>

Anda dapat melihat detail tentang canary dan melihat statistik tentang operasinya.

Untuk dapat melihat semua detail tentang hasil operasi canary Anda, Anda harus log on ke akun yang memiliki izin yang memadai. Untuk informasi selengkapnya, lihat [Peran dan izin yang diperlukan untuk kenari CloudWatch](CloudWatch_Synthetics_Canaries_Roles.md).

**Untuk melihat statistik dan detail canary**

1. Buka CloudWatch konsol di [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Di panel navigasi, pilih **Application Signals**, **Synthetics Canaries**.

   Dalam detail tentang canary yang telah Anda buat:
   + **Status** secara visual menunjukkan seberapa banyak canary Anda yang telah lulus dari operasi terbaru.
   + **Grup** menampilkan grup yang telah Anda buat, dan menampilkan berapa banyak dari mereka yang memiliki canary yang gagal atau mengkhawatirkan.
   + **Penampil paling lambat** menampilkan grup dan Wilayah dengan canary berperforma paling lambat. Ini dihitung dengan menjumlahkan durasi rata-rata semua canary (di seluruh rentang waktu yang dipilih) dalam kelompok atau Wilayah dan membaginya dengan jumlah canary dalam grup atau Wilayah. Jika Anda memilih metrik untuk grup Paling Lambat, tabel difilter untuk menampilkan hanya grup paling lambat dan canary mereka. Tabel diurutkan berdasarkan Durasi Rata-rata.
   + Dekat bagian bawah halaman adalah tabel yang menampilkan semua canary. Anda dapat menggunakan bilah pemfilteran untuk memfilter tabel untuk menampilkan kenari berdasarkan nama kenari tertentu, hasil lari terakhir, persentase keberhasilan, alarm, laju lari, status kenari, waktu proses, dan tag unik. 

     Untuk kolom alarm, hanya alarm yang sesuai dengan standar penamaan untuk alarm kenari yang ditampilkan. Standar ini adalah `Synthetics-Alarm-canaryName -index`. Alarm Canary yang Anda buat di bagian **Synthetics** CloudWatch konsol secara otomatis menggunakan konvensi penamaan ini. Jika Anda membuat alarm kenari di bagian **Alarm** CloudWatch konsol atau dengan menggunakan AWS CloudFormation, dan Anda tidak menggunakan konvensi penamaan ini, alarm berfungsi tetapi alarm tersebut tidak muncul dalam daftar ini.

1. **Untuk melihat detail lebih lanjut tentang kenari tunggal, pilih nama kenari di tabel Canaries.**

   Dalam detail tentang canary tersebut:
   + Tab **Ketersediaan** menampilkan informasi tentang operasi terbaru dari canary ini.

     Pada **Jalankan canary**, Anda dapat memilih salah satu baris untuk melihat detail operasi tersebut.

     Di bawah grafik, Anda dapat memilih **Langkah**, **Tangkapan Layar**, **Log**, atau **file HAR** untuk melihat jenis detail ini. Jika kenari mengaktifkan penelusuran aktif, Anda juga dapat memilih **Jejak** untuk melihat informasi penelusuran dari jalan kenari.

     Log untuk proses kenari disimpan dalam bucket S3 dan di Log. CloudWatch 

     Tangkapan layar menunjukkan cara para pelanggan Anda melihat halaman web. Anda dapat menggunakan file HAR (file Arsip HTTP) untuk melihat data performa terperinci tentang halaman web. Anda dapat menganalisis daftar permintaan web dan menangkap masalah performa seperti waktu untuk memuat sebuah item. File log menunjukkan catatan interaksi antara operasi canary dan halaman web dan dapat digunakan untuk mengidentifikasi detail kesalahan.

     Jika canary menggunakan runtime `syn-nodejs-2.0-beta` atau yang lebih baru, Anda dapat menyortir file HAR berdasarkan kode status, ukuran permintaan, atau durasi.

     Tab **Langkah** menampilkan daftar langkah-langkah canary, status setiap langkah, alasan kegagalan, URL setelah eksekusi langkah, tangkapan layar, dan durasi eksekusi langkah. Untuk canary API dengan langkah-langkah HTTP, Anda dapat melihat langkah-langkah dan permintaan HTTP yang sesuai jika Anda menggunakan runtime `syn-nodejs-2.2` atau yang lebih baru.

     Pilih tab **Permintaan HTTP** untuk melihat log dari setiap permintaan HTTP yang dibuat oleh canary. Anda dapat melihat request/response header, badan respons, kode status, kesalahan, dan pengaturan waktu kinerja (durasi total, waktu koneksi TCP, waktu jabat tangan TLS, waktu byte pertama, dan waktu transfer konten). Semua permintaan HTTP yang menggunakan HTTP/HTTPS modul di bawah tenda ditangkap di sini.

     Secara default di canary API, header permintaan, header respon, isi permintaan, dan isi respons tidak termasuk dalam laporan untuk alasan keamanan. Jika Anda memilih untuk memasukkannya, data tersebut disimpan hanya dalam bucket S3 Anda. Untuk informasi tentang cara menyertakan data ini dalam laporan, silakan lihat [executeHttpStep(StepName, requestOptions, [callback], [stepConfig])](CloudWatch_Synthetics_Canaries_Library_Nodejs.md#CloudWatch_Synthetics_Library_executeHttpStep).

     Jenis konten isi respons teks, HTML, dan JSON didukung. Jenis konten seperti text/HTML, text/plain, application/JSON and application/x -amz-json-1.0 didukung. Respons terkompresi tidak didukung. 
   + Tab **Monitoring** menampilkan grafik CloudWatch metrik yang diterbitkan oleh kenari ini. Untuk informasi selengkapnya tentang metrik ini, lihat [CloudWatch metrik yang diterbitkan oleh kenari](CloudWatch_Synthetics_Canaries_metrics.md).

     Di bawah CloudWatch grafik yang diterbitkan oleh kenari adalah grafik metrik Lambda yang terkait dengan kode Lambda kenari.
   + Tab **Konfigurasi** menampilkan konfigurasi dan informasi jadwal tentang canary. 
   + Tab **Grup** menampilkan grup yang dikaitkan dengan canary ini, jika ada.
   + Tab **Tanda **menampilkan tanda yang terkait dengan canary.

# CloudWatch metrik yang diterbitkan oleh kenari
<a name="CloudWatch_Synthetics_Canaries_metrics"></a>

Canaries mempublikasikan metrik berikut ke CloudWatch dalam namespace. `CloudWatchSynthetics` Untuk informasi selengkapnya tentang melihat CloudWatch metrik, lihat[Lihat metrik yang tersedia](viewing_metrics_with_cloudwatch.md).

**catatan**  
Untuk kenari multi-browser, metrik dimensi browser diaktifkan secara default untuk memberikan visibilitas ke kinerja di seluruh browser seperti Chrome, Firefox, dan browser lainnya. Untuk menonaktifkan metrik browser, atur `browserDimension` ke`false`.  
Untuk kenari browser tunggal, metrik dimensi browser dinonaktifkan secara default untuk menghindari redundansi. Untuk melihat metrik yang dipecah berdasarkan browser, atur `browserDimension` ke` true`.


| Metrik | Penjelasan | 
| --- | --- | 
|   `2xx`   |  Jumlah permintaan jaringan yang dilakukan oleh canary yang mengembalikan respons OK, dengan kode tanggapan antara 200 dan 299. Metrik ini dilaporkan untuk canary UI yang menggunakan versi runtime ` syn-nodejs-2.0` atau yang lebih baru, dan dilaporkan untuk canary API yang menggunakan versi runtime `syn-nodejs-2.2` atau yang lebih baru. Dimensi yang Valid: CanaryName, Browser Statistik Valid: Sum Satuan: Hitungan  | 
|   `4xx`   |  Jumlah permintaan jaringan yang dilakukan oleh canary yang mengembalikan respons Kesalahan, dengan kode tanggapan antara 400 dan 499. Metrik ini dilaporkan untuk canary UI yang menggunakan versi runtime ` syn-nodejs-2.0` atau yang lebih baru, dan dilaporkan untuk canary API yang menggunakan versi runtime `syn-nodejs-2.2` atau yang lebih baru. Dimensi yang Valid: CanaryName, Browser Statistik Valid: Sum Satuan: Hitungan  | 
|   `5xx`   |  Jumlah permintaan jaringan yang dilakukan oleh canary yang mengembalikan respons Kesalahan, dengan kode respons antara 500 dan 599. Metrik ini dilaporkan untuk canary UI yang menggunakan versi runtime ` syn-nodejs-2.0` atau yang lebih baru, dan dilaporkan untuk canary API yang menggunakan versi runtime `syn-nodejs-2.2` atau yang lebih baru. Dimensi yang Valid: CanaryName, Browser Statistik Valid: Sum Unit: Hitungan  | 
|   `Duration`   |  Durasi dalam milidetik run canary. Dimensi yang Valid: CanaryName, Browser Statistik yang Valid: Average Satuan: Milidetik  | 
|   `DurationDryRun`   |  Durasi DryRun eksekusi.  Dimensi yang Valid: CanaryName, Browser Statistik yang Valid: Average Satuan: Milidetik  | 
|   `EphemeralStorageUsagePercent`   |  Persentase maksimum penyimpanan fana yang digunakan dibandingkan dengan total penyimpanan fana yang dikonfigurasi. Metrik ini dikumpulkan pada setiap interval 10 detik.  | 
|   `Failed`   |  Jumlah operasi canary yang gagal untuk dieksekusi. Kegagalan ini berkaitan dengan canary itu sendiri. Dimensi yang Valid: CanaryName, Browser Statistik Valid: Sum Satuan: Hitungan  | 
|   `Failed requests`   |  Jumlah permintaan HTTP yang dijalankan oleh canary pada situs web target yang gagal tanpa respons. Dimensi yang Valid: CanaryName, Browser Statistik Valid: Sum Unit: Hitungan  | 
|   `RetryCount`   |  Berapa kali kenari Anda mencoba lagi. Metrik ini hanya ditampilkan ketika ada percobaan ulang. Dimensi yang Valid: CanaryName, Browser Statistik Valid: Sum Unit: Hitungan  | 
|   `SuccessPercent`   |  Persentase operasi canary yang berhasil dan tidak ditemukan kegagalan. Dimensi yang Valid: CanaryName, Browser Statistik yang Valid: Average Satuan: Persen  | 
|   `SuccessPercentDryRun`   |  Persentase keberhasilan DryRun eksekusi. Dimensi yang Valid: CanaryName, Browser Statistik yang Valid: Average Satuan: Persen  | 
|   `SuccessPercentWithRetries`   |  Persentase lari kenari ini yang berhasil setelah semua upaya. Dimensi yang Valid: CanaryName, Browser Statistik yang Valid: Average Satuan: Persen  | 
|   `VisualMonitoringSuccessPercent`   |  Persentase perbandingan visual yang berhasil mencocokkan tangkapan layar dasar selama berjalannya canary. Dimensi yang Valid: CanaryName, Browser Statistik yang Valid: Average Satuan: Persen  | 
|   `VisualMonitoringTotalComparisons`   |  Jumlah total perbandingan visual yang terjadi selama berjalannya canary. Dimensi yang Valid: CanaryName, Browser Satuan: Hitungan  | 

**catatan**  
Canary yang menggunakan metode baik `executeStep()` atau `executeHttpStep()` dari pustaka Synthetics juga menerbitka metrik `SuccessPercent` dan ` Duration` dengan dimensi `CanaryName` dan `StepName` untuk setiap langkah.

 

# Mengedit atau menghapus canary
<a name="synthetics_canaries_deletion"></a>

Anda dapat menyunting atau menghapus canary yang ada.

 **Sunting canary** 

Ketika Anda menyunting canary, bahkan jika Anda tidak mengubah jadwalnya, jadwal akan diatur ulang sesuai dengan ketika Anda menyunting canary. Sebagai contoh, jika Anda memiliki canary yang berjalan setiap jam, dan Anda menyuntingnya, canary akan berjalan segera setelah penyuntingan selesai dan kemudian setiap jam setelah itu.

**Untuk menyunting atau memperbarui canary**

1. Buka CloudWatch konsol di [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Di panel navigasi, pilih **Application Signals**, **Synthetics Canaries**.

1. Pilih tombol di sebelah nama kenari, dan pilih **Tindakan**, **Edit**.

1. (Opsional) Jika canary ini melakukan pemantauan visual tangkapan layar dan Anda ingin mengatur proses canary berikutnya sebagai baseline, pilih **Tetapkan run berikutnya sebagai baseline baru**.

1. (Opsional) Jika canary ini melakukan pemantauan visual tangkapan layar dan Anda ingin menghapus tangkapan layar dari pemantauan visual atau Anda ingin menunjuk bagian tangkapan layar yang akan diabaikan selama perbandingan visual, di bawah **Pemantauan Visual** pilih **Sunting Baseline**.

   Tangkapan layar muncul, dan Anda dapat melakukan salah satu dari yang berikut ini:
   + Untuk menghapus tangkapan layar agar tidak digunakan untuk pemantauan visual, pilih **Hapus tangkapan layar dari baseline tes visual**.
   + Untuk menunjuk bagian tangkapan layar yang akan diabaikan selama perbandingan visual, klik dan seret untuk menggambar area layar untuk diabaikan. Setelah Anda melakukan ini untuk semua area yang ingin Anda abaikan selama perbandingan, pilih **Simpan**.

1. Di bawah **Editor skrip**, versi **Runtime, pilih versi** runtime sintetis untuk mengeksekusi kenari. Untuk informasi tentang versi runtime sintetis, lihat Versi runtime [Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Library.html).

   Di bawah **konfigurasi Browser**, Anda dapat mengaktifkan browser untuk menguji kenari. Anda harus memilih setidaknya satu browser.

1. Buat perubahan lain pada canary yang Anda inginkan, dan pilih **Simpan**.

 **Hapus canary** 

Ketika Anda menghapus canary, Anda dapat memilih apakah akan menghapus sumber daya lain yang digunakan dan dibuat oleh canary tersebut. Jika `ProvisionedResourceCleanup` bidang kenari diatur ke ` AUTOMATIC` atau `DeleteLambda` ditentukan seperti `true` saat Anda menghapus kenari, CloudWatch Synthetics akan secara otomatis menghapus fungsi dan lapisan Lambda yang digunakan oleh kenari.

Saat Anda menghapus canary, Anda juga harus menghapus hal-hal berikut ini:
+ Fungsi dan lapisan Lambda yang digunakan oleh canary ini. Awalan mereka adalah `cwsyn- MyCanaryName`.
+ CloudWatch alarm dibuat untuk kenari ini. Alarm ini memiliki nama yang dimulai dengan ` Synthetics-Alarm-MyCanaryName`. Untuk informasi selengkapnya tentang penghapusan alarm, silakan lihat [Mengedit atau menghapus CloudWatch alarm](Edit-CloudWatch-Alarm.md).
+ Objek dan bucket Amazon S3, seperti lokasi hasil canary dan lokasi artefak.
+ Peran IAM yang dibuat untuk canary tersebut. Peran ini memiliki nama ` role/service-role/CloudWatchSyntheticsRole-MyCanaryName`. 
+ Grup log di CloudWatch Log dibuat untuk kenari. Grup log ini memiliki nama berikut:`/aws/lambda/cwsyn-MyCanaryName-randomId`. 

Sebelum menghapus canary, Anda mungkin ingin melihat detail canary dan mencatat informasi ini. Dengan demikian, Anda dapat menghapus sumber daya yang benar setelah Anda menghapus canary tersebut.

**Untuk menghapus canary**

1. Buka CloudWatch konsol di [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Di panel navigasi, pilih **Application Signals**, **Synthetics Canaries**.

1. Jika canary saat ini berada di `RUNNING` negara bagian, Anda harus menghentikannya. Hanya canary di`STOPPED`, `READY(NOT_STARTED)`, atau `ERROR` negara bagian yang dapat dihapus.

   **Untuk menghentikan kenari, pilih tombol di sebelah nama kenari, dan pilih **Tindakan**, Berhenti.**

1. Pilih tombol di sebelah nama kenari, dan pilih **Tindakan**, **Hapus**.

1. Pilih apakah akan menghapus sumber daya lain yang dibuat untuk dan digunakan oleh canary tersebut. Fungsi dan lapisan Lambda akan dihapus bersama kenari, tetapi Anda juga dapat memilih untuk menghapus peran IAM dan kebijakan IAM kenari.

   Masukkan **Delete** ke dalam kotak dan pilih **Hapus**.

1. Hapus sumber daya lain yang digunakan dan dibuat untuk canary, seperti yang tercantum sebelumnya di bagian ini.

# Mulai, hentikan, hapus, atau perbarui runtime untuk banyak canary
<a name="synthetics_canaries_multi-action"></a>

Anda dapat menghentikan, memulai, menghapus, atau memperbarui runtime sebanyak lima canary dengan satu tindakan. Jika Anda memperbarui runtime canary, itu diperbarui ke runtime terbaru yang tersedia untuk bahasa dan kerangka kerja yang digunakan oleh canary tersebut.

Jika Anda memilih banyak canary dan hanya beberapa dari mereka yang berada dalam keadaan yang valid untuk tindakan yang Anda pilih, maka tindakan itu hanya dilakukan pada canary di mana tindakan itu valid. Sebagai contoh, jika Anda memilih beberapa canary yang sedang berjalan dan beberapa yang tidak, dan Anda memilih untuk memulai canary, maka canary yang belum berjalan akan mulai, dan canary yang sudah berjalan tidak terpengaruh.

Jika tidak ada canary yang Anda pilih valid untuk suatu tindakan, tindakan itu tidak akan tersedia di menu.

1. Buka CloudWatch konsol di [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Di panel navigasi, pilih **Application Signals**, **Synthetics Canaries**.

1. Centang kotak di samping canary yang ingin Anda hentikan, mulai, atau hapus.

1. Pilih **Actions** dan kemudian pilih **Start**, **Stop**, **Delete**, **Start Dry Run**, atau **Update Runtime**.

   Selain itu, saat memilih **Update Runtime**, Anda dapat memilih untuk mengeringkan pembaruan runtime terlebih dahulu sebelum melakukan perubahan.

# Memantau peristiwa kenari dengan Amazon EventBridge
<a name="monitoring-events-eventbridge"></a>

Aturan EventBridge acara Amazon dapat memberi tahu Anda saat kenari mengubah status atau menyelesaikan proses. EventBridgememberikan near-real-time aliran peristiwa sistem yang menggambarkan perubahan AWS sumber daya. CloudWatch Synthetics mengirimkan acara ini ke EventBridge atas dasar *upaya terbaik*. Penyampaian upaya terbaik berarti bahwa CloudWatch Synthetics mencoba mengirim semua acara ke EventBridge, tetapi dalam beberapa kasus yang jarang terjadi suatu peristiwa mungkin tidak terkirim. EventBridge memproses semua acara yang diterima setidaknya sekali. Selain itu, pendengar peristiwa Anda mungkin tidak menerima peristiwa dalam urutan peristiwa yang terjadi.

**catatan**  
Amazon EventBridge adalah layanan bus acara yang dapat Anda gunakan untuk menghubungkan aplikasi Anda dengan data dari berbagai sumber. Untuk informasi lebih lanjut, lihat [Apa itu Amazon EventBridge?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) di *Panduan EventBridge Pengguna Amazon*.

CloudWatch Synthetics memancarkan peristiwa ketika kenari mengubah status atau menyelesaikan proses. Anda dapat membuat EventBridge aturan yang menyertakan pola acara agar sesuai dengan semua jenis acara yang dikirim dari CloudWatch Synthetics, atau yang hanya cocok dengan jenis peristiwa tertentu. Ketika kenari memicu aturan, EventBridge memanggil tindakan target yang ditentukan dalam aturan. Hal ini memungkinkan Anda untuk mengirim notifikasi, menangkap informasi peristiwa, dan mengambil tindakan korektif, dalam menanggapi perubahan status canary atau selesainya sebuah run canary. Sebagai contoh, Anda dapat membuat aturan untuk kasus penggunaan berikut:
+ Investigasi ketika operasi canary gagal
+ Investigasi ketika canary telah masuk ke status `ERROR`
+ Menelusuri siklus hidup canary
+ Memantau keberhasilan atau kegagalan menjalankan canary sebagai bagian dari alur kerja

## Contoh peristiwa dari CloudWatch Synthetics
<a name="synthetics-event-examples"></a>

Bagian ini mencantumkan contoh peristiwa dari CloudWatch Synthetics. Untuk informasi selengkapnya tentang format acara, lihat [Peristiwa dan Pola Peristiwa di EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-event-patterns.html). 

 **Perubahan status canary** 

Dalam jenis peristiwa ini, nilai-nilai dari `current-state` dan `previous-state` dapat berupa berikut:

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

 **Eksekusi canary yang berhasil telah selesai** 

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

 **Eksekusi canary yang gagal telah selesai** 

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

Ada kemungkinan bahwa peristiwa dapat diduplikasi atau rusak. Untuk menentukan urutan peristiwa, gunakan properti `time` ini.

## Prasyarat untuk membuat aturan EventBridge
<a name="create-events-rule-prereqs"></a>

Sebelum Anda membuat EventBridge aturan untuk CloudWatch Synthetics, Anda harus melakukan hal berikut:
+ Biasakan diri Anda dengan acara, aturan, dan target di EventBridge.
+ Buat dan konfigurasikan target yang dipanggil oleh EventBridge aturan Anda. Aturan dapat menginvokasi berbagai jenis target, termasuk:
  + Topik Amazon SNS
  + AWS Lambda fungsi
  + Aliran Kinesis
  + Antrean Amazon SQS

Untuk informasi lebih lanjut, lihat [Apa itu Amazon EventBridge?](https://docs.aws.amazon.com/eventbridge/latest/userguide/what-is-amazon-eventbridge.html) dan [Memulai Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-getting-set-up.html) di *Panduan EventBridge Pengguna Amazon*.

## Buat EventBridge aturan (CLI)
<a name="create-events-rule-cli"></a>

Langkah-langkah dalam contoh berikut membuat EventBridge aturan yang menerbitkan topik Amazon SNS saat kenari `my-canary-name` bernama `us-east-1` dalam menyelesaikan status run atau perubahan.

1. Buat aturan.

   ```
   aws events put-rule \
     --name TestRule \
     --region us-east-1 \ 
     --event-pattern "{\"source\": [\"aws.synthetics\"], \"detail\": {\"canary-name\": [\"my-canary-name\"]}}"
   ```

   Properti apa pun yang Anda hilangkan dari pola akan diabaikan.

1. Tambahkan topik sebagai target aturan.
   + Ganti *topic-arn* dengan Nama Sumber Daya Amazon (ARN) dari topik Amazon SNS Anda.

   ```
   aws events put-targets \
     --rule TestRule \
     --targets "Id"="1","Arn"="topic-arn"
   ```
**catatan**  
Untuk mengizinkan Amazon EventBridge memanggil topik target Anda, Anda harus menambahkan kebijakan berbasis sumber daya ke topik Anda. Untuk informasi selengkapnya, lihat [izin Amazon SNS di Panduan](https://docs.aws.amazon.com/eventbridge/latest/userguide/resource-based-policies-eventbridge.html#sns-permissions) Pengguna *Amazon EventBridge *.

Untuk informasi selengkapnya, lihat [Peristiwa dan pola acara EventBridge di](https://docs.aws.amazon.com/eventbridge/latest/userguide/eventbridge-and-event-patterns.html) *Panduan EventBridge Pengguna Amazon*.

# Melakukan pembaruan kenari yang aman
<a name="performing-safe-canary-upgrades"></a>

CloudWatch pembaruan kenari aman sintetis memungkinkan Anda menguji pembaruan pada kenari yang ada sebelum menerapkan perubahan. Fitur ini membantu Anda memvalidasi kompatibilitas kenari dengan waktu berjalan baru dan perubahan konfigurasi lainnya seperti perubahan kode atau memori. Ini akan membantu meminimalkan potensi gangguan pemantauan yang disebabkan oleh pembaruan yang salah.

Dengan menggunakan pembaruan aman kenari pada pembaruan versi runtime, perubahan konfigurasi, dan modifikasi skrip kode, Anda dapat mengurangi risiko, mempertahankan pemantauan tanpa gangguan, memverifikasi perubahan sebelum melakukan, memperbarui, dan mengurangi waktu henti.

**Topics**
+ [Prasyarat](#performing-safe-canary-upgrades-prereq)
+ [Praktik terbaik](#performing-safe-canary-upgrades-best-practices)
+ [Menguji kenari menggunakan dry run](#performing-safe-canary-upgrades-getting-started)
+ [Batasan](#performing-safe-canary-upgrades-limitations)

## Prasyarat
<a name="performing-safe-canary-upgrades-prereq"></a>

Pastikan prekuisitnya lengkap.
+ AWS akun dengan izin CloudWatch sintetis
+ Canary yang ada pada versi runtime yang didukung (lihat runtime [Batasan](#performing-safe-canary-upgrades-limitations) yang kompatibel)
+ Sertakan runtime yang kompatibel saat melakukan dry run (lihat runtime [Batasan](#performing-safe-canary-upgrades-limitations) yang kompatibel)

## Praktik terbaik
<a name="performing-safe-canary-upgrades-best-practices"></a>

Berikut adalah beberapa praktik terbaik untuk diikuti saat melakukan kenari.
+ Jalankan dry run untuk memvalidasi pembaruan runtime
+ Lakukan dry run sebelum pembaruan produksi ke kenari
+ Tinjau log kenari dan artefak setelah lari kering
+ Gunakan dry run untuk memvalidasi dependensi dan kompatibilitas pustaka

## Menguji kenari menggunakan dry run
<a name="performing-safe-canary-upgrades-getting-started"></a>

Anda dapat menguji pembaruan kenari menggunakan opsi berikut:

 **Menggunakan alur kerja Edit Konsol Manajemen AWS** 

1. Pergi konsol CloudWatch sintetis.

1. Pilih kenari yang ingin Anda perbarui.

1. Dari menu **tarik-turun Tindakan**, pilih **Edit**.

   Perbarui kenari dengan perubahan yang ingin Anda uji. Misalnya, mengubah versi runtime atau mengedit kode skrip.

1. Di bawah **skrip Canary**, pilih **Mulai Jalankan Kering** untuk menguji dan melihat hasilnya segera atau pilih **Validasi dan simpan nanti** di bagian bawah halaman untuk memulai pengujian dan melihat hasilnya nanti di halaman Detail **Canary** Anda.

1. Setelah dry run berhasil, pilih **Kirim** untuk melakukan pembaruan kenari Anda.

 **Menggunakan Konsol Manajemen AWS untuk memperbarui kenari dalam batch** 

1. Pergi konsol CloudWatch sintetis.

1. Pilih halaman daftar **Synthetics**.

1. Pilih hingga lima kenari yang ingin Anda perbarui runtime.

1. Dari menu **tarik-turun Tindakan**, pilih **Perbarui Runtime**.

1. Pilih **Mulai dry run untuk runtime baru** untuk memulai dry run dan uji perubahan Anda sebelum pembaruan.

1. Pada halaman daftar **Synthetics**, Anda akan melihat teks di sebelah versi **Runtime** untuk kenari yang menampilkan kemajuan dry run (ini hanya ditampilkan untuk dry run yang melibatkan pembaruan runtime).

   Setelah dry run berhasil, Anda akan melihat teks **Initiate Update**.

1. Pilih **Initiate Update** untuk melakukan pembaruan runtime.

1. Jika dry run gagal, Anda akan melihat teks **gagal Update dry run**. Pilih teks untuk melihat tautan debug ke halaman detail kenari.

 **Menggunakan AWS CLI atau SDK** 

API memulai dry run untuk nama kenari yang disediakan `MyCanary` dan memperbarui versi runtime ke. `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
```

API akan mengembalikan bagian `DryRunId` dalam file`DryRunConfigOutput`.

Panggil `GetCanary` dengan yang disediakan `DryRunId` untuk menerima konfigurasi dry run kenari dan bidang tambahan `DryRunConfig` yang berisi status dry run yang terdaftar sebagai. `LastDryRunExecutionStatus`

```
aws synthetics get-canary \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

Untuk detail lebih lanjut, gunakan `GetCanaryRuns` dengan yang disediakan `DryRunId` untuk mengambil run dan informasi tambahan.

```
aws synthetics get-canary-runs \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

Setelah dry run berhasil, Anda kemudian dapat menggunakan `UpdateCanary` dengan yang disediakan ` DryRunId` untuk melakukan perubahan Anda.

```
aws synthetics update-canary \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

Ketika gagal karena alasan apa pun (hasil dari GetCanaryRuns akan memiliki detail), hasil dari `GetCanaryRuns` memiliki lokasi artefak yang berisi log untuk di-debug. Ketika tidak ada log, dry run gagal dibuat. Anda dapat memvalidasi dengan menggunakan` GetCanary`.

```
aws synthetics get-canary \
    --name MyCanary \
    --dry-run-id XXXX-XXXX-XXXX-XXXX
```

*Negara*, *StateReason*, dan * StateReasonCode*menampilkan status dry run.

 **Menggunakan CloudFormation** 

Dalam template Anda untuk Canary Synthetics, berikan bidang `DryRunAndUpdate` yang menerima nilai boolean atau. `true` `false`

ketika nilainya `true` setiap pembaruan mengeksekusi dry run untuk memvalidasi perubahan sebelum memperbarui kenari secara otomatis. Ketika dry run gagal, kenari tidak memperbarui dan gagal penerapan dan CloudFormation penerapan dengan alasan yang valid. Untuk men-debug masalah ini, gunakan konsol [AWS Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_Troubleshoot.html) atau jika menggunakan API, gunakan `GetCanaryRuns` API, dan unduh file untuk meninjau `*-log.txt` eksekusi log canary untuk mengetahui kesalahan. `ArtifactS3Location` Setelah validasi, modifikasi CloudFormation template dan coba lagi penerapan atau gunakan API di atas untuk memvalidasi.

Ketika nilainya`false`, sintetis tidak akan menjalankan dry run untuk memvalidasi perubahan dan akan langsung melakukan pembaruan Anda.

Untuk informasi tentang pemecahan masalah kenari yang gagal, lihat. [Memecahkan masalah canary yang gagal](CloudWatch_Synthetics_Canaries_Troubleshoot.md)

Contoh template.

```
SyntheticsCanary:
    Type: 'AWS::Synthetics::Canary'
    Properties:
      Name: MyCanary
      RuntimeVersion: syn-nodejs-puppeteer-10.0
      Schedule: {Expression: 'rate(5 minutes)', DurationInSeconds: 3600}
      ...
      DryRunAndUpdate: true
```

## Batasan
<a name="performing-safe-canary-upgrades-limitations"></a>
+ Mendukung versi runtime - syn-nodejs-puppeteer -10.0 \$1, syn-nodejs-playwright -2.0 \$1, -5.1 \$1, dan syn-nodejs-3.0 \$1 syn-python-selenium
+ Anda hanya dapat menjalankan satu dry run per kenari pada satu waktu
+ Ketika dry run gagal, Anda tidak dapat memperbarui kenari
+ Dry run tidak dapat menguji perubahan bidang **Jadwal**

**catatan**  
Saat Anda memulai dry run dengan perubahan kode untuk kenari Playwright dan Anda ingin memperbarui kenari tanpa memberikan yang terkait`DryRunId`, Anda harus secara eksplisit menentukan parameter kode.