Menggunakan AWS CLI untuk mengelola penskalaan otomatis DynamoDB - Amazon DynamoDB

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

Menggunakan AWS CLI untuk mengelola penskalaan otomatis DynamoDB

Alih-alih menggunakan AWS Management Console, Anda dapat menggunakan AWS Command Line Interface (AWS CLI) untuk mengelola penskalaan otomatis Amazon DynamoDB. Tutorial di bagian ini menunjukkan cara menginstal dan mengonfigurasi AWS CLI untuk mengelola penskalaan otomatis DynamoDB. Dalam tutorial ini, Anda melakukan hal-hal berikut:

  • Buat tabel DynamoDB bernama TestTable. Pengaturan throughput awal adalah 5 unit kapasitas baca dan 5 unit kapasitas tulis.

  • Buat kebijakan Application Auto Scaling untuk TestTable. Kebijakan ini bertujuan untuk mempertahankan rasio target sebesar 50 persen antara kapasitas tulis yang dikonsumsi dan kapasitas tulis yang disediakan. Kisaran untuk metrik ini adalah antara 5 dan 10 unit kapasitas tulis. (Application Auto Scaling tidak diizinkan untuk menyesuaikan throughput di luar kisaran ini.)

  • Jalankan program Python untuk mendorong lalu lintas tulis ke TestTable. Ketika rasio target melebihi 50 persen untuk jangka waktu yang berkelanjutan, Application Auto Scaling memberi tahu DynamoDB untuk menyesuaikan throughput TestTable ke atas guna mempertahankan pemanfaatan target sebesar 50 persen.

  • Verifikasi bahwa DynamoDB telah berhasil menyesuaikan kapasitas tulis yang disediakan untuk TestTable.

catatan

Anda juga dapat menjadwalkan penskalaan DynamoDB Anda sehingga terjadi pada waktu-waktu tertentu. Pelajari langkah-langkah dasar di sini.

Sebelum Anda mulai

Selesaikan tugas berikut sebelum memulai tutorial.

Instal AWS CLI

Jika belum, Anda harus menginstal dan mengonfigurasi AWS CLI. Untuk melakukannya, ikuti petunjuk berikut di Panduan Pengguna AWS Command Line Interface :

Instal Python

Anda perlu menjalankan program Python di bagian tutorial ini (lihat Langkah 4: Dorong lalu lintas tulis ke TestTable). Jika belum menginstalnya, Anda dapat mengunduh Python.

Langkah 1: Buat tabel DynamoDB

Pada langkah ini, Anda menggunakan AWS CLI to createTestTable. Kunci primer terdiri dari pk (kunci partisi) dan sk (kunci urutan). Kedua atribut ini berjenis Number. Pengaturan throughput awal adalah 5 unit kapasitas baca dan 5 unit kapasitas tulis.

  1. Gunakan AWS CLI perintah berikut untuk membuat tabel.

    aws dynamodb create-table \ --table-name TestTable \ --attribute-definitions \ AttributeName=pk,AttributeType=N \ AttributeName=sk,AttributeType=N \ --key-schema \ AttributeName=pk,KeyType=HASH \ AttributeName=sk,KeyType=RANGE \ --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
  2. Untuk memeriksa status tabel, gunakan perintah berikut.

    aws dynamodb describe-table \ --table-name TestTable \ --query "Table.[TableName,TableStatus,ProvisionedThroughput]"

    Tabel siap digunakan saat statusnya ACTIVE.

Langkah 2: Daftarkan target yang dapat diskalakan

Selanjutnya Anda mendaftar kapasitas tulis tabel sebagai target yang dapat diskalakan dengan Application Auto Scaling. Hal ini memungkinkan Application Auto Scaling untuk menyesuaikan kapasitas tulis yang disediakan untuk TestTable, tetapi hanya dalam kisaran 5-10 unit kapasitas.

catatan

