この記事は「2026 Japan AWS Jr. Champions 真夏のQiitaリレー」の38日目の記事となります。
過去の投稿(リンク集)・昨日の投稿は以下リンクからご覧ください。
はじめに
突然ですが、Amazon Bedrock AgentCore のハンズオンを開きたいと考えています。受講者には Strands Agents で書いたエージェントを手元で動かしてもらい、ツールを1つ足して、最後に AgentCore Runtime に載せるところまでやってもらう予定です。
ただ、やる内容も大事ですが、受講者向けの環境をどう用意するかが一番の課題かと思います。
この記事では、実装に入る前に構成を一通り検討したので、何を考えて何を選んだかをまとめます。
想定環境
構成を考えるにあたって前提にしたことは次のとおりです。
- 受講者は初学者が中心で10〜30人
- 主催者の AWS アカウント1つに全員が入る
- 受講者の環境は統一されているとは限らず、ソフトのインストールを前提にできない
- 環境は当日作って、終わったら消す
本記事は2026年9月時点の検討内容です。AgentCore と AgentCore CLI は変化が速いので、読む時点で変わっている可能性があります。
現状の最終的な構成
受講者に配るのは URL とパスワードだけにすることにしました。
受講者はブラウザで user01.handson.example.com のような自分専用の URL を開きます。
ALB が ホスト名を見て受講者ごとの EC2 に転送します。
EC2 では code-server が動いていて、パスワードを入れるとブラウザの中に VS Code が出ます。
受講者はそこで雛形を編集し、ターミナルから agentcore deploy を打ちます。
デプロイされたエージェントは AgentCore Runtime の上で動き、その中から Amazon Bedrock のモデルが呼ばれる、という構図です。
使っている技術をまとめると次のようになります。
| 役割 | 選んだもの |
|---|---|
| IaC | Terraform |
| 受講者の作業環境 | EC2 t4g.small(Amazon Linux 2023)1人1台 |
| ブラウザ上の VS Code | code-server |
| 入口 | ALB + ACM のワイルドカード証明書 |
| DNS | Cloudflare |
| エージェント | Strands Agents |
| 実行環境 | AgentCore Runtime |
検討した論点
ここから、検討した論点を順に書いていきます。
受講者に AWS の認証情報を配らない
最初の案は、受講者が SSM のポートフォワードで EC2 に到達する形でした。インバウンドをまったく開けずに済むので、構成としてはきれいです。
ところが、この形だと受講者の手元に AWS CLI と Session Manager プラグインと IAM の認証情報の3点が必要になります。初学者が10〜30人いる場でこの3点を揃えると、セットアップだけで時間が終わってしまう恐れがあります。
そこで、EC2 にインスタンスプロファイルを付けて、EC2 の中で動く AWS CLI も agentcore deploy もその権限で動かすことにしました。あわせて、マネジメントコンソールを開かない進め方にしました。そのため、受講者に配るものが URL とパスワードだけになります。
インスタンスプロファイルに持たせる権限は、AgentCore Runtime の作成と呼び出し、IAM ロールの操作、S3、CloudFormation、CDK のブートストラップロールへの sts:AssumeRole あたりです。agentcore deploy は内部で AWS CDK を使うため、CDK 周りの権限が要ります。ここは AgentCore の開発者ガイドには書かれておらず、CLI のリポジトリ側の PERMISSIONS.md を読んで(Claude Code が調査して)わかりました。
ブラウザだけで開発環境に入る
受講者の PC に何も入れずに済ませるには、ブラウザだけで VS Code が使える必要があります。そこで、code-server を EC2 に置くことにしました。
問題は入口です。EC2 に直接アクセスさせる方法もありますが、HTTPS にするには証明書を人数分のインスタンスに配ることになります。また、HTTP のままだと code-server のパスワードが平文で流れます。
そこで入口を ALB にしました。ACM で発行したワイルドカード証明書(*.handson.example.com)を用意し、user01.handson.example.com なら受講者01の EC2 に、user02 なら02に、とホスト名で振り分けます。受講者が増えてもリスナールールとターゲットグループが増えるだけで、ALB は1つあれば十分かと思います。
(もともとドメイン込み)DNS は Cloudflare で管理しています。*.handson.example.com というワイルドカードのレコードを1件作り、その向き先を ALB の DNS 名にしておけば、user01 でも user30 でも全部この1件に当たって、同じ ALB に届きます。どの受講者の EC2 に渡すかは、先ほど書いたとおり ALB がホスト名を見て決めます。
また、EC2 はパブリックサブネットに置き、起動している間ずっと課金される NAT Gateway は作らず、セキュリティグループは ALB からの8080番だけを許可し、SSH は開けない形にしました。
1人1台の EC2 を AMI から起動する
EC2 は1人1台にします。1台を複数人で共有する案も考えましたが、同じディレクトリを触って壊し合う可能性があるのでやめました。
インスタンスタイプは t4g.small と t4g.medium で agentcore deploy の挙動を比べて、所要時間が変わらなかった(どちらも新規のデプロイで100秒強)ので small にしました。(後述しますがコスト的にもちょうどよかった)
また、今回のハンズオン専用の AMI を用意することにしました。user_data で起動のたびにセットアップする方式だと、当日30台が同時にパッケージを取得して数分待つことになり、失敗した数台のデバッグが面倒だと考えたからです。
事前に AMI として用意しておけば当日は起動するだけでセットアップの問題は基本的に防げるという認識です。
Runtime は受講者が各自デプロイする
Runtime は各自でデプロイする形にしました。
共有の Runtime だと30人分のログが1つのロググループに混ざり、自分の実行を探すところから始まってしまいます。
受講者が打つのは agentcore deploy の1行だけですし、cdk bootstrap もモデルアクセスの有効化も権限まわりも、主催者側で済ませておけば、受講者側は特に困らないかなと思います。
検討して採用しなかった案
ここまでに出てきたものも含めて、検討したけれど採用しなかった案を並べておきます。
| 案 | 採用しなかった理由 |
|---|---|
| SSM ポートフォワードで受講者が接続 | 受講者の PC に CLI とプラグインと認証情報が必要 |
| 受講者それぞれの AWS アカウント | モデルアクセスの有効化と CDK ブートストラップが全員に必要 |
| 1台の EC2 を複数人で共有 | 同じディレクトリを壊し合うリスクあり |
user_data で毎回セットアップ |
待ち時間と失敗リスクが人数分増加 |
| EC2 に直接パブリック IP でアクセス | 人数分の証明書配布が必要 |
| 講師の Runtime を全員で呼ぶ | 30人分のログが1つに混在、自分事にしづらい |
検討の中でわかった AgentCore の制約
構成を考える中で、AgentCore 側の制約に当たりました。
それは、Runtime の実行ロールを事前に作って渡せないことです。
AgentCore CLI は実行ロールを自分で作る作りになっていて、設定ファイルに roleArn を書いても deploy 時に無視されます。CLI のリポジトリに Issue が上がっていますが、この記事を書いている時点では解決していません。このため、インスタンスプロファイルにロール作成の権限を持たせています。
コストの概算
最後にコストについて軽く触れます。
この構成で30人・5時間(準備1時間、ハンズオン3時間、片付け1時間)開催した場合の概算です。受講者1人がエージェントを30往復動かし、1往復で入力2,500トークン・出力100トークンを使う想定で、モデルは Amazon Nova 2 Lite、単価は東京リージョンの2026年9月時点のものです。
| 項目 | 前提 | 金額 | 無料トライアル適用時 |
|---|---|---|---|
| EC2 | t4g.small 30台 × 5時間 | 3.24ドル | 0ドル |
| EBS | 15GB × 30台 × 5時間分 | 0.31ドル | 0.31ドル |
| ALB | 5時間 | 0.16ドル | 0.16ドル |
| AgentCore Runtime | 1人10分 × 30人 | 0.54ドル | 0.54ドル |
| Bedrock | 入力2,250Kトークン、出力90Kトークン | 1.19ドル | 1.19ドル |
| 合計 | 約5.4ドル | 約2.2ドル |
半日のハンズオンで6ドル弱です。t4g.small には月750時間の無料トライアル(2026年12月末まで。申し込み不要で自動適用)があるので、それが効けば EC2 の分が0になり、約2.2ドルになります。無料になるのは EC2 の稼働時間だけで、EBS、ALB、AgentCore、Bedrock は対象外です。
金額そのものより、消し忘れのほうが問題になります。EC2 と ALB は起動している限り課金され続けるので、終了時刻に自動で止める仕組みを仕込んでいますが、そのあたりは別の記事で書きたいと思います。
おわりに
以上、考えたことを書いてきました。「受講者に配るものを減らす」を軸に決めていったら、ほとんどの選択が芋づる式に決まった、という感じがします。
色々書いてはいるものの、正直構成は特段特別ではないかなと思います。
code-server の設定など細かいところで色々工夫を進めているので、そちらについても今後記事にできればと思います。
ありがとうございました。
