Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
RDS Serverless のバージョンアップ作業の懺悔
Search
tchibana
October 06, 2023
Technology
310
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RDS Serverless のバージョンアップ作業の懺悔
tchibana
October 06, 2023
More Decks by tchibana
See All by tchibana
SNSとLambdaのEDAで ecsの負荷が激減した話
tchibana
0
100
EDAって何がおいしいの?
tchibana
0
880
Other Decks in Technology
See All in Technology
夫婦で子育てするための育児標準化
codmoninc
PRO
0
420
ブラウザとサーバーから考えるAI時代のフロントエンド監視
shogo4131
3
990
AIカンパニーへの転換を支えた、エンジニアの仕事の再定義
kworkdev
PRO
2
1.3k
USB PDを使ってスマホを労わりたい
raspython3
0
180
専門領域のAIをどう評価するか
bengo4com
2
270
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
200
WasmをRustにする
sansantech
PRO
0
260
DevelopersIO 2026 知識の地図を描く ─ オントロジーとは何か?
ishikawa_satoru
1
1.7k
AIにシークレットを見せない、WSL2で安全な開発環境
yazm
0
310
継続的なAIコスト最適化
bgpat
1
350
サブエージェントと Claude Mods で作る独自 Advisor ツールの話
kenichiodo
2
160
触りたくないデータに、どう触るか AI時代のRBACアクセスガバナンス
ivry_presentationmaterials
0
270
Featured
See All Featured
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
600
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.9k
RailsConf 2023
tenderlove
30
1.6k
What the history of the web can teach us about the future of AI
inesmontani
PRO
2
740
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
580
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
GitHub's CSS Performance
jonrohan
1033
470k
Unsuck your backbone
ammeep
672
58k
Designing for humans not robots
tammielis
254
26k
Thoughts on Productivity
jonyablonski
76
5.4k
Transcript
RDS Serverless のバージョ ンアップ作業の懺悔 ハッカーズチャンプルー2023
わたし 知花 司(ちばな つかさ) @chibana_555 趣味: 全く効果のでない筋トレダイエット BP: 105kg, SQ: 160k, DL:
160kg 放送大学学生: 心理学や法学なども勉強中。 仕事は今は大阪の会社でテックリードしてます。
お家がきちんと建っているかな?って見に行くサービ スを提供しております。 3 防湿シートの破れ 土台アンカーボルトの芯ずれ Copyright© 2021 NEXT STAGE Co.,
Ltd. All Rights Reserved.
いつドラが鳴ってもいいように、最初にまとめの共有。 • ポスグレ(PostgreSQL)をメンテナンスしたらANALYZEを実行 しましょう(ドキュメント読みましょう) • IaCで環境作っていても全く同じ環境を再現できるとは限らな いので、環境は常に2つ以上作りましょう
ポスグレをメンテナンスしたらANALYZEを実行し ましょう(ドキュメント読みましょう)っていう話
当初の構成 普通のJamStackな構成
今 リリースから一年がたち、RDSの用途が多様化 RDSのリードレプリカが欲しくなってきた RDSがAurora Serverless v1 でした。
Aurora Serverless v1をv2の違い Aurora Serverless v1 リードレプリカ対応してない 論理レプリケーションも非対応
Aurora Serverless v1をv2にあげるためには 1. ポスグレをv2対応のバージョンに上げる 2. サーバーレスクラスターを通常のクラスターに変換する 3. Serverless v2インスタンスを追加してフェールオーバーさせる
4. クラスター変換で作成されたインスタンスを削除する
まずはポスグレのバージョンを上げないといけない
ポスグレをv2対応のバージョンへアップグレード 実行クエリの検証: ユニットテストの環境のDBをアップグレードして検証済み 性能: スロークエリのしきい値2秒をクリアしているので多少はおっけー アップグレードをどうやって実施するか? 開発環境でやってみよー
ポスグレをv2対応の13.9にアップグレード マネコンでめっちゃカジュアルに実行できる 開発環境だし、ということでぽちぽちっと 数分で無事完了 念の為1ヶ月ほど様子見したが問題なし
ポスグレをv2対応の13.9にアップグレード 建築現場向け2Bのサービスなので夜間に利用している人はほぼ いない 数分だったらRDSのメンテナンス機能で夜間にやってしまえ。 えいやー
翌朝
本番環境が仮死状態に 早朝からスロークエリーのアラートが飛びまくり 30秒以上かかるクエリが多発 api gatewayのtime outでリクエストが切られてサービス停止状態 に
原因と対応 テーブルの統計情報が全部飛んでた 手動でANALYZEを実行して解消
統計情報引き継がれないの? 統計情報はデータベースエンジンに格納されるのでメジャーアップ グレードしたら引き継がれない ポスグレをメンテナンスしたら手動でANALYZEしましょう AWSのマネコン操作だけではそこまではやってくれない
ドキュメントを読みましょう 以上の内容はすべてawsのドキュメントに書いてました。 ドキュメント読みましょう(自戒) https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/USER_ UpgradeDBInstance.PostgreSQL.html#USER_UpgradeDBInstance.PostgreSQL. MajorVersion
環境は常に2つ以上作ろうっていう話 ドキュメント読んでもわかんないこともあるよ
Aurora Serverless v1をv2にあげるためには 1. ポスグレをv2対応のバージョンに上げる 2. サーバーレスクラスターを通常のクラスターに変換する 3. Serverless v2インスタンスを追加してフェールオーバーさせる
4. クラスター変換で作成されたインスタンスを削除する 1の作業は実施済み
1の作業は実施済み 2 3 4
ポスグレ仮死状態の失敗を活かし・・・ ドキュメントは読みました。 cdkで環境管理しているので、検証用に環境を複製しました。 複製した環境で手順を検証しました。 ダウンタイムはフェールオーバーのタイミングで5秒程度。 利用者が急激に減る20時以降なら無視できると判断 開発環境でリハーサルを実施してみたら。。。
最初のクラスター変換で失敗した クラスター変換が実行できない インスタンスの名前が長すぎるってエラー になる このステップでコケた
最初のクラスター変換で失敗した クラスターの変換プロセスの中でふつうのRDS インスタンスが作成される RDSインスタンスは `{クラスター ID}-instance1` という名前が付与される インスタンス名コントロールできなくて詰んだ cdkで複製した環境での検証で気 づけなかったのはなぜ?
稼働中の環境のクラスターIDが長い プロダクションの環境はcdk v1で構築され ていた サービスロンチ後にcdk v2にアップグレー ドしていた 複製はcdk v2で構築しているので、全く同 じ環境ではなかった
検証のために複製した環境 稼働中の環境
cdkで複製した環境での検証で気づけなかったのはなぜ? プロダクションの環境はcdk v1で構築されていた サービス公開後にcdkをv2にアップグレードしていた 複製はcdk v2で構築しているので、全く同じ環境ではなかった cdk v1で構築したクラスターIDが長すぎた
じゃ、どうするの? クラスターの変換プロセスの中でRDSインスタンスが作成される インスタンス名はコントロールできない、クラスターIDは変更できる 開発環境だし、やってみるかw えいやー (嫌な予感しかしないw)
クラスターID変更したらエンドポイントが変わった でしょうねw
開発環境のRDSにアクセスしているサービスが全壊 プロジェクト関係者の皆さん、ごめんなさいw
さすがに計画停止が必要 影響を受けるすべてのサービスのconfigの修正が必要 影響をうけるサービスが10以上ある 各サービスのconfig修正して動作検証まで1時間はかかる サービス停止時間が長くなると休日深夜にやれって話になる(やりたくない) サービス停止は短いほうが良いよね
クラスター変換を無停止作業と計画停止作業に分割 事前準備(無停止、日中作業) RDSのエンドポイントにCNAMEを設定 事前準備で各サービスのDBアクセスをCNAME経由に変更 サービス停止作業日 クラスターID変更、CNAME張り替え、クラスター変換 サーバーレスインスタンス追加、フェールオーバー、クリーンアップ
RDSのアクセスを事前にDNS経由にしましたよ
サービス停止は10分程度で済みました。 サービス停止 クラスターID変更、CNAME張り替え、(CNAMEのTTLの時間待機) サービス再開 (とは言っても夜間なのでアクセスは非常に少ない) クラスター変換 (5秒程度の接続断) サーバーレスインスタンス追加 フェールオーバー (5秒程度の接続断)
不要インスタンスの削除
最後にもう一回まとめ • ポスグレ(PostgreSQL)をメンテナンスしたらANALYZEを実行 しましょう • ドキュメント読みましょう • ドキュメント読んでも想定外は起きるので、環境は常に2つ以 上作りましょう
ご清聴ありがとうございました。 (たぶん、途中で時間切れでここまで辿り着けない)
参考文献 Aurora PostgreSQL の PostgreSQL DB エンジンのアップグレード https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.upgrade.html Aurora Serverless
v2 の開始方法 https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/aurora-serverless-v2.upgrade.html よくお世話になっている某ブログ https://dev.classmethod.jp/articles/moving-from-aurora-serverless-v1-tov2/