AWSマネジメントコンソールで新規テーブルを作成すると、デフォルトで Auto Scaling が有効な状態で作成されるようになっているそうです。(変わっていないAWSアカウントもありましたので、既存環境はIAM Role等々を用意しないと切り替わらないのかもしれません。)
- デフォルトで Auto Scaling 有効
- デフォルトで Auto Scaling 無効(既存)
以下、既存テーブルへ適用しようとした際に調査した内容です。
DynamoDB Auto Scaling 設定値
設定できる最小/最大値は以下の通りです。
- Provisioned capacity
- Auto Scaling を有効化した場合は設定不可
- Auto Scaling
- Target utilization (%)
- 20 〜 80
- Minimum provisioned capacity
- 1 〜 5
- Maximum provisioned capacity
- 5 〜 10000
- IAM Role
- AWSマネジメントコンソール上でのデフォルトは DynamoDBAutoscaleRole
- Target utilization (%)
DynamoDB Auto Scaling 有効化で作成されるリソース
IAM Role
規定では DynamoDBAutoscaleRole です。 後述のポリシー(DynamoDBAutoscalePolicy)、Trust Relationshipが付与されます。
DynamoDBAutoscalePolicy
"Document": { "Version": "2012-10-17", "Statement": [ { "Action": [ "dynamodb:DescribeTable", "dynamodb:UpdateTable", "cloudwatch:PutMetricAlarm", "cloudwatch:DescribeAlarms", "cloudwatch:GetMetricStatistics", "cloudwatch:SetAlarmState", "cloudwatch:DeleteAlarms" ], "Resource": "*", "Effect": "Allow" } ] }
Trust Relationship
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "application-autoscaling.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
Application Auto Scaling
スケーリングは DynamoDB での管理ではなく、 Application Auto Scaling での管理となります。
ScalableTarget
テーブル単位で ReadCapacityUnits と WriteCapacityUnits がそれぞれ作成されます。
"ScalableTargets": [ { "ScalableDimension": "dynamodb:table:ReadCapacityUnits", "ResourceId": "table/dummy-table", "RoleARN": "arn:aws:iam::999999999999:role/service-role/DynamoDBAutoscaleRole", "CreationTime": 9999999999.99, "MinCapacity": 1, "ServiceNamespace": "dynamodb", "MaxCapacity": 5 }, { "ScalableDimension": "dynamodb:table:WriteCapacityUnits", "ResourceId": "table/dummy-table", "RoleARN": "arn:aws:iam::999999999999:role/service-role/DynamoDBAutoscaleRole", "CreationTime": 9999999999.99, "MinCapacity": 1, "ServiceNamespace": "dynamodb", "MaxCapacity": 5 } ]
ScalingPolicy
テーブル単位で ReadCapacityUnits と WriteCapacityUnits がそれぞれ作成されます。
加えて、スケーリング判断用の CloudWatch Alarm が4つ付随します。
"ScalingPolicies": [ { "PolicyName": "DynamoDBReadCapacityUtilization:table/dummy-table", "ScalableDimension": "dynamodb:table:ReadCapacityUnits", "ResourceId": "table/dummy-table", "CreationTime": 9999999999.999, "PolicyARN": "arn:aws:autoscaling:ap-northeast-1:999999999999:scalingPolicy:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:resource/dynamodb/table/dummy-table:policyName/DynamoDBReadCapacityUtilization:table/dummy-table", "PolicyType": "TargetTrackingScaling", "TargetTrackingScalingPolicyConfiguration": { "TargetValue": 70.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "DynamoDBReadCapacityUtilization" } }, "Alarms": [ { "AlarmName": "TargetTracking-table/dummy-table-AlarmHigh-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "AlarmARN": "arn:aws:cloudwatch:ap-northeast-1:999999999999:alarm:TargetTracking-table/dummy-table-AlarmHigh-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }, { "AlarmName": "TargetTracking-table/dummy-table-AlarmLow-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "AlarmARN": "arn:aws:cloudwatch:ap-northeast-1:999999999999:alarm:TargetTracking-table/dummy-table-AlarmLow-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }, { "AlarmName": "TargetTracking-table/dummy-table-ProvisionedCapacityHigh-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "AlarmARN": "arn:aws:cloudwatch:ap-northeast-1:999999999999:alarm:TargetTracking-table/dummy-table-ProvisionedCapacityHigh-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }, { "AlarmName": "TargetTracking-table/dummy-table-ProvisionedCapacityLow-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "AlarmARN": "arn:aws:cloudwatch:ap-northeast-1:999999999999:alarm:TargetTracking-table/dummy-table-ProvisionedCapacityLow-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" } ], "ServiceNamespace": "dynamodb" }, ・・・略 ]
CloudWatch Alarm
AlarmHigh のみ 5分間、その他は 15分間での設定になっています。 Description に DO NOT EDIT OR DELETE と有り、閾値時間変更は推奨されないようです。
- AlarmLow
- AlarmHigh
- ProvisionedCapacityLow
- ProvisionedCapacityHigh
AWS CLI チュートリアル
CLI を使用したチュートリアルが公開されていますので、一通り実行してみるとイメージを掴みやすいかと思います。
Using the AWS CLI to Manage DynamoDB Auto Scaling - Amazon DynamoDB
チュートリアル実施時の注意点としては下記のような感じでしょうか。
DynamoDB Auto Scaling 設定は、aws dynamodb ではなく、aws application-autoscaling です。
マネジメントコンソールから作成すると、ScaleOutCooldown/ScaleInCooldown はデフォルト0で作成されます。 マネジメントコンソール上からの変更方法は現時点では提供されていないようです。