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認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
AWS Summit Tokyo 2017 聴講したセッションのメモ
2017年6月に参加しましたAWS Summitで聴講したセッションのメモを記し …
-
RDSスナップショットのS3エクスポート結果確認
RDSのスナップショットをS3へエクスポートが日本語マネジメントコンソールでもで …
-
RDSのポイントインタイムリカバリをしました
WordPressで画像アップロードができなくなった(AWS WAFでブロックし …
-
Amazon Connectから問い合わせ追跡レコード(CTR)をエクスポート
Amazon Connectから発信した電話に出たのか、出なかったのかを確認した …
-
Lambda関数からAWS Systems Managerパラメータストアの値を取得して更新する
Lambda関数で自分自身の環境変数を更新する だと、Lambdaのエイリアスと …
-
RDSインスタンス作成時にEC2に接続設定するオプション
EC2 インスタンスと RDS データベース を自動的に接続するの動作を確認した …
-
「JAWS-UG 名古屋 2022年 “re:Invent”の復習~忘年会~」に参加しました
re:Inventのおみやげも飲み物、ピザ、お寿司もたくさん。 コラボベースさん …
-
AWS Lambdaで「Process exited before completing request」
AWS lambdaで「Process exited before comple …
-
AWS Elastic Beanstalkによって作成されたS3バケットはDeleteBucketが拒否されていた
ちょっとした検証をしたあとに、Elastic Beanstalkのアプリケーショ …
-
php-fpm で Out of memoryが発生した際にメール通知する(AWS CloudWatch , Amazon SNS)
AWS CloudWatch LogsエージェントでAmazon EC2上のNg …