使用 AWS CLI 管理 DynamoDB 自動擴展 - Amazon DynamoDB

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 AWS CLI 管理 DynamoDB 自動擴展

您可以使用 AWS Command Line Interface (AWS CLI) 管理 Amazon DynamoDB 自動擴展 AWS Management Console,而不是使用 。本節中的教學課程會示範如何安裝和設定 AWS CLI 來管理 DynamoDB Auto Scaling 功能。在此教學課程中,您將執行下列操作:

  • 建立名為 TestTable 的 DynamoDB 資料表。初始輸送量設定是 5 個讀取容量單位和 5 個寫入容量單位。

  • TestTable 建立 Application Auto Scaling 政策。該政策會設法將使用寫入容量與佈建寫入容量之間的目標比率保持在 50%。此指標範圍介於 5 到 10 個寫入容量單位之間。(Application Auto Scaling 無法調整超出此範圍的輸送量。)

  • 運行 Python 程式來將寫入流量推送至 TestTable。當目標比率持續超過 50% 時,Application Auto Scaling 會通知 DynamoDB 提高 TestTable 的輸送量,以便維持 50% 的目標使用率。

  • 確認 DynamoDB 已成功調整 TestTable 的佈建寫入容量。

注意

您也可以排程 DynamoDB 擴展,以便在特定時間進行。在此了解基本步驟 https://docs.aws.amazon.com/autoscaling/application/userguide/get-started-exercise.html

開始之前

開始這些教學課程之前,請完成以下任務。

安裝 AWS CLI

若您尚未執行此作業,您必須安裝及設定 AWS CLI。若要執行此作業,請遵循AWS Command Line Interface 使用者指南中的這些說明:

安裝 Python

本教學課程的一部分會要求您執行 Python 程式 (請參閱 步驟 4:磁碟機寫入流量至 TestTable)。如果您還沒有安裝 Python 程式,則可以下載 Python

步驟 1:建立 DynamoDB 資料表

在此步驟中,您可以使用 AWS CLI 來建立 TestTable。主索引鍵包含 pk (分割區索引鍵) 和 sk (排序索引鍵)。這些屬性的類型皆為 Number。初始輸送量設定是 5 個讀取容量單位和 5 個寫入容量單位。

  1. 使用下列 AWS CLI 命令來建立資料表。

    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. 若要檢查資料表的狀態,請使用以下命令。

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

    當資料表狀態為 ACTIVE 時,即可供使用。

步驟 2:註冊可擴展的目標

接下來,您可以使用 Application Auto Scaling 將資料表寫入容量註冊為可擴展的目標。這允許 Application Auto Scaling 調整 的佈建寫入容量TestTable,但僅限於 5–10 個容量單位的範圍內。

注意

DynamoDB Auto Scaling 需要有服務連結角色 (AWSServiceRoleForApplicationAutoScaling_DynamoDBTable),其會代表您執行自動調整規模動作。系統會自動建立此角色。如需詳細資訊,請參閱《Application Auto Scaling 使用者指南》中的適用於 Application Auto Scaling 的服務連結角色

  1. 輸入下列命令來註冊可擴展的目標。

    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. 若要確認註冊,請使用下列命令。

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

    您也可以針對全域次要索引註冊可擴展的目標。例如,對於全域次要索引 (test-index),資源 ID 和可擴展的維度引數會適當地更新。

    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

步驟 3:建立擴展政策

在此步驟中,您會建立 TestTable 的擴展政策。此政策會定義 Application Auto Scaling 可在哪些詳細資訊下調整資料表的佈建輸送量,以及在執行此動作時要採取的動作。您可以將此政策與您在上一個步驟中定義的可擴展目標建立關聯 (TestTable 資料表的寫入容量單位)。

該政策包含下列元素:

  • PredefinedMetricSpecification:允許 Application Auto Scaling 調整的指標。對於 DynamoDB,下列值是 PredefinedMetricType 的有效值:

    • DynamoDBReadCapacityUtilization

    • DynamoDBWriteCapacityUtilization

  • ScaleOutCooldown:提高佈建輸送量的每個 Application Auto Scaling 事件之間的最短時間 (以秒為單位)。此參數可讓 Application Auto Scaling 持續 (但不積極) 增加輸送量,以便回應真實的工作負載。ScaleOutCooldown 的預設設定為 0。

  • ScaleInCooldown:減少佈建輸送量的每個 Application Auto Scaling 事件之間的最短時間 (以秒為單位)。此參數可讓 Application Auto Scaling 以逐漸且可預測的方式降低輸送量。ScaleInCooldown 的預設設定為 0。

  • TargetValue:Application Auto Scaling 可確保將耗用容量與佈建容量的比率保持在此值或接近此數值。您能以百分比的形式定義 TargetValue

