競技開催者マニュアル 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
です。
画面から導入する(推奨)
- Getting startedの「Liteモード — コンソールランチャー」を開く。
- AWSへサインインし、CloudFormationの画面で
TenantAdminEmailを入力する。 - スタックを作成する。画面に表示されるIAM権限の確認内容を読み、同意する。
- 出力されたCodeBuildへのリンクを開き、Start buildを押す。
- ビルドが
Succeededになるまで待つ。 - ログ末尾に表示されるApplication Admin ConsoleとParticipant PortalのURLを控える。
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競技開催の流れ
- Application Admin Consoleへ開催者としてログインする。
- 使用する問題パックを有効化する。
- 競技、チーム、使用する問題を作る。
- テスト用の競技者AWSアカウントを登録する。
- テストチームで問題を開始し、接続先を開く。
- 本物の
TC{...}を提出し、得点が増えることを確認する。 - 問題をリセットし、もう一度開始できることを確認する。
- 問題を停止し、競技者AWSアカウントのスタックが削除されたことを確認する。
- 参加者へ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条件だけがメール通知の対象になります。
- 採点処理が直近5分で1回以上エラーになった。
- 採点処理が5分連続で実行されていない。
- 当月の実利用額が
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 UnauthorizedのWWW-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を評価する場合はデプロイモードと起動経路を 構成の参考にし、専用の検証環境で一連の動作を確認してから使用してください。