![[レポート][Code talk] AgentCoreを用いたAI機能をアプリに搭載するライブコーディングセッションに参加しました #MAM345 #AWSreInvent](https://images.ctfassets.net/ct0aopd36mqt/4pUQzSdez78aERI3ud3HNg/fe4c41ee45eccea110362c7c14f1edec/reinvent2025_devio_report_w1200h630.png?w=3840&fm=webp)
[レポート][Code talk] AgentCoreを用いたAI機能をアプリに搭載するライブコーディングセッションに参加しました #MAM345 #AWSreInvent
はじめに
Code talkセッション「Adding agentic AI to legacy apps with Amazon Bedrock AgentCore (MAM345-R1)」に参加してきました。
このセッションでは、既存のレガシーアプリケーションに対して、バックエンドコードを一切変更せずにAIエージェント機能を追加する方法が、ライブコーディング形式で実演されました。
空のプロジェクトから始めて、Strands Agentsを用いてローカル環境でエージェントを作成し、最終的にはAgentCore上で動作させるというプロセスで、Strands AgentsやAgentCoreを触ったことがない筆者にとってはちょうどいいセッションでした。
このブログ中のコード片は記憶を元に書き起こしたものなので、あしからず。。。
1. レガシーアプリケーションのモダナイゼーションの課題
セッションは、多くの開発者が直面する現実的な問題提起から始まりました。
レガシーアプリケーションには以下のような課題があります:
- 信頼性は高いが、自動化や新技術への適応が困難
- 新しく担当になった開発者がコードベースを理解するのに時間がかかる
- モダナイゼーションしたくても、どこから手をつければいいかわからない
このセッションで提示されたのは、「コード変更なしで会話型AIインターフェースを追加する」というアプローチです。
既存のアプリケーションの動作を理解していなくても、AIエージェントを通じてアプリケーションと対話できるようになるという方法論が示されました。
2. Amazon Bedrock AgentCoreとは何か
アーキテクチャの全体像
AIエージェントの基本的な動作フローは以下の通りです:
- ユーザーがプロンプトを入力(例:「ロンドンの今日の天気は?」)
- Agent(オーケストレーター)が、何をすべきか判断
- Model(Foundation Model)が、学習データに基づいて応答を生成
- Tools(外部エンティティ)が、モデルだけでは答えられない情報を取得
- Web検索、データベース検索、コード実行、API呼び出しなど
このループを「Agentic Loop」と呼び、タスクが完了するまで、行動→解釈→計画のプロセスが継続されます。
AgentCoreのコンポーネント
AgentCoreは、AIエージェントを本番環境でスケーラブルに運用するためのマネージドランタイムです。主要なコンポーネントは以下の通り:
Runtime(ランタイム)
- エージェントを実行する環境
- ユーザー管理、オートスケーリング、セッション分離を提供
- パフォーマンス管理
Memory(メモリ)
- セッション間で会話コンテキストを保持
- 短期メモリと長期メモリをサポート
- ユーザーAとユーザーBのメモリを厳密に分離
Tools(ツール)
- AWSネイティブ統合(S3、Lambda、DynamoDBなど)
- MCPツールとしてカスタムAPIを登録可能
Gateway(ゲートウェイ)
- 内部APIをMCPツールとして公開
- 既存のREST APIを自動的にツール化
Identity(アイデンティティ)
- 認証・認可機能
- IAMロールによる細かなアクセス制御
セッションでは、「Strandsがエージェントの知能を提供し、AgentCoreがセキュリティとスケーラビリティを提供する」と説明されていました。
3. Strands Agents SDKとMCPプロトコル
セッション前半では、以下の3つのライブラリを用いてStrands Agentsアプリケーションが実装されました。
strands-agentsstrands-agents-toolsbedrock-agentcore
最初はローカルのみで動作する単純なアプリケーションから開始して、最終的にはagentcore deployコマンドを用いてAgentCoreにデプロイされました。
また、MCP(Model Context Protocol)についても基礎から説明されており、エージェントとアプリケーション・サービスを接続するためのオープンスタンダードとしての役割が紹介されました。
4. 実践デモ:Unicorn Shopへのエージェント追加
セッションの後半では、実際のレガシーアプリケーション「Unicorn Shop」にAI機能を追加するデモが実施されました。デモの前提は「同僚から引き継いだアプリケーションで、コードベースを理解していない」という設定です。
Gateway による自動ツール化
Amazon Q DeveloperでOpenAPI仕様を自動生成し、AgentCore Gatewayに登録することで、既存のすべてのAPIが自動的にエージェントツールに変換されました。会場からの「すべてコーディングする必要があるのか?」という質問に対して、登壇者は「すべて自動的に行われる。必要なのはエージェント側のコードだけ」と回答していました。
エージェント側では、MCPクライアントを使ってGatewayからツール一覧を取得し、それをエージェントに渡すだけです。デプロイ後、"Which unicorns can I buy?" という質問に対して、エージェントは自動的に適切なAPIを選択して呼び出し、購入可能なユニコーンのリストを返答しました。
なお、GatewayはカスタムAPIだけでなく、Lambda、S3、DynamoDB、データベースなどのAWSサービスとのネイティブ統合もサポートしています。
Memory機能による複数ステップの会話
ユニコーンを購入する際には、商品選択、アカウント作成、カート追加といった複数ステップが必要です。エージェントが会話の途中で得た情報を覚えておくために、Memory機能が追加されました。
MemoryConfigとSessionManagerを使ってエージェントにメモリを設定することで、エージェントは会話コンテキストを保持しながら複数のAPIを順番に呼び出し、最終的にアカウント作成とカート追加を完了させました。Memoryには短期メモリ(セッション内)と長期メモリ(セッション跨ぎ)があり、AgentCoreが自動的にメッセージをトリミングして適切に管理されます。
おわりに
このセッションは、Strands AgentsとAgentCoreを用いて、既存のレガシーアプリケーションに対して、AI機能を追加する方法を実演したセッションでした。
AgentCoreによって以前よりもずっと簡単にAgenticな機能をAPIとして提供できるようになっているのが印象的でした。
一方でセッションタイトルに「レガシーコード」とあるのは釣りタイトル味があると感じましたw
既存アプリケーションがなんであれ、アーキテクチャレベルで切り離してAPIを実装できるのはどのアプリにも導入しやすくて便利であると感じました。
以上です。










