を使用した AWS CLI Auto Scaling の管理DynamoDB - Amazon DynamoDB

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

を使用した AWS CLI Auto Scaling の管理DynamoDB

を使用する代わりに、AWS マネジメントコンソール (AWS Command Line Interface) を使用して AWS CLI Auto Scaling を管理できます。Amazon DynamoDBこのセクションのチュートリアルでは、AWS CLI Auto Scaling を管理するために DynamoDB をインストールして設定する方法を示します。このチュートリアルでは、以下の作業を行います。

  • という名前の DynamoDB テーブルを作成します。TestTable 最初のスループット設定は、読み込みキャパシティーユニット数は 5、書き込みキャパシティーユニット数は 5 です。

  • の Application Auto Scaling ポリシーを作成します。TestTable ポリシーは、消費された書き込みキャパシティーとプロビジョニングされた書き込みキャパシティーのターゲット比率を 50% に維持することを目指します。このメトリクスの範囲は 5 ~ 10 書き込みキャパシティーユニットです (Application Auto Scaling は、この範囲を超えてスループットを調整できません)。

  • Python プログラムを実行して、書き込みトラフィックを TestTable に駆動します。 ターゲット比率が一定期間にわたって 50 パーセントを超えると、Application Auto Scaling は DynamoDB への通知を送信して、TestTable のスループットを上方に調整し、50 パーセントのターゲット使用率を維持します。

  • が DynamoDB のプロビジョニングされた書き込みキャパシティーを正常に調整したことを確認します。TestTable

開始する前に

チュートリアルを開始する前に、次のタスクを完了します。

AWS CLI をインストールする

まだ AWS CLI をインストールして設定していない場合は、インストールして設定する必要があります。これを行うには、「AWS Command Line Interface ユーザーガイド」の手順に従います。

Python のインストール

このチュートリアルでは、Python プログラムを実行する必要があります (「ステップ 4: への書き込みトラフィックの駆動TestTable」を参照)。まだインストールされていない場合は、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 には、ユーザーに代わって Auto Scaling アクションを実行する、サービスにリンクされたロール (AWSServiceRoleForApplicationAutoScaling_DynamoDBTable) が必要です。このロールは自動的に作成されます。詳細については、https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html の「アプリケーションの 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 は現実世界のワークロードに応じてスループットを継続的に増加できますが、積極的には増加しません。のデフォルト設定は 0 です。ScaleOutCooldown

  • ScaleInCooldown プロビジョニングされたスループットを減らす、各 — イベント間の最小時間 (秒単位)。Application Auto Scalingこのパラメータを使用すると、Application Auto Scaling でスループットを徐々に予測どおりに減少できます。のデフォルト設定は 0 です。ScaleInCooldown

  • [TargetValue—Application Auto Scaling] は、プロビジョニングされたキャパシティーに対する消費されたキャパシティーの比率をこの値またはそれに近い値に確実に維持します。は割合 (%) で定義します。TargetValue

注記

の動作の詳細を理解するために、200 書き込みキャパシティーユニットのプロビジョニングされたスループット設定のテーブルがあるとします。TargetValueが 70% のこのテーブルにスケーリングポリシーを作成することを決定します。TargetValue

ここで、実際の書き込みスループットが 150 キャパシティーユニットになるように書き込みトラフィックをテーブルに駆動すると仮定します。消費からプロビジョニングへの比率は現在 (150/200)、または 75 パーセントです。この比率がターゲットを超えているため、Application Auto Scaling はプロビジョニングされた書き込みキャパシティーを 215 に増やして、比率が可能な限り — に近い (150 / 215) または 69.73 パーセント TargetValue になるようにします (ただし、超えないようにしてください)。

には、TestTable を 50 パーセントに設定します。TargetValue は、テーブルのプロビジョニングされたスループットを 5 Application Auto Scaling 10 キャパシティーユニットの範囲内に調整します (「–」を参照)。これにより、消費からプロビジョニングされる比率は 50 パーセントまたはほぼ 50% に維持されます。ステップ 2: スケーラブルなターゲットを登録するScaleOutCooldown の値は 60 秒に設定します。ScaleInCooldown

  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 が 2 つの Amazon CloudWatch アラーム — を作成したのが、スケーリングターゲット範囲の上限値と下限値用に 1 つずつであることに注意してください。

  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

    のプロビジョニングされた書き込みキャパシティーは非常に低い (5 書き込みキャパシティーユニット) ため、書き込みのスロットリングのためにプログラムが停止することがあります。TestTableこれは想定される動作です。

    次のステップに進みながら、プログラムを実行しましょう。

ステップ 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 が UpdateTable に対して DynamoDB リクエストを発行したことを示します。

  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