Panduan ini memandu Anda melalui proses pembuatan kluster dan membuat koneksi pertama ke fitur yang kompatibel dengan DynamoDB dari PolarDB for PostgreSQL dan .
Persyaratan
Sebelum menggunakan fitur kompatibilitas DynamoDB, pastikan kluster Anda memenuhi persyaratan berikut:
Versi kernel:
PostgreSQL 16, dengan versi minor kernel 2.0.16.13.16.0 atau lebih baru.
Versi database proxy: 2.3.63.1 atau lebih baru.
Buka PolarDB console dan periksa versi Kluster Anda di halaman . Jika versi tidak memenuhi persyaratan, tingkatkan versi minor.
Aktifkan fitur kompatibel DynamoDB
Anda dapat mengaktifkan fitur kompatibel DynamoDB untuk suatu kluster dengan salah satu dari dua cara berikut.
Kluster yang sudah ada
Jika kluster Anda memenuhi Persyaratan, buka halaman Basic Information kluster tersebut. Temukan pengaturan DynamoDB Compatibility dan klik On.
Kluster baru
Jika kluster Anda tidak memenuhi Persyaratan atau Anda ingin menggunakan fitur ini pada kluster baru, Anda dapat membuat kluster baru di PolarDB console.
Atur mesin database ke PostgreSQL 16, lalu centang kotak pilihan DynamoDB Compatibility.
Konfigurasikan opsi lain seperti wilayah, zona, dan spesifikasi node.
Buat akun DynamoDB khusus
Buat akun DynamoDB khusus untuk mendapatkan kredensial (AccessKey) guna akses API.
Di halaman kluster Anda, klik Create Account.
Atur Account Type menjadi DynamoDB Account, lalu tetapkan nama akun dan password.
CatatanPassword ini hanya digunakan untuk mengelola akun di konsol, bukan untuk akses API.
Sebagai contoh, atur nama akun menjadi
dynamodb_user. Nama akun harus dimulai dengan huruf, diakhiri dengan huruf atau angka, hanya boleh berisi huruf kecil, angka, dan garis bawah (_), serta tidak boleh melebihi 16 karakter. Password harus terdiri dari 8 hingga 32 karakter dan mencakup minimal tiga jenis karakter berikut: huruf kapital, huruf kecil, angka, dan karakter khusus.Setelah akun dibuat, temukan akun tersebut dalam daftar akun. Nama akun merupakan
Access Key ID. Untuk mendapatkanSecretAccess Key, klik View pada kolom Key.
Konfigurasikan titik akhir DynamoDB
Setelah Anda mengaktifkan fitur kompatibel DynamoDB, sistem secara otomatis membuat titik akhir DynamoDB default. Anda juga dapat membuat titik akhir kustom.
Di halaman Basic Information kluster, temukan DynamoDB default yang dibuat oleh sistem di bagian Database Connections.
(Opsional) Klik Create Custom Cluster Endpoint dan atur tipe titik akhir menjadi DynamoDB. Anda kemudian dapat menentukan node yang akan disambungkan dan menetapkan tingkat konsistensi data untuk titik akhir ini.
Metode koneksi dan daftar putih
Pilih metode koneksi berdasarkan lokasi server atau client Anda.
Koneksi privat (Direkomendasikan) Jika aplikasi Anda dideploy di ECS Alibaba Cloud, pastikan instance ECS dan kluster PolarDB berada dalam VPC yang sama. Anda juga perlu menambahkan alamat IP atau security group instance ECS ke daftar putih kluster.
Koneksi Internet Jika Anda perlu mengembangkan dan menguji di lingkungan lokal, atau jika instance ECS dan kluster PolarDB tidak berada dalam VPC yang sama, Anda dapat mengajukan titik akhir internet untuk DynamoDB di bagian Database Connections pada halaman Basic Information kluster. Anda juga perlu menambahkan alamat IP lingkungan lokal Anda atau alamat IP publik instance ECS ke daftar putih kluster.
Pada kartu DynamoDB Endpoint, klik Apply for Public Endpoint di sebelah titik akhir yang dituju. Sistem kemudian akan menghasilkan titik akhir internet dan informasi port yang sesuai.
CatatanMengakses kluster Anda melalui internet menimbulkan risiko keamanan. Kami merekomendasikan agar Anda hanya menggunakan titik akhir internet untuk pengembangan dan pengujian sementara. Lepaskan titik akhir internet setelah selesai.
Koneksi dan verifikasi
Gunakan kode Python berikut dengan SDK Boto3 untuk memverifikasi konfigurasi Anda. Contoh ini menggunakan instance ECS yang menjalankan sistem operasi Alibaba Cloud Linux 3.2104 LTS 64-bit.
Buka direktori proyek Anda. Contoh ini menggunakan
/home/testDynamoDB.mkdir /home/testDynamoDB cd /home/testDynamoDBDi direktori
/home/testDynamoDB, buatlingkungan virtual(venv) untuk mengisolasi dependensi proyek dan mencegah konflik dengan paket global.python3 -m venv myenvAktifkan lingkungan virtual.
source myenv/bin/activateInstal dependensi Python yang diperlukan.
pip3 install boto3Buat file Python dan salin kode berikut ke dalamnya. Ganti
endpoint_url,aws_access_key_id, danaws_secret_access_keydengan titik akhir dan kredensial Akun DynamoDB untuk kluster PolarDB Anda.vim main.pyimport boto3 from botocore.exceptions import ClientError # 1. Konfigurasikan detail koneksi Anda # Titik akhir untuk fitur kompatibel DynamoDB kluster PolarDB Anda. endpoint_url = "http://<your-polardb-ddb-endpoint>:<port>" # Access Key ID dari akun DynamoDB Anda. aws_access_key_id = "<your-access-key-id>" # Secret Access Key dari akun DynamoDB Anda. aws_secret_access_key = "<your-secret-access-key>" # Untuk fitur kompatibel DynamoDB PolarDB, region_name harus diatur ke "public". region_name = "public" # 2. Buat client resource DynamoDB dynamodb = boto3.resource( 'dynamodb', endpoint_url=endpoint_url, aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key, region_name=region_name, ) table_name = 'usertable' # 3. Definisikan fungsi untuk operasi database def create_table(): """Membuat tabel, atau mengambilnya jika sudah ada.""" try: table = dynamodb.create_table( TableName=table_name, KeySchema=[{'AttributeName': 'userid', 'KeyType': 'HASH'}], # Partition key AttributeDefinitions=[{'AttributeName': 'userid', 'AttributeType': 'S'}] # ProvisionedThroughput bersifat opsional dan diabaikan oleh PolarDB. ) print("Membuat tabel... Menunggu hingga aktif.") table.meta.client.get_waiter('table_exists').wait(TableName=table_name) print("Tabel aktif!") return table except ClientError as e: if e.response['Error']['Code'] == 'ResourceInUseException': print("Tabel sudah ada.") return dynamodb.Table(table_name) else: raise def put_items(table): """Memasukkan beberapa item ke dalam tabel.""" users = [ {'userid': 'user01', 'name': 'Alice', 'age': 24}, {'userid': 'user02', 'name': 'Bob', 'age': 30}, {'userid': 'user03', 'name': 'Charlie', 'age': 28} ] for user in users: table.put_item(Item=user) print("Menyisipkan 3 item.") def scan_table(table): """Memindai dan mencetak semua item dalam tabel.""" response = table.scan() items = response.get('Items', []) print(f"Dipindai {len(items)} item:") for item in items: print(item) def delete_table(table): """Menghapus tabel.""" table.delete() print("Menghapus tabel... Menunggu hingga dihapus.") table.meta.client.get_waiter('table_not_exists').wait(TableName=table_name) print("Tabel berhasil dihapus.") # 4. Jalankan proses verifikasi if __name__ == '__main__': try: user_table = create_table() put_items(user_table) scan_table(user_table) finally: # Pastikan tabel dibersihkan meskipun terjadi error. if 'user_table' in locals(): delete_table(user_table)Setelah menjalankan skrip, Anda seharusnya melihat output seperti berikut:
python3 main.pyMembuat tabel... Menunggu hingga aktif. Tabel aktif! Menyisipkan 3 item. Dipindai 3 item: {'age': Decimal('24'), 'name': 'Alice', 'userid': 'user01'} {'age': Decimal('30'), 'name': 'Bob', 'userid': 'user02'} {'age': Decimal('28'), 'name': 'Charlie', 'userid': 'user03'} Menghapus tabel... Menunggu hingga dihapus. Tabel berhasil dihapus.Output ini mengonfirmasi koneksi yang berhasil dan memverifikasi konfigurasi Anda.