DynamoDB Accelerator(DAX)のサンプルアプリケーション(Python)を実行
2022/09/15
DynamoDBデベロッパーガイドのDynamoDB Accelerator(DAX)のサンプルアプリケーション(Python)を実行して確認しました。
目次
DAXの準備
DAX用のサブネットグループを2つのAZのプライベートサブネットで作成しました。
DAXのパラメーターグループは、主にTTLの設定でした。
DAXクラスター用のセキュリティグループを作成しました。
アプリケーションクライアント用EC2からのリクエストのみを許可するように設定しました。
8111はDAXクラスターを暗号化しない場合のポートでした。
暗号化する場合は9111です。
DAXクラスターのノードタイプはdax.t3.microにしました。
検証用なのでノードは1つ。
あらかじめ作成したサブネットグループとセキュリティグループを選択しました。
DAXサービスがDynamoDBテーブルに対してリクエストするためのIAMロールとIAMポリシーは新規作成しました。
こんなIAMポリシーが作成されました。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:BatchGetItem", "dynamodb:GetItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:BatchWriteItem", "dynamodb:DeleteItem", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DescribeLimits", "dynamodb:DescribeTimeToLive", "dynamodb:DescribeTable", "dynamodb:ListTables" ], "Resource": [ "arn:aws:dynamodb:us-east-1:123456789012:table/*" ] } ] } |
あらかじめ作成しておいたパラメーターグループを選択して、クラスターを作成しました。
アプリケーションクライアント用EC2の起動
DAXを作成したVPCのパブリックサブネットにEC2インスタンスを起動して、セッションマネージャーで接続しました。
EC2のIAMロールにはデベロッパーガイドに記載のとおり、DynamoDBとDAXに対してのフルアクセスを設定しました。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dax:*" ], "Effect": "Allow", "Resource": [ "*" ] }, { "Action": [ "dynamodb:*" ], "Effect": "Allow", "Resource": [ "*" ] } ] } |
サンプルアプリケーションの実行
Amazon Linux2の現行バージョンでは、pip3、Python3なので、コマンドを対応させました。
あと、2022年7月26日現在のサンプルアプリケーションは、デベロッパーガイド記載のものから変更されているようで、リージョンを環境変数から取得していました。
|
1 2 |
region = os.environ.get('AWS_DEFAULT_REGION', 'us-west-2') |
バージニア北部で試していたので、環境変数にus-east-1を設定してから各サンプルアプリを実行しました。
|
1 2 |
export AWS_DEFAULT_REGION=us-east-1 |
|
1 2 3 4 |
sudo pip3 install amazon-dax-client wget http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/samples/TryDax.zip unzip TryDax.zip |
DAX Pythonクライアントをインストールしてサンプルアプリケーションのダウンロード、展開をしました。
|
1 2 3 |
python3 01-create-table.py python3 02-write-data.py |
サンプル用テーブルが作成されて、テストデータが書き込まれました。
まず、DynamoDBに対して、GetItem、Query、Scanをして出力から時間を確認しました。
GetItemは50回の平均、Query、Scanは5回実行の平均値でした。
|
1 2 3 4 5 6 7 |
$ python3 03-getitem-test.py Total time: 34.21217966079712 sec - Avg time: 0.6842435932159424 sec $ python3 04-query-test.py Total time: 0.07793164253234863 sec - Avg time: 0.015586328506469727 sec $ python3 05-scan-test.py Total time: 0.09749674797058105 sec - Avg time: 0.01949934959411621 sec |
次に、DAXを指定して実行しました。
DAXエンドポイントを指定してサンプルプログラムを実行しました。
|
1 2 3 4 5 6 7 |
$ python3 03-getitem-test.py dax://demodaxcluster.8mguwv.dax-clusters.us-east-1.amazonaws.com Total time: 6.488941669464111 sec - Avg time: 0.12977883338928223 sec $ python3 04-query-test.py dax://demodaxcluster.8mguwv.dax-clusters.us-east-1.amazonaws.com Total time: 0.03676867485046387 sec - Avg time: 0.007353734970092773 sec $ python3 05-scan-test.py dax://demodaxcluster.8mguwv.dax-clusters.us-east-1.amazonaws.com Total time: 0.06450843811035156 sec - Avg time: 0.012901687622070312 sec |
Scanはそれほどでもありませんでしたが、Queryは倍ぐらい、GetItemはかなり速くなったようです。
DAX Pythonクライアントは次のように使用されていました。
|
1 2 3 4 5 6 |
import amazondax client = amazondax.AmazonDaxClient(session, region_name=region, endpoints=[endpoint]) result = client.scan({ 'TableName': table_name }) |
endpointはdax://からはじまるDAXエンドポイントが指定されています。
DAXがプライベートサブネットでも、NATゲートウェイやVPCエンドポイントはなしで問題ありませんでした。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「AWS認定資格試験テキスト AWS認定AIプラクティショナー」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
関連記事
-
-
AWS ControlTowerで既存アカウントをまとめて追加
AWS Organizationsに新たに招待したアカウントをAWS Contr …
-
-
Amazon Q Developer for CLIをmacOSにインストールしました
2025/3/26のAWS Expert Online for JAWSの「Am …
-
-
AWSのAmazon LinuxにGitマスターサーバをインストールしてRedmineリポジトリブラウザで見る
Amazon LinuxにGitをインストールする Gitをインストールして自動 …
-
-
「JAWS-UG 名古屋 2022年 “re:Invent”の復習~忘年会~」に参加しました
re:Inventのおみやげも飲み物、ピザ、お寿司もたくさん。 コラボベースさん …
-
-
Amazon Glacierでボールトロックポリシーの作成開始をしてみました
Glacierを単体で使用することもそうそうないので、確認しました。 まずボール …
-
-
AWS Organizationsからメンバーアカウントを直接「閉じる」ことができるようになりました
これまでは、メンバーアカウントはOrganizations組織から「除外」して独 …
-
-
AWSのサービス数を数えてみました(2020/5/23)
何をもってサービスという単位にするかというのはあるかもしれませんが、とりあえず情 …
-
-
RDS自動バックアップの自動クロスリージョンコピー
このブログのRDS for MySQLはAWS Backupで大阪リージョンから …
-
-
EC2インスタンスプロファイルによってAssumeRoleされた認証情報の有効期限は短くできるのでしょうか
「EC2インスタンスプロファイルによってAssumeRoleされた認証情報の有効 …
-
-
RDSリザーブドDBインスタンスを購入しました
リザーブドインスタンス推奨事項を確認したで確認した結果、購入したほうがよさそうで …








