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
AWS JDBC Driverに入れ替えたらSpring Bootが起動しなくなった話
Search
Yuki
March 20, 2024
1.8k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AWS JDBC Driverに入れ替えたら Spring Bootが起動しなくなった話
Yuki
March 20, 2024
More Decks by Yuki
See All by Yuki
大阪リージョンへのDR初設計
yukimatsumoto1987
0
320
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
174
15k
The Curious Case for Waylosing
cassininazir
1
380
Evolving SEO for Evolving Search Engines
ryanjones
0
210
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
54k
Utilizing Notion as your number one productivity tool
mfonobong
4
320
Making Projects Easy
brettharned
120
6.7k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
190
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
940
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.1k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Transcript
※本資料の内容は、個人の見解であり、所属する企業とは一切関係がありません。 AWS JDBC Driverに入れ替えたら Spring Bootが起動しなくなった話
普段はITアーキテクトとしてチームリード、設計、実装を行っております。 • 名前: 松本 祐樹 • ロール: ITアーキテクト(主にAWS) • AWS歴:
6年 • クラウド系認定資格: AWS: 12認定 Google Cloud: 11認定 Azure: Solutions Architect Expert, Administrator Associate • IPA系: DB, AP, FE • Japan AWS All Certifications Engineer • IPA 情報処理技術者試験委員 自己紹介
AWS JDBC Driverの説明
AWS JDBC Driverは、AWSが作成したJDBCドライバーのラッパーです。 Aurora特有の機能をアプリケーションがシームレスに使用できるように設計されています。 AWS JDBC Driverとは? GitHub -
awslabs/aws-advanced-jdbc-wrapper
具体的には、高速フェイルオーバー、AuroraのIAM認証、Secrets Manager統合など の機能をプラグインとして提供しております。 AWS JDBC Driverの機能 • AWS Secrets
Manager Plugin • Host Monitoring Plugin • IAM Authentication Plugin • Failover Plugin • Aurora Connection Tracker Plugin • Driver Metadata Connection Plugin • Read Write Splitting Plugin • Federated Authentication Plugin aws-advanced-jdbc-wrapper/docs/Documentation.md 今回は、この2つのプラグインのお話
AWS Secrets Manager PluginはSecrets Managerに登録されているDBのユーザー 名とパスワードを使用してAuroraにアクセスように、簡単に設定できます。 AWS Secrets Manager
Pluginの仕組み aws-advanced-jdbc- wrapper/examples/AWSDriverExample/src/main/java/software/amazon /AwsSecretsManagerConnectionPluginPostgresqlExample.java • アプリケーションに設定するだけで、Secrets Managerからアクセス情報を取ってアクセス できる(Secrets ManagerへのIAMのアクセス 許可は必要) AWS Secrets Manager (DBのユーザー名とパスワード保管) Amazon Aurora Amazon EC2 ①ユーザー名とパスワードを取得 ②接続 接続文字列でAWS JDBC Driverを指定 プロパティでリージョンとSecrets ManagerのSecret IDを指定 (Springならapplication.propertiesでの指定も可) ExampleではJavaのコードでプラグインを指定しているが 接続文字列で指定することもできる
Failover Pluginはコネクションを論理コネクションと物理コネクションに分けて、DBイン スタンス障害時には、フェイルオーバープロセスを実行し、障害の影響を軽減します。 Failover Pluginの仕組み • アプリケーションは論理コネクションに接 続する •
DBインスタンスへの接続は、物理コネク ションが担当する • 物理コネクションから通信の例外が発生 すると、フェイルオーバープロセスが実 行される。そこでは、ライターインスタン スの検出、DBの再接続などが行われる • 通常、アプリケーションエンジニアは論 理コネクションと物理コネクションを分け て意識することはない aws-advanced-jdbc-wrapper/docs/using-the-jdbc-driver/using-plugins/UsingTheFailoverPlugin.md
Aurora Global DBのフェイルオーバー、RDS Blue/Green Deploymentはサポート外 です。またRDS Proxyとの同時使用は非推奨です。 使用上の注意点 •
GitHubのTopページに注意点が 大きく書かれています • ただし、プラグインごとの注意点 もあるので、プラグインの説明も 読んでおくこと Read Write Splitting Pluginは、 Springの@Transactional(readOnly = True)と相性が悪く、パフォーマンス の劣化が起きる可能性がある GitHub - awslabs/aws-advanced-jdbc-wrapper
現在使用可能なAuroraのバージョンすべてで動作検証が公式に行われているわけで はないです。自身のバージョンできちんと動作検証を行ってください。 動作検証済みバージョン GitHub - awslabs/aws-advanced-jdbc-wrapper
Spring Bootが動かなくなった話
フェイルオーバーの時間を短縮させるため、5年ほど運用されている、Spring Bootで作 成されたアプリケーションにAWS JDBC Driverを導入しようとしました。 AWSアーキテクチャ図 AWS Secrets Manager
(DBのユーザー名とパスワード保管) Amazon Aurora (PostgreSQL) Amazon EC2 (Spring Boot) ①ユーザー名とパスワードを取得 ②接続 Application Load Balancer • 単純なSpring BootのWebアプ リケーション • この図を見て、AWS Secrets Manager JDBC Libraryを使って いると思い込む 結構簡単に 移行できるかも!
AWS JDBC Driverに入れ替えたら、Spring Bootの起動に失敗するようになってし まった。 AWSアーキテクチャ図 AWS Secrets Manager
(DBのユーザー名とパスワード保管) Amazon Aurora (PostgreSQL) Amazon EC2 (Spring Boot) ①ユーザー名とパスワードを取得 ②接続 Application Load Balancer • Data Sourceの作成に失敗して いるぽいことは分かった • 最初はライブラリの依存関係 を疑っていた PoCでは 動いていたのに 何で!?
AWS Secrets Managerに登録されていたDBのユーザー名とパスワードは、AWS JDBC Driverが読み込むことができる形式でなかった。 エラー原因 その1 • AWS
Secrets Manager Pluginが想定す るシークレットの形式ではなかった • AWS Secrets Manager JDBC Libraryを 使っていなかった • Spring Bootの@Configurationのクラス で、Data Sourceをゴリゴリ作っていた • AWS Secrets Manager JDBC Libraryで も同様の形式を利用しているので Secrets Managerは問題がないと誤認 • 新しいシークレットを作成し、AWS Secrets Manager Pluginが読み込める ようにした AWS Secrets Manager 実際に保管されていたシークレットの形式 • user_name: AAAAAAA • password: XXXXXXX aws-advanced-jdbc-wrapper/docs/using-the-jdbc-driver/using- plugins/UsingTheAwsSecretsManagerPlugin.md
Failover Pluginは、aurora_db_instance_identifierというAurora独自関数を利用 している。この関数をサポートしていないバージョンのAuroraを利用していた。 エラー原因 その2 • aurora_db_instance_identifier関 数をサポートしていないバージョ ンのAuroraを使用していたことが
原因だった • フェイルオーバープロセスでは、 aurora_db_instance_identifier関 数やaurora_replica_status関数を 利用して、DNSを利用せずフェイ ルオーバー先のDBインスタンス を発見している • Auroraのバージョンアップを行う ことで解決した aurora_db_instance_identifier - Amazon Aurora Amazon Aurora (PostgreSQL)
AWS JDBC Driverは非常に有用なJDBCドライバーです。ただし、落とし穴も結構ある ので公式ドキュメントよく読み、PoCでしっかり検証してからご使用ください。 まとめ(教訓) • 公式ドキュメントやソースコードをよく読む • AWSアーキテクチャ図から、アプリ構成を読み取れると思い込まない
• バージョンの差異をちゃんと意識する • ちなみに、10秒ぐらいでフェイルオーバーできるようになりました
EOF