Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Amazon Bedrock AgentCore Runtime - Part 5 Using Custom Agent with Spring AI

2025年09月16日に「Dev.to」が公開したITニュース「Amazon Bedrock AgentCore Runtime - Part 5 Using Custom Agent with Spring AI」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Pythonだけでなく、JavaのSpring AIを使ってAmazon Bedrock AgentCore Runtime向けカスタムエージェントを開発する方法を解説する。エージェントの実装、Docker化、ECRへのプッシュ、そしてAgentCore Runtimeへのデプロイと実行までを具体的なコード例で示す。Javaでのエージェント開発の可能性を提示。

ITニュース解説

多くの生成AIを活用したアプリケーション開発では、Pythonというプログラミング言語が中心に用いられてきた。しかし、Javaも企業システムなどで広く使われている重要な言語であり、Javaを用いた生成AIアプリケーション開発へのニーズも高い。この状況に対し、JavaのSpring AIフレームワークを使ってカスタムエージェントを開発し、Amazon Bedrock AgentCore Runtimeというサービス上で実行できることが示された。

ここでいう「エージェント」とは、ユーザーからの指示を受けて、必要に応じて外部のツールを呼び出し、自律的にタスクを遂行するプログラムのことだ。Amazon Bedrock AgentCore Runtimeは、このようなエージェントをクラウド上で安全かつ効率的に動かすための実行環境を提供する。エージェントをこのRuntimeで実行するには、いくつかの決まった形式に従う必要がある。具体的には、ユーザーからのリクエストを受け付ける/invocationsというPOST形式のウェブエンドポイントと、エージェントの稼働状態を確認するための/pingというGET形式のウェブエンドポイントを提供しなければならない。また、エージェントのプログラムは、Dockerという技術を使って「コンテナ」と呼ばれるパッケージ形式で提供し、ARM64という種類のプロセッサに対応している必要がある。Dockerコンテナは、アプリケーションとその実行に必要な全ての要素(コード、ライブラリ、設定など)を一つにまとめることで、どのような環境でも同じように動作することを保証する技術である。

Javaでカスタムエージェントを実装するにあたっては、いくつかの前提条件が存在する。まず、Amazon API GatewayとAWS Lambdaで構築された既存のサーバレスアプリケーションがあり、そのアプリケーションが提供する機能が、Amazon Bedrock AgentCore Gatewayを通じて外部に公開されている状態だ。このGatewayは、例えば「注文をIDで取得する」や「作成日で注文を取得する」といった特定の機能(これらを「ツール」と呼ぶ)を、MCP(Messaging for Cooperative Processes)という通信プロトコルを用いて利用できるようにする。Spring AIは、これらの外部ツールと連携し、生成AIモデルがより複雑なタスクをこなせるようにするためのJavaフレームワークだ。

今回のエージェント開発では、Spring AIフレームワークのバージョン1.1-SNAPSHOTという最新のプレビュー版を使用する。このバージョンは、MCPのHTTP Streamableという、効率的なデータ送受信を可能にする通信方式をサポートしている。プロジェクトの設定には、Javaアプリケーションの依存関係やバージョンを管理するpom.xmlというファイルと、エージェントが動作するために必要な環境設定(例えば、認証情報を管理するCognitoサービスの設定や、AgentCore GatewayのURLなど)を記述するapplication.propertiesというファイルが使われる。Cognitoは、AWSが提供するユーザー認証やアクセス管理のためのサービスである。

エージェントの主要な機能は、SpringAIAgentControllerというJavaのクラスに実装される。このクラスは、ユーザーからの指示(プロンプト)を受け取って処理する役割を担う。まず、生成AIモデルと対話するための「チャットクライアント」という部品を設定する。ここでは、使用するAIモデルの種類(例:Amazonのamazon.nova-lite-v1:0)や、一度に生成できる応答の最大文字数などを指定する。また、エージェントがこれまでの会話内容を記憶し、文脈を理解できるようにするための「チャットメモリ」も組み込む。

ユーザーからのプロンプトを受け付けて処理する/invocationsエンドポイントの実装は、以下の手順で行われる。最初に、Cognitoサービスから認証トークンを取得する。このトークンは、エージェントがAgentCore Gatewayを通じて外部ツールを利用する際に、正当なアクセス権限を持っていることを証明するために不可欠だ。次に、このトークンを使用してMCPクライアントを構築し、初期化する。MCPクライアントを通じて、エージェントはAgentCore Gatewayに公開されている利用可能なツールの一覧を取得できる。その後、ユーザーからのプロンプトと、取得したツール情報をチャットクライアントに渡し、生成AIモデルに最適なツールを選択させ、必要に応じてそのツールを呼び出させ、最終的な応答を生成させる。この一連の処理はストリーム形式で行われるため、応答が逐次的に生成・表示される仕組みだ。

エージェントの実装が完了したら、次にこのアプリケーションをAmazon Bedrock AgentCore Runtimeにデプロイできる形にパッケージ化する。これにはDockerが使用される。シンプルなDockerfileを用意し、ビルド済みのJavaアプリケーションの実行可能ファイル(.jarファイル)を、Amazon CorrettoというJava実行環境を含むDockerイメージに追加する。作成されたDockerイメージは、Amazon ECR(Elastic Container Registry)というAWSのサービスにアップロードされる。ECRは、Dockerイメージを安全に保管し、デプロイ時に簡単に利用できるようにするためのコンテナイメージレジストリである。

DockerイメージがECRにアップロードされたら、DeployRuntimeAgentというJavaプログラムを使って、そのイメージをAmazon Bedrock AgentCore Runtimeにデプロイする。このプログラムは、デプロイするエージェントの名前、ECRにアップロードしたDockerイメージのURI、そしてエージェントがAWSの他のサービスにアクセスするために必要な権限を定義したIAMロールのARN(Amazon Resource Name)を指定して、AgentCore Runtime環境を作成または更新する。IAMロールは、AWSリソースへのアクセス権限を細かく管理するためのセキュリティメカニズムだ。

エージェントがRuntimeにデプロイされたら、最後にその動作を確認するために、InvokeRuntimeAgentという別のJavaプログラムを使ってエージェントを呼び出す。このプログラムは、デプロイされたAgentCore Runtimeエージェントの一意な識別子であるARNを指定し、「ID 100の注文概要を教えて」といった具体的なプロンプトをペイロードとして送信する。エージェントはプロンプトを受け取ると、内部で必要なツールを呼び出し、その結果に基づいて生成AIモデルが応答を生成し、呼び出し元に返す。

この一連のプロセスは、JavaとSpring AIフレームワークを使ってカスタムエージェントを開発し、それをAmazon Bedrock AgentCore Runtimeというマネージドな環境で実行できることを明確に実証している。これは、Python以外の言語で生成AIの強力な機能を活用したいと考えているシステムエンジニアにとって、重要な選択肢を提供する。将来的には、エージェントの監視機能を強化するためのAWS Distro for Open Telemetry (ADOT) の統合や、エージェントの記憶能力をSpring AIフレームワークに統合するといった改善が、今後期待される機能として挙げられる。

関連コンテンツ

関連IT用語