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
3.9k
Aurora ServerlessのData APIについて
HIGOBASHI.AWS 第12回の発表資料です
TomoyaIwata
November 29, 2019
Tweet
Share
More Decks by TomoyaIwata
See All by TomoyaIwata
真のサーバーレスへ向けたAuroraの進化Aurora Limitless Database
iwatatomoya
1
4k
AWS SDKのClientはFactory経由で作ろう
iwatatomoya
1
630
OpentelemetryでアプリケーションのObservabilityを強化しよう
iwatatomoya
0
770
AWS Lambdaは俺が作った
iwatatomoya
2
1.9k
SnapStartの未来についての期待と妄想
iwatatomoya
1
1.2k
実例から学ぶ! AWSを活用したシステム開発の勘所
iwatatomoya
1
2.8k
目指せ完全制覇!3大クラウドの認定資格制度と勉強方法について
iwatatomoya
0
9.1k
知らなくても困らないけど、知ると楽しいAWS Lambdaの裏側の世界
iwatatomoya
0
6.4k
RDSプロキシは未来を変えるか
iwatatomoya
2
25k
Other Decks in Technology
See All in Technology
さらに高品質・高速化を目指すAI時代のテスト設計支援と、めざす先 / AI Test Lab vol.1
shift_evolve
0
190
How to Think Like a Performance Engineer
csswizardry
4
590
公共領域から学ぶ クラウド移行についてエンジニアが意識していること
kawakawa2222
0
140
AWS IAMのアンチパターン/AWSが考える最低権限実現へのアプローチ概略(JAWS-UG朝会#59資料改修20分版)
htan
0
330
20240725 LLMによるDXのビジョンと、今何からやるべきか @Azure OpenAI Service Dev Day
nrryuya
3
1.2k
サービスの持続的な成長と技術負債について
siva_official
PRO
10
4.4k
AOAI Dev Day - Opening Session
yoshidashingo
2
440
AWSでRAGを作る法方
sonoda_mj
1
140
推薦システムを本番導入する上で一番優先すべきだったこと~NewsPicks記事推薦機能の改善事例を元に~
morinota
0
120
ここがすごいよ! AWS Systems Manager!
saichan11
0
1.8k
dxd2024-生成AIに振り回された3か月間の成功と失敗/dxd2024-link-and-motivation
lmi
2
260
AI研修【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
130
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
37
2.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
23
1.9k
The Illustrated Children's Guide to Kubernetes
chrisshort
39
47k
Making Projects Easy
brettharned
111
5.7k
Scaling GitHub
holman
458
140k
Building Your Own Lightsaber
phodgson
101
5.9k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
226
52k
Speed Design
sergeychernyshev
9
270
The Brand Is Dead. Long Live the Brand.
mthomps
52
36k
Producing Creativity
orderedlist
PRO
340
39k
Why Our Code Smells
bkeepers
PRO
332
56k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
277
13k
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