

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

# 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\_]\*$ | 
| 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\_-] \*$
+ Panjang maksimum - 64 karakter
+ Harus dimulai dengan surat

 *Penomoran langkah* 
+ Langkah-langkah diberi nomor sebagai tombol string: “1", “2",..., “10"
+ Pola: ^ ([1-9] \|10) $
+ 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"
    }
  ]
}
```

### Cek 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\_KEY" | 
|  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\_CLIENT\_CREDENTIALS" | 
|  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\_AUTH\_HEADER, REQUEST\_BODY | 
|  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\_CODE" | 
|  operator  | string |  Ya  | EQUALS, NOT\_EQUALS, GREATER\_THAN,  LESS\_THAN, IN\_RANGE | 
|  value  | bilangan bulat | Bersyarat | Kode status HTTP (100-599) | 
|  rangeMin  | integer | Bersyarat | Nilai rentang minimum (untukIN\_RANGE) | 
|  rangeMax  | integer | Bersyarat | Nilai rentang maksimum (untukIN\_RANGE) | 

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

 **Pernyataan waktu respons** 


| Properti | Tipe | Diperlukan | Default | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Ya  | - | Harus "RESPONSE\_TIME" | 
|  operator  | string |  Ya  | - | LESS\_THAN, GREATER\_THAN, 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\_EQUALS, CONTAINS,  NOT\_CONTAINS, REGEX\_MATCH, 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\_CONTAINS, EQUALS,  NOT\_EQUALS, 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\_VALUE" | 
|  operator  | string |  Ya  | - | EQUALS, NOT\_EQUALS, CONTAINS,  NOT\_CONTAINS, REGEX\_MATCH | 
|  value  | string |  Ya  | - | Nilai rekor yang diharapkan | 

 **Rekam penegasan hitungan** 


| Properti | Tipe | Diperlukan | Kisaran | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Ya  | - | Harus "RECORD\_COUNT" | 
|  operator  | string |  Ya  | - | EQUALS, GREATER\_THAN, LESS\_THAN | 
|  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\_THAN, LESS\_THAN | 
|  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\_EXPIRY" | 
|  operator  | string |  Ya  | - | GREATER\_THAN, LESS\_THAN | 
|  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\_SUBJECT" | 
|  field  | string |  Ya  | - | Bidang subjek:CN,O,OU,C,ST, L | 
|  operator  | string |  Ya  | - | CONTAINS, EQUALS, REGEX\_MATCH | 
|  value  | string |  Ya  | - | Nilai bidang yang diharapkan | 

 **Pernyataan penerbit sertifikat** 


| Properti | Tipe | Diperlukan | Default | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Ya  | - | Harus "CERTIFICATE\_ISSUER" | 
|  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\_SUCCESSFUL" | 
|  value  | boolean |  Ya  | - | Status koneksi yang diharapkan | 

 **Pernyataan data respons** 


| Properti | Tipe | Diperlukan | Default | Deskripsi | 
| --- | --- | --- | --- | --- | 
|  type  | string |  Ya  | - | Harus "RESPONSE\_DATA" | 
|  operator  | string |  Ya  | - | CONTAINS, EQUALS, NOT\_CONTAINS,  REGEX\_MATCH, STARTS\_WITH, ENDS\_WITH | 
|  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}"
    }
  ]
}
```