-- ステップ 0: クライアントEC2(Amazon Linux2)にPython3.8をインストール
amazon-linux-extras list | grep python
sudo amazon-linux-extras install -y python3.8
python3.8 -V
sudo pip3.8 install boto3
-- ステップ 1: DynamoDB テーブルを作成する
aws dynamodb create-table \
--table-name tab1 \
--attribute-definitions \
AttributeName=col1,AttributeType=N \
AttributeName=col2,AttributeType=N \
--key-schema \
AttributeName=col1,KeyType=HASH \
AttributeName=col2,KeyType=RANGE \
--provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5
aws dynamodb describe-table \
--table-name tab1 \
--query "Table.[TableName,TableStatus,ProvisionedThroughput]"
-- ステップ 2: スケーラブルなターゲットを登録する
aws application-autoscaling register-scalable-target \
--service-namespace dynamodb \
--resource-id "table/tab1" \
--scalable-dimension "dynamodb:table:WriteCapacityUnits" \
--min-capacity 5 \
--max-capacity 10
aws application-autoscaling describe-scalable-targets \
--service-namespace dynamodb \
--resource-id "table/tab1"
-- ステップ 3: スケーリングポリシーを作成する
vim a.json
{
"PredefinedMetricSpecification": {
"PredefinedMetricType": "DynamoDBWriteCapacityUtilization"
},
"ScaleOutCooldown": 60,
"ScaleInCooldown": 60,
"TargetValue": 50.0
}
aws application-autoscaling put-scaling-policy \
--service-namespace dynamodb \
--resource-id "table/tab1" \
--scalable-dimension "dynamodb:table:WriteCapacityUnits" \
--policy-name "policy01" \
--policy-type "TargetTrackingScaling" \
--target-tracking-scaling-policy-configuration file://a.json
aws application-autoscaling describe-scaling-policies \
--service-namespace dynamodb \
--resource-id "table/tab1" \
--policy-name "policy01"
-- ステップ 4: 書き込みトラフィックを tab1 にドライブする
vim a.py
import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table("tab1")
col3 = "x" * 100000
i = 0
while (i < 10):
j = 0
while (j < 10):
print (i, j)
table.put_item(
Item={
'col1':i,
'col2':j,
'col3':col3
}
)
j += 1
i += 1
python3.8 a.py
-- ステップ 5: Application Auto Scaling アクションを表示する
while true;do aws application-autoscaling describe-scaling-activities --service-namespace dynamodb; sleep 5; done
aws dynamodb describe-table \
--table-name tab1 \
--query "Table.[TableName,TableStatus,ProvisionedThroughput]"
-- ステップ 6: クリーンアップする
-- スケーリングポリシー一覧
aws application-autoscaling describe-scaling-policies --service-namespace dynamodb
-- スケーリングポリシー削除
aws application-autoscaling delete-scaling-policy \
--service-namespace dynamodb \
--resource-id "table/tab1" \
--scalable-dimension "dynamodb:table:WriteCapacityUnits" \
--policy-name "policy01"
-- スケーリングターゲット一覧
aws application-autoscaling describe-scalable-targets --service-namespace dynamodb
-- スケーリングターゲット削除
aws application-autoscaling deregister-scalable-target \
--service-namespace dynamodb \
--resource-id "table/tab1" \
--scalable-dimension "dynamodb:table:WriteCapacityUnits"
-- テーブル一覧
aws dynamodb list-tables
-- テーブル削除
aws dynamodb delete-table --table-name tab1