① DAX 項目キャッシュの動作
---- 読み込み操作
リクエストが結果的に整合性のある読み込み (デフォルトの動作) を指定する場合は、その項目を DAX から読み込もうとします。
DAX に項目がある場合 (キャッシュヒット)、DAX は DynamoDB にアクセスせずにアプリケーションに項目を返します。
DAX に項目がない場合 (キャッシュミス)、DAX はリクエストを DynamoDB に渡します。DynamoDB からの応答を受信すると、DAX は結果をアプリケーションに返します。
ただし、プライマリノードのキャッシュにも結果を書き込みます。
リクエストが強い整合性のある読み込みを指定する場合、DAX はリクエストを DynamoDB に渡します。DynamoDB からの結果は DAX にキャッシュされません。
代わりに、それらは単にアプリケーションに返されます。
---- 書き込み操作
これらのオペレーションでは、データはまず DynamoDB テーブルに書き込まれ、その後 DAX クラスターに書き込まれます。
オペレーションは、データがテーブルと DAX の両方に生協に書き込まれた場合にのみ成功します。
② DAX クエリキャッシュの動作
項目キャッシュ、または基礎となる DynamoDB テーブルに対する更新によって、クエリキャッシュに保存されている結果が無効化されたり変更されたりすることはありません。
アプリケーションでは、クエリキャッシュの TTL 値、およびクエリキャッシュと項目キャッシュ間の結果の不一致をアプリケーションで許容できる期間を考慮に入れる必要があります。
-- 1. IAMポリシー作成
vim policy01.json
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"dynamodb:DescribeTable",
"dynamodb:PutItem",
"dynamodb:GetItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:BatchGetItem",
"dynamodb:BatchWriteItem",
"dynamodb:ConditionCheckItem"
],
"Effect": "Allow",
"Resource": [
"arn:aws:dynamodb:ap-northeast-1:999999999999:*"
]
}
]
}
aws iam create-policy \
--policy-name policy01 \
--policy-document file://policy01.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "dax.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
aws iam create-role \
--role-name role01 \
--assume-role-policy-document file://role01.json
-- 3. ポリシーをロールにアタッチ
aws iam attach-role-policy \
--policy-arn arn:aws:iam::999999999999:policy/policy01 \
--role-name role01
aws dax create-cluster \
--cluster-name dax01 \
--node-type dax.t3.small \
--replication-factor 1 \
--iam-role-arn arn:aws:iam::999999999999:role/role01
aws dax describe-clusters --cluster-name dax01
-- 5. 動作確認
sudo yum -y install python-pip
pip install amazon-dax-client
wget http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/samples/TryDax.zip
unzip TryDax.zip
cd TryDax/python
python 01-create-table.py
python 02-write-data.py
python 03-getitem-test.py
python 04-query-test.py
python 05-scan-test.py
aws dax describe-clusters --query "Clusters[*].ClusterDiscoveryEndpoint"
python 03-getitem-test.py dax01.xxxxxx.dax-clusters.ap-northeast-1.amazonaws.com
python 04-query-test.py dax01.xxxxxx.dax-clusters.ap-northeast-1.amazonaws.com
python 05-scan-test.py dax01.xxxxxx.dax-clusters.ap-northeast-1.amazonaws.com
python 06-delete-table.py
-- 6. クリーンアップ
-- ロールの一覧
aws iam list-roles | grep role01
-- ロールの削除
aws iam detach-role-policy \
--role-name role01 \
--policy-arn arn:aws:iam::999999999999:policy/policy01
aws iam delete-role --role-name role01
-- ポリシーの一覧
aws iam list-policies | grep policy01
-- ポリシーの削除
aws iam delete-policy \
--policy-arn arn:aws:iam::999999999999:policy/policy01
-- DAX クラスター一覧
aws dax describe-clusters
-- DAX クラスター削除
aws dax delete-cluster --cluster-name dax01