Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Salin tabel Amazon DynamoDB di seluruh akun menggunakan implementasi kustom
Ramkumar Ramanujam, Amazon Web Services
Ringkasan
Saat bekerja dengan Amazon DynamoDB di Amazon Web Services (AWS), kasus penggunaan umum adalah menyalin atau menyinkronkan tabel DynamoDB dalam lingkungan pengembangan, pengujian, atau pementasan dengan data tabel yang ada di lingkungan produksi. Sebagai praktik standar, setiap lingkungan menggunakan akun AWS yang berbeda.
DynamoDB sekarang mendukung pencadangan lintas akun menggunakan AWS Backup. Untuk informasi tentang biaya penyimpanan terkait saat menggunakan AWS Backup, lihat harga AWS Backup
Anda juga dapat menggunakan Amazon DynamoDB Streams untuk menangkap perubahan tabel di akun sumber. Kemudian Anda dapat memulai fungsi AWS Lambda, dan membuat perubahan yang sesuai pada tabel target di akun target. Tetapi solusi itu berlaku untuk kasus penggunaan di mana tabel sumber dan target harus selalu disinkronkan. Ini mungkin tidak berlaku untuk pengembangan, pengujian, dan lingkungan pementasan di mana data sering diperbarui.
Pola ini menyediakan langkah-langkah untuk menerapkan solusi khusus untuk menyalin tabel Amazon DynamoDB dari satu akun ke akun lainnya. Pola ini dapat diimplementasikan menggunakan bahasa pemrograman umum seperti C #, Java, dan Python. Sebaiknya gunakan bahasa yang didukung oleh AWS SDK
Prasyarat dan batasan
Prasyarat
Dua akun AWS aktif
Tabel DynamoDB di kedua akun
Pengetahuan tentang peran dan kebijakan AWS Identity and Access Management (IAM)
Pengetahuan tentang cara mengakses tabel Amazon DynamoDB menggunakan bahasa pemrograman umum, seperti C #, Java, atau Python
Batasan
Pola ini berlaku untuk tabel DynamoDB yang berukuran sekitar 2 GB atau lebih kecil. Dengan logika tambahan untuk menangani koneksi atau interupsi sesi, pelambatan, dan kegagalan dan percobaan ulang, ini dapat digunakan untuk tabel yang lebih besar.
Operasi pemindaian DynamoDB, yang membaca item dari tabel sumber, hanya dapat mengambil hingga 1 MB data dalam satu panggilan. Untuk tabel yang lebih besar, lebih besar dari 2 GB, batasan ini dapat meningkatkan total waktu untuk melakukan salinan tabel lengkap.
Arsitektur
Diagram berikut menunjukkan implementasi kustom antara sumber dan target akun AWS. Kebijakan IAM dan token keamanan digunakan dengan implementasi khusus. Data dibaca dari Amazon DynamoDB di akun sumber dan ditulis ke DynamoDB di akun target.

