Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

Amazon Bedrock AgentCore 本番導入への道 アーキテクチャ設計の実践

Avatar for Yudai Jinno Yudai Jinno
November 27, 2025
330

Amazon Bedrock AgentCore 本番導入への道 アーキテクチャ設計の実践

Avatar for Yudai Jinno

Yudai Jinno

November 27, 2025
Tweet

Transcript

  1. © 2025 Classmethod, Inc. Amazon Bedrock AgentCore 本番導入への道 アーキテクチャ設計の実践 クラスメソッド株式会社

    クラウド事業本部コンサルティング部 神野 雄大(Jinno Yudai) Hello! AI Builders Day Online (プレイベント)
  2. © 2025 Classmethod, Inc. 自己紹介 2 簡単な自己紹介をさせていただきます。本日はどうかよろしくお願いいたします。 名前 神野 雄大(Jinno

    Yudai)/@yjinn448208 最近X始めました! 所属 クラスメソッド株式会社 クラウド事業本部 コンサルティング部 ソリューションアーキテクト 資格 • Japan All AWS Top Engineers 2025 好きな サービス • Amazon Bedrock AgentCore ブログはこのアイ コンで書いていま す! ラ・ムーとチーズ ナンが好きです!
  3. © 2025 Classmethod, Inc. 対象と目的 3 本日はAmazon Bedrock AgentCoreを使っている方に対して、深掘りする内容をお届け できればと思っております!

    対象 対象と目的 • Amazon Bedrock AgentCoreを触ったことがあるがお試しレベル で、本番導入の設計のポイントを知りたい 目的 • Amazon Bedrock AgentCoreのアーキテクチャ例を理解して検討できるよ うになる
  4. © 2025 Classmethod, Inc. 5 内容 今日は本番導入時に重要なポイントになりそうなトピックに絞ってお伝えさせていただ きます。 • Runtime

    ◦ Endpointの活用方法 ◦ CloudFront / Lambda + API Gateway Proxyパターン ◦ フロントエンドとの連携 ◦ Tips:lifecycle settings について • Gateway ◦ Gatewayの利用イメージ/Semantic Searchを活用する • Memory ◦ Identityと連携してユーザーの権限を絞る • その他 ◦ IaC・デプロイ手法
  5. © 2025 Classmethod, Inc. Amazon Bedrock AgentCoreはAIエージェントを展開・運用するために最適なマネージ ドサービスとなります。マネージドサービスによりインフラ管理を排除し、開発者が エージェントのロジック構築に集中できる環境を提供します。 Amazon

    Bedrock AgentCore とは 6 Amazon Bedrock AgentCore • AIエージェントのホスティング ◦ Strands Agents、LangGraphなど多様なエージェ ントフレームワークに対応 • 便利なマネージドサービス ◦ AIエージェントを使用する上で認証・ツール連携な ど便利な機能がマネージドサービスとして提供 (IdentityやMemoryなど) 特徴
  6. © 2025 Classmethod, Inc. Runtimeにはエンドポイントが存在します。デプロイするたびにバージョンがインクリ メントします。特に何も指定しなければエンドポイントを呼び出した時は最新バージョ ンの処理が呼ばれます。これがDEFAULTエンドポイントです。 Runtimeのエンドポイントについて 9 開発者

    ソースコード 開発端末 開発 AI エージェント開発 AgentCore Runtime バージョン1 バージョン2 バージョン3 デプロイ インクリメント 最新 DEFAULTエンドポイント :https://bedrock-agentcore.{region}.amazonaws.com/runtimes/{E ncodedAgentARN}/invocations 紐づいている
  7. © 2025 Classmethod, Inc. 名前付きエンドポイントも作成可能で、特定のバージョンを指定することが可能です。 名前付きエンドポイント 10 AgentCore Runtime バージョン1

    バージョン2 バージョン3 最新 DEFAULTエンドポイント :https://bedrock-agentcore.{region}.amazonaws.com/runtimes/{E ncodedAgentARN}/invocations 紐付け prodエンドポイント :https://bedrock-agentcore.{region}.amazonaws.com/runtimes/{E ncodedAgentARN}/invocations?qualifier=prod 紐付け qualifierを指定しなければ DEFAULTが呼ばれるよ! PROD
  8. © 2025 Classmethod, Inc. ここで本番稼働向けアーキテクチャを考えてみます。デフォルトのエンドポイントを使 用するとインクリメントされるので、検証して然るべきタイミングでアップデートする ようにします。 Runtime Endpointの活用方法 11

    バージョン2 バージョン3 PRODエンドポイント DEFAULT 開発者 入念にテスト ユーザー 安定バージョンを利用 テストOK!! PRODエンドポイントをバー ジョン3のするぞ!!! バージョン3 PROD,DEFAULT ユーザー 最新バージョンを利用 PRODをバージョン3 に紐付け おお、エージェントの返事がよ くなっているぞ!!!!
  9. © 2025 Classmethod, Inc. 通常デプロイすると下記URLになりますが、リクエストを送るのにARN部分をエンコー ドしたり、アカウントIDが見えるの嫌ですよね。 Runtime標準のURLの課題 13 AgentCore Runtime

    AIエージェント リクエスト送信時のエンドポイント :https://bedrock-agentcore.ap-northeast-1.amazonaws.com/runtimes/arn%3Aaws%3Abedrock-agentcore%3Aap-northeast-1% 3A123456789012%3Aagent-runtime%2Fabcd1234/invocations 私 うーん・・・フロントエンドからリクエスト送る時にURLにア カウントIDが入っていたり、ARNをエンコードしないといけな いの気になるな・・・カスタムドメインも使いたいな。
  10. © 2025 Classmethod, Inc. AgentCore Runtimeの前段にCloudFrontをラップしてリクエストを受けることも可能で す。CloudFrontをラップすることで、カスタムドメイン・WAFの利用なども可能になる のは嬉しいポイントです。 CloudFrontとの連携 14

    AgentCore Runtime AIエージェント エンドポイント :https://bedrock-agentcore.ap-northeast -1.amazonaws.com/runtimes/arn%3Aaws% 3Abedrock-agentcore%3Aap-northeast-1% 3A123456789012%3Aagent-runtime%2Fab cd1234/invocations CloudFront エンドポイント :https://d1234abcd5678e.cloudfront.net/ カスタムドメインも可能 https://myagent-jinno.com (オプションで) アタッチ WAF フロントエンド リクエスト リクエスト
  11. © 2025 Classmethod, Inc. LambdaをAgentCoreの前段にラップしてリクエストを送ることも可能です。Lambdaは Functions URLを活用してリクエストを送れるようにします。Cognitoとの連携や独自の リクエスト・レスポンスを介したい場合はいいですよね。 Lambdaとの連携 15

    AgentCore Runtime AIエージェント CloudFront Lambda フロントエンド リクエスト リクエスト IAMの権限でのみ AgentCoreのリクエ スト可能な状態へ Functions URL OACでCloudFront経 由でのみアクセス可能 に Cognito オプションで設定 WAF オプションで設定 SHA256計算 Lambda@Edge
  12. © 2025 Classmethod, Inc. 直近のアップデートでAPI Gatewayがストリーミング応答に対応したので、CloudFront の代わりにAPI Gatewayをラップするのも選択肢としてあると思います。 API Gateway

    + Lambdaとの連携 16 AgentCore Runtime AIエージェント API Gateway Lambda フロントエンド リクエスト リクエスト IAMの権限でのみ AgentCoreのリクエ スト可能な状態へ 実行 API Gateway経由で のみ実行可能に Cognito WAF オプションで設定
  13. © 2025 Classmethod, Inc. App RunnerやAmplifyはマネージドサービスで使い勝手もいいのですが、AIアプリケー ションとは相性が悪い制約があるので注意したいです。 App RunnerやAmplifyの注意点 20

    Amplify App Runner • Next.js API routesのストリーミングが動作しな い(バッファリングされる) ◦ AI SDKなどをNext.js バックエンドで使用し ようとすると使えなくて絶望する • 120秒のリクエストタイムアウト ◦ エージェントとのやり取りが長時間に及ぶとタ イムアウトになる可能性 • WebSocketサポートなし(roadmapで最多要望) ◦ StreamlitはWebSocketを使用するためApp Runnerでホストするのは難しい
  14. © 2025 Classmethod, Inc. Next.jsのバックエンドではストリーミング非対応のため、フロント側から直接 AgentCoreに対してリクエストを送信する必要があります。 Amplifyのアーキテクチャ例 21 AgentCore Runtime

    AIエージェント Amplify フロントエンド ユーザー リクエスト リクエスト Next.jsのバックエンドではストリーミン グ非対応のため、フロント側から直接 AgentCoreに対してリクエストを送信する エンドポイント :https://bedrock-agentcore.ap-northeast -1.amazonaws.com/runtimes/arn%3Aaws% 3Abedrock-agentcore%3Aap-northeast-1% 3A123456789012%3Aagent-runtime%2Fab cd1234/invocations
  15. © 2025 Classmethod, Inc. Lambda関数にLambda Web Adapterを使ってNext.jsをホストするのが安上がりかつ手 軽でいいと思います。下記のようなアーキテクチャです。 Lambdaのアーキテクチャ例 22

    AgentCore Runtime AIエージェント CloudFront Lambda フロントエンド リクエスト Functions URL Cognito SHA256計算 Lambda@Edge ユーザー リクエスト SPAから直接呼出し JWT Bearer Token (Cognito Token使用) ServerSide(Lambda)経由 IAM認証
  16. © 2025 Classmethod, Inc. 本番環境で手堅く実装したいならECS + ALBの組み合わせになるかと思います。ECS Express Modeが誕生したことによりECS +

    ALBの敷居が下がった印象もあります。ただ コストとしてはAppRunnerなどの最小コストよりは高いイメージでもありトレードオフ ですね。 ALB + ECSのアーキテクチャの例 23 AgentCore Runtime AIエージェント リクエスト Cognito ユーザー リクエスト ALB ECS フロントエンド リクエスト SPAから直接呼出し JWT Bearer Token (Cognito Token使用) ServerSide(Lambda)経由 IAM認証
  17. © 2025 Classmethod, Inc. Runtime には idleRuntimeSessionTimeout(アイドル時のタイムアウト)と maxLifetime(最大稼働時間)パラメータが存在し、セッションの自動終了タイミング を制御できます。 Tips:Runtime

    lifecycle settings 26 しばらくリクエスト ないから寝るか zzz・・・ セッション idleRuntimeSessionTimeout アイドル状態が900秒経過 お話しし続けたけ ど、8時間たったか ら寝るね・・・zzz セッション maxLifetime 8時間経過 おはよう!(セッ ション開始) おはよう!(セッ ション開始) 終了 開始 開始 終了
  18. © 2025 Classmethod, Inc. 公式ドキュメントにベストプラクティスの記載があるので、ぜひ設定される際は参考に することをお勧めします。 Tips:Runtime lifecycle settings 27

    まずはデフォルト値(idle: 15分、max: 8時間)で運用 を開始し、実際の利用パターンを見ながら調整するのがベ ストプラクティスです。開発・デモ環境では短め(idle: 2-5分)に設定してコストを抑え、本番環境ではユーザー 体験を優先して長め(idle: 10-15分)に設定することを 推奨します。
  19. © 2025 Classmethod, Inc. 既存のAPI、Lambda関数、MCP Server、各種サービスをMCP(Model Context Protocol)互換のツールに変換して、AIエージェントから簡単に呼び出せるようにして くれるサービスです。 Amazon

    Bedrock AgentCore Gateway 29 Runtime Gateway Smithyモデル Lambda関数 OpenAPI仕様のAPI /mcp ツールとして 呼び出し MCPに変換して実行 /MCP Toolsを 中央集約的に管理 Remote MCP Server
  20. © 2025 Classmethod, Inc. 下記のようにAgentCore Runtimeからツール利用する場合を比較してみます。左のよう にそのままツール利用もできるので一見Gatewayを挟むことで複雑な気がします。 Gateway有無の比較 32 AgentCore

    Runtime Lambda関数 Remote MCP Server ツール利用 ツール利用 AgentCore Runtime Gateway Lambda関数 Remote MCP Server ツール情報 取得 ツール利用 Gatewayを使わない場合 Gatewayを使う場合
  21. © 2025 Classmethod, Inc. ですがこれが100個以上ツールがある場合はどうでしょうか・・・???毎回MCPツー ルの定義を書くコードを書いたり、はたまた適切なツールを連携できるのでしょうか? Gatewayを使わない場合 33 AIエージェント Lambda関数

    Remote MCP Server ツール利用 Gatewayを使わない場合 たくさんのツール 私 AIエージェントの処理コードに毎回、 新しいツールのコードを書くのか ・・・ またこんな連携して適切なツールを選 択できるのかしら?? どのツールが正しいん だ??
  22. © 2025 Classmethod, Inc. この疑問に対してAgentCore Gatewayが役立ちます。Gateway側に登録することで、 AIエージェント自体の処理は毎回変えずにツールの情報を同期取ることが可能かつ、適 切なツールを探すのにはSemantic Search機能が使えます。 Gatewayを使う場合

    34 Gateway Lambda関数 Remote MCP Server ツール情報取得 ツール利用 Gatewayを使う場合 たくさんのツール AIエージェント with Semantic Search Gatewayに登録されたツー ル情報同期できる Semantic Searchで適切な ツールを見つけることがで きる
  23. © 2025 Classmethod, Inc. Strands Agentsで実装する場合はcall_tool_syncで検索しつつ、適切なツールをAIエー ジェントと同期することが可能です。 Semantic Searchを活用してツール同期をする 38

    AIエージェント Gateway ユーザー XXXをやって Gatewayに紐づいた ツール情報を検索し て取得 たくさんのツール ターゲット XXXに関連する ツール探すで
  24. © 2025 Classmethod, Inc. Semantic Searchを使用することでコンテキスト汚染を回避することにつながります。 ANTHROPICの記事もMCP Serverをツールとして登録しすぎると、ツールの定義や結果 に過剰なトークンが消費され、エージェントの効率が低下する可能性があるといってい ます。

    Appendix:MCP Serverをツールとして過剰に登録することによるコンテキストの汚染 39 Code execution with MCP: Building more efficient agentsより引 用 :https://www.anthropic.com/engineering/code-execution-with-mc p
  25. © 2025 Classmethod, Inc. これは人間でも同じことが言えると思います。いきなり、新しい職場に行って全ての情 報を詰め込まれても適切な行動はできず自分がやりたいことに対してアドバイスしてく れる人が欲しいですよね。AIエージェントも同じで、最適に実行できるようSemantic Searchで適切なツールを教えてあげるイメージを持つとわかりやすいです。 Appendix:現実での例 40

    私 SaaS Slack Google Workspace XXXをしたいけど何を使っ たらいいんだ??? 私 SaaS Slack GoogleWorkspace XXXをしたいけど何を使っ たらいいんですか?? 先輩 XXXならこのSaaSツールを 使ったらいいよ。 ※ざっくりとした例えです、例えは正確ではない箇所もあります
  26. © 2025 Classmethod, Inc. また組織に既存のLambda関数やMCP Serverがたくさんあって、組み合わせる場合は Gatewayに軍配が上がる気がします。あくまでオプションの選択肢で上記以外の用途な ら無理に使う必要はない気もします。シンプルにLambda関数やRuntimeにMCP Servre をホストして使う方が早いと思いますし。

    Gatewayの使い所所感 41 MCP Serverを新規でホス トしたい。多くの数を展開 する訳ではない。サクッと 展開したい ユーザー Runtime MCP Server MCP Server Lambda Gatewayを使用しない ケース Gatewayを使用する ケース 接続するMCP Serverは既 存のLambda関数を多数活 用するし、MCP Serverは 中央集約したい ユーザー Gateway たくさんのツール RuntimeやLambdaなどにホスティング Gatewayで中央集約
  27. © 2025 Classmethod, Inc. Runtime、Gatewayを介してMCP ServerをホストするにしてもVSCodeやCursorなどの エディターだとDCRのような動的なトークン認証が難しく、Barer Tokenを取得せざるを 得ません。MCPの拡張で認証できるようになることを期待したいですね。 Appendix:エディタなどのMCP

    Clinetによるトークン認証の課題 43 ユーザー MCP Client Cognito アクセストークン 取得 アクセストークンを記 載してMCP Serverを 設定 Runtime アクセストークンを検証 リクエスト with アクセストークン 現状 理想(まだ実現できません) ※大半のクライアントでは ユーザー MCP Client Cognito アクセストークン 取得 MCP Serverを設定 Runtime アクセストークンを検証 リクエスト ブラウザにリダイレクトして アクセストークンを取得 ※わかりやすさのため簡易的に書いていて、正確なフローとしては表現しきれていません トークン発行は面倒だな
  28. © 2025 Classmethod, Inc. 前提としてMemoryのデータ構造をおさえます。ユーザー毎にactor_id、セッション毎 にsession_idがビルトインの属性で存在するので簡単にユーザー毎の会話履歴を保持可 能となります。 記憶のデータ構造 46 memory_id:memory-001

    actor_id:user-001 session_001 Q:xxxにつ いて教えて A:YYY actor_id:user-002 session_002 Q:zzzにつ いて教えて A:TTT session_001 Q:DDDにつ いて教えて A:EEE session_002 Q:FFFにつ いて教えて A:XXX
  29. © 2025 Classmethod, Inc. それぞれのユーザーに対する記憶の取り出し方法 48 ユーザーとの質問はactor_idで識別されるので、リクエストでユーザーを識別する値を 入れて、AIエージェント側でactor_idとみなす形になるかと思います。 Amazon Bedrock

    AgentCore ユーザーA Strands Agents AIエージェント Memory ユーザーB ユーザーAの記憶 actor_id=user_ aで保存 ユーザーBの記憶 actor_id=user_ aで保存 質問 質問 ユーザーに応じた 記憶を参照 ユーザーがわかる識別子(ID など)をリクエストに含める リクエストの値からactor_idと して各ユーザごとの記憶を取得 する
  30. © 2025 Classmethod, Inc. actor_idをJWTのsubクレームと紐付け 49 JWTをデコードしてactor_idに、デコードしたユーザー識別子を入れて設定することも 可能です。ユーザー毎の質問はIdentityと連携して簡単にMemoryと分離することが可能 です。 Amazon

    Bedrock AgentCore ユーザーA Strands Agents AIエージェント Memory ユーザーB ユーザーAの記憶 actor_id = abc123-456-789 Cognito アクセス トークン リクエスト with アクセストークン & IDトークン JWTをデコードして ユーザー情報を取得 デコードしたユーザー情報に 応じたユーザー情報を参照 sub: "abc123-456-789" email: "[email protected]" name: "Yamada Taro" actor_id = "abc123-456-789" として抽出して参照 ユーザーBの記憶 actor_id = def123-456-789
  31. © 2025 Classmethod, Inc. IAMでの制御イメージ 51 ユーザーAさんが保持している権限ではユーザーBさんの記憶にアクセスできません。ア プリケーション側で誤ってユーザーBの記憶にアクセスしようとしてもIAMの権限で拒否 されます。 ユーザーA

    ユーザーB Memory ユーザーAの記憶 actorId=abc123 -456-789 ユーザーBの記憶 actorId=def123 -456-789 sub:abc123-456-789 sub:def123-456-789 誤ってアクセス アクセス不可 Memoryのアクセス権限は自分のsubクレーム と同名のactorIdしかアクセスできない条件を 指定しているため "bedrock-agentcore:actorId": "${cognito-identity.amazonaws.com:sub}