はじめに
こんばんは、mirukyです。
Amazon Bedrock シリーズ第6回です。
前回(#5)では、Guardrailsを使って生成AIの安全性を担保するガードレールを構築しました。
今回は、AIエージェントを本番環境で安全・安定的に運用するための基盤「AgentCore」 を使って、エージェントのデプロイからツール連携、監視までを構築します。
#4ではBedrock Agentsを使ってAIエージェントを構築しましたが、あくまで「Bedrockのマネージドエージェント」でした。AgentCoreは、フレームワーク非依存で、自分で実装したエージェントを本番運用するための基盤です。Strands Agents、LangGraph、CrewAIなど好きなフレームワークで開発したエージェントを、サーバーレスのランタイム上にデプロイし、エンタープライズ品質で運用できます。
出典:Amazon Bedrock AgentCore - AWS
目次
- AgentCoreの全体像
- Bedrock Agentsとの違い
- 今回のシステム構成
- 開発環境のセットアップ
- Strands Agentsでエージェントを実装する
- AgentCore Runtimeへのデプロイ
- AgentCore Gatewayでツールを接続する
- Observability(監視)の設定
- 料金について
- おわりに
1. AgentCoreの全体像
1-1. AgentCoreのコンポーネント
1-2. AgentCoreが解決する課題
| 課題 | AgentCoreによる解決 |
|---|---|
| エージェントのホスティング | Runtime:サーバーレスランタイムで自動スケーリング。インフラ管理不要 |
| セキュリティ | microVMによるセッション分離、IAM連携、VPCエンドポイント対応 |
| 認証・認可 | Identity:Cognito、Entra ID、Okta等と統合。OAuth/APIキー/IAMロールに対応 |
| 状態管理 | Memory:短期・長期の記憶を付与。セッションをまたいだ対応が可能 |
| ツール連携 | Gateway:Lambda、API、MCPサーバーとシームレスに連携 |
| ポリシー制御 | Policy(Preview):ツール呼び出しをリアルタイムで検証し許可/拒否 |
| コード実行 | Code Interpreter:サンドボックス環境でPython/JS等を安全に実行 |
| Web操作 | Browser:エージェントがWebサイトを操作するサーバーレスブラウザランタイム |
| 品質評価 | Evaluations(Preview):組み込み/カスタム評価ツールでエージェント品質を監視 |
| 監視 | Observability:CloudWatch統合でログ・メトリクス・トレースを一元管理 |
| フレームワーク選択 | フレームワーク非依存。Strands、LangGraph、CrewAI等を自由に選択 |
出典:Amazon Bedrock AgentCore - AWS Prescriptive Guidance
2. Bedrock Agentsとの違い
| 観点 | Bedrock Agents(#4で使用) | AgentCore(今回使用) |
|---|---|---|
| 位置づけ | Bedrockのマネージドエージェント | カスタムエージェントの本番運用基盤 |
| エージェント実装 | GUIでの設定(ノーコード) | コードで自由に実装 |
| フレームワーク | Bedrock固有 | Strands / LangGraph / CrewAI等を自由選択 |
| 利用モデル | Bedrockのモデルのみ | Bedrock以外のモデルも利用可能 |
| カスタマイズ性 | 限定的 | 完全にカスタマイズ可能 |
| メモリ機能 | セッション内のみ | 短期・長期記憶。エピソード記憶も対応 |
| 向いている用途 | PoCや標準的なエージェント | 本番運用・高度なカスタマイズ |
どちらを選ぶべきか
- 素早く標準的なエージェントを作りたい → Bedrock Agents(#4)
- 本番品質で高度なカスタマイズが必要 → AgentCore(今回)
両者は排他的ではなく、PoCはBedrock Agentsで素早く検証し、本番移行時にAgentCoreへ移すという段階的アプローチも有効です。
3. 今回のシステム構成
下記のような順序でシステムを構築します。
-
ローカル環境:Strands Agents SDKを使ってエージェントのコードを実装し、ローカルで動作確認する
-
AgentCore Runtime:動作確認済みのエージェントをサーバーレス環境にデプロイする。Claude 3.5 Sonnet をLLMとして使用し、
@toolで定義した為替変換ツールを呼び出す -
AgentCore Observability:デプロイ後のエージェントのログやトレースをCloudWatchで監視する
4. 開発環境のセットアップ
4-1. 前提条件
- Python 3.10以上
- AWS CLI セットアップ済み(
aws configure完了) - Bedrockのモデルアクセス権限(Anthropicモデルの申請完了)
4-2. パッケージのインストール
# 仮想環境の作成
python -m venv .venv
source .venv/bin/activate # Windowsの場合: .venv\Scripts\activate
# 必要なパッケージのインストール
pip install strands-agents strands-agents-tools bedrock-agentcore
| パッケージ | 役割 |
|---|---|
strands-agents |
AWS製のエージェントフレームワーク |
strands-agents-tools |
Strands用のビルトインツール群 |
bedrock-agentcore |
AgentCore Runtime/Memory/Gatewayのクライアント |
出典:Deploying Strands Agents to Amazon Bedrock AgentCore Runtime - Strands
5. Strands Agentsでエージェントを実装する
5-1. Strands Agentsとは
Strands Agentsは、AWS製のオープンソースAIエージェントフレームワークです。シンプルなPythonコードでエージェントを構築でき、AgentCoreとネイティブに統合できます。
5-2. 基本的なエージェントの実装
ファイル名:agent.py
from strands import Agent, tool
@tool
def convert_currency(amount: float, from_currency: str, to_currency: str) -> str:
"""通貨を変換します。金額、変換元通貨、変換先通貨を指定してください。"""
# サンプルのレート(本番ではAPI等から取得)
rates = {
("USD", "JPY"): 150.0,
("JPY", "USD"): 1 / 150.0,
("EUR", "JPY"): 162.0,
("JPY", "EUR"): 1 / 162.0,
}
rate = rates.get((from_currency, to_currency))
if rate is None:
return f"{from_currency} → {to_currency} の変換レートは登録されていません。"
result = amount * rate
return f"{amount} {from_currency} = {result:.2f} {to_currency}"
@tool
def get_business_hours() -> str:
"""営業時間を返します。"""
return "当社の営業時間は平日9:00〜18:00です。土日祝日はお休みをいただいております。"
# エージェントの作成
agent = Agent(
system_prompt="""あなたは親切で丁寧なカスタマーサポートのAIアシスタントです。
以下のルールに従ってください:
1. 必ず日本語で回答してください。
2. 利用可能なツールを適切に使って正確に回答してください。
3. ツールで対応できない質問には、正直に「お答えできません」と伝えてください。
4. 回答は簡潔かつ丁寧にしてください。""",
tools=[convert_currency, get_business_hours]
)
@toolデコレーターについて
Strands Agentsでは、Pythonの関数に@toolデコレーターを付けるだけでエージェントが利用できるツールになります。関数のdocstring(説明文)がエージェントの判断材料になるため、ツールが何をするか、どんな引数を取るかを具体的に書くことが精度向上の鍵です。
5-3. ローカルでのテスト
# agent.py の末尾に追加(ローカルテスト用)
if __name__ == "__main__":
response = agent("100ドルは日本円でいくらですか?")
print(response)
response = agent("営業時間を教えてください。")
print(response)
python agent.py
ローカルで動作することを確認してから、AgentCore Runtimeにデプロイします。
6. AgentCore Runtimeへのデプロイ
6-1. エントリポイントの作成
AgentCore Runtime用のエントリポイントファイルを作成します。
ファイル名:main.py
from bedrock_agentcore.runtime import BedrockAgentCoreApp
from agent import agent
app = BedrockAgentCoreApp()
@app.entrypoint
def invoke(payload):
"""AgentCore Runtimeのエントリポイント"""
user_message = payload.get("prompt", "Hello")
response = agent(user_message)
return {"result": str(response)}
if __name__ == "__main__":
app.run()
6-2. 依存関係の定義
ファイル名:requirements.txt
strands-agents
strands-agents-tools
bedrock-agentcore
bedrock-agentcore-starter-toolkit
bedrock-agentcore-starter-toolkit は agentcore CLIコマンド(agentcore configure / agentcore launch)を使うために必要なパッケージです。
6-3. デプロイ
AgentCore CLIまたはAWSコンソールからデプロイします。
# AgentCore CLIに「main.py がエントリポイントだよ」と教える
agentcore configure --entrypoint main.py
# デプロイ(AWS上にエージェントを起動する)
agentcore launch
# ローカルでテストしたい場合(Docker/Finch/Podman が必要)
# agentcore launch --local
# デプロイ後にCLIからエージェントを呼び出す
# agentcore invoke '{"prompt": "100ドルは日本円でいくらですか?"}'
裏ではコンテナイメージの構築・依存パッケージのインストール・ランタイム環境のプロビジョニングが行われます。
AgentCoreは比較的新しいサービスのため、デプロイ手順やCLIコマンドが更新される可能性があります。必ず以下の公式ドキュメントで最新の手順を確認してください。
出典:
6-4. デプロイ後の確認
- AWSコンソール の AgentCore 画面にエージェントが表示されます
-
ランタイムARN が発行されます(例:
arn:aws:bedrock-agentcore:ap-northeast-1:123456789012:runtime/main-XXXXXXX) - このARNを使って、AWS SDK(boto3)経由でエージェントを呼び出せます
import boto3
import json
import uuid
client = boto3.client('bedrock-agentcore', region_name='ap-northeast-1')
payload = json.dumps({"prompt": "100ドルは日本円でいくらですか?"})
# セッションID(33文字以上必要。新しいIDで新しいセッションが開始される)
session_id = "session-" + str(uuid.uuid4())
response = client.invoke_agent_runtime(
agentRuntimeArn='arn:aws:bedrock-agentcore:ap-northeast-1:{account_id}:runtime/main-XXXXXXX',
runtimeSessionId=session_id,
payload=payload
)
response_body = response['response'].read()
response_data = json.loads(response_body)
print("Agent Response:", response_data)
呼び出しはSDK経由で行います
AgentCore Runtimeはcurlで直接HTTPアクセスするのではなく、AWS SDK(boto3)を使ってAWS認証(SigV4署名)付きで呼び出します。agentRuntimeArnにデプロイ時に発行されたARNを指定してください。
7. AgentCore Gatewayでツールを接続する
7-1. Gatewayとは
AgentCore Gatewayは、エージェントが利用するツール(Lambda関数、外部API、MCPサーバー等)を一元管理するコンポーネントです。
7-2. Lambda関数をGateway経由で接続
#4で作成した注文検索Lambda関数を、AgentCore Gateway経由でエージェントに接続できます。
from strands import Agent
from bedrock_agentcore.gateway import GatewayClient
# Gateway経由でツールを取得
gateway = GatewayClient(region_name="ap-northeast-1")
gateway_tools = gateway.get_tools(gateway_id="GATEWAY_ID")
# Gatewayのツールを含むエージェント
agent = Agent(
system_prompt="あなたは親切なカスタマーサポートのAIアシスタントです。",
tools=gateway_tools
)
7-3. サーバーサイドツール実行
2026年2月のアップデートにより、AgentCore Gatewayでのサーバーサイドツール実行がサポートされました。ツールのオーケストレーションがサーバーサイドで完結するため、クライアント側の実装が簡素化され、レイテンシも削減されます。
出典:Amazon Bedrock now supports server-side tool execution with AgentCore Gateway - AWS
8. Observability(監視)の設定
8-1. CloudWatch統合
AgentCore Runtimeにデプロイしたエージェントは、自動的にCloudWatchにログとメトリクスが出力されます。
| 監視項目 | 内容 |
|---|---|
| ログ | エージェントの入出力、ツール呼び出し履歴 |
| メトリクス | リクエスト数、レイテンシ、エラー率 |
| トレース | リクエストの処理フロー(どのツールが呼ばれたか等) |
8-2. OpenTelemetry対応
AgentCoreはOpenTelemetryにも対応しているため、Datadog、Grafana等の外部監視ツールとも統合できます。
本番運用での監視の重要性
AIエージェントは非決定的な挙動をするため、「想定外のツール呼び出し」「異常に長い推論ステップ」「特定パターンでのエラー」を検知する仕組みが重要です。CloudWatchのアラームを設定し、異常を早期に検知できる体制を整えてください。
9. 料金について
| サービス | 料金体系 | 備考 |
|---|---|---|
| AgentCore Runtime | CPUとメモリの消費量ベースで1秒単位課金。I/O待機中はCPU料金が発生しない | 事前のリソース選択不要。メモリは128MB最低課金 |
| AgentCore Memory | 短期:イベント作成リクエスト単位。長期:保存レコード数+取得リクエスト数 | 組み込み抽出戦略とオーバーライド戦略で料金が異なる |
| AgentCore Gateway | MCP操作・検索クエリ・InvokeTool API呼び出し回数に応じた従量課金 | インデックス化されたツール数にも課金あり |
| AgentCore Identity | トークン/APIキーのリクエスト数 | Runtime/Gateway経由の場合は追加料金なし |
| Bedrockモデル利用料 | トークン課金 | エージェントが使用するLLMの料金 |
| Observability | スパン・ログ・メトリクス | CloudWatch料金に準拠 |
料金の詳細は公式ページをご確認ください
AgentCoreは比較的新しいサービスのため、料金体系が変更される可能性があります。
10. おわりに
ここまでお読みいただきありがとうございます。
今回は、AgentCoreを使って、Strands Agentsフレームワークで実装したカスタムエージェントを本番運用基盤にデプロイし、ツール連携と監視を設定しました。
次回#7(最終回)では、AgentCoreのMemory機能(短期・長期・エピソード記憶) とマルチエージェント構成に踏み込み、高度なエージェントシステムを構築します。
ではまた、お会いしましょう。
参考リンク
Amazon Bedrock AgentCore 公式ドキュメント
- Amazon Bedrock AgentCore - AWS
- Amazon Bedrock AgentCore - AWS Prescriptive Guidance
- Host agent or tools with Amazon Bedrock AgentCore Runtime - AWS
- Amazon Bedrock now supports server-side tool execution with AgentCore Gateway - AWS
Strands Agents
- Deploying Strands Agents to Amazon Bedrock AgentCore Runtime - Strands
- Build long-running MCP servers on Amazon Bedrock AgentCore with Strands Agents - AWS Blog






