日本語
  • 事後分析
  • クラウドサービス
  • インシデント

事後分析: Docker イメージが見つかりません

2023-12-17 に発生した Logto サービスの停止に関するインシデント報告。これはプロダクション Docker イメージの消失によるものです。

Simeng
Simeng
Developer

概要

2023-12-17 に Logto のプロダクション Docker イメージの消失が原因でサービス停止が発生しました。

  • インシデント発生時間: 2023-12-17 03:56:00 UTC
  • インシデント持続時間: 18 分
  • サービスへの影響: インシデント中、Logto クラウドサービスと Logto コアサービスが利用できませんでした。
  • 影響レベル: 重大
  • 根本原因: Logto のプロダクション Docker イメージが誤って削除されました。GitHub Container Registry からイメージの取得に失敗しました。

タイムライン

時間イベント
2023-12-17 の早朝 (具体的な時間は不明)Logto の自動 GitHub イメージ保持ワークフローが実行され、logto および logto-cloud のプロダクションイメージが誤って削除されました。
2023-12-17 03:56:00 UTCLogto クラウドサービスと Logto コアサービスが利用できなくなりました。インシデントはモニタリングシステムによって検出されました。
2023-12-17 04:03:00 UTC当番のエンジニアによってインシデントが認識されました。
2023-12-17 04:10:00 UTC最新のイメージを使って Logto クラウドサービスと Logto コアサービスの新しいデプロイメントが開始されました。
2023-12-17 04:15:00 UTCLogto クラウドサービスと Logto コアサービスが利用可能になり、インシデントは自動的に解決されました。

インシデント分析

何が起こったのか

Logto サービスのプロダクションイメージが、自動 GitHub イメージ保持ワークフローによって削除されました。クラウドサービスは GitHub Container Registry からイメージの取得に失敗し、利用できなくなりました。

Service Log

なぜ発生したのか

自動 GitHub イメージ保持ワークフローが誤ってプロダクションイメージを削除しました。このワークフローは、3 日以上前のすべてのタグのないレガシーイメージを削除するように設計されています。

プロダクションイメージは prod タグでタグ付けされ、プロダクションイメージとして識別されます。プロダクションデプロイメントが開始されるたびに、prod タグを持つ新しいイメージが構築され、GitHub Container Registry にプッシュされます。新しいイメージが成功裏に構築され、プッシュされると、古いイメージから prod タグが削除されます。古いイメージはタグなしとなり、自動 GitHub イメージ保持ワークフローによって削除されます。

Logto サービスイメージは複数のアーキテクチャをサポートするように構築されました。イメージは buildx で構築され、--platform フラグを使って GitHub Container Registry にプッシュされました。すべてのタグはルートマニフェストリストに適用されました。prod タグもルートマニフェストリストに適用されました。マルチアーキテクチャマニフェストリストの下にリストされたすべてのサブイメージはタグなしのままでした。

Docker イメージのタグとマニフェストリストの構造を慎重に確認しなかったため、単に自動 GitHub イメージ保持ワークフローをすべてのタグなしイメージを削除するように構成しました。このワークフローは、マルチアーキテクチャマニフェストリストの下にリストされているすべてのサブイメージを削除しました。

影響

このインシデントにより、約 18 分間、Logto クラウドサービスと Logto コアサービスが利用できなくなりました。エンドユーザーは Logto にログインしたり、クライアントアプリケーションにアクセスしたりすることができなくなりました。Logto クラウド管理ポータルもインシデント中は利用できませんでした。

解決

自動 GitHub イメージ保持ワークフローを停止し、prod タグを持つ新しいイメージを GitHub Container Registry にデプロイしました。新しいイメージは Logto クラウドサービスと Logto コアサービスによって正常に取得され、サービスは再び利用可能になりました。

教訓

  • 本番環境でワークフローを慎重にレビューし、テストせずに発行しない。
  • 資源削除ジョブを実行する前に常にドライランを行う。
  • 本番環境用のバックアッププランを常に備えておく。
  • 新しいイメージ保持ポリシーを慎重に定義する。

是正および予防措置

  • ✅ 自動 GitHub イメージ保持ワークフローを即座に停止します。