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.4k
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
4.9k
Qdrantでベクトルデータベースに入門してみよう
iwatatomoya
0
630
詳解 AWS Lambdaコールドスタート
iwatatomoya
1
2.3k
真のサーバーレスへ向けたAuroraの進化Aurora Limitless Database
iwatatomoya
1
4.7k
AWS SDKのClientはFactory経由で作ろう
iwatatomoya
1
810
OpentelemetryでアプリケーションのObservabilityを強化しよう
iwatatomoya
0
1k
AWS Lambdaは俺が作った
iwatatomoya
2
2.5k
SnapStartの未来についての期待と妄想
iwatatomoya
1
1.4k
実例から学ぶ! AWSを活用したシステム開発の勘所
iwatatomoya
1
3.2k
Other Decks in Technology
See All in Technology
AIエージェントの地上戦 〜開発計画と運用実践 / 2025/04/08 Findy W&Bミートアップ #19
smiyawaki0820
26
8.5k
20250408 AI Agent workshop
sakana_ai
PRO
15
3.5k
AIで進化するソフトウェアテスト:mablの最新生成AI機能でQAを加速!
mfunaki
0
120
いつも初心者向けの記事に助けられているので得意分野では初心者向けの記事を書きます
toru_kubota
2
270
LLM as プロダクト開発のパワードスーツ
layerx
PRO
1
190
【2025年度新卒技術研修】100分で学ぶ サイバーエージェントのデータベース 活用事例とMySQLパフォーマンス調査
cyberagentdevelopers
PRO
4
6.5k
DuckDB MCPサーバーを使ってAWSコストを分析させてみた / AWS cost analysis with DuckDB MCP server
masahirokawahara
0
590
食べログが挑む!飲食店ネット予約システムで自動テスト無双して手動テストゼロを実現する戦略
hagevvashi
1
160
「それはhowなんよ〜」のガイドライン #orestudy
77web
9
2.4k
近年の PyCon 情勢から見た PyCon APAC のまとめ
terapyon
0
290
Langchain4j y Ollama - Integrando LLMs con programas Java @ Commit Conf 2025
deors
1
130
バックオフィス向け toB SaaS バクラクにおけるレコメンド技術活用 / recommender-systems-in-layerx-bakuraku
yuya4
2
280
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.6k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Visualization
eitanlees
146
16k
Building Adaptive Systems
keathley
41
2.5k
Building Flexible Design Systems
yeseniaperezcruz
329
38k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.3k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
2.9k
Making Projects Easy
brettharned
116
6.1k
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