本当にデプロイしているもの:すべてのリリースに伴う5つのリスク
テストは通った。ステージング環境も問題ない。チームの準備は整った。デプロイボタンを押し、パイプラインはグリーンになった。しかし1時間後、サポートチケットが入り始める。ユーザーがチェックアウトを完了できない。データベースマイグレーションが静かにカラムを壊した。そしてログのどこかで、気づかなかったセキュリティ警告が現実の問題になっている。
これはパイプラインの失敗ではない。デプロイがコードだけを運ぶわけではないという認識の欠如だ。新しいバージョンを本番に送るたびに、リスクも同時に出荷している。その一部は明白だ。しかし、ほとんどはそうではない。
技術リスク:最初に壊れるもの
これは誰もが知っているリスクだ。新しいバージョンがステージングのすべてのテストに合格したにもかかわらず、本番で正しく動作しない。設定が微妙に異なる。ライブラリのバージョンが合わない。本番サーバーのメモリがステージングより少ない。新しいコードが依存するダウンストリームサービスが利用できない。
技術リスクは通常、最初に気づくものだ。エラー、クラッシュ、応答時間の低下、ヘルスチェックの失敗として現れる。モニタリングダッシュボードが赤くなる。ポケベルが鳴る。問題は可視化され、チームはすぐにデバッグを開始できる。
しかし、ここに落とし穴がある。技術リスクが最も目に見えるため、チームはデプロイの予防策をすべてそれに集中させがちだ。テストを増やし、ステージング環境を増やし、デプロイ前チェックを増やす。その間、他の4つのリスクは気づかれずにすり抜ける。
ビジネスリスク:動いても役に立たないとき
コードは正常にデプロイされた。エラーなし。クラッシュなし。パフォーマンスも正常。しかし、その機能は本来の価値を提供していない。摩擦を減らすためにチェックアウトフローを変更したが、ユーザーは混乱してカートを放棄した。新しいレコメンデーションエンジンを立ち上げたが、誰もクリックしない。
ビジネスリスクはバグのように見えないため、検出が難しい。システムは健全だ。ログはクリーンだ。しかし、コンバージョン率、ユーザーエンゲージメント、収益といった重要な指標が悪い方向に動き始める。気づいたときには、数日または数週間が経過している。データはノイズが多い。デプロイが原因なのか、他の何かなのかを特定するために、別の調査が必要になる。
データリスク:失われるもの、壊れるもの
このリスクは、デプロイがデータの保存方法、移動方法、解釈方法を変更するときに現れる。データベースマイグレーションがカラム名を変更したが、古いレコードの更新を忘れた。新しいキャッシュ層が古いデータを提供する。クリーンアップスクリプトが、以前のバージョンのアプリケーションがまだ必要とする行を削除する。
データリスクは、即座にエラーを引き起こさないことが多いため、陰湿だ。アプリケーションは動き続ける。ユーザーはエラーメッセージを見ない。しかし、レポートに合計が合わない数字が表示され始める。カスタマーサポートに注文履歴がないという電話がかかる。財務チームが取引記録の不一致に気づく。誰かがそれをデプロイに遡る頃には、データは何日も一貫性を失っている。
セキュリティリスク:知らずに開けてしまったもの
新しいAPIエンドポイントに認証がない。追加した依存関係に既知の脆弱性がある。設定変更で誤ってデータベースポートがインターネットに公開される。ロギングライブラリが機密性の高いユーザーデータをプレーンテキストファイルに書き込み始める。
セキュリティリスクは常に自らを知らせるとは限らない。ペネトレーションテスト、監査、あるいは最悪の場合、実際の侵害まで気づかないかもしれない。金曜日にクリーンに見えたデプロイが、月曜日のインシデントレビューの対象になる。誰もが「どうやってこれが通ったんだ?」と尋ねる質問は、通常、当時は無害に見えた何かによって答えられる。
コンプライアンスリスク:ルールが言うこと
一部の業界では、変更管理の方法に関する規制がある。誰がデプロイを承認したか。どのような記録が残されたか。変更が本番を模した環境でテストされたか。監査証跡が完全か。
コンプライアンスリスクは、そうでなくなるまで無視しやすい。承認ステップをスキップしたデプロイは完全に機能するかもしれないが、監査人が変更記録を求めたとき、何も提示できない。患者データを扱うヘルスケアアプリケーションには、動作するコードだけでなく、変更が要求されたプロセスに従ったという証拠が必要だ。トランザクションを処理する金融システムには、誰がいつ何を変更したかの明確なログが必要だ。
このリスクはコード自体から来るのではない。実際に行ったことと、行うべきだったことのギャップから来る。
これらのリスクは単独では移動しない
単一のデプロイが同時に複数のリスクを運ぶことができる。データベーススキーマの変更はデータリスクと技術リスクをもたらす。ユーザーの行動を変える新機能はビジネスリスクと、場合によってはセキュリティリスクをもたらす。コンプライアンスプロセスをスキップするデプロイは、他のすべてに加えてコンプライアンスリスクをもたらす。
以下の図は、5つのリスク間の最も一般的な相互作用をマッピングし、あるリスクがどのように別のリスクを引き起こしたり増幅したりするかを示している。
間違いは、デプロイリスクを単一のものとして扱うことだ。「デプロイしても安全か?」は間違った質問だ。正しい質問は「このデプロイでどのようなリスクを運んでいるのか、そしてそのうちどれに対処する準備ができているのか?」である。
すべてのデプロイのための実用的リスクチェックリスト
デプロイボタンを押す前に、チームで次の5つの質問を検討しよう。
- 技術的:何が壊れる可能性があり、それを5分以内にどのように知るのか?
- ビジネス的:この機能が意図したとおりに機能していることを示す指標は何か?
- データ的:この変更はデータの保存、移行、解釈に影響を与えるか?
- セキュリティ的:新しいエンドポイント、依存関係、設定変更をレビューしたか?
- コンプライアンス的:この変更には監査証跡、承認、文書化されたプロセスが必要か?
すべてのリスクを排除する必要はない。それは不可能だ。しかし、どのリスクを受け入れ、どのリスクを積極的に防止しているかを知る必要がある。
まとめ
デプロイは、たまたまビジネス上の結果をもたらす技術的なイベントではない。たまたま技術的な作業を伴うビジネスイベントである。5つのリスク(技術、ビジネス、データ、セキュリティ、コンプライアンス)は常に存在する。確実に出荷するチームは、リスクを排除するチームではない。自分たちがどのようなリスクを抱えているかを正確に把握し、どのリスクなら許容できるかを明示的に決定しているチームである。