3 ポイント 投稿者 GN⁺ 2025-10-24 | 2件のコメント | WhatsAppで共有
  • 2025年10月19〜20日、AWS N. Virginia リージョン(us-east-1) で Amazon DynamoDB をはじめ複数の中核サービスが長時間の障害に見舞われた
  • 障害は、DynamoDB の自動 DNS 管理システム内の潜在的な競合状態(race condition) により、誤って空の DNS レコードが生成されたことから始まった
  • これにより、EC2 インスタンス作成失敗Network Load Balancer(NLB)の接続エラーLambda・ECS・Redshift など多数のサービスの API 遅延および失敗が連鎖的に発生した
  • AWS は問題の原因を DynamoDB DNS Enactor 間の異常な同時更新の衝突と特定し、手動復旧により 10 月 20 日午後 2 時 20 分ごろに完全復旧した
  • 今回の事案は、AWS 内部の自動化システム間の相互依存性の複雑さを浮き彫りにし、今後は DNS・EC2・NLB の耐障害性強化に向けた構造的改善が予告されている

事案の概要

  • 障害は 2025 年 10 月 19 日午後 11 時 48 分(PDT)に始まり、10 月 20 日午後 2 時 20 分(PDT)に終了
    • 主な影響区間は 3 回あった:
      1. 10 月 19 日 11:48PM〜10 月 20 日 2:40AM: DynamoDB API エラー率が急増
      2. 10 月 20 日 5:30AM〜2:09PM: NLB 接続エラーが増加
      3. 10 月 20 日 2:25AM〜10:36AM: EC2 の新規インスタンス作成失敗およびネットワーク接続問題
  • 障害は DynamoDB DNS 管理システムの欠陥から始まり、EC2、NLB、Lambda、Redshift など多数のサービスへ拡大した

DynamoDB 障害の原因と影響

  • DynamoDB の自動 DNS 管理システム 内の潜在的欠陥がトリガーされ、dynamodb.us-east-1.amazonaws.com の DNS レコードが空の状態に誤って更新された
    • システムは 2 つの構成要素に分かれている:
      • DNS Planner: ロードバランサーの状態を監視し、新しい DNS プランを生成
      • DNS Enactor: Route53 に変更を適用する役割
  • 3 つのアベイラビリティゾーン(AZ)に独立配置された DNS Enactor 間で 競合状態(race condition) が発生
    • 1 つ目の Enactor が遅延した状態で古いプランを適用
    • 2 つ目の Enactor が最新プランを適用した後、古いプランを削除したことで、すべての IP アドレスが除去され、システムが不整合状態に移行
    • 自動復旧に失敗したため、手動介入(manual intervention) が必要になった
  • 11:48PM の障害発生直後、DynamoDB に依存するすべてのサービスと顧客トラフィックで接続失敗が発生
    • グローバルテーブルを使用している顧客は他リージョンのレプリカにリクエストできたが、レプリケーション遅延(replication lag) が発生した
  • 12:38AM に AWS エンジニアが DNS 状態を問題の原因として確認
    • 1:15AM の暫定復旧措置で一部の内部サービス接続を回復
    • 2:25AM に DNS 情報を完全復元し、2:40AM にすべての接続が正常化

