AWSマネジメントコンソールで新規テーブルを作成すると、デフォルトで Auto Scaling が有効な状態で作成されるようになっているそうです。(変わっていないAWSアカウントもありましたので、既存環境はIAM Role等々を用意しないと切り替わらないのかもしれません。)
- デフォルトで Auto Scaling 無効(既存)
以下、既存テーブルへ適用しようとした際に調査した内容です。
DynamoDB Auto Scaling 設定値
設定できる最小/最大値は以下の通りです。
- Provisioned capacity
- Auto Scaling を有効化した場合は設定不可
- Auto Scaling
- Target utilization (%)
- Minimum provisioned capacity
- Maximum provisioned capacity
- IAM Role
- AWSマネジメントコンソール上でのデフォルトは DynamoDBAutoscaleRole
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
CLI を使用したチュートリアルが公開されていますので、一通り実行してみるとイメージを掴みやすいかと思います。
Using the AWS CLI to Manage DynamoDB Auto Scaling - Amazon DynamoDB
チュートリアル実施時の注意点としては下記のような感じでしょうか。
DynamoDB Auto Scaling 設定は、aws dynamodb ではなく、aws application-autoscaling です。
マネジメントコンソールから作成すると、ScaleOutCooldown/ScaleInCooldown はデフォルト0で作成されます。
マネジメントコンソール上からの変更方法は現時点では提供されていないようです。