見えないものがいちばん不安という話
1. はじめに
こんにちは。株式会社ペライチ インフラチームの澤居です。今日は「見えないものがいちばん不安という話」というお話をさせてもらいます。
2. Redshift 導入
ペライチでは目下モノリスからマイクロサービスへ移行を進めていますが、プログラムと同時にデータベースが切り離されることで横断的にデータを集約・参照できる基盤が必要とされています。各 RDS (MySQL) から DMS を使って別途集約用の RDS (MySQL) へ統合する仕組みは既にあるのですが、DMSの使い方としては推奨されているものではありません。分析クエリを投げると度々落ちることがありましたし、よりスケールする BI 環境を念頭に Redshift を導入することになりました。
3. Aurora 移行
Redshift に対しては「ゼロ ETL」という機能でデータを同期させるのですが、この機能は2023年末に一般公開された比較的新しい機能です。
S3 などを介さずに Aurora と Redshift を直接接続してデータをストリーム処理できるのが大きな特徴で、ETL パイプラインの構築・運用コストを大幅に削減でき、運用中のサービスに極力影響を与えずにデータ分析環境を整えることが可能になります。ただこの機能は Aurora でないと使えないため、まず、既存の各 RDS を Aurora へ移行するというタスクに着手しました。
まとめるとこうです。
これを
こうする
ゼロ ETL の構築と Redshift へ同期させる部分はまた後日でもいいので、取り急ぎは無事に全 DB を Aurora 移行させることが最大の焦点でした。
4. 不安の正体
ステージングの移行検証は特に問題なく終わりました。
移行といっても MySQL から MySQL への移行ですから、アプリケーションの修正は不要ですし影響も限定的でした。作業自体はとてもシンプルで、画面からリードレプリカを作成し昇格させると独立した Aurora クラスターが作成されます。「作成」と「昇格」ボタンを2回押すだけです。「昇格」のタイミングで書き込み先のエンドポイントを変えるため、その時だけアプリケーション止めておけば大丈夫だなと簡単に考えていました。
ただ一緒に作業をやってくれた CTO からこれは大変だぞという雰囲気を感じて、率直にあまりピンと来てない旨を伝えました。今考えると「そうだよね」なのですが、
その時だけ止めて
停止範囲がどこなのか?はっきりしたものがないため、この範囲の洗い出し、つまり作業全体の可視化が大変の正体でした。切り離し済みの RDS 分移行作業が必要なのも億劫でしたし、リザーブドインスタンスを買う時期が目前だったため、それまでに作業を済ませないといけないことにも気を揉みました。
5. 不安を減らす必要な準備
この頃になると頭の中が錯綜し、作業が思ったように進まないことがありました。
「困難は分割せよ」
移行がうまくいくか煮詰まっていく不安は他所に、一旦シンプルに考えようと思い立ちます。そもそも今回のケースでは以下が不安です。
不可逆であること
- 何かを壊したり失敗した時の影響が大きい
不可視であること
- どういう作業工程になるのか具体的な計画がみえていない
ではどういう準備をすべきなのか?
シンプルに考えます。データの入れ物の交換です。Web アプリですからデータの出し入れは画面かバッチから行われます。つまり停止の範囲は画面一覧とバッチ一覧によって決まります。そして考慮漏れ、検討漏れを防ぐために客観的な正しさ、つまり事実をベースにした一覧を作成します。
6. 作業へ向けて計画に落とし込む
今回のケースではこうなりました。
一覧 | 参照元 |
---|---|
バッチ一覧 | ECSのスケジュールされたタスク |
RDS 一覧 | aws コンソールのデータベース一覧 |
インフラ一覧 | aws コンソールの各種一覧, Mackerelの監視対象一覧 |
画面一覧 | 知見者へヒアリングして作成(※) |
※ 即使えるような客観的なものが用意できず、後の課題としました
作業に対応する一覧を用意して、これを工程分繰り返して手順書を作っていきます。はっきりとした作業に集中すると不安は消えていきます。一通りできたらレビューをもらって、タイムテーブルを作ってリハーサルへと進みました。
7. さいごに
幸い手順書は想定より膨らんだものの、移行作業と Redshift の構築は計画通り終わり現在は QuickSight の実装へ入っています。不安が大きい時ほど、準備を手厚くやっておくに越したことはないと、改めて思いました。
Discussion