Amazon EC2 への影響と復旧過程

  • 10 月 19 日 11:48PM〜10 月 20 日 1:50PM の間、EC2 API エラー率の上昇、インスタンス作成失敗、遅延増加が発生
    • 既存の稼働中インスタンスには影響なし
  • EC2 インスタンス管理には DropletWorkflow Manager(DWFM)Network Manager という 2 つのサブシステムが使用される
    • DWFM は物理サーバー(「droplet」)の状態を管理し、定期的に状態確認を実施
    • Network Manager はインスタンスのネットワーク設定を伝播する
  • DynamoDB 障害により DWFM の状態確認が失敗し、droplet のリースが期限切れになった
    • 2:25AM に DynamoDB 復旧後、DWFM が再接続を試みたが、大量の droplet 数により 輻輳崩壊(congestive collapse) が発生
    • 4:14AM にエンジニアが DWFM ホストを選択的に再起動してキューを整理し、復旧を進めた
    • 5:28AM にすべての droplet リースが復元され、新規インスタンス作成が再開
  • その後、Network Manager が遅延したネットワーク状態伝播のバックログを処理する過程で、ネットワーク接続遅延が発生
    • 10:36AM にネットワーク伝播時間が正常化
    • 11:23AM にリクエスト制限(throttling)の緩和を開始し、1:50PM に EC2 が完全復旧

Network Load Balancer(NLB)への影響

  • 10 月 20 日 5:30AM〜2:09PM の間、一部の顧客が NLB 接続エラーの増加を経験
    • NLB はマルチテナント構造で、バックエンドの EC2 インスタンスにトラフィックをルーティングする
  • 障害原因は ネットワーク状態伝播遅延によるヘルスチェック失敗
    • 新たに追加された EC2 インスタンスのネットワーク設定が完了しておらず、ヘルスチェックに失敗
    • ヘルスチェック結果が不安定に繰り返され、NLB ノードが DNS から削除されたり復帰したりする現象が発生
  • 6:52AM に監視システムが問題を検知し、エンジニアが対応を開始
    • ヘルスチェックサブシステムの負荷増加により自動 AZ DNS フェイルオーバーが発生
    • 9:36AM に自動フェイルオーバーを無効化し、すべての正常ノードが復帰
    • 2:09PM に EC2 復旧後、自動フェイルオーバーを再有効化

その他の AWS サービスへの影響

  • AWS Lambda:
    • 10 月 19 日 11:51PM〜10 月 20 日 2:15PM の間、API エラーおよび遅延
    • DynamoDB 障害により関数の作成・更新に失敗し、SQS/Kinesis イベント処理が遅延
    • 7:04AM に NLB ヘルスチェック失敗で内部システムが縮退し、非同期呼び出しが制限
    • 2:15PM にすべてのバックログ処理が完了し正常化
  • ECS、EKS、Fargate:
    • 10 月 19 日 11:45PM〜10 月 20 日 2:20PM の間、コンテナ起動失敗およびクラスター拡張遅延
  • Amazon Connect:
    • 10 月 19 日 11:56PM〜10 月 20 日 1:20PM の間、通話・チャット・ケース処理エラー
    • DynamoDB 復旧後に大半の機能は正常化したが、7:04AM 以降は NLB および Lambda の影響で再びエラーが発生
    • 1:20PM に完全復旧
  • AWS STS:
    • 10 月 19 日 11:51PM〜10 月 20 日 9:59AM の間、認証 API エラーおよび遅延
    • DynamoDB 復旧後に一時正常化したが、NLB 問題により再度エラーが発生
  • IAM ログインおよび Identity Center:
    • 10 月 19 日 11:51PM〜10 月 20 日 1:25AM の間、認証失敗が増加
    • DynamoDB 復旧後に正常化
  • Amazon Redshift:
    • 10 月 19 日 11:47PM〜10 月 20 日 2:21AM の間、クエリおよびクラスター変更に失敗
    • DynamoDB 復旧後も一部クラスターは EC2 障害の影響で依然として不安定
    • 10 月 21 日 4:05AM に完全復旧
    • IAM API 依存性によりグローバルリージョンでも一時的なクエリ失敗が発生
  • その他のサービス:
    • Managed Workflows for Apache Airflow、Outposts、AWS Support Center なども影響を受けた

