TenkaCloud Docs

競技開催者マニュアル Preview

TenkaCloudを自分のAWSアカウントへ用意し、競技を開く人のためのマニュアルです。 このページの実行手順は、現在開催者へ案内できる Liteモードを対象にします。 SaaSモードは手順へ混ぜず、末尾の「SaaS運用の現状」で分けて説明します。

このマニュアルを読むとできること

  • 自分の用途がLiteとSaaSのどちらに当たるか判断する。
  • Liteの導入パイプラインを使ってTenkaCloudを用意する。
  • Admin ConsoleとParticipant Portalを確認する。
  • テストチームで問題の開始、採点、リセット、停止をリハーサルする。
  • 設定を変更するとき、入力形式とエラーの調べ方が分かる。

LiteとSaaSを利用場面で選ぶ

利用場面 選ぶモード 理由 現在の案内状態
自社、学校、勉強会など、1つの運営グループが自分のAWSで競技を開く Lite テナント提供機能が不要で、導入パイプラインから1つのTenkaCloud環境を用意できる このマニュアルの推奨経路
問題作成者が自分のAWSで本番に近い大会をリハーサルする Lite 問題パックを有効化し、開催者と参加者の画面を同じ環境で確認できる このマニュアルの推奨経路
複数の会社・学校へ、それぞれ別の管理者とテナントを継続的に提供する SaaS 組織ごとのテナント管理と、複数テナントへの更新配布が必要 最近の実環境での一連の確認なし。開催手順としては案内しない
TenkaCloud自体をマルチテナントSaaSとして運営する SaaS System Admin、プール型・サイロ型テナント、全テナント更新が必要 コードはあるが、現在のセルフサービス導入経路ではない

判断に迷う場合はLiteを選びます。SaaSに該当する利用場面でも、実環境で検証して 障害対応できる運営チームがいなければ本番競技には使わないでください。

Liteの導入パイプライン

ここでいう「導入パイプライン」は、CloudFormationでCodeBuildを1つ作り、その CodeBuildがソースの取得、必要ソフトの導入、make deploy、接続先URLの表示までを 順番に実行する仕組みです。AWSの製品名である CodePipelineは使いません

生成元は infrastructure/templates/lite-pipeline.yaml です。

画面から導入する(推奨)

  1. Getting startedの「Liteモード — コンソールランチャー」を開く。
  2. AWSへサインインし、CloudFormationの画面でTenantAdminEmailを入力する。
  3. スタックを作成する。画面に表示されるIAM権限の確認内容を読み、同意する。
  4. 出力されたCodeBuildへのリンクを開き、Start buildを押す。
  5. ビルドがSucceededになるまで待つ。
  6. ログ末尾に表示されるApplication Admin ConsoleとParticipant PortalのURLを控える。
  7. TenantAdminEmailへ届いた招待メールから初回ログインする。

失敗した場合は、CodeBuildログで最初のERRORを確認します。launcherを先に削除せず、 Lite設定メッセージ一覧から同じ文言を探してください。

手元のコマンドで導入する

リポジトリを操作できる場合だけ、次を使います。

make env-init ENV=development
make deploy ENV=development

make env-initは必要な値を質問し、 infrastructure/environments/development/.envを作ります。.envを書き換えただけでは 稼働中の環境は変わりません。変更後にmake deployを実行します。

Lite競技開催の流れ

  1. Application Admin Consoleへ開催者としてログインする。
  2. 使用する問題パックを有効化する。
  3. 競技、チーム、使用する問題を作る。
  4. テスト用の競技者AWSアカウントを登録する。
  5. テストチームで問題を開始し、接続先を開く。
  6. 本物のTC{...}を提出し、得点が増えることを確認する。
  7. 問題をリセットし、もう一度開始できることを確認する。
  8. 問題を停止し、競技者AWSアカウントのスタックが削除されたことを確認する。
  9. 参加者へParticipant PortalのURL、team key、開始時刻、 競技参加者マニュアルを渡す。

画面操作の詳細は 競技を最初から最後まで運営するを参照してください。

管理データの保存先を選ぶ

管理データとは、競技、チーム、問題の起動状態、接続先、得点、開催者アカウント、 監査記録です。参加者が操作する問題環境とは別です。

選択 保存先 使う場面
dynamodb(既定) AWS DynamoDB まず競技を開く。AWS内で完結させる
turso Turso/libSQL DynamoDBテーブルを作らない構成を、自分でライブ検証できる

