Menggunakan pipeline OpenSearch Ingestion dengan Amazon DynamoDB - OpenSearch Layanan Amazon

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

Menggunakan pipeline OpenSearch Ingestion dengan Amazon DynamoDB

Anda dapat menggunakan pipeline OpenSearch Ingestion dengan DynamoDB untuk mengalirkan peristiwa tabel DynamoDB (seperti membuat, memperbarui, dan menghapus) ke domain dan koleksi Amazon Service. OpenSearch Pipeline OpenSearch Ingestion menggabungkan infrastruktur change data capture (CDC) untuk menyediakan cara berskala tinggi dan latensi rendah untuk terus mengalirkan data dari tabel DynamoDB.

Ada dua cara Anda dapat menggunakan DynamoDB sebagai sumber untuk memproses data—dengan dan tanpa snapshot awal penuh.

Snapshot awal lengkap adalah cadangan tabel yang diambil DynamoDB dengan point-in-time fitur recovery (). PITR DynamoDB mengunggah snapshot ini ke Amazon S3. Dari sana, pipa OpenSearch Ingestion mengirimkannya ke satu indeks dalam domain, atau mempartisinya ke beberapa indeks dalam domain. Untuk menjaga data di DynamoDB OpenSearch dan konsisten, pipeline menyinkronkan semua peristiwa buat, perbarui, dan hapus di tabel DynamoDB dengan dokumen yang disimpan dalam indeks atau indeks. OpenSearch

Saat Anda menggunakan snapshot awal penuh, pipeline OpenSearch Ingestion Anda pertama-tama akan menyerap snapshot dan kemudian mulai membaca data dari DynamoDB Streams. Ini akhirnya mengejar dan mempertahankan konsistensi data hampir real-time antara DynamoDB dan. OpenSearch Ketika Anda memilih opsi ini, Anda harus mengaktifkan keduanya PITR dan aliran DynamoDB di meja Anda.

Anda juga dapat menggunakan integrasi OpenSearch Ingestion dengan DynamoDB untuk melakukan streaming peristiwa tanpa snapshot. Pilih opsi ini jika Anda sudah memiliki snapshot lengkap dari beberapa mekanisme lain, atau jika Anda hanya ingin melakukan streaming peristiwa saat ini dari tabel DynamoDB dengan DynamoDB Streams. Ketika Anda memilih opsi ini, Anda hanya perlu mengaktifkan aliran DynamoDB di meja Anda.

Untuk informasi selengkapnya tentang integrasi ini, lihat DynamoDB nol ETL integrasi dengan OpenSearch Amazon Service di Amazon DynamoDB Panduan Pengembang.

Prasyarat

Untuk mengatur pipeline, Anda harus memiliki tabel DynamoDB dengan DynamoDB Streams diaktifkan. Streaming Anda harus menggunakan jenis tampilan NEW_IMAGE aliran. Namun, saluran pipa OpenSearch Ingestion juga dapat mengalirkan peristiwa NEW_AND_OLD_IMAGES jika jenis tampilan aliran ini sesuai dengan kasus penggunaan Anda.

Jika Anda menggunakan snapshot, Anda juga harus mengaktifkan point-in-time pemulihan di meja Anda. Untuk informasi selengkapnya, lihat Membuat tabel, Mengaktifkan point-in-time pemulihan, dan Mengaktifkan aliran di Panduan Pengembang Amazon DynamoDB.

Langkah 1: Konfigurasikan peran pipeline

