7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Amazon Bedrock #6】AgentCoreを使ってAIエージェントの本番運用基盤を構築してみる

7
Posted at

はじめに

こんばんは、mirukyです。
Amazon Bedrock シリーズ第6回です。

前回(#5)では、Guardrailsを使って生成AIの安全性を担保するガードレールを構築しました。
今回は、AIエージェントを本番環境で安全・安定的に運用するための基盤「AgentCore」 を使って、エージェントのデプロイからツール連携、監視までを構築します。

#4ではBedrock Agentsを使ってAIエージェントを構築しましたが、あくまで「Bedrockのマネージドエージェント」でした。AgentCoreは、フレームワーク非依存で、自分で実装したエージェントを本番運用するための基盤です。Strands Agents、LangGraph、CrewAIなど好きなフレームワークで開発したエージェントを、サーバーレスのランタイム上にデプロイし、エンタープライズ品質で運用できます。

出典:Amazon Bedrock AgentCore - AWS

目次

  1. AgentCoreの全体像
  2. Bedrock Agentsとの違い
  3. 今回のシステム構成
  4. 開発環境のセットアップ
  5. Strands Agentsでエージェントを実装する
  6. AgentCore Runtimeへのデプロイ
  7. AgentCore Gatewayでツールを接続する
  8. Observability(監視)の設定
  9. 料金について
  10. おわりに

1. AgentCoreの全体像

1-1. AgentCoreのコンポーネント

スクリーンショット 2026-03-08 11.54.12.png

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. 今回のシステム構成

スクリーンショット 2026-03-08 12.10.41.png

下記のような順序でシステムを構築します。

  • ローカル環境: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

スクリーンショット 2026-03-08 21.54.52.png
このような出力を得ることができます。

ローカルで動作することを確認してから、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-toolkitagentcore 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ドルは日本円でいくらですか?"}'

裏ではコンテナイメージの構築・依存パッケージのインストール・ランタイム環境のプロビジョニングが行われます。

デプロイ手順はアップデートが頻繁に行われています
スクリーンショット 2026-03-08 22.06.31.png

AgentCoreは比較的新しいサービスのため、デプロイ手順やCLIコマンドが更新される可能性があります。必ず以下の公式ドキュメントで最新の手順を確認してください。

出典:

6-4. デプロイ後の確認

スクリーンショット 2026-03-08 22.07.43.png
CLI上でデプロイに成功しました。

スクリーンショット 2026-03-08 22.09.15.png

  1. AWSコンソール の AgentCore 画面にエージェントが表示されます
  2. ランタイムARN が発行されます(例:arn:aws:bedrock-agentcore:ap-northeast-1:123456789012:runtime/main-XXXXXXX
  3. この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統合

スクリーンショット 2026-03-08 22.34.14.png

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は比較的新しいサービスのため、料金体系が変更される可能性があります。

出典:Amazon Bedrock AgentCore - AWS

10. おわりに

ここまでお読みいただきありがとうございます。
今回は、AgentCoreを使って、Strands Agentsフレームワークで実装したカスタムエージェントを本番運用基盤にデプロイし、ツール連携と監視を設定しました。

次回#7(最終回)では、AgentCoreのMemory機能(短期・長期・エピソード記憶)マルチエージェント構成に踏み込み、高度なエージェントシステムを構築します。

ではまた、お会いしましょう。

参考リンク

Amazon Bedrock AgentCore 公式ドキュメント

Strands Agents

構築事例

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?