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 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
AWS で試して学ぶ IPv6
hmatsu47
PRO
0
5
今年の MySQL/HeatWave ネタ登壇振り返り
hmatsu47
PRO
0
12
今年の DB ネタ登壇振り返り
hmatsu47
PRO
0
10
RDS/Aurora アップデート 2025
hmatsu47
PRO
0
20
YAPC::Fukuoka 2025 現地ハイブリッド参加の旅
hmatsu47
PRO
0
9
今年の FESTA で初当日スタッフ+登壇してきました
hmatsu47
PRO
0
15
攻略!Aurora DSQL の OCC(楽観的同時実行制御)
hmatsu47
PRO
0
9
PostgreSQL でもできる!GraphRAG
hmatsu47
PRO
0
13
Aurora DSQL のトランザクション(スナップショット分離と OCC)
hmatsu47
PRO
0
16
Other Decks in Technology
See All in Technology
BidiAgent と Nova 2 Sonic から考える音声 AI について
yama3133
2
150
純粋なイミュータブルモデルを設計してからイベントソーシングと組み合わせるDeciderの実践方法の紹介 /Introducing Decider Pattern with Event Sourcing
tomohisa
1
760
Agentic AIが変革するAWSの開発・運用・セキュリティ ~Frontier Agentsを試してみた~ / Agentic AI transforms AWS development, operations, and security I tried Frontier Agents
yuj1osm
0
210
Digitization部 紹介資料
sansan33
PRO
1
6.4k
Cloud WAN MCP Serverから考える新しいネットワーク運用 / 20251228 Masaki Okuda
shift_evolve
PRO
0
140
AIエージェントを5分で一気におさらい!AIエージェント「構築」元年に備えよう
yakumo
1
140
業務の煩悩を祓うAI活用術108選 / AI 108 Usages
smartbank
9
19k
歴史から学ぶ、Goのメモリ管理基礎
logica0419
10
2.4k
松尾研LLM講座2025 応用編Day3「軽量化」 講義資料
aratako
15
4.9k
Oracle Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
2
730
Claude Codeを使った情報整理術
knishioka
20
12k
「違う現場で格闘する二人」——社内コミュニティがつないだトヨタ流アジャイルの実践とその先
shinichitakeuchi
0
150
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
Paper Plane (Part 1)
katiecoart
PRO
0
2.9k
エンジニアに許された特別な時間の終わり
watany
106
220k
Building Adaptive Systems
keathley
44
2.9k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
65
35k
Prompt Engineering for Job Search
mfonobong
0
140
Balancing Empowerment & Direction
lara
5
840
Navigating Team Friction
lara
191
16k
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
Music & Morning Musume
bryan
46
7k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.1k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
270
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