Setelah tabel DynamoDB disiapkan, siapkan peran pipeline yang ingin Anda gunakan dalam konfigurasi pipeline, dan tambahkan izin DynamoDB berikut dalam peran:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allowRunExportJob", "Effect": "Allow", "Action": [ "dynamodb:DescribeTable", "dynamodb:DescribeContinuousBackups", "dynamodb:ExportTableToPointInTime" ], "Resource": [ "arn:aws:dynamodb:us-east-1:{account-id}:table/my-table" ] }, { "Sid": "allowCheckExportjob", "Effect": "Allow", "Action": [ "dynamodb:DescribeExport" ], "Resource": [ "arn:aws:dynamodb:us-east-1:{account-id}:table/my-table/export/*" ] }, { "Sid": "allowReadFromStream", "Effect": "Allow", "Action": [ "dynamodb:DescribeStream", "dynamodb:GetRecords", "dynamodb:GetShardIterator" ], "Resource": [ "arn:aws:dynamodb:us-east-1:{account-id}:table/my-table/stream/*" ] }, { "Sid": "allowReadAndWriteToS3ForExport", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:AbortMultipartUpload", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::my-bucket/{exportPath}/*" ] } ] }

Anda juga dapat menggunakan kunci yang dikelola AWS KMS pelanggan untuk mengenkripsi file data ekspor. Untuk mendekripsi objek yang diekspor, tentukan s3_sse_kms_key_id ID kunci dalam konfigurasi ekspor pipa dengan format berikut:. arn:aws:kms:us-west-2:{account-id}:key/my-key-id Kebijakan berikut mencakup izin yang diperlukan untuk menggunakan kunci yang dikelola pelanggan:

{ "Sid": "allowUseOfCustomManagedKey", "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": arn:aws:kms:us-west-2:{account-id}:key/my-key-id }

Langkah 2: Buat pipa

Anda kemudian dapat mengonfigurasi pipeline OpenSearch Ingestion seperti berikut ini, yang menentukan DynamoDB sebagai sumbernya. Pipeline sampel ini menyerap data dari table-a PITR snapshot, diikuti oleh peristiwa dari DynamoDB Streams. Posisi awal LATEST menunjukkan bahwa pipeline harus membaca data terbaru dari DynamoDB Streams.

version: "2" cdc-pipeline: source: dynamodb: tables: - table_arn: "arn:aws:dynamodb:us-west-2:{account-id}:table/table-a" export: s3_bucket: "my-bucket" s3_prefix: "export/" stream: start_position: "LATEST" aws: region: "us-west-2" sts_role_arn: "arn:aws:iam::{account-id}:role/pipeline-role" sink: - opensearch: hosts: ["https://search-mydomain.us-east-1.es.amazonaws.com"] index: "${getMetadata(\"table_name\")}" index_type: custom normalize_index: true document_id: "${getMetadata(\"primary_key\")}" action: "${getMetadata(\"opensearch_action\")}" document_version: "${getMetadata(\"document_version\")}" document_version_type: "external"

Anda dapat menggunakan cetak biru DynamoDB yang telah dikonfigurasi sebelumnya untuk membuat pipeline ini. Untuk informasi selengkapnya, lihat Menggunakan cetak biru untuk membuat pipeline.

Konsistensi data

OpenSearch Ingestion mendukung end-to-end pengakuan untuk memastikan daya tahan data. Ketika pipeline membaca snapshot atau stream, ia secara dinamis membuat partisi untuk pemrosesan paralel. Pipeline menandai partisi sebagai lengkap ketika menerima pengakuan setelah menelan semua catatan dalam OpenSearch domain atau koleksi.

Jika Anda ingin memasukkan ke dalam koleksi pencarian OpenSearch Tanpa Server, Anda dapat membuat ID dokumen di pipeline. Jika Anda ingin memasukkan koleksi deret waktu OpenSearch Tanpa Server, perhatikan bahwa pipeline tidak menghasilkan ID dokumen.

Pipeline OpenSearch Ingestion juga memetakan tindakan peristiwa yang masuk ke dalam tindakan pengindeksan massal yang sesuai untuk membantu menyerap dokumen. Ini membuat data tetap konsisten, sehingga setiap perubahan data di DynamoDB direkonsiliasi dengan perubahan dokumen yang sesuai. OpenSearch

Pemetaan tipe data

OpenSearch Layanan secara dinamis memetakan tipe data di setiap dokumen yang masuk ke tipe data yang sesuai di DynamoDB. Tabel berikut menunjukkan bagaimana OpenSearch Layanan secara otomatis memetakan berbagai tipe data.

Tipe data OpenSearch DynamoDB
Jumlah

OpenSearch secara otomatis memetakan data numerik. Jika angka tersebut adalah bilangan bulat, OpenSearch petakan sebagai nilai panjang. Jika angkanya pecahan, maka OpenSearch petakan sebagai nilai float.

OpenSearch secara dinamis memetakan berbagai atribut berdasarkan dokumen terkirim pertama. Jika Anda memiliki campuran tipe data untuk atribut yang sama di DynamoDB, seperti bilangan bulat dan bilangan pecahan, pemetaan mungkin gagal.

Misalnya, jika dokumen pertama Anda memiliki atribut yang merupakan bilangan bulat, dan dokumen selanjutnya memiliki atribut yang sama dengan angka pecahan, OpenSearch gagal untuk menelan dokumen kedua. Dalam kasus ini, Anda harus menyediakan template pemetaan eksplisit, seperti berikut ini:

{ "template": { "mappings": { "properties": { "MixedNumberAttribute": { "type": "float" } } } } }

Jika Anda membutuhkan presisi ganda, gunakan pemetaan bidang tipe string. Tidak ada tipe numerik setara yang mendukung 38 digit presisi dalam. OpenSearch

DynamoDB mendukung angka.

Jumlah set OpenSearch secara otomatis memetakan angka yang ditetapkan ke dalam array baik nilai panjang atau nilai float. Seperti halnya bilangan skalar, ini tergantung pada apakah angka pertama yang dicerna adalah bilangan bulat atau bilangan pecahan. Anda dapat memberikan pemetaan untuk kumpulan angka dengan cara yang sama seperti Anda memetakan string skalar.

DynamoDB mendukung jenis yang mewakili set angka.

String

OpenSearch secara otomatis memetakan nilai string sebagai teks. Dalam beberapa situasi, seperti nilai yang disebutkan, Anda dapat memetakan ke jenis kata kunci.

Contoh berikut menunjukkan bagaimana memetakan atribut DynamoDB PartType bernama untuk kata kunci. OpenSearch

{ "template": { "mappings": { "properties": { "PartType": { "type": "keyword" } } } } }

DynamoDB mendukung string.

Set string

OpenSearch secara otomatis memetakan string yang diatur ke dalam array string. Anda dapat memberikan pemetaan untuk set string dengan cara yang sama seperti Anda memetakan string skalar.

DynamoDB mendukung jenis yang mewakili set string.
Biner

OpenSearch secara otomatis memetakan data biner sebagai teks. Anda dapat memberikan pemetaan untuk menulis ini sebagai bidang OpenSearch biner.

Contoh berikut menunjukkan bagaimana memetakan atribut DynamoDB ImageData bernama ke OpenSearch bidang biner.

{ "template": { "mappings": { "properties": { "ImageData": { "type": "binary" } } } } }
DynamoDB mendukung atribut tipe biner.
Set biner

OpenSearch secara otomatis memetakan set biner ke dalam array data biner sebagai teks. Anda dapat memberikan pemetaan untuk kumpulan angka dengan cara yang sama seperti Anda memetakan biner skalar.

DynamoDB mendukung jenis yang mewakili set nilai biner.
Boolean

OpenSearch memetakan tipe DynamoDB Boolean ke dalam tipe Boolean. OpenSearch

DynamoDB mendukung atribut tipe Boolean.

Null

OpenSearch dapat menelan dokumen dengan tipe nol DynamoDB. Ini menyimpan nilai sebagai nilai nol dalam dokumen. Tidak ada pemetaan untuk jenis ini, dan bidang ini tidak diindeks atau dicari.

Jika nama atribut yang sama digunakan untuk tipe null dan kemudian berubah ke tipe yang berbeda seperti string, OpenSearch membuat pemetaan dinamis untuk nilai non-null pertama. Nilai selanjutnya masih bisa berupa nilai nol DynamoDB.

DynamoDB mendukung atribut tipe null.
Peta

OpenSearch memetakan atribut peta DynamoDB ke bidang bersarang. Pemetaan yang sama berlaku dalam bidang bersarang.

Contoh berikut memetakan string dalam bidang bersarang ke jenis kata kunci di OpenSearch:

{ "template": { "mappings": { "properties": { "AdditionalDescriptions": { "properties": { "PartType": { "type": "keyword" } } } } } } }
DynamoDB mendukung atribut tipe peta.
Daftar

OpenSearch memberikan hasil yang berbeda untuk daftar DynamoDB, tergantung pada apa yang ada dalam daftar.

Ketika daftar berisi semua jenis jenis skalar yang sama (misalnya, daftar semua string), kemudian OpenSearch mencerna daftar sebagai array dari jenis itu. Ini berfungsi untuk tipe string, number, Boolean, dan null. Pembatasan untuk masing-masing jenis ini sama dengan batasan untuk skalar jenis itu.

Anda juga dapat menyediakan pemetaan untuk daftar peta dengan menggunakan pemetaan yang sama seperti yang akan Anda gunakan untuk peta.

Anda tidak dapat memberikan daftar tipe campuran.

DynamoDB mendukung atribut tipe daftar.

Set

OpenSearch memberikan hasil yang berbeda untuk set DynamoDB tergantung pada apa yang ada di set.

Ketika sebuah set berisi semua jenis jenis skalar yang sama (misalnya, satu set semua string), kemudian OpenSearch menelan set sebagai array dari jenis itu. Ini berfungsi untuk tipe string, number, Boolean, dan null. Pembatasan untuk masing-masing jenis ini sama dengan batasan untuk skalar jenis itu.

Anda juga dapat menyediakan pemetaan untuk set peta dengan menggunakan pemetaan yang sama seperti yang akan Anda gunakan untuk peta.

Anda tidak dapat menyediakan satu set tipe campuran.

DynamoDB mendukung jenis yang mewakili set.

Kami menyarankan Anda mengonfigurasi antrian huruf mati (DLQ) di pipeline Ingestion Anda OpenSearch . Jika Anda telah mengonfigurasi antrian, OpenSearch Layanan mengirimkan semua dokumen gagal yang tidak dapat dicerna karena kegagalan pemetaan dinamis ke antrian.

Jika pemetaan otomatis gagal, Anda dapat menggunakan template_type dan template_content dalam konfigurasi pipeline untuk menentukan aturan pemetaan eksplisit. Atau, Anda dapat membuat templat pemetaan langsung di domain atau koleksi penelusuran sebelum memulai pipeline.

Batasan

Pertimbangkan batasan berikut saat Anda menyiapkan pipeline OpenSearch Ingestion untuk DynamoDB:

  • Integrasi OpenSearch Ingestion dengan DynamoDB saat ini tidak mendukung konsumsi lintas wilayah. Tabel DynamoDB OpenSearch dan pipa Ingestion Anda harus sama. Wilayah AWS

  • Tabel DynamoDB OpenSearch dan pipa Ingestion Anda harus sama. Akun AWS

  • Pipeline OpenSearch Ingestion hanya mendukung satu tabel DynamoDB sebagai sumbernya.

  • DynamoDB Streams hanya menyimpan data dalam log hingga 24 jam. Jika konsumsi dari snapshot awal tabel besar membutuhkan waktu 24 jam atau lebih, akan ada beberapa kehilangan data awal. Untuk mengurangi kehilangan data ini, perkirakan ukuran tabel dan konfigurasikan unit komputasi yang sesuai dari OpenSearch pipa Ingestion.

CloudWatch Alarm yang Disarankan untuk DynamoDB

CloudWatch Metrik berikut direkomendasikan untuk memonitiasi kinerja saluran konsumsi Anda. Metrik ini dapat membantu Anda mengidentifikasi jumlah data yang diproses dari ekspor, jumlah peristiwa yang diproses dari aliran, kesalahan dalam memproses ekspor dan peristiwa streaming, dan jumlah dokumen yang ditulis ke tujuan. Anda dapat mengatur CloudWatch alarm untuk melakukan tindakan ketika salah satu metrik ini melebihi nilai yang ditentukan untuk jangka waktu tertentu.

Metrik Deskripsi
dynamodb-pipeline.BlockingBuffer.bufferUsage.value

Menunjukkan berapa banyak buffer yang digunakan.

dynamodb-pipeline.dynamodb.activeExportS3ObjectConsumers.value

Menunjukkan jumlah total OCUs yang secara aktif memproses objek Amazon S3 untuk ekspor.

dynamodb-pipeline.dynamodb.bytesProcessed.count

Hitungan byte diproses dari sumber DynamoDB.

dynamodb-pipeline.dynamodb.changeEventsProcessed.count

Jumlah peristiwa perubahan diproses dari aliran DynamoDB.

dynamodb-pipeline.dynamodb.changeEventsProcessingErrors.count

Jumlah kesalahan dari peristiwa perubahan yang diproses dari DynamoDB.

dynamodb-pipeline.dynamodb.exportJobFailure.count Jumlah upaya pengajuan pekerjaan ekspor yang gagal.
dynamodb-pipeline.dynamodb.exportJobSuccess.count Jumlah pekerjaan ekspor yang telah berhasil diajukan.
dynamodb-pipeline.dynamodb.exportRecordsProcessed.count

Jumlah total catatan yang diproses dari ekspor.

dynamodb-pipeline.dynamodb.exportRecordsTotal.count

Jumlah total catatan yang diekspor dari DynamoDB, penting untuk melacak volume ekspor data.

dynamodb-pipeline.dynamodb.exportS3ObjectsProcessed.count Jumlah total file data ekspor yang telah berhasil diproses dari Amazon S3.
dynamodb-pipeline.opensearch.bulkBadRequestErrors.count Hitungan kesalahan selama permintaan massal karena permintaan yang salah.
dynamodb-pipeline.opensearch.bulkRequestLatency.avg Latensi rata-rata untuk permintaan penulisan massal yang dibuat ke OpenSearch.
dynamodb-pipeline.opensearch.bulkRequestNotFoundErrors.count Jumlah permintaan massal yang gagal karena data target tidak dapat ditemukan.
dynamodb-pipeline.opensearch.bulkRequestNumberOfRetries.count Jumlah percobaan ulang oleh pipa OpenSearch Ingestion untuk menulis cluster. OpenSearch
dynamodb-pipeline.opensearch.bulkRequestSizeBytes.sum Ukuran total dalam byte dari semua permintaan massal yang dibuat untuk OpenSearch.
dynamodb-pipeline.opensearch.documentErrors.count Jumlah kesalahan saat mengirim dokumen ke OpenSearch. Dokumen yang menyebabkan kesalahan akan dikirim keDLQ.
dynamodb-pipeline.opensearch.documentsSuccess.count Jumlah dokumen yang berhasil ditulis ke OpenSearch cluster atau koleksi.
dynamodb-pipeline.opensearch.documentsSuccessFirstAttempt.count Jumlah dokumen yang berhasil diindeks OpenSearch pada upaya pertama.

dynamodb-pipeline.opensearch.documentsVersionConflictErrors.count

Hitungan kesalahan karena konflik versi dalam dokumen selama pemrosesan.

dynamodb-pipeline.opensearch.PipelineLatency.avg

Latensi rata-rata pipa OpenSearch Ingestion untuk memproses data dengan membaca dari sumber untuk menulis ke tujuan.
dynamodb-pipeline.opensearch.PipelineLatency.max Latensi maksimum pipa OpenSearch Ingestion untuk memproses data dengan membaca dari sumber hingga menulis tujuan.
dynamodb-pipeline.opensearch.recordsIn.count Hitungan catatan yang berhasil dicerna OpenSearch. Metrik ini penting untuk melacak volume data yang sedang diproses dan disimpan.
dynamodb-pipeline.opensearch.s3.dlqS3RecordsFailed.count Jumlah catatan yang gagal untuk menulisDLQ.
dynamodb-pipeline.opensearch.s3.dlqS3RecordsSuccess.count Jumlah catatan yang ditulis untukDLQ.
dynamodb-pipeline.opensearch.s3.dlqS3RequestLatency.count Hitungan pengukuran latensi untuk permintaan ke antrean huruf mati Amazon S3.
dynamodb-pipeline.opensearch.s3.dlqS3RequestLatency.sum Latensi total untuk semua permintaan ke antrian surat mati Amazon S3
dynamodb-pipeline.opensearch.s3.dlqS3RequestSizeBytes.sum Ukuran total dalam byte dari semua permintaan yang dibuat ke antrian surat mati Amazon S3.
dynamodb-pipeline.recordsProcessed.count Jumlah total catatan yang diproses dalam pipeline, metrik kunci untuk throughput keseluruhan.
dynamodb.changeEventsProcessed.count Tidak ada catatan yang dikumpulkan dari aliran DynamoDB. Ini mungkin karena tidak ada aktivitas di atas meja, ekspor sedang berlangsung, atau masalah saat mengakses aliran DynamoDB.

dynamodb.exportJobFailure.count

Upaya untuk memicu ekspor ke S3 gagal.

line.opensearch.bulkRequestInvalidInputErrors.count

Jumlah kesalahan permintaan massal OpenSearch karena input tidak valid, penting untuk memantau kualitas data dan masalah operasional.
opensearch.EndToEndLatency.avg Latnecy ujung ke ujung lebih tinggi dari yang diinginkan untuk membaca dari aliran DynamoDB. Ini bisa disebabkan oleh OpenSearch cluster underscaled atau OCU kapasitas pipa maksimum yang terlalu rendah untuk WCU throughput pada tabel DynamoDB. Latensi ujung ke ujung ini akan tinggi setelah ekspor dan akan berkurang seiring waktu karena mengikuti aliran DynamoDB terbaru.