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
関連記事
-
-
Cloud9でAWS CDK環境
最初ローカルに作ろうと思ったのですが、環境依存がというか、Macbookの環境で …
-
-
Amazon Aurora Serverlessを使い始めてみました(1日経過しての課金結果も)
祝!!! Amazon Aurora ServerlessがGAになりました! …
-
-
AWS Certificate Manager証明書とAmazon Route 53でAmazon API GatewayのAPIのカスタムドメイン名前解決する
AWS Certificate ManagerとAmazon Route 53と …
-
-
Aurora Serverless Data APIを有効にしてQuery Editorを使ってみました
Aurora ServerlessのMySQLでData APIを有効にして作成 …
-
-
リザーブドインスタンス推奨事項を確認した
マネジメントコンソールで[AWSコスト管理]カテゴリの[AWS Cost Exp …
-
-
AWS CDK とにかくサンプルでやってみる
Cloud9でAWS CDK環境で作った環境でサンプルプロジェクトからのデプロイ …
-
-
AWS Organizationsでタグポリシーを設定しようとしました
Organizationsで[タグポリシーを有効にする]ボタンを押下しました。 …
-
-
AWS Organizationsで新規メンバー登録したアカウントを組織から離して解約
2021年現在ではこの方法しかないと認識していますので書き残します。 そのうち新 …
-
-
API Gatewayで顧客レベルの使用量プランを設定する
API GatewayのAPIキーを使って使用量プランでのスロットリングも設定し …
-
-
Amazon SES(Simple Email Service)でメール受信時のアクションでLambdaを実行して渡されるデータを見てみる
Amazon SESで受信したメールをS3に保存して、S3のトリガーでLambd …