選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

使用 AWS CLI 管理 DynamoDB 自動擴展

焦點模式
使用 AWS CLI 管理 DynamoDB 自動擴展 - Amazon 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 擴展,以便在特定時間進行。在此處了解基本步驟。

開始之前

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

安裝 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 個容量單位。耗用與佈建比率現在為 (150/200),也就是 75%。此比率超過您的目標,因此 Application Auto Scaling 會將佈建的寫入容量提高至 215,使得比率成為 (150/215) (也就是 69.77 百分比);盡可能靠近但不超過 TargetValue

對於 TestTable,您將 TargetValue 設為 50%。Application Auto Scaling 將資料表佈建的輸送量調整在 5–10 個容量單位的範圍內 (請參閱 步驟 2:註冊可擴展的目標),使耗用與佈建的比率維持在或接近 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
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。