前日AWSからAmazon Bedrock AgentCore RuntimeがA2A (Agent to Agent) プロトコルをサポートした、というアナウンスがありました。
ブログ
ドキュメント
https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-a2a.html
今日はブログの内容をやってみたいと思います。
A2A (Agent to Agent ) プロトコル
A2Aプロトコルは、Googleが2025年4月に発表した、複数のAIエージェント間の協調を可能にする標準プロトコルです。
AIエージェント技術の進化によって、「単一の大規模モデルが全てを担う」時代から、「複数の専門エージェントが協調して課題を解く」時代へと移行しつつあります。MCPなどを活用することで複数ベンダーから提供されることなるエージェントを連携させる時に課題となるのが「異なるエージェント間をどのように接続し、連携させるか」という点です。
A2A(Agent-to-Agent)プロトコルは、まさにこの課題を解決するために設計された、エージェント間通信の共通仕様です。
A2A の基本構造
A2Aプロトコルは、MCPと同じようにJSON-RPC 2.0を基盤として、HTTPS上で動作するように設計されています。
基本的なやり取りは以下の二つのエンドポイントで行われます:
エンドポイント | 役割 |
|---|---|
| エージェントのメタ情報を提供(自己紹介・能力宣言) |
| 他のエージェントからタスクを受け取り、結果を返す |
エージェントは、自身の能力を記述したAgent Cardを公開します。このAgent Cardは、標準的な場所(/.well-known/agent-card.json)でHTTP GETリクエストにより取得できます。他のエージェントは、このAgent Cardを読むことで、対象エージェントが何をできるのかを理解します。
これらにより、エージェントは以下の2段階で協調します:
- Discover(発見):他のエージェントの「Agent Card」を取得し、その機能やスキルを理解する
- Invoke(呼び出し):適切なエージェントにタスクを委譲し、結果(Artifact)を受け取る
■ Agent Card(エージェントカード)
A2Aプロトコルの中核にあるのが「Agent Card」です。
これはエージェント自身が公開するJSON形式の自己定義ファイルで、そのエージェントが何をできるのかを他者が理解するためのメタデータです。
{
"agentId": "weather-analyzer",
"name": "Weather Analyzer Agent",
"description": "Provides real-time weather analysis using LLM reasoning.",
"capabilities": [
{
"name": "analyzeWeather",
"input": { "type": "location" },
"output": { "type": "forecast" }
}
],
"endpoints": {
"invocations": "/invocations"
}
}これにより、他のエージェントはコードを読むことなく「このエージェントは何を入力に取り、何を出力するのか」を自動的に理解できます。
Amazon Bedrock AgentCore Runtime では、.well-known/agent-card.json パスでこのファイルを自動ホスティングする仕組みを提供しています。
認証
A2Aではセキュリティも明示的に設計されています。標準プロトコルは、OpenAPI仕様と同等の認証スキームをサポートします:
• Bearer トークン(OAuth 2.0、JWT)
• APIキー
• OpenID Connect Discovery
すべての本番環境でのやり取りはHTTPSで暗号化されます。
Amazon Bedrock AgentCore Runtimeは、A2Aプロトコルを実装したエージェント実行環境の一つ、という位置づけです。
この実装では、以下の特徴があります:
• AWS SigV4署名(IAMベース)およびOAuth2.0/JWTをサポート
• エージェントはポート9000でルートパス(/)にJSON-RPCリクエストを受信
• 各呼び出しに一意の X-Amzn-Bedrock-AgentCore-Runtime-Session-Id を付与し、セッション単位の追跡を実現
• Agent Cardは https://bedrock-agentcore.region.amazonaws.com/runtimes/{agent-arn}/invocations/.well-known/agent-card.json で提供される
さっそくやってみる
ではこのブログの内容をやってみます。
https://aws.amazon.com/jp/blogs/machine-learning/introducing-agent-to-agent-protocol-support-in-amazon-bedrock-agentcore-runtime/

このサンプルでは3つのAgentがA2Aで協調します。全体をつかさどるホストエージェント、AWSのログを検査するモニタリングエージェント、ウェブの検索を行うウエブエージェント、です。
1. AWS credentialの準備
ますはIAMユーザーを発行し aws configureでクレデンシャルをセットします。リージョンはus-west-2にします。
ブログで提供されているサンプルはかなり広範囲でAWSサービスを操作しますのでPowerUserを使うのがよさそうです。
2. 必要APIキーの準備
以下3つのAPIキーをあらかじめ取得してコピーしておきます。
- OpenAI APIキー: OpenAI Platformから取得
- Tavily APIキー: Tavilyから取得
- Google APIキー: Google AI Studioから取得
3. サンプルのデプロイ
git clone https://github.com/awslabs/amazon-bedrock-agentcore-samples.git
cd amazon-bedrock-agentcore-samples
cd 02-use-cases/A2A-multi-agent-incident-response
uv run deploy.py様々な入力項目が求められますが、すべてデフォルトで進められます。だいたい15分程度でデプロイが完了し3つのエージェントが起動します。

過去ブログでもまとめたMemoryも作成されています。
https://serverless.co.jp/blog/vty5c3icl/
これは各Agentが実行結果を一時保存するように使われています。
4. ウェブアプリの起動
ではAgentと対話を行うためのウェブアプリを起動します。
cd frontend
npm install
chmod +x ./setup-env.sh
./setup-env.sh
npm run dev
> a2a-agentcore-runtime@1.0.0 dev
> vite --port 5173
VITE v7.2.2 ready in 209 ms
➜ Local: http://localhost:5173/
➜ Network: http://10.255.255.254:5173/
➜ Network: http://172.22.141.252:5173/
➜ press h + enter to show help起動したらローカル用URLにブラウザでアクセスします。

CloudWatchのログに関する質問を行うとこのようにAgent間で呼び出しが行われていることがわかります。

検索が完了するとその結果がホストエージェントに引き渡され以下の様に表示されます。


