AgentCore Code Interpreter で安全なコーディングコンテストプラットフォームを作ろう !
2026-04-02 | Author : 荒巻 美南海
はじめに
こんにちは、Partner Solutions Architect の荒巻です!
皆さんは、コーディングコンテストに参加したことはありますか?問題を理解して、コードを書き、提出し、ランキングに載る……楽しみながらスキルを鍛えられる、素晴らしいイベントですよね。
では、コーディングコンテストを開催したいと思ったらどうすればよいでしょう?提出受付の方法や安全なコード実行の仕組みなど、意外と考えることはたくさんあります。
そこで本記事では、aws-samples の Code Interpreter Coding Contest の使い方や実装内容について詳しく解説していきます。コーディングコンテストを開催したい方はもちろん、任意のコードを安全に実行したい方にとってもヒントになる内容となっております!
社内外のハッカソンや学習イベントなどで「提出して採点し、ランキングを出す」仕組みを短期間で立ち上げたい運営者に向いています。また、API Gateway、Lambda、DynamoDB、S3、CloudFront といったサーバーレス構成を、実際に動くサンプルとして追いかけたい開発者にも適しています。さらに、ユーザーが提出したコードや AI が生成したコードを安全に実行したい、あるいはその実行基盤をどう設計すべきか悩んでいる人にとって、Code Interpreter を中核に据えた構成は具体的なヒントになります。
この記事では、aws-samples の Code Interpreter Coding Contest の使い方や実装内容について詳しく解説していきます。
X ポスト » | Facebook シェア » | はてブ »
builders.flash メールメンバー登録
builders.flash メールメンバー登録で、毎月の最新アップデート情報とともに、AWS を無料でお試しいただけるクレジットコードを受け取ることができます。
Code Interpreter Coding Contest とは ?
Code Interpreter Coding Contest(以下略称: CICC) は、たくさんの参加者がリアルタイムに競い合うコーディングコンテスト を構築できる、イベント開催のためのアプリケーションです。
特徴的な点として、Amazon Bedrock AgentCore Code Interpreter を単体で活用し、提出されたコードを安全に実行できるようにしています。Code Interpreter は通常 AI エージェントが安全にコードを実行するための環境として提供されていますが、実は単体でも手軽なサンドボックス環境を活用できます。
また、このアプリケーションは AWS Cloud Development Kit (CDK) で構築されているため、提出されたコードを安全に実行できるコンテストプラットフォームが手軽なコマンドでデプロイできる仕組みになっています。
ユースケースとしては、社内など管理可能なコミュニティでコーディングコンテストを実施したい場合が挙げられます。本番環境でパブリックに利用したい場合、後述するような注意事項に配慮する必要がありますのでご注意ください。
アーキテクチャ図
このアプリケーションはシンプルなサーバーレス構成です。フロントエンドは Amazon Simple Storage Service (S3) と Amaozn CloudFront でホストされており、バックエンドは Amazon API Gateway や AWS Lambda などを使ったサーバーレスアーキテクチャで実装されています。ゲームのステート管理やリーダーボードのデータは Amazon DynamoDB で管理されています。
参加者は API を通じてコードの提出を行います。提出されたコードは API Gateway を通じて正誤判定用の Lambda 関数に渡され、Code Interpreter 上で実行されます。コードが正しく動作した場合、DynamoDB テーブルに結果が保存されます。
デプロイ方法
CICC をビルド・デプロイするためには、以下の前提条件を満たしている必要があります。
- 利用可能な AWS アカウントがあること
- AWS CDK で各種リソースを作成できる権限が必要
- 必要ツール等のインストール
- AWS CLI
- Python 3.10 以上の実行環境
- AWS CDK
- Node.js
アプリケーションのデプロイ
アプリケーションのデプロイは以下のコマンドで行えます。この 1 ステップで、WebUI や回答提出用の APIなど、コーディングコンテスト環境に必要なものが全てデプロイされます。
Web サイトの構成
デプロイ後に出力される WebsiteUrl にアクセスすると、画像のような Web サイトが確認できます。
Web サイトの構成は以下の通りです。
- ホーム:回答提出用 API の仕様とリーダーボード
- 問題一覧:設定された問題の一覧ページ
- 管理:イベントの開始・停止、リーダーボードのリセットなどが行える、認証必須のページ
回答の提出
コンテスト参加者は、回答提出用 API を通じて回答を提出できます。凡例として、bash であれば以下のようなコマンドで提出が可能です。なお、今回は参加者の認証についてはスコープ外として実装されていません。
注意点
注意点として、CICC では Python コードの実行しかサポートされていないため、基本的には Python 以外のコードの提出は受け入れられません。
コードを改変していただくことで対応言語を増やすことはできますが、Code Interpreter は現在 Python, TypeScript, JavaScript のみをサポートしているため、それ以外の言語については対応できません。
問題のカスタマイズ
CICC には、デフォルトの問題セットが用意されています。これらは contents/problem.json にて定義されており、この JSON ファイルを編集することによって、簡単に新しい問題の追加や編集を行えます。デプロイ時にこちらの JSON ファイルが参照され、WebUI の問題一覧ページや Lambda 関数上に実装された正誤判定ロジックに自動的に反映されるようになっています。
{
"問題番号": {
"title": "新しい問題名",
"description": [
"問題の説明文(複数行可)",
"HTMLタグも使用可能"
],
"examples": [
{"input": "solver(123)", "output": "\"結果\""}
],
"test_cases": [
["入力1", "期待出力1"],
["入力2", "期待出力2"]
]
}
}
運用上の注意点
提出受付のオンオフは、運営の公平性と安全性を担保するためのガバナンス機能です。開始前のフライング提出や、終了後の駆け込み提出をシステム的に遮断できるため、締切を明確にできます。
また、採点処理に障害が起きたときや、誤採点が疑われるときに、まず受付を止めて被害の拡大を防ぐこともできます。大量投稿や攻撃的なトラフィックが来たときにも、WAF やレート制限と併用することで、システムを守りながら状況を確認できます。
また、リーダーボードの特典はユーザー名に紐付いて管理されるようになっています。これは、チームでコンテストに挑む際、同じチーム名で複数の参加者が提出した場合にエラーを返さないようにするためです。この仕様によって、チーム名が被ると得点が正常に管理できなくなってしまいますのでご注意ください。
Amazon Bedrock AgentCore Code Interpreter の採用理由
このプロジェクトの最大の特徴でもあり技術的核となっているのが Amazon Bedrock AgentCore Code Interpreter という実行環境です。これは本来 AI エージェントのコード実行環境として提供されているものですが、本アプリケーションではこれを人間用に単体で使用しています。
通常、ユーザー提出のコードをそのままサーバーで実行することは、セキュリティリスクやリソースの不正利用の可能性がありリスクとなります。Code Interpreter は隔離されたコンテナ環境でコード実行を行い、外部システムへのアクセスは制限されつつもスクリプトを安全に実行できるのが強みです。
他の方法と比較してみると、例えば Lambda だけでユーザー由来の任意コードを安全に実行するには、隔離や制御を自前で用意する必要があります。
たとえば、ネットワークの遮断や制限、ファイルアクセスの制限、リソース上限、実行環境の依存関係の管理などが増え、サンプルとしての手軽さが薄れていきます。
そのため、CICC では手軽な任意コード実行を実現するために Code Interpreter を採用しています。
本番環境で利用したい場合の注意事項
サンプルを本番に持ち込む場合、まず認証と認可を強化する必要があります。サンプルでは手軽さのために Basic 認証が使われていますが、実運用では ID 連携や管理系 API の分離、最小権限設計などを前提にした構成が望まれます。
また、提出 API は攻撃面になりやすいので、レート制限や WAF、Bot 対策、異常検知といった入口の防御を必ず検討してください。提出が増えるほどコード実行回数も増えるため、コスト上限を設けないと想定外の支出に繋がります。ユーザーごとの提出回数や同時実行数の制御、コンテスト時間外の受付停止など、運用ポリシーと仕組みをセットにするのが安全です。
採点の公平性の観点では、テストケースや判定ロジックの扱いが重要です。クライアント側に置かない、提出者に見えるログに出さない、問題の更新やサブタスク化で既知解の流通を抑えるなどの工夫が必要になります。
まとめ
CICC は、Code Interpreter での安全なコード実行を特徴とした、お手軽でベーシックなコーディングコンテストプラットフォームです。
あくまでサンプルコードのため、最低限のセキュリティを担保した PoC という形ですが、Code Interpreter にはこんなユースケースもあるんだ!というところを知っていただく足掛かりになれば幸いです。皆さんも、ここで紹介した技術を参考にぜひ面白いアプリケーションを作ってみてください!
筆者プロフィール
荒巻 美南海 / Minami Aramaki
2024 年 4 月に新卒でアマゾンウェブサービスジャパン合同会社に入社しました。普段はパートナー企業に所属するエンジニアの育成・技術支援を担当しています。