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認定クラウドプラクティショナー 改訂第2版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
Amazon LinuxにRedmine 環境構築(エラーと対応をそのまま記載版)
Amazon Linuxにgit + Redmineの環境を構築してみます。 自 …
-
AWSのアカウントを新規作成と、最低限やっておいた方がいいMFAの設定
AWSのアカウントを新規作成する手順を書き出しておきます。 ※2017年8月6日 …
-
特定AWSアカウント特定リージョンのSNSトピックを削除するLambda(Python)
やりたいこと 特定アカウント内特定リージョン内のSNSトピックを全部削除したいで …
-
CloudFrontのカスタムヘッダーがなければALBのルーティングで403レスポンスを返す
大阪リージョンにはWAFがまだないです(2021年4月現在) 今のこのブログの構 …
-
RocketChat(EC2インスタンス)でCPU80%以上を10分間継続したら再起動する
先日、数日間のやり取り用で完全に使い捨てとして使っているRocketChatで、 …
-
AWS Glueチュートリアル
AWS Glueのマネジメントコンソールの左ペインの一番下にチュートリアルがあり …
-
CloudWatch Logs機密データ保護を設定しました
Amazon CloudWatch Logs を使用して機密データを保護するがリ …
-
ads.txtをS3に配置してCloudFrontで設定する
ads.txtのダウンロード ads.txt設置してねってメールが来てました。 …
-
当ブログ(WordPress)のCloudFrontのキャッシュヒット率があがった
当ブログの構成です。 S3とALB+EC2 Auto Scalingで構成してい …
-
API GatewayをトリガーにしたときのLambdaリソースベースポリシー
先日、SwaggerからAPI Gatewayを作ったときに、API Gatew …