我々サーバーサイドの開発者は、時にターミナルからサーバーにログインし、地味な作業しなければならない事があーる!
どういう準備をするか、どのような点に注意するかは、だいたい決まっているのでまとめてみるのであーる!
前置き
サーバー作業を計画しよう。大まかな流れは次の通り。
- 作業内容を整理する
- 計画書と手順書を作り、レビューしてもらう
- 作業を実施する
- 作業を終了する
そして作業にはいくつか原則がある。
- ログを記録する。
- バックアップをとる。
- 2人以上で実施し、確認をとりながら進める
- エビデンスを残す。
これらの準備や原則が存在するのは、次の理由から。
(1)作業者間での情報共有と作業イメージの一致させ、
(2)計画した作業を想定どおりに実施し、
(3)事故を防止するため。
サーバー作業計画書テンプレ
2人程度で行うようなボリュームの作業向け。1
足りない作業があったならば適宜追加・補完して欲しい。
なお、作成した作業計画(手順も含む)は、レビューをしてもらおう。
作業計画のうち、コマンドなどの手順については、基本的には応答内容も含めて想定して計画しなければならない。
想定外の事象・結果や計画外の作業などが発生した場合は、作業を中止するぐらいのポリシーで進めなければならない。2
テンプレ(マークダウン形式)。適宜書き換えて使われたし。
# (例)バッチのログファイルの退避作業計画
## 概要
(例)設計不備によりバッチ処理のログが肥大化していることが健在化した。
暫定対応としてそのログファイルをローカル環境に退避し、サーバからは削除する対応を行う。
## 作業計画
作業場所: (例)5Fチームデスク
作業日時: (例)2019/7/8 14:00~15:30
作業者: (例)XXXXX、YYYYY
対象サーバ: (例)バッチ用サーバ prj-batch-001
作業概要:
1. 事前準備
2. 作業実施
3. 動作確認
4. 事後作業
### サービスについて
- 利用ユーザーへのアナウンスあり
- 作業の前日と、作業直前に関係者にSlackでアナウンスを行う。
- 作業直前にXXX部署へ作業開始連絡をする。
- メンテナンスモードはなし
---
## 事前準備
(解説)事前に準備するもの、行うことにに関してメモる。
- ホワイトボード
- システム構成図
- XXX部署への作業内容共有と許可
## 作業実施
1. 事前準備
[ ] (例)ブリーフィング
[ ] (例)作業開始連絡(Slack周知)
[ ] (例)作業開始連絡(XXX部署電話連絡)
### ログイン〜コマンド実行
[ ] (例)ターミナルのログ記録開始
[ ] (例)ログインしてサーバホストを確認する
```
# ログインする
ssh xxx.xxx.xxx.xxx
...
```
[ ] (例)退避し、対象のプログラムを削除する。
```
$ cd ~/myworkdir
$ pwd
/home/myname/myworkdir
$ cp -p /path/to/target.log ~/myworkdir/target.log-backup
...
# (解説)基本的に予想されるコマンドの応答内容も含めて想定しておく。
...
... (コマンドレベルの手順書続く)
...
```
[ ] (例)削除されているか確認する。
```
$ ls -l /path/to/target.log
(ファイルが見つかりません、のエラーとなる)
```
### 切り戻し手順
(解説)切り戻し手順に関しては、場合によっては複数のパターンが必要になることもあるだろう。
```
$ cd ~/myworkdir
$ pwd
/home/myname/myworkdir
$ cp -p ~/myworkdir/target.log-backup /path/to/target.log
$ diff -u /path/to/target.log ~/myworkdir/target.log-backup
```
## 動作確認
(解説)動作確認は、事前に用意されている回帰テストを行うなど、目的にあった確認をしよう。
[ ] (例)ブラウザで動作確認を行う。(キャッシュをクリアしてアクセス)
## 事後作業
(解説)主たる作業が終わった後の、まとめ作業やらを行う。
[ ] (例)作業終了連絡(Slack共有)
[ ] (例)作業終了連絡(XXX部署電話連絡)
[ ] (例)作業ログの保存
[ ] (例)エビデンス資料の保存
終わりに
こんなのもあったほうがいいよとか、みなさんの経験や知見、実践内容など教えてもらえると嬉しいですぞい!