Share
Embed
Transcript
71 slides
-
5 今⽇話すこと 無駄なコスト • Aurora/Aurora Serverlessの基礎知識 • Data APIについてちょっとだけ深掘りした話 •
Data APIのユースケースに関する考察 -
7 アジェンダ 無駄なコスト • Aurora/Aurora Serverlessとは︖ 3分 • Data APIの裏側に関する考察
• Data APIについて • Data APIのユースケースに関する考察 5分 9分 9分 • まとめ 2分 -
8 アジェンダ 無駄なコスト • Aurora/Aurora Serverlessとは︖ 3分 • Data APIの裏側に関する考察
• Data APIについて • Data APIのユースケースに関する考察 5分 9分 9分 • まとめ 2分 -
15 アジェンダ 無駄なコスト • Aurora/Aurora Serverlessとは︖ 3分 • Data APIの裏側に関する考察
• Data APIについて • Data APIのユースケースに関する考察 5分 9分 9分 • まとめ 2分 -
16 Data APIとは • HTTPSのエンドポイントからAurora Serverlessにア クセスする機能 • DBドライバが無くてもAWS SDKだけでAurora
Serverlessにアクセス可能 • クエリの実⾏結果をJSON形式で受けとることが可能 -
17 Data APIの実⾏例 { "records": [ [ { "longValue": 1
}, { "stringValue": "TEST" }, { "stringValue": "2019-06-01 04:15:10.0" } ] ], "numberOfRecordsUpdated": 0 } -
18 Data APIでできること • ExecuteStatement • BatchExecuteStatement ※パラメータも利⽤可能 Extended Queryプロトコルでunnamedなprepared-statemenを実行
SQL の実⾏ • BeginTransaction • RollbackTransaction • CommitTransaction トランザクション制御 -
19 Data APIの制限事項 • SQLの呼び出しは45秒でタイムアウト • レスポンスは最⼤1,000⾏まで • レスポンスは最⼤1Mまで •
結果セットの1⾏あたり64Kまで • トランザクションは最⼤24時間まで • 3分間トランザクションIDの呼び出しがない場合はタイ ムアウト -
20 Data APIのメリット • インターネットに公開されたエンドポイントから Aurora Serverlessにアクセスできる • http(s)でAurora Serverlessにアクセスできる
• 利⽤者側はDBとの接続を意識せずステートレスに利 ⽤可能 -
23 アジェンダ 無駄なコスト • Aurora/Aurora Serverlessとは︖ 3分 • Data APIの裏側に関する考察
• Data APIについて • Data APIのユースケースに関する考察 5分 9分 9分 • まとめ 2分 -
27 接続⽅式の違い • 認証⽅式の違い • 単純なユーザー名/パスワードによる認証とSIGV4の違い • 認証を⾏うコンポーネントの違い • Data
APIのエンドポイントでまずSIGV4による認証とIAMによ る認可を⾏う • Data APIの認証/認可がOKの場合にDB側の認証/認可に進む 通常のエンドポイントをPublic公開するのとどう違う︖︖ -
29 IAMデータベース認証との違い MySQL で IAM データベース認証を使⽤する場合、1 秒あたりの新しい接続数は 256 ま でに制限されます。db.t2.micro
DB インスタンスクラスを使⽤している場合、この制限 は 1 秒あたり 10 接続に制限されます。 最近はIAMデータベース認証という選択肢も... MySQL エンジンを使⽤する場合には、以下のことをお勧めします。 • データベースへの⼀時的な個⼈アクセス⽤メカニズムとして IAM データベース認証 を使⽤します。 • 簡単に再試⾏できるワークロードに対してのみ、IAM データベース認証を使⽤します。 • アプリケーションで 1 秒あたり 256 を超える新しい接続が必要な場合は、IAM データ ベース認証を使⽤しないでください。 https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html#UsingWithRDS.IAMDBAuth.Availability -
30 IAMデータベース認証との違い PostgreSQL で IAM データベース認証を使⽤する場合、以下の制限に 注意してください。 • データベースインスタンスの 1
秒あたりの最⼤接続数は、インス タンスタイプとワークロードに応じて制限される場合があります。 https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html#UsingWithRDS.IAMDBAuth.Availability -
31 Aurora Serverlessへの接続⽅式の⽐較 認証⽅式 同時接続への耐性 DDOS耐性 通常の接続 ユーザー名/パスワード 弱 弱
IAMデータベース認証 SIGV4 弱 強 Data API SIGV4 強 ※詳しくは後ほど 強 -
33 疑問その2 # DBへの接続処理 # コールドスタート時のみ接続し、接続を使い回すことでオー バーヘッドを低減する def handler(event, conext):
# lambdaのメイン処理 こういう実装だとアイドル中のLambda実⾏環境がDB接続を消費 して無駄なのは分かるが... -
34 疑問その2 def handler(event, conext): # lambdaのメイン処理1 # DBへの接続処理 #
lambdaのメイン処理2(DBアクセスが必要な処理) # DB切断処理 # lambdaのメイン処理3 こうすれば良くない︖︖ -
38 LOG: connection received: host=10.1.13.68 port=24081 LOG: connection authorized: user=cm-iwata
database=iwatadb LOG: execute <unnamed>: SET extra_float_digits = 3 LOG: execute <unnamed>: SET application_name = 'PostgreSQL JDBC Driver’ LOG: execute <unnamed>: select pg_sleep(10) LOG: execute <unnamed>: DISCARD ALL LOG: execute <unnamed>: SELECT n.nspname = ... DETAIL: parameters: $1 = '2278' LOG: execute <unnamed>: SELECT typinput=... DETAIL: parameters: $1 = 'void' LOG: disconnection: session time: 0:05:31.980 user=cm-iwata database=iwatadb host=10.1.13.68 port=24081 Data API⽤のコネクションは約5:30維持されていた AWS CLIで指定した SQL⽂ -
41 検証環境の構成 • Aurora Serverlessのmax_connectionsは180 • 負荷掛け⽤のPCからAPI GW経由でLambdaに200並列アクセス • LambdaはData
API経由でSQLを発⾏ AWS Cloud VPC Data API Endpoint -
42 検証⽤コード import json import boto3 rdsData = boto3.client('rds-data') def
lambda_handler(event, context): rdsData.execute_statement( resourceArn = <DBクラスタのARN> secretArn = <シークレットのARN> database = 'dataapi_db', sql = 'select pg_sleep(5)') return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') } • pg_sleep(5)を実⾏するだけの コード -
43 検証⽤コード hey -t 0 -n 200 -c 200 https://xxxxxxxxxx
200並列で合計200回のリクエストを実⾏ -
44 検証結果 postgres=> select count(*) from pg_stat_activity where usename <>
'rdsadmin' and usename <> 'postgres' ; count ------- 100 (1 row) 200並列でアクセスしたのに100接続しか消費していない -
45 検証結果 Response time histogram: 10.342 [1] | 12.225 [99]
|▪▪▪▪▪▪▪▪▪▪▪... 14.108 [0] | 15.991 [0] | 17.874 [0] | 19.757 [0] | 21.640 [96] |▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪... 23.523 [0] | 25.406 [0] | 27.289 [0] | 29.172 [4] |▪▪ 10秒弱で完了したリクエストと20秒弱で完了したリクエストでほぼ半々 -
48 検証⽤コード hey -t 0 -n 400 -c 400 https://xxxxxxxxxx
400並列で合計400回のリクエストを実⾏ -
49 結果 datname | usename | count ------------+--------------+------- | |
5 postgres | postgres | 1 dataapi_db | dataapi_user | 171 | rdsadmin | 1 rdsadmin | rdsadmin | 3 (5 rows) max_connectionsの限界まで使い切れた -
51 検証環境の構成 AWS Cloud VPC Data API Endpoint Data APIを使わず
普通に接続 • Aurora Serverlessと同⼀VPCのEC2から通常のDB接続を確⽴ • この状態で同じ検証を流してみる -
52 結果 datname | usename | count ----------------+------------------+------- | |
5 non_dataapi_db | non_dataapi_user | 130 dataapi_db | dataapi_user | 41 postgres | postgres | 1 | rdsadmin | 1 rdsadmin | rdsadmin | 3 (6 rows) 通常のDB接続を130確⽴している状態だと、Data API⽤ の接続は41に制限 -
53 結果 datname | usename | count ----------------+------------------+------- | |
5 non_dataapi_db | non_dataapi_user | 170 dataapi_db | dataapi_user | 1 postgres | postgres | 1 | rdsadmin | 1 rdsadmin | rdsadmin | 3 (6 rows) 通常のDB接続を170確⽴している状態だと、Data APIの 接続エラーが発⽣ -
55 アジェンダ 無駄なコスト • Aurora/Aurora Serverlessとは︖ 2分 • Data APIの裏側に関する考察
• Data APIについて • Data APIのユースケースに関する考察 5分 9分 9分 • まとめ 2分 -
58 IoT機器からData APIを利⽤する構成 AWS Cloud VPC Data API Endpoint •
AWS SDKがあればDBドライバは不要 • IoT機器の限られたリソースでも簡単にRDBへのアクセスが実現可能 -
63 LambdaからData APIを利⽤する際の留意点 • VPC Lambdaと⽐較するとコールドスタートが遅くなり⾟い • Data APIからAurora ServerlessにアクセスするだけであればLambda実
⾏環境にバンドルされたライブラリだけで実現可能 ※Python3.6,Node.js10で動作を確認 • VPC Lambdaから通常の接続⽅式を利⽤する場合は追加でライブラリ の導⼊が必要 → コールドスタートに悪影響 -
64 LambdaからData APIを利⽤する際の留意点 https://github.com/chanzuckerberg/sqlalchemy-aurora-data-api • 既存のORMライブラリは 基本使えないと思った⽅ が良い • 複雑処理を実装するのは
⾟そう • Data APIに対応したライブ ラリも出てきてはいる -
66 通常接続 with VPC Lambda と Data APIの⽐較 アプリの実装容易性 コールドスタート
同時接続耐性 VPC Lambda ORMの恩恵を受けやすい 遅くなりがち 弱 Data API ORMの恩恵を受け⾟い 遅くなりにくい 強 複雑なクエリが不要で、⼤量の書き込みが発⽣するようなワーク ロードではData APIの⽅が優位になりそう -
67 アジェンダ 無駄なコスト • Aurora/Aurora Serverlessとは︖ 2分 • Data APIの裏側に関する考察
• Data APIについて • Data APIのユースケースに関する考察 5分 9分 9分 • まとめ 2分 -
68 まとめ • Aurora ServerlessのData APIを利⽤することで同時接続耐性の⾼いシ ステムを構築しやすくなる • Data APIを利⽤する際はセキュリティをしっかりと考慮する
• Data APIはAurora Serverlessが前提となるため、⼀時停⽌〜復帰の遅 延が発⽣し得ることを念頭に置いておく