$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Aurora MySQL 一段飛ばしのバージョンアップとその他もろもろの話
Search
hmatsu47
PRO
November 21, 2022
Technology
1
1.6k
Aurora MySQL 一段飛ばしのバージョンアップとその他もろもろの話
吉祥寺.pm31【オンライン】 2022/11/22
hmatsu47
PRO
November 21, 2022
Tweet
Share
More Decks by hmatsu47
See All by hmatsu47
今年の DB ネタ登壇振り返り
hmatsu47
PRO
0
6
RDS/Aurora アップデート 2025
hmatsu47
PRO
0
9
YAPC::Fukuoka 2025 現地ハイブリッド参加の旅
hmatsu47
PRO
0
5
今年の FESTA で初当日スタッフ+登壇してきました
hmatsu47
PRO
0
10
攻略!Aurora DSQL の OCC(楽観的同時実行制御)
hmatsu47
PRO
0
7
PostgreSQL でもできる!GraphRAG
hmatsu47
PRO
0
8
Aurora DSQL のトランザクション(スナップショット分離と OCC)
hmatsu47
PRO
0
14
いろんなところに居る Amazon Q(Developer)を使い分けてみた
hmatsu47
PRO
0
33
「ゲームで体感!Aurora DSQL の OCC(楽観的同時実行制御)」の結果ログから Aurora DSQL の動作を考察する
hmatsu47
PRO
0
10
Other Decks in Technology
See All in Technology
文字列の並び順 / Unicode Collation
tmtms
3
600
品質のための共通認識
kakehashi
PRO
3
260
エンジニアリングをやめたくないので問い続ける
estie
2
1.2k
S3を正しく理解するための内部構造の読解
nrinetcom
PRO
2
100
2025年 開発生産「可能」性向上報告 サイロ解消からチームが能動性を獲得するまで/ 20251216 Naoki Takahashi
shift_evolve
PRO
1
200
Reinforcement Fine-tuning 基礎〜実践まで
ch6noota
0
190
JEDAI認定プログラム JEDAI Order 2026 エントリーのご案内 / JEDAI Order 2026 Entry
databricksjapan
0
130
GitHub Copilotを使いこなす 実例に学ぶAIコーディング活用術
74th
3
3.3k
Challenging Hardware Contests with Zephyr and Lessons Learned
iotengineer22
0
230
AWSセキュリティアップデートとAWSを育てる話
cmusudakeisuke
0
290
ログ管理の新たな可能性?CloudWatchの新機能をご紹介
ikumi_ono
1
790
Database イノベーショントークを振り返る/reinvent-2025-database-innovation-talk-recap
emiki
0
220
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
Scaling GitHub
holman
464
140k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
BBQ
matthewcrist
89
9.9k
It's Worth the Effort
3n
187
29k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.7k
Visualization
eitanlees
150
16k
Side Projects
sachag
455
43k
A Tale of Four Properties
chriscoyier
162
23k
Into the Great Unknown - MozCon
thekraken
40
2.2k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
Transcript
Aurora MySQL 一段飛ばしのバージョンアップと その他もろもろの話 吉祥寺.pm31【オンライン】 2022/11/22 まつひさ(hmatsu47)
自己紹介 松久裕保(@hmatsu47) • https://qiita.com/hmatsu47 名古屋で Web インフラのお守り係をしています 今日のレシピ(?) ◦ Zenn
の本: https://zenn.dev/hmatsu47/books/aurora-mysql3-plan-book https://zenn.dev/hmatsu47/books/aurora-mysql-do-book 2
レシピ? 3
レシピ? 4
今日のレシピ(嘘) 5
[1] 今年やったこと:Aurora MySQL v1 → v3 移行 • 10/15 に完了
◦ 正確には、移行対象のシステムがまだ一つ残 • コード修正担当の開発チームと、インフラ移行担当の (われわれ)SRE チームの共同作業 6
バージョンアップの原則 • 一つずつ順番にバージョンを上げていくべき ◦ 他社事例も大体そう https://tech.andpad.co.jp/entry/2022/06/02/100000 (ANDPAD) https://tech.readyfor.jp/entry/2022/07/13/181825 (READYFOR) ◦
例外 https://dev.classmethod.jp/articles/upgrade-aurora-mysql-5-6-to-8-0-simple-stupid/ (クラスメソッド) ※小規模社内システム・長時間停止可・アプリケーション動作確認済み 7
なのに、なぜ v2 を飛ばしたのか? • DB のマイグレーションだけに時間を割く余裕がなかった ◦ レガシーなアプリケーションゆえ、フレームワークや DB 以外の
環境のマイグレーションも必要(いっぱい) ◦ もちろん、提供するサービスの向上も大事 • そして、われわれには強い味方が(誇張表現) ◦ 2021 年 1 月の吉祥寺.pm25 でもちょっとだけ触れたやつ 8
ちょっと懐かしのアレ • 2021 年春に更新終了したが MySQL 8.0.24 対応版まで出していた ◦ Aurora MySQL
v3 は MySQL 8.0.23 ベースからのスタートなのでセーフ 9
実際にはそれなりに追加調査した(約 1 ヶ月) • そのあたりは前掲の「今日のレシピ(嘘)」を参照 ◦ 主に下のほう 10
続いてコードの先行調査&修正&動作確認 • コードの先行調査は 5 日ほどで完了 ◦ それなりに出てきたし、さらに範囲を広げると無限に… ▪ 割り切れば大丈夫(なはず) •
コードの修正はちょっと手こずる ◦ 一括置換ができない・lint も中途半端(つらい) • 案の定 SRE チーム内の動作確認では修正ミスを多数発見 ◦ 頑張って直した 11
そして、開発チームにコード修正タスクを渡す • 修正箇所が無限に湧いてきそうで大変だった模様 ◦ マネージャー指示は「対象を絞れ」だったが ▪ うまく伝わらなかった?(スキルの問題も) • 結果としては、ほぼ先行調査&修正→差分提示した範囲 に収まった
◦ ただし「他に対象がないか?」「正しく抽出できているか?」を 後追い確認するのが大変だった様子(要仕組み化) 12
一方、インフラのお守りをしている SRE チームは • データベース自体の移行準備をしていた ◦ 手順書とか移行作業で使う差分確認ツールとか • 大筋では以前から移行作業でやってきたことと同じ ◦
ただし一点大きな違いが 13
一方、インフラのお守りをしている SRE チームは • 手慣れた「binlog レプリケーション」はサポート外 ◦ バージョン飛ばし(v1 → v3)はサポート外
◦ 3 バージョン間多段レプリケーションもサポート外 14
当初の予定:DMS(CDC)でレプリケーション 15 • これならサポート対象
当初の予定:DMS(CDC)でレプリケーション 16 • これならサポート対象 • でも回避不能な問題で NG ◦ 特定条件で異常値が発生 •
諦めた
• 自己責任でサポート外構成 • できるだけ短期間で ◦ 数日間だけなら止まらない はず ◦ 実際に止まらなかった 実際の移行では:多段
binlog レプリケーション 17
移行当日 • 事件が 3 つ ◦ 直前の夜間バッチが終わらない事件😱 ◦ 主キーのないテーブルが突然現れた事件😱 ◦
サービス再開直前にサービス再開してた事件😱 18
移行当日 • 事件が 3 つ ◦ 直前の夜間バッチが終わらない事件😱 ◦ 主キーのないテーブルが突然現れた事件😱 ◦
サービス再開直前にサービス再開してた事件😱 • 切り戻しが必要になるような致命的な事件は発生せず ◦ ↑の 3 つもバージョン飛ばしとは無関係なものばかり 19
[2] 書いたコード:いくつか • アプリケーション(プロダクト)のフロントエンド ◦ ページ送り操作のたびに DB に重いクエリを投げていた画面を React で部分的に
SPA 化 20
[2] 書いたコード:いくつか • アプリケーション(プロダクト)のフロントエンド ◦ ページ送り操作のたびに DB に重いクエリを投げていた画面を React で部分的に
SPA 化 ◦ バックエンドの開発が間に合わないというオチで来年に持ち越し ▪ フロントエンドは 6 月中にはほぼ出来上がっていたけれど🤔 21
[2] 書いたコード:いくつか • アプリケーションリリース作業の地味な改善 ◦ CLI 操作が苦手な開発担当者のために SolidJS & Go
で簡単な GUI を用意 22
改善したところ 23 • 複数のテスト環境・ステージング環 境に、別環境のパイプラインで作っ たコンテナイメージをデプロイする ことがある • 本番環境には、必ずいずれかの環境 で動作確認したコンテナイメージを
デプロイする • デプロイには KAYAC fujiwara さん 作の ecspresso をありがたく使わせ ていただいている • ただ、使うメンバーの一部が CLI の 操作に不慣れ
コンテナイメージ URI の指定で • コピペミスが怖いとか、もろもろ意見があったので 24
こんな感じ • フロントエンドは SolidJS + SUID / TypeScript ◦ SUID
: SolidJS 版の MUI ◦ https://github.com/hmatsu47/select-repository-frontend-app • バックエンドは oapi-codegen で Gin の API を生成 ◦ Stoplight Studio で OpenAPI 3.0 の .yaml を生成 ◦ Go の oapi-codegen でコードの枠組みを自動生成 ◦ https://github.com/hmatsu47/select-repository-api 25
ポイント • 変な拘りは持たない ◦ ✖エンジニアが使うツールは CLI じゃなきゃダメ ▪ 本業のプロダクトコード書きに集中してもらったほうがプラス •
過度に依存されることは避ける ◦ 「このツールがないと仕事ができない」→業務がツールと密結合 ▪ メンテナンス地獄 • 要らなくなったら捨てる 26
[3] 来年に向けて : ただいま格闘中 • メールサーバー廃止✉ ◦ お守りをしたくないので API で送信&バウンス管理へ
27
まとめ:今年の振り返りと、来年に向けて • Aurora MySQL v1 → v3 移行が(ほぼ)完了した ◦ バージョンアップ
1 回分の時間と労力を節約 • DB 移行の合間にフロントエンドのコードを書いた ◦ バックエンド待ち(来年に持ち越し) • 地味な改善のためにコードを書いた ◦ お手軽コードで作業支援 • メールサーバー廃止に向けて格闘中 28