Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Aurora ServerlessのData APIについて
Search
TomoyaIwata
November 29, 2019
Technology
1
4.2k
Aurora ServerlessのData APIについて
HIGOBASHI.AWS 第12回の発表資料です
TomoyaIwata
November 29, 2019
Tweet
Share
More Decks by TomoyaIwata
See All by TomoyaIwata
これでLambdaが不要に?!Step FunctionsのJSONata対応について
iwatatomoya
2
3.7k
Qdrantでベクトルデータベースに入門してみよう
iwatatomoya
0
320
詳解 AWS Lambdaコールドスタート
iwatatomoya
1
1.9k
真のサーバーレスへ向けたAuroraの進化Aurora Limitless Database
iwatatomoya
1
4.5k
AWS SDKのClientはFactory経由で作ろう
iwatatomoya
1
710
OpentelemetryでアプリケーションのObservabilityを強化しよう
iwatatomoya
0
930
AWS Lambdaは俺が作った
iwatatomoya
2
2.2k
SnapStartの未来についての期待と妄想
iwatatomoya
1
1.3k
実例から学ぶ! AWSを活用したシステム開発の勘所
iwatatomoya
1
3k
Other Decks in Technology
See All in Technology
Wantedly での Datadog 活用事例
bgpat
1
610
[トレノケ雲の会 mod.13] 3回目のre:Inventで気づいたこと -CloudOperationsを添えて-
shintaro_fukatsu
0
110
Yahoo! ズバトクにおけるフロントエンド開発
lycorptech_jp
PRO
0
100
Oracle Cloudの生成AIサービスって実際どこまで使えるの? エンジニア目線で試してみた
minorun365
PRO
4
300
社外コミュニティで学び社内に活かす共に学ぶプロジェクトの実践/backlogworld2024
nishiuma
0
280
能動的ドメイン名ライフサイクル管理のすゝめ / Practice on Active Domain Name Lifecycle Management
nttcom
0
190
コンテナセキュリティのためのLandlock入門
nullpo_head
2
330
PHPerのための計算量入門/Complexity101 for PHPer
hanhan1978
5
460
生成AIのガバナンスの全体像と現実解
fnifni
1
200
TypeScript開発にモジュラーモノリスを持ち込む
sansantech
PRO
2
130
Working as a Server-side Engineer at LY Corporation
lycorp_recruit_jp
0
340
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
130
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
3
170
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
How STYLIGHT went responsive
nonsquared
96
5.2k
Faster Mobile Websites
deanohume
305
30k
Agile that works and the tools we love
rasmusluckow
328
21k
Embracing the Ebb and Flow
colly
84
4.5k
GraphQLとの向き合い方2022年版
quramy
44
13k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Side Projects
sachag
452
42k
Transcript
1 Aurora Serverlessの Data APIについて
スライドは後で⼊⼿することが出来ますので 発表中の内容をメモする必要はありません。 写真撮影をする場合は フラッシュ・シャッター⾳が出ないようにご配慮ください Attention
3 ⾃⼰紹介 lサーバーレス開発部 改め CX事業本部 l好きなAWSサービス: AWS Lambda l好きなRDB PostgreSQL
lMySQLはド素⼈ 岩⽥ 智哉
4 MySQLは良く分からないので Aurora PostgreSQL compatible を前提に話します
5 今⽇話すこと 無駄なコスト • Aurora/Aurora Serverlessの基礎知識 • Data APIについてちょっとだけ深掘りした話 •
Data APIのユースケースに関する考察
6 今⽇話さないこと 無駄なコスト •LambdaやRDS等AWSの各サービスに関する基礎知識 •アプリの実装寄りの話 •DBの設計や運⽤の話
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分
9 Auroraとは • クラウド時代にAWSが再設計したRDMS • MySQL互換、PostgreSQL互換の2種類から選択可能 • MySQLの最⼤5倍、PostgreSQLの最⼤3倍の性能
10 Auroraのアーキテクチャ概要 • ストレージレイヤーがDB インスタンスから独⽴ • このアーキテクチャが 様々なメリットを実現 ※画像はhttps://aws.amazon.com/jp/blogs/news/new-parallel-query-for-amazon-aurora/ より引⽤
11 Auroraとは https://dev.classmethod.jp/cloud/aws/developers-io-2019-in-osaka-aurora-or-rds このブログに⾊々詳しく書かれています
12 Aurora Serverless ※画像はhttps://aws.amazon.com/jp/blogs/news/amazon-aurora-postgresql-serverless-now-generally-available/ より引⽤ •⾼可⽤性/⾃動スケール •パッチ等の管理作業不要 •アイドル時間に課⾦されない ※ストレージの課⾦はあり インスタンスレイヤが⾃動スケールする動作モード
13 Serverless Architecture な特性を備えたRDB
14 ※⼀般的にServerless Architectureと聞いて 思い浮かべるLambdaからの利⽤を ⽬的として作られたサービスでは無い
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との接続を意識せずステートレスに利 ⽤可能
21 Data APIの位置付け リリース当時はVPC Lambdaの コールドスタートが遅く、Lambdaから RDBを利⽤する⽅法として期待された
22 Data APIが不要に︖︖ 2019/9/27 VPC Lambdaアーキテクチャ改善が東京リージョンに適⽤完了 https://aws.amazon.com/jp/blogs/compute/announcing-improved-vpc-networking-for-aws-lambda-functions/
23 アジェンダ 無駄なコスト • Aurora/Aurora Serverlessとは︖ 3分 • Data APIの裏側に関する考察
• Data APIについて • Data APIのユースケースに関する考察 5分 9分 9分 • まとめ 2分
24 Data API発表後に良く⽿にした話... これでVPC Lambda無しでRDB使える︕︕ しかもhttpsのエンドポイントだから 同時接続数の問題が解決する︕︕
なぜ︖︖
26 疑問その1 今までもインターネットアクセス可 能なエンドポイントは⽤意できたけ ど何が違うの︖︖ rds.force_sslで暗号化を強制できるけど...
27 接続⽅式の違い • 認証⽅式の違い • 単純なユーザー名/パスワードによる認証とSIGV4の違い • 認証を⾏うコンポーネントの違い • Data
APIのエンドポイントでまずSIGV4による認証とIAMによ る認可を⾏う • Data APIの認証/認可がOKの場合にDB側の認証/認可に進む 通常のエンドポイントをPublic公開するのとどう違う︖︖
28 Data APIの⽅が攻撃への耐性が強い Publicなエンドポイントで通常の認証⽅式を使うと、悪意ある接 続要求の拒否にDBインスタンスのリソースを消費してしまう
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 強 ※詳しくは後ほど 強
32 疑問その2 Data APIでLambdaの 同時接続数問題が解決︖︖
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 こうすれば良くない︖︖
35 Data APIの同時接続耐性を調べてみる
36 まずは簡単にData API利⽤時の Aurora Serverlessのログを確認
37 aws rds-data execute-statement --database iwatadb --sql 'select pg_sleep(10)' --
resource-arn ....
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⽂
39 Data APIの基盤はプロキシ型の コネクションプーリング機構を備えてる
40 今度は並列に⼤量アクセスしてみる
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秒弱で完了したリクエストでほぼ半々
46 検証結果から読み解くData APIの接続管理 要求1 要求2 要求3 要求4 要求5 要求6 Data
API Endpoint
47 さらに並列度を上げてアクセスしてみる
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の限界まで使い切れた
50 ⾮Data APIから⼤量接続している状態だと どうなる︖︖
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の 接続エラーが発⽣
54 Data APIの基盤はプロキシ型のコネクショ ンプーリング機構を備えており、同時接 続への耐性が⾼い
55 アジェンダ 無駄なコスト • Aurora/Aurora Serverlessとは︖ 2分 • Data APIの裏側に関する考察
• Data APIについて • Data APIのユースケースに関する考察 5分 9分 9分 • まとめ 2分
56 Data APIはどのようなユースケースに マッチするのか︖︖
57 Data APIのユースケースについて •IoT機器から利⽤ •Lambdaから利⽤ •AppSyncから利⽤(今回話しません)
58 IoT機器からData APIを利⽤する構成 AWS Cloud VPC Data API Endpoint •
AWS SDKがあればDBドライバは不要 • IoT機器の限られたリソースでも簡単にRDBへのアクセスが実現可能
59 本当に⼤丈夫︖︕
60 IoT機器からData APIを利⽤するリスク Data API経由で発⾏されるSQLをユーザー 側でバリデーションすることは出来ない IoT機器が乗っ取られた場合に任意のSQL を発⾏されるリスクがある
61 IoT機器からData APIを利⽤する際の留意点 • IoT機器が乗っ取られた場合のリスクを理解し、しっ かりとリスクヘッジを⾏う • Data API⽤のDBユーザーの権限は必要最低限に絞る
62 LambdaからData APIを利⽤する構成 同時接続数に対する耐性が⾼いので、特定のユースケースでは引き 続きVPC Lambda × 通常接続よりも優位 AWS Cloud
VPC Data API Endpoint
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に対応したライブ ラリも出てきてはいる
65 発表資料作ってる間に出ました... https://aws.amazon.com/jp/about-aws/whats-new/2019/11/amazon-rds-data-api-client-library-supports-java-preview/
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が前提となるため、⼀時停⽌〜復帰の遅 延が発⽣し得ることを念頭に置いておく
69 VPC Lambdaのアーキテクチャ改善で Data APIが役⽬を終えた訳ではない メリット/デメリットを理解して 選択肢の1つとして抑えておきましょう
70 ご清聴ありがとうございました
71