米Googleは6月13日午後4時45分(米太平洋時間)、12日の午前10時51分に発生し、同日午後6時18分に収束したGoogle Cloudのサービス障害について、原因と対策を報告した。

【その他の画像】

原因はAPI管理システムの新機能のコード不備

 今回の障害は、GoogleのAPI管理システムである「Service Control」における新しいクォータポリシーチェック機能のコードの不備が主な原因という。

 5月29日にService Controlに追加された新しいクォータポリシーチェック機能のコードに、適切なエラーハンドリングが欠けており、また重要な「機能フラグ」による保護もされておらず、6月12日にService Controlが使用する地域ごとのSpannerテーブルに、意図しない空のフィールドを含むポリシー変更が挿入された。

 この誤ったポリシーデータが処理される際、不備のあるコードパスが実行され、nullポインタエラーが発生。これによりService Controlのバイナリが世界中でクラッシュループに陥った。

障害発生から2分以内に対処開始

 Site Reliability Engineeringチームは、障害発生から2分以内に対応を開始し、10分以内に根本原因を特定した。

 問題のあるAPI提供パスを無効化する「赤ボタン」を導入し、障害発生から40分以内にサービスの回復が始まった。サービス回復後すぐに、Service Conrolシステムのすべての変更と手動でのポリシー更新を一時的に停止した。

今後の改善アプローチ

 Googleは、こうした障害を繰り返さないために以下の対策を優先的に実施すると表明した。

・Service Controlのアーキテクチャモジュール

・グローバルに複製されるデータの監査

・機能フラグによる保護の徹底

・エラーハンドリングとテストの改善

指数関数的バックオフの徹底

・外部コミュニケーションの改善

・監視および通信インフラストラクチャの継続的な運用

・API管理プラットフォームの堅牢化

・メタデータの伝播保護

 Googleはこの障害報告の冒頭で「この度の障害による影響について深くお詫び申し上げます。Google Cloudのお客様とそのユーザーの皆様は、Googleにビジネスを託してくださっているのですから、私たちは今後、より良いサービスを提供していく所存です。お客様のビジネスとユーザーの皆様だけでなく、弊社のシステムに対する信頼にも影響を与えたことをお詫び申し上げます。今後、このような障害が発生しないよう、改善に努めてまいります」と謝罪した。

インシデントレポート冒頭