この記事は ファインディ株式会社 Advent Calendar 2024 - Adventar の 12日目の記事です。
自分がWeb開発においてシステムを止めてメンテナンス作業する際に気をつけていることをまとめたものになります。 基本的にはIaCによってインフラ管理をしていますが、手作業での更新・変更作業が発生することがあります。
手順書を作成するときは、コマンド1つ1つまで記載する
実際に手を動かして作業するのは別の人がやるという前提で隅々のコマンドを記載します。手順を書いてから実際に作業するのは1ヶ月後になった。みたいなことが起きます。なので、1ヶ月後の自分は他人であると考えて書きます。
自分が担当しているFindy Freelanceで作業した際に作った手順の一部を載せます。
このように、実施する手順や確認に使うコマンド、参照するドキュメントの場所などを載せておき、当日迷わないように工夫を入れています。 そして作成した手順は必ずレビューしてもらうようにしています。
バックアップ・切り戻しの手段を必ず用意する
バックアップ・切り戻しの手段も手順に記載するようにします。もちろん通常手順と同じくコマンド1つ1つまで細かく記載します。 また、事前検証時に同様にバックアップ・切り戻しの手順を実施します。そうすることで実際のメンテナンス作業で切り戻し作業が必要になったときにも焦らず対応できます。
検証環境上での事前検証を行う
手順を書いたけど、実際に手を動かしてみると抜け漏れがあったりします。 それを確かめるために、Staging環境などの検証環境上で同じ手順で作業を実施するようにしています。 なるべく本番環境と同じ検証環境を整え、事前検証をやっておきます。 その過程で手順に誤りがあったり、やり方に迷うことがあれば、手順書もアップデートしていきます。
事業部内での連携を密にする
実施のスケジュールを決める際、事業的に実施すべきでないタイミング(イベントが有る、アクセス増の見込みがある施策の直後、etc..)をあらかじめヒアリングしておくことが必要だと考えています。 作業を行うことによって起きうるリスクや影響をプロダクトオーナーやプロダクトマネージャーに共有しておくことも重要だと考えています。 また、当日エンジニアが管理していない部分で対応が必要だったりするものがあったりするので、そのようなものがないかを確認しておくことも大切です。(私の場合は、広告周りのことを見落としがちでした。メンテナンス中は広告を止めてもらうよう依頼しています。) そして、作業当日はひとりで作業することがないようにペアで作業してもらえる人を探しておきます。ペア作業者にも手順書を事前にチェックしてもらうようにしています。
リマインドは多いくらいで良い
メンテナンス作業するとなったとき、もちろんサービス内で通知もしますが、社内でも周知をしておくことが重要であると考えます。 私の場合は、作業する日程が決まった時・作業前日(深夜であれば当日)・作業開始時のそれぞれで社内のSlackで通知するように心がけています。 システムに関わるできるだけ多くの人に届けておくのが理想です。
作業時のログを残す
あとからいつ、どんな作業をしたかを見るために残すことが重要と考えています。 個人的には作業と並行してSlackのスレッドでコメントに残すのが好みです。 Slackのスレッドに残しているのは理由が3つあります。
- タイムスタンプが残る
- どのタイミングでどのコマンド実行したか、どんな画面操作をしたかを後から知ることができる証跡になります。
- リアルタイムで反映される
- ペア作業でやることが多いと思うので、ペア作業者への共有やその他関係者が作業進捗含めて見えるようになっています。
- やり取りが長くなっても問題ない
- スレッドを広げて見ない限り、邪魔にならないのがメリットと考えています。GitHubのIssueにコメントで残すなどしていたりしましたが、コメント数が多くなると省略されたりされて見にくくなったのでやめました。
サンプルとして実際の作業ログをどんな形で残しているかを載せておきます。
入念に準備をしても想定外のことは起きるもの
検証環境では動いていたけど、本番環境では動かない。作業に時間がかかって予定スケジュール内で終わりそうにないなど、想定外の出来事は起こりがちです。 まずは深呼吸をして、冷静になりましょう。思いつきで手順を追加してしまったりすると余計に悪化することがあります。 ひとりで作業はしていないと思うので、作業監督者やペア作業者と対応方法を相談するのが良いと思います。 修正・対応方法を思いついたら、作業手順を確認してもらったうえで実施するようにしています。
いつでも切り戻しできる心持ちで
手順を修正してもうまくいかない。メンテナンススケジュールも延長できない。といった場合は切り戻しする決断をするようにしています。 場合によっては切り戻しできない場合もありますが、そうでない場合は切り戻しの決断をするようにしています。 そのために切り戻しの検証を手順として残しています。 切り戻し作業にも時間がかかるので、デッドラインの時間を設定して、そこを超えてうまく行っていない場合切り戻しをすると決めておくと判断がつきやすいです。
まとめ
私がやってきた本番環境メンテナンス作業で気をつけていることをまとめました。 事前準備をしっかりしていれば不測の事態に自分を助けることにもなるのでやりすぎて困ることはないと思います。 他にこういう事やっているとかがあれば教えて下さい!ご安全に!