Otomatisasi dan skala
Pola ini berlaku untuk tabel DynamoDB yang ukurannya lebih kecil, sekitar 2 GB.
Untuk menerapkan pola ini untuk tabel yang lebih besar, atasi masalah berikut:
Selama operasi penyalinan tabel, dua sesi aktif dipertahankan, menggunakan token keamanan yang berbeda. Jika operasi penyalinan tabel memakan waktu lebih lama dari waktu kedaluwarsa token, Anda harus menerapkan logika untuk menyegarkan token keamanan.
Jika unit kapasitas baca (RCUs) dan unit kapasitas tulis (WCUs) tidak disediakan, pembacaan atau penulisan pada tabel sumber atau target mungkin terhambat. Pastikan untuk menangkap dan menangani pengecualian ini.
Tangani kegagalan atau pengecualian lain dan letakkan mekanisme coba lagi untuk mencoba lagi atau melanjutkan dari tempat operasi penyalinan gagal.
Alat
Alat
Amazon DynamoDB - Amazon DynamoDB adalah layanan database NoSQL yang dikelola sepenuhnya yang memberikan kinerja yang cepat dan dapat diprediksi dengan skalabilitas yang mulus.
Alat tambahan yang diperlukan akan berbeda berdasarkan bahasa pemrograman yang Anda pilih untuk implementasi. Misalnya, jika Anda menggunakan C #, Anda memerlukan Microsoft Visual Studio dan NuGet paket-paket berikut:
AWSSDKAWSSDK.DynamoDBv2
Kode
Cuplikan kode Python berikut menghapus dan membuat ulang tabel DynamoDB menggunakan perpustakaan Boto3.
Jangan gunakan AWS_ACCESS_KEY_ID dan AWS_SECRET_ACCESS_KEY pengguna IAM karena ini adalah kredensil jangka panjang, yang harus dihindari untuk akses terprogram ke layanan AWS. Untuk informasi selengkapnya tentang kredensil sementara, lihat bagian Praktik terbaik.
Cuplikan kode berikut AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY,, dan TEMPORARY_SESSION_TOKEN digunakan dalam cuplikan kode berikut adalah kredensil sementara yang diambil dari AWS Security Token Service (AWS STS).
import boto3 import sys import json #args = input-parameters = GLOBAL_SEC_INDEXES_JSON_COLLECTION, ATTRIBUTES_JSON_COLLECTION, TARGET_DYNAMODB_NAME, TARGET_REGION, ... #Input param: GLOBAL_SEC_INDEXES_JSON_COLLECTION #[{"IndexName":"Test-index","KeySchema":[{"AttributeName":"AppId","KeyType":"HASH"},{"AttributeName":"AppType","KeyType":"RANGE"}],"Projection":{"ProjectionType":"INCLUDE","NonKeyAttributes":["PK","SK","OwnerName","AppVersion"]}}] #Input param: ATTRIBUTES_JSON_COLLECTION #[{"AttributeName":"PK","AttributeType":"S"},{"AttributeName":"SK","AttributeType":"S"},{"AttributeName":"AppId","AttributeType":"S"},{"AttributeName":"AppType","AttributeType":"N"}] region = args['TARGET_REGION'] target_ddb_name = args['TARGET_DYNAMODB_NAME'] global_secondary_indexes = json.loads(args['GLOBAL_SEC_INDEXES_JSON_COLLECTION']) attribute_definitions = json.loads(args['ATTRIBUTES_JSON_COLLECTION']) # Drop and create target DynamoDB table dynamodb_client = boto3.Session( aws_access_key_id=args['AWS_ACCESS_KEY_ID'], aws_secret_access_key=args['AWS_SECRET_ACCESS_KEY'], aws_session_token=args['TEMPORARY_SESSION_TOKEN'], ).client('dynamodb') # Delete table print('Deleting table: ' + target_ddb_name + ' ...') try: dynamodb_client.delete_table(TableName=target_ddb_name) #Wait for table deletion to complete waiter = dynamodb_client.get_waiter('table_not_exists') waiter.wait(TableName=target_ddb_name) print('Table deleted.') except dynamodb_client.exceptions.ResourceNotFoundException: print('Table already deleted / does not exist.') pass print('Creating table: ' + target_ddb_name + ' ...') table = dynamodb_client.create_table( TableName=target_ddb_name, KeySchema=[ { 'AttributeName': 'PK', 'KeyType': 'HASH' # Partition key }, { 'AttributeName': 'SK', 'KeyType': 'RANGE' # Sort key } ], AttributeDefinitions=attribute_definitions, GlobalSecondaryIndexes=global_secondary_indexes, BillingMode='PAY_PER_REQUEST' ) waiter = dynamodb_client.get_waiter('table_exists') waiter.wait(TableName=target_ddb_name) print('Table created.')
Praktik terbaik
Kredensial sementara
Sebagai praktik keamanan terbaik, saat mengakses layanan AWS secara terprogram, hindari menggunakan AWS_ACCESS_KEY_ID dan AWS_SECRET_ACCESS_KEY pengguna IAM karena ini adalah kredensil jangka panjang. Selalu coba gunakan kredensil sementara untuk mengakses layanan AWS secara terprogram.
Sebagai contoh, pengembang hardcode AWS_ACCESS_KEY_ID dan AWS_SECRET_ACCESS_KEY pengguna IAM dalam aplikasi selama pengembangan tetapi gagal menghapus nilai hardcode sebelum mendorong perubahan ke repositori kode. Kredensi yang terbuka ini dapat digunakan oleh pengguna yang tidak diinginkan atau jahat, yang dapat memiliki implikasi serius (terutama jika kredensil yang terekspos memiliki hak istimewa admin). Kredensi yang terbuka ini harus segera dinonaktifkan atau dihapus dengan menggunakan konsol IAM atau AWS Command Line Interface (AWS CLI).
Untuk mendapatkan kredensi sementara untuk akses terprogram ke layanan AWS, gunakan AWS STS. Kredensi sementara hanya berlaku untuk waktu yang ditentukan (dari 15 menit hingga 36 jam). Durasi maksimum yang diizinkan untuk kredensil sementara bervariasi tergantung pada faktor-faktor seperti pengaturan peran dan rantai peran. Untuk informasi selengkapnya tentang AWS STS, lihat dokumentasinya.
Epik
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat tabel DynamoDB. | Buat tabel DynamoDB, dengan indeks, di akun AWS sumber dan target. Tetapkan penyediaan kapasitas sebagai mode sesuai permintaan, yang memungkinkan DynamoDB untuk read/write menskalakan kapasitas secara dinamis berdasarkan beban kerja. Atau, Anda dapat menggunakan kapasitas yang disediakan dengan 4000 RCUs dan 4000. WCUs | Pengembang aplikasi, DBA, insinyur Migrasi |
Isi tabel sumber. | Isi tabel DynamoDB di akun sumber dengan data uji. Memiliki setidaknya 50 MB atau lebih data pengujian membantu Anda melihat puncak dan rata-rata yang RCUs dikonsumsi selama penyalinan tabel. Anda kemudian dapat mengubah penyediaan kapasitas sesuai kebutuhan. | Pengembang aplikasi, DBA, insinyur Migrasi |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat peran IAM untuk mengakses sumber dan target tabel DynamoDB. | Buat peran IAM di akun sumber dengan izin untuk mengakses (baca) tabel DynamoDB di akun sumber. Tambahkan akun sumber sebagai entitas tepercaya untuk peran ini. Buat peran IAM di akun target dengan izin untuk mengakses (membuat, membaca, memperbarui, menghapus) tabel DynamoDB di akun target. Tambahkan akun target sebagai entitas tepercaya untuk peran ini. | Pengembang aplikasi, AWS DevOps |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Dapatkan kredensi sementara untuk peran IAM. | Dapatkan kredensi sementara untuk peran IAM yang dibuat di akun sumber. Dapatkan kredensi sementara untuk peran IAM yang dibuat di akun target. Salah satu cara untuk mendapatkan kredensil sementara untuk peran IAM adalah dengan menggunakan AWS STS dari AWS CLI.
Gunakan profil AWS yang sesuai (sesuai dengan sumber atau akun target). Untuk informasi selengkapnya tentang berbagai cara untuk mendapatkan kredensil sementara, lihat berikut ini: | Pengembang aplikasi, insinyur Migrasi |
Inisialisasi klien DynamoDB untuk sumber dan target akses DynamoDB. | Inisialisasi klien DynamoDB, yang disediakan oleh AWS SDK, untuk tabel DynamoDB sumber dan target.
| Pengembang aplikasi |
Jatuhkan dan buat ulang tabel target. | Hapus dan buat ulang tabel DynamoDB target (bersama dengan indeks) di akun target, menggunakan klien DynamoDB akun target. Menghapus semua catatan dari tabel DynamoDB adalah operasi yang mahal karena mengkonsumsi provisioned. WCUs Menghapus dan membuat ulang tabel menghindari biaya tambahan tersebut. Anda dapat menambahkan indeks ke tabel setelah Anda membuatnya, tetapi ini membutuhkan waktu 2-5 menit lebih lama. Membuat indeks selama pembuatan tabel, dengan meneruskan koleksi indeks ke | Pengembang aplikasi |
Lakukan salinan tabel. | Ulangi langkah-langkah berikut hingga semua data disalin:
Untuk informasi selengkapnya, lihat implementasi referensi di C # (untuk menjatuhkan, membuat, dan mengisi tabel) di bagian Lampiran. Contoh tabel konfigurasi JavaScript Object Notation (JSON) file juga dilampirkan. | Pengembang aplikasi |
Sumber daya terkait
Informasi tambahan
Pola ini diimplementasikan menggunakan C# untuk menyalin tabel DynamoDB dengan 200.000 item (ukuran item rata-rata 5 KB dan ukuran tabel 250 MB). Tabel DynamoDB target disiapkan dengan kapasitas yang disediakan 4000 dan 4000. RCUs WCUs
Operasi penyalinan tabel lengkap (dari akun sumber ke akun target), termasuk menjatuhkan dan membuat ulang tabel, membutuhkan waktu 5 menit. Total unit kapasitas yang dikonsumsi: 30.000 RCUs dan sekitar WCUs 400.000.
Untuk informasi selengkapnya tentang mode kapasitas DynamoDB, lihat Mode kapasitas Baca/Tulis dalam dokumentasi AWS.
Lampiran
Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip