{Keyspaces}Application Auto Scaling による Amazon Keyspaces スループットキャパシティーの管理


-- 前提: cqlshインストール済


-- 1. サービス固有の認証情報を生成する

aws iam create-service-specific-credential \
--user-name iamuser \
--service-name cassandra.amazonaws.com


-- 2. DB接続

cd /home/ec2-user/apache-cassandra-3.11.11
./bin/cqlsh cassandra.ap-northeast-1.amazonaws.com 9142 -u "iamuser-at-999999999999" -p "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" --ssl

 

-- 3. Keyspace の作成

CREATE KEYSPACE IF NOT EXISTS "ks01"
WITH REPLICATION = {'class': 'SingleRegionStrategy'};

SELECT * from system_schema.keyspaces ;


-- 4. テーブルの作成
※キャパシティモードはプロビジョンドの必要がある


USE "ks01" ;

CREATE TABLE "ks01"."tab1"(
"col1" text,
"col2" text,
"col3" int,
"col4" text,
PRIMARY KEY("col1", "col2"))
WITH CUSTOM_PROPERTIES = {
'capacity_mode':{
'throughput_mode':'PROVISIONED',
'write_capacity_units':1,
'read_capacity_units':1
},
'encryption_specification':{
'encryption_type':'AWS_OWNED_KMS_KEY'
}
} AND CLUSTERING ORDER BY("col2" ASC);

 

SELECT * from system_schema.tables WHERE keyspace_name='ks01' ;

SELECT * FROM system_schema.columns WHERE keyspace_name = 'ks01' AND table_name = 'tab1' ;

-- 5. テストデータ追加


USE "ks01" ;

CONSISTENCY LOCAL_QUORUM;

INSERT INTO "ks01".tab1 (col1, col2, col3, col4)
VALUES ('000-00','Engineering',10,'200-00') ;

SELECT * FROM "ks01".tab1 ;


-- 6. スケーラブルなターゲットを登録する

aws application-autoscaling register-scalable-target \
--service-namespace cassandra \
--resource-id "keyspace/ks01/table/tab1" \
--scalable-dimension "cassandra:table:WriteCapacityUnits" \
--min-capacity 5 \
--max-capacity 10

aws application-autoscaling describe-scalable-targets \
--service-namespace cassandra \
--resource-id "keyspace/ks01/table/tab1"


-- 7. スケーリングポリシーを作成する

vim a.json
{
"PredefinedMetricSpecification": {
"PredefinedMetricType": "CassandraWriteCapacityUtilization"
},
"ScaleOutCooldown": 60,
"ScaleInCooldown": 60,
"TargetValue": 50.0
}


aws application-autoscaling put-scaling-policy \
--service-namespace cassandra \
--resource-id "keyspace/ks01/table/tab1" \
--scalable-dimension "cassandra:table:WriteCapacityUnits" \
--policy-name "policy01" \
--policy-type "TargetTrackingScaling" \
--target-tracking-scaling-policy-configuration file://a.json


aws application-autoscaling describe-scaling-policies \
--service-namespace cassandra \
--resource-id "keyspace/ks01/table/tab1" \
--policy-name "policy01"


-- 8. Application Auto Scaling アクションを表示する


aws application-autoscaling describe-scaling-activities \
--service-namespace cassandra


-- 9. クリーンアップ

-- スケーリングポリシー一覧
aws application-autoscaling describe-scaling-policies --service-namespace cassandra


-- スケーリングポリシー削除
aws application-autoscaling delete-scaling-policy \
--service-namespace cassandra \
--resource-id "keyspace/ks01/table/tab1" \
--scalable-dimension "cassandra:table:WriteCapacityUnits" \
--policy-name "policy01"

-- スケーリングターゲット一覧
aws application-autoscaling describe-scalable-targets --service-namespace cassandra


-- スケーリングターゲット削除
aws application-autoscaling deregister-scalable-target \
--service-namespace cassandra \
--resource-id "keyspace/ks01/table/tab1" \
--scalable-dimension "cassandra:table:WriteCapacityUnits"


-- テーブルの削除
DROP TABLE IF EXISTS "ks01".tab1 ;
SELECT * FROM system_schema.tables WHERE keyspace_name = 'ks01' ;

-- Keyspaceの削除

DROP KEYSPACE IF EXISTS "ks01" ;
SELECT * from system_schema.keyspaces ;


-- サービス固有の認証情報一覧
aws iam list-service-specific-credentials


-- サービス固有の認証情報の削除

aws iam delete-service-specific-credential \
--service-specific-credential-id XXXXXXXXXXXXXXXXXXXXX