Turso経路は単体テストとCDK synthでは確認されていますが、実Turso、新規AWSデプロイ、 請求までを組み合わせたライブ検証は未実施です。最初の本番競技ではdynamodbを推奨します。

保存先を後から切り替えてもデータは自動移行されません。DynamoDBとTursoは同期されず、 DynamoDBのテーブルは保持されて料金が続く場合があります。

設定値を変更する

初心者が最初に入力するのは次の3項目です。

設定 何を入力するか
TENANT_ADMIN_EMAIL 初回ログインする開催者のメールアドレス organizer@example.com
AWS_REGION TenkaCloudを置くAWSリージョン ap-northeast-1
CDK_PARAM_DEPLOY_EXTERNAL_ID TenkaCloudが競技者AWSへ接続するときの照合用文字列。16〜128文字の半角英数字と_ = , . @ : / - tc-school-2026-a91f

そのほかの設定は、目的、入力形式、既定値、文字数・数値範囲、例、不正値を入れた場合の 動作をLite設定項目リファレンスにまとめています。 画面やコマンドに出る文言は Lite設定メッセージ一覧で「文言・要因・処置」の 順に調べられます。

採点と料金の警告メール

CDK_PARAM_OPS_ALERT_EMAILにメールアドレスを入れると、AWSから購読確認メールが 届きます。承認後、次の3条件だけがメール通知の対象になります。

  1. 採点処理が直近5分で1回以上エラーになった。
  2. 採点処理が5分連続で実行されていない。
  3. 当月の実利用額がCDK_PARAM_OPS_MONTHLY_COST_LIMIT_USDの米ドル額を超えた。

問題の開始・停止処理や、片付け処理の一般的な失敗をすべて通知する機能ではありません。 メールアドレスを設定しない場合、この3種類の通知は届きません。

開催者MCPを使う場合

開催者MCPはAlways-On control planeの機能です。このページで案内するLite導入 パイプラインへ自動的に追加されるものではありません。 Lite競技の基本操作は引き続き Application Admin Consoleを使います。

Always-On環境を検証している運営者は {ALWAYS_ON_CONTROL_PLANE_ORIGIN}/mcp/organizerへ接続できます。開催者として発行された Auth0 access tokenをAuthorization: Bearer ...で渡します。tokenはclientのsecret 保存機能へ入れ、設定file、prompt、Issue、ログへ貼り付けません。

認証前のclientは、401 UnauthorizedWWW-Authenticateにある resource_metadataから認証先を確認します。現在はAuth0へ事前登録したOAuth clientが 必要です。TenkaCloudはDCR endpointを提供しません。CIMDを使うのは、使用中の 認証サーバーが対応を明示している場合だけです。

現在公開するtoolはlist_eventsだけです。認証されたtenantに属するeventだけを返し、 作成、変更、deploy、停止、削除は行いません。他tenantのevent、team key、flag、 採点の秘密値も返しません。MCP clientは2026-07-28に対応し、 server/discoverとrequestごとのprotocol header / _metaを送る必要があります。 MCP hostは呼び出しのたびにtool名と引数を表示し、開催者の承認を得なければなりません。 この確認を省略するclientは使わないでください。

参加者を入れる前の確認

  • 参加者と同じ権限・リージョンのテストチームを使った。
  • 想定ネットワークからすべての接続先を開けた。
  • 本物のflagを提出し、得点が変わった。
  • リセット後に新しい問題環境が起動した。
  • 停止後に競技者AWSの問題スタックが削除された。
  • 競技時刻、team keyの配布方法、問い合わせ先を決めた。
  • AWS管理者認証情報、.env、データベーストークンを参加者へ渡していない。

終了と削除

競技後は、まずLite本体を削除し、最後にlauncherのCloudFormationスタックを削除します。

make destroy-all ENV=development

画面から導入した場合は、launcherのCodeBuildでACTION=destroy-allを実行します。 launcherを先に削除すると、同じ導入パイプラインからLite本体を片付けられません。

SaaS運用の現状

SaaS向けのmake deploy-saas、SBTコントロールプレーン、テナント払い出し処理、 既存テナントへ更新を配るtenkacloud-saas-pipelineのコードは存在します。しかし、 最近の新規AWS環境で、導入、テナント作成、問題起動、採点、削除までを通した確認は 記録されていません。

そのため、このマニュアルではSaaSのコマンドをLiteの代替手順として案内しません。 SaaSを評価する場合はデプロイモードと起動経路を 構成の参考にし、専用の検証環境で一連の動作を確認してから使用してください。