Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Aurora ServerlessのData APIについて

Avatar for TomoyaIwata TomoyaIwata
November 29, 2019

Aurora ServerlessのData APIについて

HIGOBASHI.AWS 第12回の発表資料です

Avatar for TomoyaIwata

TomoyaIwata

November 29, 2019
Tweet

More Decks by TomoyaIwata

Other Decks in Technology

Transcript

  1. 7 アジェンダ 無駄なコスト • Aurora/Aurora Serverlessとは︖ 3分 • Data APIの裏側に関する考察

    • Data APIについて • Data APIのユースケースに関する考察 5分 9分 9分 • まとめ 2分
  2. 8 アジェンダ 無駄なコスト • Aurora/Aurora Serverlessとは︖ 3分 • Data APIの裏側に関する考察

    • Data APIについて • Data APIのユースケースに関する考察 5分 9分 9分 • まとめ 2分
  3. 15 アジェンダ 無駄なコスト • Aurora/Aurora Serverlessとは︖ 3分 • Data APIの裏側に関する考察

    • Data APIについて • Data APIのユースケースに関する考察 5分 9分 9分 • まとめ 2分
  4. 16 Data APIとは • HTTPSのエンドポイントからAurora Serverlessにア クセスする機能 • DBドライバが無くてもAWS SDKだけでAurora

    Serverlessにアクセス可能 • クエリの実⾏結果をJSON形式で受けとることが可能
  5. 17 Data APIの実⾏例 { "records": [ [ { "longValue": 1

    }, { "stringValue": "TEST" }, { "stringValue": "2019-06-01 04:15:10.0" } ] ], "numberOfRecordsUpdated": 0 }
  6. 19 Data APIの制限事項 • SQLの呼び出しは45秒でタイムアウト • レスポンスは最⼤1,000⾏まで • レスポンスは最⼤1Mまで •

    結果セットの1⾏あたり64Kまで • トランザクションは最⼤24時間まで • 3分間トランザクションIDの呼び出しがない場合はタイ ムアウト
  7. 23 アジェンダ 無駄なコスト • Aurora/Aurora Serverlessとは︖ 3分 • Data APIの裏側に関する考察

    • Data APIについて • Data APIのユースケースに関する考察 5分 9分 9分 • まとめ 2分
  8. 27 接続⽅式の違い • 認証⽅式の違い • 単純なユーザー名/パスワードによる認証とSIGV4の違い • 認証を⾏うコンポーネントの違い • Data

    APIのエンドポイントでまずSIGV4による認証とIAMによ る認可を⾏う • Data APIの認証/認可がOKの場合にDB側の認証/認可に進む 通常のエンドポイントをPublic公開するのとどう違う︖︖
  9. 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
  10. 30 IAMデータベース認証との違い PostgreSQL で IAM データベース認証を使⽤する場合、以下の制限に 注意してください。 • データベースインスタンスの 1

    秒あたりの最⼤接続数は、インス タンスタイプとワークロードに応じて制限される場合があります。 https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html#UsingWithRDS.IAMDBAuth.Availability
  11. 33 疑問その2 # DBへの接続処理 # コールドスタート時のみ接続し、接続を使い回すことでオー バーヘッドを低減する def handler(event, conext):

    # lambdaのメイン処理 こういう実装だとアイドル中のLambda実⾏環境がDB接続を消費 して無駄なのは分かるが...
  12. 34 疑問その2 def handler(event, conext): # lambdaのメイン処理1 # DBへの接続処理 #

    lambdaのメイン処理2(DBアクセスが必要な処理) # DB切断処理 # lambdaのメイン処理3 こうすれば良くない︖︖
  13. 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⽂
  14. 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)を実⾏するだけの コード
  15. 43 検証⽤コード hey -t 0 -n 200 -c 200 https://xxxxxxxxxx

    200並列で合計200回のリクエストを実⾏
  16. 44 検証結果 postgres=> select count(*) from pg_stat_activity where usename <>

    'rdsadmin' and usename <> 'postgres' ; count ------- 100 (1 row) 200並列でアクセスしたのに100接続しか消費していない
  17. 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秒弱で完了したリクエストでほぼ半々
  18. 48 検証⽤コード hey -t 0 -n 400 -c 400 https://xxxxxxxxxx

    400並列で合計400回のリクエストを実⾏
  19. 49 結果 datname | usename | count ------------+--------------+------- | |

    5 postgres | postgres | 1 dataapi_db | dataapi_user | 171 | rdsadmin | 1 rdsadmin | rdsadmin | 3 (5 rows) max_connectionsの限界まで使い切れた
  20. 51 検証環境の構成 AWS Cloud VPC Data API Endpoint Data APIを使わず

    普通に接続 • Aurora Serverlessと同⼀VPCのEC2から通常のDB接続を確⽴ • この状態で同じ検証を流してみる
  21. 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に制限
  22. 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の 接続エラーが発⽣
  23. 55 アジェンダ 無駄なコスト • Aurora/Aurora Serverlessとは︖ 2分 • Data APIの裏側に関する考察

    • Data APIについて • Data APIのユースケースに関する考察 5分 9分 9分 • まとめ 2分
  24. 58 IoT機器からData APIを利⽤する構成 AWS Cloud VPC Data API Endpoint •

    AWS SDKがあればDBドライバは不要 • IoT機器の限られたリソースでも簡単にRDBへのアクセスが実現可能
  25. 63 LambdaからData APIを利⽤する際の留意点 • VPC Lambdaと⽐較するとコールドスタートが遅くなり⾟い • Data APIからAurora ServerlessにアクセスするだけであればLambda実

    ⾏環境にバンドルされたライブラリだけで実現可能 ※Python3.6,Node.js10で動作を確認 • VPC Lambdaから通常の接続⽅式を利⽤する場合は追加でライブラリ の導⼊が必要 → コールドスタートに悪影響
  26. 66 通常接続 with VPC Lambda と Data APIの⽐較 アプリの実装容易性 コールドスタート

    同時接続耐性 VPC Lambda ORMの恩恵を受けやすい 遅くなりがち 弱 Data API ORMの恩恵を受け⾟い 遅くなりにくい 強 複雑なクエリが不要で、⼤量の書き込みが発⽣するようなワーク ロードではData APIの⽅が優位になりそう
  27. 67 アジェンダ 無駄なコスト • Aurora/Aurora Serverlessとは︖ 2分 • Data APIの裏側に関する考察

    • Data APIについて • Data APIのユースケースに関する考察 5分 9分 9分 • まとめ 2分
  28. 71