事後対応と改善計画

  • DynamoDB DNS Planner および Enactor の自動化を全面停止し、再有効化前に競合状態の修正と保護機構の追加を予定
  • NLB: ヘルスチェック失敗時に単一 NLB が削除できる容量を制限する レート制御メカニズム を導入
  • EC2:
    • DWFM 復旧ワークフローを含む新たな テストスイート を構築
    • データ伝播システムの スマートスロットリング改善により、待機キューサイズに応じたリクエスト制限機能を追加
  • AWS はサービス全体の相互依存性分析を通じて、復旧時間短縮および類似事故防止策を追加検討中

結論と謝罪

  • AWS は今回の事案が顧客に与えた影響について公式に謝罪
  • 自社サービスの高い可用性を維持してきたものの、今回の障害が 顧客ビジネスに重大な影響を与えたことを認めた
  • 本件を教訓として、自動化システムの耐障害性および障害対応手順の強化を約束した

2件のコメント

 
shakespeares 2025-10-26

シニア人材を切った反動だと言われていますが……本当ですか?

 
GN⁺ 2025-10-24
Hacker Newsの意見
  • この話題についてはいつも同じことを言っている。まだ Richard Cookの文章 を読んでいないなら、まずこのポストモーテムを読むのをやめて、先に How Complex Systems Fail を読むことを勧める。複雑なシステム障害を扱った技術文章として最高クラスの一つだ。Cookは「ルート原因(root cause)」という概念そのものを退けており、今回の件でも彼が正しいと思う

    • Cookの文章は悪くないが、実際には 直感的な主張の列挙 のようにも感じる。本当に深く理解したいなら参考文献を全部読む必要がありそうだ。MITのシステムの授業 6.033 でも似たテーマとして 1962年の論文別の古典的論文 を読ませる。こうした問題は結局 「Wicked problem」 レベルの複雑性に達した事例だと思う
    • Cookの文章で印象的だったのは、事故後にシステムを「より安全に」直そうとする試みが、かえって 安全性を下げることがある という点だった。人間のミスを防ぐための措置がシステムの結合度と複雑性を高め、潜在的な障害点を増やし、検知や遮断をより難しくするという説明が特に腑に落ちた
    • 別の視点として 「Normal Accidents」理論 がある。構成要素の結合が強く、相互作用が複雑で、障害の結果が深刻であるほど、システムは本質的により危険になるという主張だ。Normal AccidentsのWikipedia 参照
    • 私は両方の文書を最後まで読んだわけではないが、単にシステムが複雑だからという理由で障害の ルート原因 を特定できないという主張には同意しない。スポーツでも得点は複数要因の結果だが、最終的に「得点者」は存在する。広い視野は良いが、核心原因を押さえるのも実用的だ
    • 私は オンコール(oncall) 勤務をする契約社員だ。ほとんどの会社はオンコールを真剣に扱っていない。文書化も不十分で、他人の複雑なコードを読む時間も与えない。AWSのようにオンコールを学習と責任の一部として捉える文化をぜひ経験してみたい
  • インターネットはますます 集中化された単一ネットワーク(mononet) へと変わっている。冷戦時代に分散ネットワークとして生まれたインターネットが、今では一度のデプロイミスで世界中の銀行・買い物・旅行が止まりうる構造になった。クラウドというメタファーはすでに限界を超えている。
    スタートアップやR&Dには依然として有用だが、成長段階の企業や政府は 自前サーバー・自前クラウド・自前の基幹サービス を持つべきだ。技術も人材も十分にある

  • AWSのポストモーテムでは 正確なタイムラインの可視化 が印象的だった。GDCの伝説的講演 "I Shot You First" のように、時間の流れを傾いた矢印で表現し、「遅延はどこで発生したのか」を問う手法が有用だった。
    しかしもっと驚いたのは、EC2ノードのリース管理サービスに 復旧手順(runbook) がなかったことだ。AWSの中核サービスなら、ほとんどすべての例外状況に備えがあると思っていた

    • こうした状況は恐れるべきものではなく、複雑系の本質的なパターン として認識すべきだ。潜在的な障害はフラクタルのように存在し、あらゆるケースに対応するランブックを持つことは不可能だ
  • 今回の件の核心は、DNSシステムにおける キャッシュ無効化(cache invalidation) 問題の変種のように見える。2つのDNS Enactorが異なるタイミングでプラン(plan)を適用したことで レースコンディション が発生し、古いプランが新しいプランを上書きしてしまった

    • これは一般向けの説明にすぎず、実際の内部ではインシデント解決後に 再発可能性の評価と緩和策(runbook)の作成 が行われる。その後、組織全体での学習と共有が続く
    • 私はこの レースコンディションそのものがルート原因 だと考える。そのバグさえなければインシデントは起きなかったはずだ
    • DNS PlannerとEnactorをなぜ分離したのか疑問だ。1つのサービスだったなら、こうした競合状態はもっと明確に見えたはずだ。マイクロサービスの乱用 が複雑性を高めた結果かもしれない
    • 似たような問題を経験したことがあるが、原因は JVM GC遅延 と故障したハードウェアだった。今回もその可能性はある
    • ただしAWSは、このような遅延が再び発生した場合の 予防策 を明示していない
  • Enactorは新しい値を適用する前に、現在のレコードのバージョン比較(CAS) をすべきだった。効率は落ちても基本的な安全装置だ。DynamoDB自体で処理できたはずだ

  • DynamoDBがリージョンごとに数十万件のDNSレコードを管理しているという説明を見て驚いた。dynamodb.us-east-1.amazonaws.com が数十万のIPに解決されうるとは、Route53の限界を超える規模 に思える。おそらくTTLを低くして一部だけ更新する方式なのだろう

    • 実際、AWSのDNSはそのように動作している。Route53は リソースレコードセット(RRSet) 単位で動作し、ヘルスチェックやレイテンシベースの選択ロジックを通じて適切なセットを返す
    • CDNも似たように動く。システムメトリクスを収集して、ネットワークごとの最適なPoPを計算する。bunny.net SmartEdge が良い例だ
    • 私もS3で試してみたが、数秒のうちに数百個の異なるIPを受け取った。単一リージョンでもこれだけの多様性がある
  • バグは常に存在する。形式検証(formal verification) は難しく、低確率のバグは何年も経ってから表面化することもある。
    だからシステムは必ず失敗すると仮定し、被害を限定する構造 を設計しなければならない。セルベースアーキテクチャ、段階的ロールアウト、隔離されたゾーンがその例だ。
    AWSもセルベース化を進めているが、特に us-east-1 には レガシーな相互依存 が残っている。長期的にはリージョンを完全に独立して設計すべきだ。
    こうした作業は上級経営陣の支援がなければ進まないが、株主の立場では企業存続リスク を減らすための中核的投資だ

  • レポートで UTCではなくPTタイムゾーン を使っていたのは意外だった

    • 「epoch fail?」という冗談が出るくらいだが、顧客の大半が米国基盤なので、PTのほうが直感的なのかもしれない
    • おそらく 夜間対応の難しさ を強調したかった意図もあるのだろう
  • エンドポイント単位のバージョン管理や 2PC、単一writer lease のようなパターンがないのは驚きだった。それでもAWSがこれほど透明に公開したことは高く評価したい

    • 実際にはDNS変更APIはCASを実行するが、複数の非同期writerが 論理的順序なしに競合 したことで問題が生じた。zone serialやsentinel recordを使って順序を直列化すべきだった
  • 私は今回の 直接的な原因 が、DynamoDB DNS管理システムに潜んでいたレースコンディションだったと考えている。古いプランが最新のプランを上書きし、リージョナルエンドポイントのDNSレコードが空になってしまった

    • ただし「ルート原因」という概念には注意が必要だ。今回は メタ安定的崩壊(metastable collapse) であり、核心的な問題は復旧手順(runbook)の不在だった。
      参考: How Complex Systems Fail