GameDay シナリオを AWS FIS 実験テンプレート (CDK) として実装する。「シナリオを FIS にして」「実験テンプレートを作って」「障害注入を実装して」「fault-injection を書いて/直して」など、FIS 実験の実装・修正・レビューの全てで必ず使う。FIS アクションの選定、停止条件 (CloudWatch アラーム)、実験ロールの最小権限 IAM、爆発半径の制御 (selectionMode)、実験レポート設定、ECS タスクアクションの SSM サイドカー前提条件など、検証済みの判断基準とコード例を提供する。lib/constructs/fault-injection.ts を編集するときは内容にかかわらず該当する。
add-scenario
新しい GameDay シナリオを追加する。「シナリオを追加して」「新しい障害を考えて」「次の GameDay のネタが欲しい」「scenario-03 を作って」など、シナリオの新規作成・追補・改訂の全てで必ず使う。
立案 (gameday-scenario エージェント) → 観測可能性チェック → scenarios/NN-<slug>.md への保存 → fis-experiment スキルへの引き継ぎまでの手順を提供する。
特に「観測窓より速い障害は見えない」「読み取りプローブでは書き込み断が見えない」などリハーサル実測に基づく設計チェックを保存前の関門にする。
含まれるファイル(1)
- SKILL.md8.8 KB
SKILL.md(原文)
インストールする前に、エージェントに与えられる指示の中身を確認できます。
新規シナリオの追加
シナリオは「仮説を立てて壊し、観測して学ぶ」ための計画書。観測できない仮説は検証できないので、このスキルの本体は保存前のチェック関門にある(リハーサルで「フェイルオーバーが起きたのに何も観測されない」を実際に踏んだ)。
シナリオタイプ (frontmatter type)
この GameDay は中級者が AWS を学ぶハンズオン。シナリオは 2 タイプあり、チェック関門が異なる。
| type | 内容 | 主な学び | 例 |
|---|---|---|---|
observe (観測型) | 自己回復する仕組みに障害を注入し、挙動を観測・検証する | 観測と判断 (静観の正当性、影響範囲の説明) | タスク停止、フェイルオーバー |
rebuild (復旧構築型) | FIS 等でリソースを使えなくし、参加者が代替構成を手で構築して復旧させる | 構築スキルそのもの + 応急処置を IaC に反映する運用 | EC2 終了 → ECS 化、リージョン障害 → DR 切替 |
rebuild は復旧に数十分かかるため観測窓の問題は起きにくい(canary がずっと赤いのがゲームの進行表示になる)。代わりに下の「復旧経路チェック」を通すこと。
手順
- 棚卸し —
scenarios/を読み、既存の id・学びの狙いを確認する。番号は既存最大 + 1 (NNはゼロ埋め 2 桁)。学びが重複するシナリオは追加しない(難易度違いの再実施は既存ファイルの改訂で扱う)。 - 立案は
gameday-scenarioエージェントに委任する — 出力フォーマットはエージェントが知っている。依頼時に渡すもの: 対象アーキテクチャの現状 (lib/の要点)、避けたい重複(既存シナリオの狙い一覧)、難易度・所要時間の希望。 - 観測可能性チェック(下記)を通す — 通らない場合、観測手段の追加を「前提インフラ」に書くか、期待する振る舞い・成功条件を観測できる形に直す。
scenarios/NN-<slug>.mdに保存する(frontmatterstatus: draft)。- ダッシュボードの参考資料 (システム構成) を連動更新する —
dashboard/gameday.seed.json(定義の正。コミット対象)のsystems[]に、このシナリオの「元のシステム構成図 + 軽い補足」を反映する(本物の GameDay で配られるアーキテクチャ図に相当。保存とセットで必ずやる)。実体dashboard/public/data/gameday.json(git 管理外)にも同じ変更を入れると即時反映される(入れなくても次の周回リセットで seed から反映される):- 既存システムが対象 → その system の
scenarioIdsに新しい id を追加。「前提インフラ」で観測手段やノードが増えるならtiers/notesにも反映 - 新しい出発点スタックを使う → system を新規追加(未構築なら
summaryに明記) - ノードには AWS 公式アイコンのキー (
icon) を付ける。キー一覧と追加方法はgameday-dashboardスキルのreferences/data-schema.md(未登録サービスはdashboard/src/awsIcons.tsに import + キー登録) - 構成は記憶で書かず
lib/の実装(または本シナリオの「前提インフラ」)から起こす。スキーマと書き方の指針はgameday-dashboardスキルのreferences/data-schema.md
- 既存システムが対象 → その system の
- 次工程を案内する: 実装は
fis-experimentスキル(実装完了でstatus: implemented)、実施後はstatus: executed(講評は gameday-retrospective スキルが KPT として gameday.json の feedback[] に書く)。
観測可能性チェック(保存前の関門)
リハーサル実測値: ECS タスク自己回復 ≈ 30 秒 / Aurora フェイルオーバー ≈ 43 秒。仮説の時間見積もりはこれを基準にする。
- 障害の継続時間は観測窓より長いか? canary は 1 分間隔。1 分未満で収束する障害は canary には「起きなかったこと」になる。対処はどれか一つを明記する:
- 継続時間を伸ばすパラメータを使う(
aws:ecs:task-network-latencyの duration、aws:fis:waitの挟み込み等) - より細かい分解能の観測(1 分粒度メトリクス、ECS/RDS イベント)を観測ポイントに含める
- 「ユーザー影響が出ない」こと自体を成功条件に据え直す(それも立派な検証)
- 継続時間を伸ばすパラメータを使う(
- プローブの種類は障害の種類と合っているか? 読み取りプローブ (
SELECT 1) では書き込み断は見えない。書き込み系の障害(フェイルオーバー、ストレージ)を「見せたい」なら、書き込みエンドポイント(例: app の/write)とそれを叩く canary を「前提インフラ」に明記する。逆にリクエスト毎の短命接続は再接続に強く、接続プールを持つ実アプリより回復が速く見えることに注意。 - 検知経路を成功条件に含めたか? 「どの信号(canary / アラーム / イベント)で何分以内に気づくか」まで書く。気づけること自体が GameDay の試験項目。
- 回復時間の仮説は実測ベースか? 「数分で回復」のような保守的な見積もりは検知・採点の基準を狂わせる(実測 30 秒に対して「2〜4 分」と見積もった実績あり)。
- 振り返りの一次資料は揃うか? 観測ポイントに「FIS 実験レポート (PDF)」を書いておく — 実装時の experimentReportConfiguration 設定漏れを防ぐ(リハーサルで漏れた実績あり)。
復旧経路チェック(rebuild 型のみの追加関門)
参加者に「作らせる」以上、作れることを運営が先に保証する。
- 代替構成は制限時間内に構築可能か? 中級者 1 チームで 30〜60 分が目安。CDK を書かせるのは長すぎる — コンソール / CLI での構築を正とし、IaC 化は振り返りの宿題にする。
- 素材は用意したか? 構築に必要な材料 (ECR のコンテナイメージ、AMI、スナップショット、DR 先の VPC 等) は事前に存在しないと時間内に終わらない。「前提インフラ」に列挙する。
- 権限は足りるか? 参加者ロールで構築操作 (ECS サービス作成、Route 53 変更等) ができること。逆に対象スタック外を壊せる権限を渡しすぎない。
- 終了条件は自動判定できるか? 「canary が緑に戻る」を復旧完了の判定にする (ダッシュボードがそのまま進行表示になる)。復旧先が別 URL になる場合は canary の向き先変更が必要 — これも前提・手順に書く。
- ヒントの階段を用意したか? 学習ハンズオンなので、詰まったら 10 分刻み程度で開示する段階ヒント (方針 → 使うサービス → 具体手順) をシナリオに含める。
- drift の読み方が変わる: 参加者の新規構築リソースはスタック外なので cdk drift に出ない。drift に出るのは既存リソースへの変更 (SG 編集、desiredCount 等) のみ。振り返りでは drift + 手動作成リソースの棚卸し (タグなしリソース、コンソール操作履歴) + IaC 反映ワークの 3 点セットにする。
- 後片付けを設計したか? 手動構築リソースは cdk destroy で消えない。振り返り後に消す手順 (棚卸しリストの流用) をシナリオに含める。
採番・命名の規約
- ファイル:
scenarios/NN-<slug>.md(例:03-task-network-latency.md) - frontmatter の
id(scenario-NN) は、ダッシュボード (injects[].scenarioId/ KPT 講評のscenarioId) との突き合わせキー。一度使った id は変更・再利用しない。
ライフサイクル
status: draft (立案) → implemented (fis-experiment で CDK 実装済み) → executed (実施済み)。実施の記録・講評はシナリオファイルではなく gameday.json (events[] / feedback[]) と data-archive に残る(シナリオ = 計画、講評 = 記録)。
レビュー
まだレビューはありません。使ってみた感想をお寄せください。
同じリポジトリのスキル
概要と使いどころ
GameDay ダッシュボードサイト (dashboard/) の運用と変更を行う。「スコアを記録して」「インジェクトを追加して」「フィードバックを載せて」「ダッシュボードを起動して/直して」「スコアボードを見せて」など、GameDay のスコア表・KPT フィードバック・ダッシュボード画面に関わる作業全てで必ず使う。データ更新 (gameday.json 編集 → 即時反映)、採点ルーブリック、起動/ビルド、デザイン変更時の規約を提供する。
GameDay / FIS 実験の振り返りを行う。「振り返りして」「実験の結果をまとめて」「障害の影響を見せて」「ドリフト検出して」「講評して」など、実験の前後比較・影響分析・講評作成の全てで必ず使う。実験の「前」から使うスキルであることに注意 — ベースライン取得 (実験前) → 観測 (実験中) → 3 視点分析と KPT 講評の gameday.json への書き込み (実験後) までを一連で扱う。cdk drift / CloudFormation ドリフト検出、Synthetics canary の結果確認、CloudWatch メトリクスの前後比較が絡む作業も該当する。