Fastly世界障害(2021)— 潜伏バグと1顧客の設定
たった1顧客の正当な設定変更がなぜCDNの85%を落としたのか。検知1分・49分で95%復旧の実録から、潜伏バグと共有基盤のブラスト半径への備えを学べる。
- 2021年6月8日09:47 UTC、5月12日のデプロイで潜り込んだ潜伏バグが1顧客の正当な設定変更で発火し、FastlyのCDNネットワークの約85%がエラーを返した。
- 検知は発生1分後。10:27に引き金の顧客設定を特定して無効化し、発生から49分でネットワークの95%が正常稼働に復帰。恒久修正の展開は同日17:25に開始された。
- 教訓は、設定をコードへの入力とみなす検証(ファジング等)、設定変更にも段階適用(カナリア)、顧客単位の隔離によるブラスト半径の限定。
何が起きたか(日時・影響範囲)
2021年6月8日 09:47 UTC、CDN大手Fastlyのエッジネットワークが世界規模で異常を起こし、公式総括「Summary of June 8 outage」によればネットワークの約85%がエラーを返しました。世界中で HTTP 503 が観測され、報道では英政府の gov.uk、Reddit、Amazon、主要報道機関など多数のサイトが一斉に閲覧不能となりました。原因は攻撃ではなく、5月12日のソフトウェアデプロイで持ち込まれたバグが、ある1顧客の正当(valid)な設定変更をきっかけに発火したものでした。
コード中に存在するが、特定条件がそろうまで症状を出さない欠陥。今回は5月12日の展開から6月8日の発火まで27日間、本番ネットワーク上で無症状のまま潜伏していました。
タイムライン
公式ブログが公表した時系列(すべてUTC)です。
| 時刻(UTC) | 出来事 |
|---|---|
| 5月12日 | のちに発火するバグを含むソフトウェアデプロイを開始 |
| 6月8日 09:47 | 世界規模の障害が発生(顧客の設定変更が引き金) |
| 09:48 | Fastlyの監視が障害を検知(発生から1分) |
| 09:58 | ステータスページで告知を公開 |
| 10:27 | 引き金となった顧客設定を特定 |
| 10:36 | 当該設定の無効化により影響サービスが回復開始 |
| 11:00 | 大部分のサービスが回復 |
| 12:35 | インシデントを緩和(mitigated) |
| 17:25 | 恒久修正(バグ修正版)の展開を開始 |
公式総括は「障害を1分以内に検知し、原因を特定・隔離して当該設定を無効化した。49分以内にネットワークの95%が平常どおり稼働した」と述べています。
根本原因の技術解説
公式の説明では、5月12日に開始したデプロイに「特定の顧客設定が特定の状況下で有効になった場合にのみ発火しうるバグ」が含まれていました。6月8日の朝(UTC)、ある顧客がその条件を満たす正当な設定変更をプッシュし、これがバグを発火させてネットワークの85%がエラーを返しました。該当コンポーネントの詳細や顧客名は公表されていません。
技術的な焦点は、1顧客の変更が全世界へ波及した構造です。Fastlyのエッジクラウドは、顧客の配信設定を数秒〜十数秒で全キャッシュノードへ反映できる即時性を特徴とします。平常時は利点であるこの伝播の速さは、設定そのものが「バグを発火させる入力」になった瞬間、故障の拡散速度に変わります。さらにCDNはマルチテナントの共有データプレーンであり、1テナントの設定が引き起こす異常は、同じノードを通る他テナントの配信も巻き込みます。これが共有プラットフォームのブラスト半径です。
注目すべきは、復旧の決め手が根本修正ではなく「引き金となった設定の無効化」だった点です。修正版の展開(17:25開始)を待たず、トリガー入力の遮断だけで49分・95%復旧を達成しています。
なぜ防げなかったか
横にスクロール
第一に、発火条件が「特定の顧客設定 × 特定の状況」という組み合わせだったことです。ソフトウェアは展開後27日間正常に動作し、リリース前後の検証を通過していました。Fastlyも「なぜ品質保証とテストの過程でバグを検出できなかったのか」を調査すると表明しています。一般化すれば、テストがコードへの入力を網羅しても、全顧客の設定項目の直積という巨大な組み合わせ空間までは覆えない、という問題です。
第二に、デプロイと発火の時間的分離です。カナリアリリースは「展開直後に異常が出る」ことを前提とした防御であり、トリガーが27日後に外部から届く潜伏バグは観測窓をすり抜けます。
第三に、引き金を引いた顧客に落ち度がないことです。変更は仕様上正当であり、不正入力へのバリデーションでは捉えられません。
変更が実質的に「有効化」される瞬間は、デプロイ時とは限りません。フィーチャーフラグ、顧客設定、特定のデータパターンなど、後から届く入力がリリースボタンになりえます。デプロイ検証に加え、有効化経路ごとの検証が要ります。
教訓(原則として一般化)
- 設定を入力とみなす: 顧客設定やフラグはユーザー入力と同じ故障面です。スキーマ検証に加え、設定のファジングやプロパティベーステストで「正当だが想定外」の組み合わせを機械的に探索します。
- 設定変更にも段階適用: コードだけでなく設定の伝播にもカナリア(少数ノード→全体)を挟み、即時性とのトレードオフを設計判断として明示します。
- 顧客単位の隔離: プロセス分離やセル型アーキテクチャで、1テナントの異常が共有データプレーン全体へ波及しない構造にし、ブラスト半径を限定します。
- 切り戻しを原因特定より先に: 「直前に何が変わったか」の自動相関と、疑わしい変更を安全に無効化する手段が49分復旧の本質です。検知1分は監視の、49分は運用設計の成果でした。
障害事例の記事ガイド
Fastly世界障害(2021)— 潜伏バグと1顧客の設定を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
Fastly
比較で見る軸
難易度: advanced / カテゴリ: 障害事例 / タグ数: 6
導入後に効く点
検知は発生1分後。10:27に引き金の顧客設定を特定して無効化し、発生から49分でネットワークの95%が正常稼働に復帰。恒久修正の展開は同日17:25に開始された。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- 障害事例
- タグ数
- 6
判断チェックリスト
- 自社の用途が「Fastly / CDN」に近いか確認する。
- 強みである「2021年6月8日09:47 UTC、5月12日のデプロイで潜り込んだ潜伏バグが1顧客の正当な設定変更で発火し、FastlyのCDNネットワークの約85%がエラーを返した。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。