orangeitems’s diary

クラウドで働くインフラエンジニアの日々の感想です(ほぼ毎日更新)。

本番環境の心構え4つ

f:id:orangeitems:20201127084354j:plain

 

もうすぐ師走。いろいろあった混乱の2020年はもう少しで終わりそうです。

今年もAdvent Calendarの季節。興味深いカレンダーが作成されています。

 

qiita.com

昨年非常に盛り上がっていましたので作成させていただきました。

本番環境でやらかしちゃった人のアドベントカレンダーです。

例)

本番DB吹き飛ばした
本番サーバをデストロイした
ネットワーク設定をミスって本番サーバにアクセス出来なくなり、サーバが世界から孤立した
などなど...

以下の2点については必須項目なので、記述お願いします。

惨劇はなぜおこってしまったのか
二度と惨劇を起こさないためにどうしたのか
もう二度とあの惨劇を繰り返さないために、みなで知見を共有しましょう。

 

本番環境とは何かをまだ経験の浅い人に教えるとして、ポイントをまとめていきたいと思います。

 

 

1)本番環境はユーザーのビジネスそのものである

昔はコンピューターやシステムと呼ばれるものは、人間の仕事を補助してくれるものでした。例えば決算書を作るのに昔はそろばんを使っていました。それが電卓となり、表計算となっていきました。そこまではツールの延長上でしたが、表計算のセルに複雑な数式が入ったりロジックを入れたりして、だんだんと人間の思考、仕事そのものを置き換えていくようになりました。今は、もうシステムそのものが仕事であり、顧客のビジネスと本番環境の持つ意味がどんどん重複。本番環境のダウンはビジネスのダウンを意味するまでに至りました。

だから、もし誰かの本番環境を預かる仕事をしていて、そこにログインしようものなら、顧客のビジネスそのものを握ったということを意味しています。

ビジネスとは売上があり原価があり利益があり、その継続を指します。それと目の前の良く知ったWindowsやLinuxの画面がリンクしている感覚を持てるようになるのは数年の経験は必要だと思います。特に思い知るのは障害対応を経験したときです。何が原因か、より止まったことへのビジネス影響の方が重要なことを思い知るからです。どれぐらい顧客のビジネスに影響したのか。その金額が数千万、数億、自分が見たこともない金額がその本番環境で動いているとわかったときに、血の気が引いていくのです。

技術者はその技術ばかり目を向けがちなので、何が動いているか。どう顧客に影響しているかをよく知ることで、本番環境にログインするときにその責任の重大さを認知し慎重に行動できるようになると思います。

 

2)一人で作業するとろくな目に遭わない

少なくとも私の身の回りでは、本番環境における作業は作業者一人ではなく確認者も付けるようにしています。

作業効率が半分になるので、それはリソースの無駄遣い、という議論もありますが、作業ミスのことを考えるとこれは避けて通れません。

人間は、百回同じことをしなさいと言われると、99回成功し1回失敗する生き物です。ゴミ箱が足元にあって、目の前の紙を丸めて捨てる。そんなこと百回やると、なぜかたまにゴミ箱を外すことがあります。これがヒューマンエラーの正体です。

でも、作業者の行動を確認者がちゃんと見ていると、その失敗の兆候を止めることができます。作業の手順はもちろん、テンポや集中力など、本人では気づかない部分を確認者が観察できます。

確認者が作業手順をきちんと把握している必要があるのが注意です。たまに機械的に確認者を付けたけれども、確認者が作業を理解していないので作業者を止められなかったという事例もありました。

なお、ヒューマンエラーが起きた時は確認者が責任を負うべきだと思っています。作業者はその代わり、一つ一つの作業のたびに確認者に同意を求めます。確認したよね、と。確認者が承諾したらあとは確認者の責任なので、確認者に緊張感が生まれます。作業者は間違いないよう最善を尽くし、確認者は責任を負う。これが本番環境でしくじらないための知恵です。

だから、一人で作業するというのは、もうすべての責任を背負い、しかも自分はミスしないという強烈な自覚が無ければやってはいけないと思います。ただこのケースはあり得るのです。深夜の緊急作業で誰も支援がいないとき、技術的に自分しか把握していない、など。戦場で大将同士の一騎打ち、みたいな感覚です。技術者として試される修羅場はたまにあるので、この原則二人作業の上にそびえる崇高で特別な状況だと理解したほうが良いと思います。逆に言えば、一人でカジュアルにやる作業なんて、無いと思っています。

 

3)バックアップが大事

実は本番環境を運用するとわかるのですが、バックアップをリストアするときというのはほとんどありません。普通に動いていればバックアップは不要です。本番リリース前にバックアップの取得試験を行い、数日自動で取得されているのを確認し、それで放っておくという運用が多数あるのを知っています。

しかし、これは大変、危険です。

いざ問題が起こった時、バックアップが正しく取られているかの確認を日々やっていないとすれば、ドキドキしながらバックアップの状況を確認することになります。

その結果「取られていませんでした」という事例をいくつか知っています。

ある日のシステム変更でディレクトリ構成が代わり対象から外れていました、とか、バックアップの自動化シェルが失敗したままになっていました、とか。

バックアップの大事さを一度知ってからは、日々の運用でバックアップの成功ログを確認するようにしています。毎日バックアップの取得を確認することが、本番運用の肝だと気が付いたからです。

バックアップさえ取られていれば、最悪のケースは逃れられます。日々の平常運用のときほどバックアップに注目するべきです。

 

4)ほとんどの作業はファイル操作

最近は操作がGUIになっていることもありますが、コマンドでの作業の方が何をやったかわかりやすくて好きです。

変更作業だとこんなシナリオで完結します。

・カレントディレクトリーを変更
・設定ファイルのバックアップ取得
・元ファイルの変更
・構文チェック
・設定の反映

ログの確認は下記のようなシナリオです。

・カレントディレクトリーを変更
・ログファイルの確認

どちらにしろ、ほとんどの作業がファイルを操作しています。

OSの大事な機能の一つであるファイル操作ですが、この知識が浅いと本番環境を触れるのは非常にリスクがあります。

たかがファイル、ですが例えば削除コマンド一つの引数を間違えても、重大な障害を引き起こしかねません。

ファイル操作について熟知することがまず大事で、その上で様々なOS、ミドルウェア、アプリケーションのことを知っていってもらいたいな、と思います。

技術力不足で障害が起こった、ということを深掘りしていくと、結局はファイル操作の未熟さに行きつくことが大変多いからです。

 

 

4つほど本番環境に立ち向かう上でのポイントを挙げてみました。

もうこの業界に二十年以上いると、本番環境にログインするだけでも心臓が締め付けられる感覚になります。この場所にいられるから食えている、というのはあるものの、主戦場とするにはなかなか肝が必要だなと思う場面が多々あります。

根底には技術力が重要なものの、もっと大事な、ビジネスに対する感覚や基礎、要件を正しく理解する能力など、世間が思っているよりももっと人間に近い部分を必要とする仕事ですね。