Penskalaan otomatis DynamoDB memerlukan kehadiran peran tertaut layanan (AWSServiceRoleForApplicationAutoScaling_DynamoDBTable) yang melakukan tindakan penskalaan otomatis atas nama Anda. Peran ini dibuat secara otomatis untuk Anda. Untuk informasi selengkapnya, lihat Peran tertaut layanan untuk Application Auto Scaling dalam Panduan Pengguna Application Auto Scaling.

  1. Gunakan perintah berikut untuk mendaftarkan target yang dapat diskalakan.

    aws application-autoscaling register-scalable-target \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits" \ --min-capacity 5 \ --max-capacity 10
  2. Untuk memverifikasi pendaftaran, gunakan perintah berikut.

    aws application-autoscaling describe-scalable-targets \ --service-namespace dynamodb \ --resource-id "table/TestTable"
    catatan

    Anda juga dapat mendaftarkan target yang dapat diskalakan terhadap indeks sekunder global. Sebagai contoh, untuk indeks sekunder global ("test-index"), ID sumber daya dan argumen dimensi yang dapat diskalakan diperbarui dengan sesuai.

    aws application-autoscaling register-scalable-target \ --service-namespace dynamodb \ --resource-id "table/TestTable/index/test-index" \ --scalable-dimension "dynamodb:index:WriteCapacityUnits" \ --min-capacity 5 \ --max-capacity 10

Langkah 3: Buat kebijakan penskalaan

Pada langkah ini, Anda membuat kebijakan penskalaan untuk TestTable. Kebijakan ini mendefinisikan detail di mana Application Auto Scaling dapat menyesuaikan throughput yang disediakan pada tabel, dan tindakan yang harus diambil ketika melakukannya. Anda mengaitkan kebijakan ini dengan target yang dapat diskalakan yang Anda tetapkan pada langkah sebelumnya (unit kapasitas tulis untuk tabel TestTable).

Kebijakan tersebut berisi elemen berikut:

  • PredefinedMetricSpecification—Metrik yang dapat disesuaikan oleh Application Auto Scaling. Untuk DynamoDB, nilai berikut adalah nilai yang valid untuk PredefinedMetricType:

    • DynamoDBReadCapacityUtilization

    • DynamoDBWriteCapacityUtilization

  • ScaleOutCooldown—Jumlah waktu minimum (dalam detik) antara setiap peristiwa Application Auto Scaling yang meningkatkan throughput yang disediakan. Parameter ini memungkinkan Application Auto Scaling untuk secara terus-menerus, tetapi tanpa agresivitas, meningkatkan throughput sebagai respons terhadap beban kerja dunia nyata. Pengaturan default untuk ScaleOutCooldown adalah 0.

  • ScaleInCooldown—Jumlah waktu minimum (dalam detik) antara setiap peristiwa Application Auto Scaling yang mengurangi throughput yang disediakan. Parameter ini memungkinkan Application Auto Scaling untuk mengurangi throughput secara bertahap dan terprediksi. Pengaturan default untuk ScaleInCooldown adalah 0.

  • TargetValue—Application Auto Scaling memastikan bahwa rasio kapasitas yang dikonsumsi terhadap kapasitas yang disediakan tetap atau mendekati nilai ini. Anda mendefinisikan TargetValue sebagai persentase.

catatan

Untuk lebih memahami cara kerja TargetValue, misalkan Anda memiliki sebuah tabel dengan pengaturan throughput yang disediakan sebanyak 200 unit kapasitas tulis. Anda memutuskan untuk membuat kebijakan penskalaan untuk tabel ini, dengan TargetValue sebesar 70 persen.

Sekarang anggaplah Anda mulai mendorong lalu lintas tulis ke tabel sehingga throughput tulis aktual adalah sebesar 150 unit kapasitas. consumed-to-provisionedRasionya sekarang (150/200), atau 75 persen. Rasio ini melebihi target Anda, sehingga Application Auto Scaling meningkatkan kapasitas tulis yang disediakan menjadi 215, sehingga rasionya (150 / 215), atau 69,77 persen—sedekat mungkin dengan TargetValue, tetapi tidak melebihinya.

