

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

# Buatlah sebuah konektor kustom ke sebuah sumber data
<a name="CloudWatch_MultiDataSources-Connect-Custom"></a>

 Topik ini menjelaskan cara menghubungkan sumber data kustom ke CloudWatch. Anda dapat menghubungkan sumber data kustom dengan dua CloudWatch cara: 
+  Menggunakan contoh template yang CloudWatch menyediakan. Anda dapat menggunakan salah satu JavaScript atau Python dengan template ini. Template ini mencakup contoh kode Lambda yang akan berguna bagi Anda saat Anda membuat fungsi Lambda Anda. Anda kemudian dapat memodifikasi fungsi Lambda dari template untuk terhubung ke sumber data kustom Anda. 
+  Membuat AWS Lambda fungsi dari awal yang mengimplementasikan konektor sumber data, kueri data, dan persiapan deret waktu untuk digunakan oleh CloudWatch. Fungsi ini harus melakukan pra-agregat atau menggabungkan titik data jika diperlukan, dan juga menyelaraskan periode dan stempel waktu agar kompatibel dengannya. CloudWatch 

**Contents**
+ [Gunakan sebuah templat](#CloudWatch_MultiDataSources-Connect-Custom-template)
+ [Buat sebuah sumber data kustom dari awal](#CloudWatch_MultiDataSources-Connect-Custom-Lambda)
  + [Langkah 1: Membuat fungsi](#MultiDataSources-Connect-Custom-Lambda-Function)
    + [GetMetricData acara](#MultiDataSources-GetMetricData)
    + [DescribeGetMetricData acara](#MultiDataSources-DescribeGetMetricData)
    + [Pertimbangan penting untuk alarm CloudWatch](#MultiDataSources-Connect-Custom-Lambda-Alarms)
    + [(Opsional) Gunakan AWS Secrets Manager untuk menyimpan kredensil](#MultiDataSources-Connect-Custom-Lambda-Secrets)
    + [(Opsional) Hubungkan ke sebuah sumber data dalam sebuah VPC](#MultiDataSources-Connect-Custom-Lambda-VPC)
  + [Langkah 2: Membuat Kebijakan Izin Lambda](#MultiDataSources-Connect-Custom-Lambda-Permissions)
  + [Langkah 3: Melampirkan sebuah tanda sumber daya ke fungsi Lambda](#MultiDataSources-Connect-Custom-Lambda-tags)

## Gunakan sebuah templat
<a name="CloudWatch_MultiDataSources-Connect-Custom-template"></a>

Menggunakan sebuah template untuk membuat sebuah contoh fungsi Lambda, dan membantu Anda membuat konektor kustom Anda dibangun lebih cepat. Fungsi sampel ini menyediakan kode sampel untuk banyak skenario umum yang terlibat dengan pembuatan konektor khusus. Anda dapat memeriksa kode Lambda setelah Anda membuat sebuah konektor dengan templat, lalu memodifikasinya untuk digunakan untuk terhubung ke sumber data Anda.

Selain itu, jika Anda menggunakan template, CloudWatch berhati-hatilah dalam membuat kebijakan izin Lambda dan melampirkan tag sumber daya ke fungsi Lambda.

**Gunakan template untuk membuat sebuah konektor ke sebuah sumber data kustom.**

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

1. Pada panel navigasi, silakan pilih **Pengaturan**.

1. Pilih tab **Sumber data metrik**.

1. Pilih **Buat sumber data**.

1. Pilih tombol radio untuk **Kustom - memulai template** dan kemudian pilih **Berikutnya**.

1. Masukkan sebuah nama untuk sumber data.

1. Pilih salah satu template yang terdaftar.

1. Pilih Node.js atau Python.

1. Pilih **Buat sumber data**.

   Sumber kustom baru yang baru saja Anda tambahkan tidak muncul sampai CloudFormation tumpukan selesai membuatnya. Untuk memeriksa kemajuan, Anda dapat memilih **Lihat status CloudFormation tumpukan saya**. Atau Anda dapat memilih ikon muat ulang untuk memperbarui daftar ini.

   Ketika sumber data baru Anda muncul dalam daftar ini, maka siap untuk diujicoba di konsol dan dimodifikasi. 

1. (Opsional) Untuk menjalankan kueri data pengujian dari sumber ini di konsol, ikuti instruksi di [Membuat sebuah grafik metrik dari sumber data lain](graph_a_metric.md#create-metric-graph-multidatasource).

1. Ubah fungsi Lambda untuk kebutuhan Anda. 

   1. Pada panel navigasi, silakan pilih **Pengaturan**.

   1. Pilih tab **Sumber data metrik**.

   1. Pilih **Lihat di konsol Lambda** untuk sumber yang ingin Anda ubah.

   Sekarang Anda dapat memodifikasi fungsi untuk mengakses sumber data Anda. Untuk informasi selengkapnya, lihat [Langkah 1: Membuat fungsi](#MultiDataSources-Connect-Custom-Lambda-Function).
**catatan**  
Dengan menggunakan templat, ketika Anda menulis fungsi Lambda Anda, Anda tidak perlu mengikuti instruksi di [Langkah 2: Membuat Kebijakan Izin Lambda](#MultiDataSources-Connect-Custom-Lambda-Permissions) atau [Langkah 3: Melampirkan sebuah tanda sumber daya ke fungsi Lambda](#MultiDataSources-Connect-Custom-Lambda-tags). Langkah-langkah ini dilakukan oleh CloudWatch karena Anda menggunakan template.

## Buat sebuah sumber data kustom dari awal
<a name="CloudWatch_MultiDataSources-Connect-Custom-Lambda"></a>

Ikuti langkah-langkah di bagian ini untuk membuat fungsi Lambda yang terhubung CloudWatch ke sumber data. 

### Langkah 1: Membuat fungsi
<a name="MultiDataSources-Connect-Custom-Lambda-Function"></a>

Konektor sumber data khusus harus mendukung `GetMetricData` peristiwa dari CloudWatch. Secara opsional, Anda juga dapat mengimplementasikan `DescribeGetMetricData` acara untuk memberikan dokumentasi kepada pengguna di CloudWatch konsol tentang cara menggunakan konektor. `DescribeGetMetricData`Respons juga dapat digunakan untuk mengatur default yang digunakan dalam pembuat kueri CloudWatch kustom.

CloudWatch menyediakan cuplikan kode sebagai contoh untuk membantu Anda memulai. Untuk informasi lebih lanjut, lihat repositori sampel di. [https://github.com/aws-samples/cloudwatch-data-source-samples](https://github.com/aws-samples/cloudwatch-data-source-samples)

**Kekurangan**
+ Respons dari Lambda harus lebih kecil dari 6 Mb. Jika respons melebihi 6 Mb, respons `GetMetricData` akan menandai fungsi Lambda sebagai `InternalError` dan tidak ada data yang dikembalikan.
+ Fungsi Lambda harus menyelesaikan pelaksanaan dalam waktu 10 detik untuk tujuan visualisasi dan dasbor, atau dalam 4,5 detik untuk penggunaan alarm. Jika respons melebihi itu, respons `GetMetricData` akan menandai fungsi Lambda sebagai `InternalError` dan tidak ada data yang dikembalikan.
+ Fungsi Lambda harus mengirimkan hasil akhirnya menggunakan stempel waktu dalam masa hitungan detik.
+ Jika fungsi Lambda tidak mengambil sampel ulang data dan sebaliknya mengembalikan data yang tidak sesuai dengan waktu mulai dan panjang periode yang diminta oleh CloudWatch pengguna, data tersebut akan diabaikan oleh. CloudWatch Data tambahan dibuang dari visualisasi atau pengaturan alarm apapun. Data apa pun yang tidak berada di antara waktu mulai dan waktu akhir juga dibuang.

  Sebagai contoh, jika seorang pengguna meminta data dari pukul 10:00 hingga 11:00 dengan jangka waktu 5 menit, maka "10:00:00 hingga 10:04:59" dan "10:05:00 hingga 10:09:59" adalah rentang waktu yang valid untuk data yang akan dikembalikan. Anda harus mengembalikan sebuah deret waktu yang mencakup `10:00 value1`, `10:05 value2`, dan sebagainya. Jika fungsi tersebut mengembalikan `10:03 valueX`, misalnya, maka fungsi akan jatuh karena 10:03 tidak sesuai dengan waktu mulai dan periode yang diminta.
+ Kueri multi-baris tidak didukung oleh konektor sumber CloudWatch data. Setiap umpan baris digantikan dengan sebuah ruang saat kueri dijalankan, atau saat Anda membuat sebuah alarm atau widget dasbor dengan kuerinya. Dalam beberapa kasus, ini mungkin membuat kueri Anda tidak valid.

#### GetMetricData acara
<a name="MultiDataSources-GetMetricData"></a>

**Meminta muatan**

Berikut ini adalah contoh muatan permintaan `GetMetricData` yang dikirimkan sebagai input ke fungsi Lambda.

```
{
  "EventType": "GetMetricData",
  "GetMetricDataRequest": {
    "StartTime": 1697060700,
    "EndTime": 1697061600,
    "Period": 300,
    "Arguments": ["serviceregistry_external_http_requests{host_cluster!=\"prod\"}"] 
  }
}
```
+ **StartTime**— Stempel waktu yang menentukan data paling awal untuk dikembalikan. **Jenis** adalah stempel waktu masa detik.
+ **EndTime**— Stempel waktu yang menentukan data terbaru yang akan dikembalikan. **Jenis** adalah stempel waktu masa detik.
+ **Periode** – Jumlah detik yang diwakili oleh setiap kumpulan data metrik. Minimal adalah 60 detik. **Jenis** masa adalah detik.
+ **Argumen** – Serangkaian argumen yang akan diteruskan ke ekspresi matematika metrik Lambda. Untuk informasi selengkapnya tentang argumen yang diteruskan, silakan lihat [Cara meneruskan argumen ke fungsi Lambda Anda](CloudWatch_MultiDataSources-Custom-Use.md#MultiDataSources-Connect-Custom-Lambda-arguments).

**Muatan respons**

Berikut ini adalah contoh muatan respons `GetMetricData` yang dikembalikan oleh fungsi Lambda.

```
{
   "MetricDataResults": [
      {
         "StatusCode": "Complete",
         "Label": "CPUUtilization",
         "Timestamps": [ 1697060700, 1697061000, 1697061300 ],
         "Values": [ 15000, 14000, 16000 ]
      }
   ]
}
```

Muatan respons ini akan berisi bidang `MetricDataResults` atau bidang `Error`, tetapi tidak keduanya.

Bidang `MetricDataResults` adalah daftar bidang-bidang deret waktu jenis `MetricDataResult`. Masing-masing bidang deret waktu tersebut dapat mencakup bidang-bidang berikut ini.
+ **StatusCode**— (Opsional) `Complete` menunjukkan bahwa semua titik data dalam rentang waktu yang diminta dikembalikan. `PartialData`berarti bahwa satu set titik data yang tidak lengkap dikembalikan. Jika ini dihilangkan, defaultnya adalah `Complete`.

  Nilai yang valid: `Complete` \$1 `InternalError` \$1 `PartialData` \$1 `Forbidden`
+ **Pesan** – Daftar pesan opsional dengan informasi tambahan tentang data yang dikembalikan.

  Jenis: Array [MessageData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MessageData.html)objek dengan `Code` dan `Value` string.
+ **Label** – Label yang dapat dibaca manusia yang terkait dengan data.

  Tipe: String
+ **Stempel waktu** – Stempel waktu untuk titik data, yang diformat dalam waktu masa. Jumlah stempel waktu selalu cocok dengan jumlah nilai dan nilai untuk `Timestamps[x]` adalah `Values[x`].

  Tipe: Array stempel waktu
+ **Nilai–Nilai** – Nilai titik data untuk metrik, yang sesuai dengan `Timestamps`. Jumlah nilai selalu cocok dengan jumlah stempel waktu dan nilai untuk `Timestamps[x]` adalah `Values[x`].

  Tipe: Array ganda

Untuk informasi selengkapnya tentang objek `Error`, silakan lihat bagian-bagian berikut.

**Format respons kesalahan**

Anda dapat secara opsional menggunakan respons kesalahan untuk memberikan informasi lebih lanjut tentang kesalahan. Kami menyarankan Anda mengembalikan kesalahan dengan Validasi Kode ketika kesalahan validasi terjadi, seperti ketika sebuah parameter hilang atau jenis parameter salah.

Berikut ini adalah contoh respon ketika fungsi Lambda ingin memunculkan pengecualian validasi `GetMetricData`.

```
{
   "Error": {
      "Code": "Validation",
      "Value": "Invalid Prometheus cluster"
   }
}
```

Berikut ini adalah contoh respons ketika fungsi Lambda mengindikasikn bahwa fungsi Lambda tidak dapat mengembalikan data karena masalah akses. Respons diterjemahkan ke dalam satu deret waktu dengan kode status `Forbidden`.

```
{
   "Error": {
      "Code": "Forbidden",
      "Value": "Unable to access ..."
   }
}
```

Berikut ini adalah sebuah contoh ketika fungsi Lambda memunculkan pengecualian `InternalError` keseluruhan, yang diterjemahkan ke dalam sebuah rangkaian waktu tunggal dengan kode status `InternalError` dan sebuah pesan. Setiap kali kode kesalahan memiliki nilai selain `Validation` atau`Forbidden`, CloudWatch mengasumsikan bahwa itu adalah kesalahan internal generik.

```
{
   "Error": {
      "Code": "PrometheusClusterUnreachable",
      "Value": "Unable to communicate with the cluster"
   }
}
```

#### DescribeGetMetricData acara
<a name="MultiDataSources-DescribeGetMetricData"></a>

**Meminta muatan**

Berikut ini adalah contoh muatan permintaan `DescribeGetMetricData`.

```
{
  "EventType": "DescribeGetMetricData"
}
```

**Muatan respons**

Berikut ini adalah contoh muatan respons `DescribeGetMetricData`.

```
{
    "Description": "Data source connector",
    "ArgumentDefaults": [{
        Value: "default value"
     }]
}
```
+ **Deskripsi** – Sebuah deskripsi tentang cara menggunakan konektor sumber data. Deskripsi ini akan muncul di CloudWatch konsol. Markdown didukung.

  Tipe: String
+ **ArgumentDefaults**— Array opsional nilai default argumen yang digunakan pra-mengisi pembuat sumber data kustom.

  Jika`[{ Value: "default value 1"}, { Value: 10}]`, dikembalikan, pembuat kueri di CloudWatch konsol menampilkan dua input, yang pertama dengan “nilai default 1" dan yang kedua dengan 10.

  Jika `ArgumentDefaults` tidak tersedia, satu input tunggal akan ditampilkan dengan jenis default yang disetel ke `String`.

  Tipe: Array objek yang mengandung Nilai dan Tipe. 
+ **Kesalahan** – (Opsional) Sebuah bidang kesalahan dapat dimasukkan dalam respons apa pun. Anda dapat melihat contoh di [GetMetricData acara](#MultiDataSources-GetMetricData).

#### Pertimbangan penting untuk alarm CloudWatch
<a name="MultiDataSources-Connect-Custom-Lambda-Alarms"></a>

 Jika Anda akan menggunakan sumber data untuk mengatur CloudWatch alarm, Anda harus mengaturnya untuk melaporkan data dengan stempel waktu setiap menit. CloudWatch Untuk informasi selengkapnya dan pertimbangan lain untuk membuat alarm pada metrik dari sumber data yang terhubung, silakan lihat [Membuat sebuah alarm berdasarkan pada sumber data yang terhubung](Create_MultiSource_Alarm.md).

#### (Opsional) Gunakan AWS Secrets Manager untuk menyimpan kredensil
<a name="MultiDataSources-Connect-Custom-Lambda-Secrets"></a>

Jika fungsi Lambda Anda perlu menggunakan kredensional untuk mengakses sumber data, sebaiknya gunakan untuk menyimpan kredensial-kredensi ini alih-alih AWS Secrets Manager mengkodekannya ke dalam fungsi Lambda Anda. Untuk informasi selengkapnya tentang penggunaan AWS Secrets Manager dengan Lambda, lihat [Menggunakan AWS Secrets Manager rahasia dalam AWS Lambda fungsi](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets_lambda.html). 

#### (Opsional) Hubungkan ke sebuah sumber data dalam sebuah VPC
<a name="MultiDataSources-Connect-Custom-Lambda-VPC"></a>

Jika sumber data Anda berada dalam sebuah VPC yang dikelola oleh Cloud Privat Virtual Amazon, Anda harus mengonfigurasi fungsi Lambda Anda untuk mengaksesnya. Untuk informasi selengkapnya, silakan lihat [Menghubungkan jaringan keluar ke sumber daya di VPC](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html).

Anda mungkin juga perlu mengonfigurasi titik akhir layanan VPC untuk mengakses layanan seperti AWS Secrets Manager. Untuk informasi selengkapnya, lihat [Mengakses AWS layanan menggunakan titik akhir VPC antarmuka](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#access-service-though-endpoint).

### Langkah 2: Membuat Kebijakan Izin Lambda
<a name="MultiDataSources-Connect-Custom-Lambda-Permissions"></a>

Anda harus menggunakan buat pernyataan kebijakan yang memberikan CloudWatch izin untuk menggunakan fungsi Lambda yang Anda buat. Anda dapat menggunakan AWS CLI atau konsol Lambda untuk membuat pernyataan kebijakan.

**Untuk menggunakan AWS CLI untuk membuat pernyataan kebijakan**
+ Masukkan perintah berikut. Ganti *123456789012* dengan ID akun Anda, ganti *my-data-source-function* dengan nama fungsi Lambda Anda, dan ganti *MyDataSource-DataSourcePermission1234* dengan nilai unik arbitrer.

  ```
  aws lambda add-permission --function-name my-data-source-function --statement-id MyDataSource-DataSourcePermission1234 --action lambda:InvokeFunction --principal lambda.datasource.cloudwatch.amazonaws.com --source-account 123456789012
  ```

### Langkah 3: Melampirkan sebuah tanda sumber daya ke fungsi Lambda
<a name="MultiDataSources-Connect-Custom-Lambda-tags"></a>

 CloudWatch Konsol menentukan fungsi Lambda mana yang merupakan konektor sumber data dengan menggunakan tag. Saat Anda membuat sumber data menggunakan salah satu wizard, tag secara otomatis diterapkan oleh CloudFormation tumpukan yang mengonfigurasinya. Saat Anda membuat sumber data sendiri, maka Anda dapat menggunakan tanda berikut untuk fungsi Lambda Anda. Ini membuat konektor Anda muncul di dropdown **sumber data** di CloudWatch konsol saat Anda melakukan kueri metrik.
+ Tanda dengan `cloudwatch:datasource` sebagai kunci dan `custom` sebagai nilai.