JCB デジタルソリューション開発部 SREチームの鳩貝と申します。
今回は弊社における障害訓練(Gameday)の取り組みを紹介させていただきます。
JCB(JDEP)におけるGamedayの取り組み
弊社ではビジネスを迅速に市場提供することを目的とし、Google Cloud上にJCB Digital Enablement Platform(以下JDEP)と呼ばれる共通プラットフォームを構築運用しております。
※基盤の詳細については弊社平松の投稿をご覧ください。
本基盤上では既に複数アプリが稼働しており、並行して新規開発も日々行われています。今回、アプリ含む基盤全体の信頼性向上/実運用の改善を目的とし、チーム横断で障害訓練(Gameday)を開催しました。
本イベントについて記事2本立てで説明させていただきます。
- Gameday概要・運営 ←今回の記事です。
- Gamedayで発生させた障害と学び(後日執筆予定)
なお、本稿は今年開催のCloud Operators Days Tokyo 2022(外部サイト)にて 審査委員特別賞(挑戦編) を受賞した発表をベースとしています。
登壇動画のアーカイブがYouTubeにて公開されておりますので、よろしければ御覧ください。
Gameday概要
Gameday企画以前、JDEPでは以下の課題意識を抱えていました。
- JDEPはマイクロサービスアーキテクチャ。複雑なシステムであり、全異常系を考慮しきるのは困難。
- 本番稼働中/本番稼働目前のシステムが基盤上に複数存在。個々のシステムでは障害試験を実施しているが、基盤全体を巻き込んだ訓練は未実施。
Gamedayを実施することで、上記課題を一挙に解決できました。
JDEPはマイクロサービスアーキテクチャ。複雑なシステムであり、全異常系を考慮しきるのは困難。
->カオスエンジニアリングツール"Gremlin"を用い、未知の障害を起こすことで、未知を既知に。本番稼働中/本番稼働目前のシステムが基盤上に複数存在。個々のシステムでは障害試験を実施しているが、基盤全体を巻き込んだ訓練は未実施。
->Gamedayを企画実行することで全体訓練を実施。大規模障害経験を意図的に積む。
なお、前述の通りアプリ/基盤のチーム横断的な障害訓練はプロジェクトとして初の試みでした。
よってまずはスモールスタートを志向し、対象アプリを単独に絞った第1回訓練しました。
その後初回訓練で得たナレッジを踏まえ、複数アプリに影響を及ぼす基盤全体としての訓練しました。
- | 障害内容 | 開催場所 | 参加チーム | 参加人数 |
---|---|---|---|---|
第1回 | アプリ単独障害 | ハイブリッド(オンサイト/リモート) | アプリ1チーム/SREチーム/Platformチーム | 約20名 |
第2回 | 基盤障害(gameday) | フルリモート | アプリ4チーム/SREチーム/Platformチーム | 約60名 |
各障害訓練のスケジュールは下図のとおりです。
Gamedayの運営
運営人数
企画運営から障害内容の検討/実装まで、基本的に3名で運営しました。
なお、障害対応状況を把握するため、運営メンバーは訓練当日各チームがやりとりするチャットやビデオ会議における会話をウォッチする想定でした。しかし実際にはチャットやビデオ会議があらゆる場所で行われたため、状況を追うのは困難でした。
Gamedayを実施することがありましたら、参加チーム数分の運営メンバー確保をオススメします。
開催場所
第1回はオンサイトとリモート混在のハイブリッド開催、第2回はフルリモートで開催しました。
第1回(ハイブリッド開催)のファシリティ
現地とオンラインそれぞれにファシリティを確保し、各チームの会議/作業スペースを準備しました。
現地参加のメンバーとオンライン参加のメンバーとでそれぞれ得られる情報量が異なる(圧倒的にオンサイトメンバーの得られる情報量が多い)ことから、訓練後には「オンラインのメンバーはインシデント時にどのように振る舞うべきか」という議論が活発に行われました。
- 物理的なファシリティ
- アプリチーム用長机
- SRE/Platformチーム用長机
- 仮想セキュアルーム
- 弊社では本番作業時、NW的に他環境とは分断された部屋(セキュアルーム)にて作業します。今回セキュアルームを仮想的に再現することを意図し、現地に長机を用意しました。
- 仮想的なファシリティ
- GoogleMeet
- 全体ルーム
- リモート参加者の存在も加味し、参加者全員に出席頂きたいイベント(開会式/振り返り)は本ルームで実施しました。
- チーム毎のコミュニケーション用ルームについては参加者にて適宜作成頂きました。
- 全体ルーム
- GoogleMeet
第2回(フルリモート開催)のファシリティ
各チーム毎のGoogleMeetルームを運営にて準備することで、運営からの可視性の担保を試みました。
訓練当日はフルリモートならではの混乱(乱立するチャットスレッド、乱立するGoogleMeetのスペース、etc..)が発生し、訓練後には「どのような状況共有/整理が適切なのか」という観点での議論を生みました。
- 仮想的なファシリティ
- GoogleMeet
- 全体ルーム
- 各チーム用ルーム
- 運営メンバーからの状況確認を容易にするため、第2回においてはチーム毎のコミュニケーション用ルームを運営側で準備しました。
仮想セキュアルーム- 第2回における仮想セキュアルームは考慮の結果、運営による本環境の再現は割愛としました。
- GoogleMeetのルーム数が大量となり、管理が困難であったためです。
- なお、参加チームによってはGoogleMeetのブレイクアウトルームを活用、ビデオ会議システム上に仮想なセキュアルームを作成のうえロールプレイを実施頂きました。
- GoogleMeet
タイムスケジュール
1日あたり障害を2ケース実施することを念頭に、タイムスケジュールを設定しました。
時間 | コンテンツ |
---|---|
10:00 - 10:30 | 開会式 |
10:30 - 12:30 | 障害ケース1 |
13:30 - 14:00 | ケース1ふりかえり |
14:00 - 16:00 | 障害ケース2 |
16:00 - 17:00 | 全体振り返り |
当初予定ではケース1実施後の振り返りは設けていなかったのですが、当日判断により設けたところ、各参加者がケース1で得た学びを即座に活かすことができました。
普段のスクラム開発の中で振り返りの大切さは分かっていたつもりでしたが、改めて振り返りによる学びの効果を実感した経験でした。 また、個人的に「1日に2ケースだけでは訓練時間が余ってしまうのでは」と懸念していたのですが、結果的には杞憂でした。
というのも、たとえ障害を迅速に解消できたとしても、サービス影響調査や社内外報告等、すべきことは山のようにあるためです…
以上、Gamedayの概要と運営について説明させていただきました。
次回は具体的な障害の内容と、Gameday参加者が得た技術的な学びについてお伝えできればと考えています。
最後になりますが、JCBでは我々と一緒に働きたいという人材を募集しています。 詳しい募集要項等については採用ページをご覧下さい。
本文および図表中では、「™」、「®」を明記しておりません。
Google Cloud, GCPならびにすべてのGoogleの商標およびロゴはGoogle LLCの商標または登録商標です。
記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。