Untuk TestTable, Anda mengatur TargetValue ke 50 persen. Application Auto Scaling menyesuaikan throughput yang disediakan tabel dalam kisaran 5-10 unit kapasitas (lihatLangkah 2: Daftarkan target yang dapat diskalakan) sehingga rasio tetap pada atau mendekati 50 persen. consumed-to-provisioned Anda mengatur nilai untuk ScaleOutCooldown dan ScaleInCooldown ke 60 detik.

  1. Buat file bernama scaling-policy.json dengan isi berikut ini.

    { "PredefinedMetricSpecification": { "PredefinedMetricType": "DynamoDBWriteCapacityUtilization" }, "ScaleOutCooldown": 60, "ScaleInCooldown": 60, "TargetValue": 50.0 }
  2. Gunakan AWS CLI perintah berikut untuk membuat kebijakan.

    aws application-autoscaling put-scaling-policy \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits" \ --policy-name "MyScalingPolicy" \ --policy-type "TargetTrackingScaling" \ --target-tracking-scaling-policy-configuration file://scaling-policy.json
  3. Dalam output, perhatikan bahwa Application Auto Scaling telah menciptakan dua CloudWatch alarm Amazon — masing-masing untuk batas atas dan bawah rentang target penskalaan.

  4. Gunakan AWS CLI perintah berikut untuk melihat detail selengkapnya tentang kebijakan penskalaan.

    aws application-autoscaling describe-scaling-policies \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --policy-name "MyScalingPolicy"
  5. Dalam output, verifikasi bahwa pengaturan kebijakan sesuai dengan spesifikasi Anda dari Langkah 2: Daftarkan target yang dapat diskalakan dan Langkah 3: Buat kebijakan penskalaan.

Langkah 4: Dorong lalu lintas tulis ke TestTable

Sekarang Anda dapat menguji kebijakan penskalaan Anda dengan menulis data ke TestTable. Untuk melakukan ini, jalankan program Python.

  1. Buat file bernama bulk-load-test-table.py dengan isi berikut ini.

    import boto3 dynamodb = boto3.resource('dynamodb') table = dynamodb.Table("TestTable") filler = "x" * 100000 i = 0 while (i < 10): j = 0 while (j < 10): print (i, j) table.put_item( Item={ 'pk':i, 'sk':j, 'filler':{"S":filler} } ) j += 1 i += 1
  2. Masukkan perintah berikut untuk menjalankan program.

    python bulk-load-test-table.py

    Kapasitas tulis yang disediakan untuk TestTable sangat rendah (5 unit kapasitas tulis), sehingga terkadang mengalami kegagalan karena throttling tulis. Ini adalah perilaku yang diharapkan.

    Biarkan program terus berjalan sementara Anda melanjutkan ke langkah berikutnya.

Langkah 5: Lihat tindakan Application Auto Scaling

Pada langkah ini, Anda melihat tindakan Application Auto Scaling yang dimulai atas nama Anda. Anda juga memverifikasi bahwa Application Auto Scaling telah memperbarui kapasitas tulis yang disediakan untuk TestTable.

  1. Masukkan perintah berikut untuk melihat tindakan Application Auto Scaling.

    aws application-autoscaling describe-scaling-activities \ --service-namespace dynamodb

    Jalankan kembali perintah ini sesekali, sementara program Python sedang berjalan. (Perlu beberapa menit hingga kebijakan penskalaan Anda diinvokasi.) Anda akan melihat output berikut.

    ... { "ScalableDimension": "dynamodb:table:WriteCapacityUnits", "Description": "Setting write capacity units to 10.", "ResourceId": "table/TestTable", "ActivityId": "0cc6fb03-2a7c-4b51-b67f-217224c6b656", "StartTime": 1489088210.175, "ServiceNamespace": "dynamodb", "EndTime": 1489088246.85, "Cause": "monitor alarm AutoScaling-table/TestTable-AlarmHigh-1bb3c8db-1b97-4353-baf1-4def76f4e1b9 in state ALARM triggered policy MyScalingPolicy", "StatusMessage": "Successfully set write capacity units to 10. Change successfully fulfilled by dynamodb.", "StatusCode": "Successful" }, ...

    Hal ini menunjukkan bahwa Application Auto Scaling telah mengeluarkan permintaan UpdateTable untuk DynamoDB.

  2. Masukkan perintah berikut untuk memverifikasi bahwa DynamoDB meningkatkan kapasitas tulis tabel.

    aws dynamodb describe-table \ --table-name TestTable \ --query "Table.[TableName,TableStatus,ProvisionedThroughput]"

    WriteCapacityUnits semestinya telah diskalakan dari 5 ke 10.

(Opsional) Langkah 6: Hapus

Dalam tutorial ini, Anda telah membuat beberapa sumber daya. Anda dapat menghapus sumber daya ini jika sudah tidak membutuhkannya lagi.

  1. Hapus kebijakan penskalaan untuk TestTable.

    aws application-autoscaling delete-scaling-policy \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits" \ --policy-name "MyScalingPolicy"
  2. Batalkan pendaftaran target yang dapat diskalakan.

    aws application-autoscaling deregister-scalable-target \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits"
  3. Hapus tabel TestTable.

    aws dynamodb delete-table --table-name TestTable