Google Cloud、世界中のリージョンが影響を受けた大規模障害、原因は管理システムがヌルポインタ参照でクラッシュしたこと
Google Cloudは日本時間で6月13日金曜日の午前2時49分から約3時間のあいだ、Google Cloudの世界中のリージョンにおいてAPIへのアクセスに対して503エラーの発生が増加するなどの障害を起こしていました。
この影響でSpotifyやTwitch、NPM、Firebaseなど、Google Cloudを利用していた多くのサービスにも障害が発生することとなりました。
この障害の原因についてGoogle Cloudは6月15日に詳しい報告を公開しています。
報告によると、Google Cloud APIを外部に提供するために世界中の各リージョンに配置されているGoogle API管理ツールに追加した新機能に潜在的なバグがあり、適切なエラーハンドリングやフィーチャーフラグが働かない状態でヌルポインタを参照しクラッシュ。
世界中の各リージョンでほぼ同時にこのクラッシュが発生したことが障害の原因だとしています。
時系列で何が起きたかをまとめました。
API管理ツールの機能追加にバグ
2025年5月29日(現地時間)、つまり今回の障害が発生する約2週間ほど前に、Google APIの管理ツールにおいて、APIの利用制限などのポリシーをチェックする「サービスコントロール」と呼ばれる機能に新たな機能追加が行われました。
この機能追加は世界中の各リージョンのサービスコントロールに対して行われました。この追加機能の中に今回の障害につながるバグが含まれていましたが、この追加機能はAPIの利用ポリシーが変更されない限り実行されなかったため、見過ごされてしまいました。
バグは、ヌルポインタを参照するとクラッシュするというものでした。適切なエラーハンドリングもなく、フィーチャーフラグによる無効化の初期設定も行われていませんでした。
もしフィーチャーフラグが適切に設定されていれば、このバグを含む機能はまずステージング環境において有効にされ、そこでクラッシュが発覚し、各リージョンで障害を起こす前に対処されていただろうと報告されています。
障害を引き起こすクラッシュが発生
障害発生当日、障害が発生する4分前(現地時間6月12日 10時45分)に、サービスコントロールが参照するポリシーの変更が行われます。
具体的には、ポリシーデータを格納しているGoogle Spannerのテーブルにデータが追加され、数秒で世界中の各リージョンのSpannerにレプリケートされました。
新しいポリシーデータには意図せず空白のフィールドが含まれており、これをサービスコントロールが読み込んで実行したところ、ヌルポインタ参照となりクラッシュが発生します。
世界中のリージョンで同じようにサービスコントロールのクラッシュが発生し、Google Cloudの障害を引き起こしました。
発表によると、障害発生時間は現地時間の10時49分です。
2分以内にSREチームが対処開始
障害発生から2分以内に、Google CloudのSRE(Site Reliability Engineering)チームは障害を感知し、重要度に応じた対応のためのトリアージを開始。10分以内に原因を発見しました。
そして障害発生から25分以内に、原因となる新ポリシーの適用を巻き戻す「緊急ボタン(Red Button)」を実行。この緊急ボタン機能は、幸いにも追加機能の中に実装されていたものです。
緊急ボタンによる巻き戻しは40分以内に完了。各リージョンの復旧が開始されました。
小規模なリージョンから復旧
復旧は小規模なリージョンが先行しており、現地時間の12時9分にはいくつかのリージョンにおいて復旧状態を観測。
12時30分には最も大規模なリージョンである米中央1を除くすべてのリージョンで復旧したことを確認。
14時23分には、ほぼすべてのサービスが復旧し、18時27分にすべてのサービスの復旧が報告されました。
今後の改善点
今回の障害を受けて、Google Cloudは今後以下の点を改善するとしています。
- サービスコントロールをモジュール化し、機能を分離し、障害が発生したとしてもシステム停止ではなくシステム継続となる「フェールオープン」にする
- グローバルにレプリケートされるデータを利用するすべてのシステムについて監査を行う
- 重要な変更については、フィーチャーフラグで初期設定がオフになることを徹底する
- 静的解析とテストの手法を改善し、エラーハンドリングが正しく行われるようにする
- システムでエラーが発生したときには、再試行までの待ち時間をランダム化された指数関数的に長く(指数関数的バックオフ)する
- 自動化されたコミュニケーションと人間的なコミュニケーションの両方で外部コミュニケーションを改善する
- Google Cloudと主要なモニタリング機能がダウンした場合でも、ユーザーがモニタリングしコミュニケーションできる手段を確保する