注意

為了進一步了解 TargetValue 如何運作,請假設您資料表的佈建輸送量設定為 200 個寫入容量單位。您決定為此資料表建立擴展政策,並將 TargetValue 設為70 %。

現在,假設您開始將寫入流量導向該資料表,那實際的寫入輸送量就會是 150 個容量單位。比率現在為 consumed-to-provisioned(150 / 200),或 75%。此比率超過您的目標,因此 Application Auto Scaling 會將佈建的寫入容量提高至 215,使得比率成為 (150/215) (也就是 69.77 百分比);盡可能靠近但不超過 TargetValue

對於 TestTable,您將 TargetValue 設為 50%。Application Auto Scaling 會在 5–10 個容量單位的範圍內調整資料表的佈建輸送量 (請參閱 步驟 2:註冊可擴展的目標),讓 consumed-to-provisioned比率維持在 50% 或接近 50%。您可以將 ScaleOutCooldownScaleInCooldown 的數值設為 60 秒。

  1. 使用下列內容建立名為 scaling-policy.json 的檔案。

    { "PredefinedMetricSpecification": { "PredefinedMetricType": "DynamoDBWriteCapacityUtilization" }, "ScaleOutCooldown": 60, "ScaleInCooldown": 60, "TargetValue": 50.0 }
  2. 使用下列 AWS CLI 命令來建立政策。

    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. 請注意,在輸出中,Application Auto Scaling 已建立兩個 Amazon CloudWatch 警示,一個警示分別代表擴展目標範圍的上限和下限。

  4. 使用下列 AWS CLI 命令來檢視擴展政策的詳細資訊。

    aws application-autoscaling describe-scaling-policies \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --policy-name "MyScalingPolicy"
  5. 在輸出中,確認政策設定符合 步驟 2:註冊可擴展的目標 和 步驟 3:建立擴展政策 中的規格。

步驟 4:磁碟機寫入流量至 TestTable

現在,您可以將資料寫入 TestTable 來測試擴展政策。為此,您須執行 Python 程式。

  1. 使用下列內容建立名為 bulk-load-test-table.py 的檔案。

    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. 請輸入下列命令來執行程式。

    python bulk-load-test-table.py

    TestTable 的佈建寫入容量非常低 (5 個寫入容量單位),因此程式偶爾會因寫入調節而停滯。這是預期的行為。

    讓程式繼續執行,您則繼續下一個步驟。

步驟 5:檢視 Application Auto Scaling 動作

在此步驟中,您可以檢視代表您啟動的 Application Auto Scaling 動作。您也可以確認 Application Auto Scaling 已更新 TestTable 的佈建寫入容量。

  1. 輸入下列命令來檢視 Application Auto Scaling 動作。

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

    在 Python 程式執行時,偶爾重新執行此命令。(叫用擴展政策需要幾分鐘的時間。) 您最終應該會看到下列輸出。

    ... { "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" }, ...

    這表示 Application Auto Scaling 已對 DynamoDB 發出 UpdateTable 請求。

  2. 輸入下列命令,確認 DynamoDB 已增加資料表的寫入容量。

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

    WriteCapacityUnits 應該從 5 擴展至 10

(選用) 步驟 6:清除

在此教學課程中,您已建立數個資源。如果不再需要這些資源,就可以將其刪除。

  1. 刪除 TestTable 的擴展政策。

    aws application-autoscaling delete-scaling-policy \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits" \ --policy-name "MyScalingPolicy"
  2. 取消註冊可擴展的目標。

    aws application-autoscaling deregister-scalable-target \ --service-namespace dynamodb \ --resource-id "table/TestTable" \ --scalable-dimension "dynamodb:table:WriteCapacityUnits"
  3. 刪除 TestTable 資料表。

    aws dynamodb delete-table --table-name TestTable