1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AgentCore Gateway でAPIをAIエージェント対応ツールに変換してみた

1
Last updated at Posted at 2026-03-14

AgentCore GatewayでAPIをAIエージェント対応ツールに変換してみた

はじめに

最近AIエージェント開発基盤の構築プロジェクトに関わっており、MCP Gatewayの導入に向けた最上流工程からリードとして入っています。
AWSのマネージドサービスであるAgentCore Gatewayでどのようなことができるか気になったので、実際に自分で動かしてみたいと思いそのアウトプットとして本記事を作成しました。

AI エージェントに「外部のAPIを使わせたい」と思ったとき、最初に悩むのが どうやって既存の API をエージェントから呼べるようにするか です。

従来であれば MCP サーバーをゼロから実装したり、認証周りのコードを書いたりと、それなりな実装が必要でした。

Amazon Bedrock AgentCore Gateway を使うと、既にAPI Gatewayなどにデプロイ済みのAPIサーバや、OpenAPI の YAML ファイルを用意するだけで、既存の API を MCP 対応ツールとして公開できます!

この記事では、AWS 関連用語を返すモック API をバックエンドとして用意し、AgentCore Gateway に登録したうえでAIエージェントからツールを利用して回答生成するまでの手順を解説します。バックエンドには Amazon API Gateway のモック統合 を使うため、Lambda も EC2 も一切不要です!


全体の構成

AIエージェント(MCP クライアント)
    ↓ MCP リクエスト
AgentCore Gateway        ← ① 今回設定する
    ↓ HTTP リクエスト
Amazon API Gateway       ← ② モック統合で静的レスポンスを返す

今回作成する API のエンドポイントは以下の 2 つです。
サンプル用なので、AWSサービスについての説明を静的に返すモックAPIをAPI Gatewayにデプロイして、そこと接続します。

エンドポイント 説明
GET /terms AWS 用語の一覧を返す
GET /terms/{id} 指定した ID の AWS 用語を 1 件返す

AgentCore Gateway とは(概要)

AgentCore Gateway は、既存の API を MCP(Model Context Protocol)互換のツール に変換するフルマネージドサービスです。

MCP(Model Context Protocol)とは?
Anthropic が公開したオープン標準で、AI エージェントが外部のデータソースやツールを安全に呼び出すための通信仕様です。

機能 内容
プロトコル変換 MCP リクエスト → REST API 呼び出しに自動変換
ツール統合 複数の API を単一の MCP エンドポイントにまとめる
認証管理 受信(エージェント認証)と送信(API 認証)を一括管理
フルマネージド インフラ管理不要・スケーリング自動

手順の全体像

  1. API Gateway でモック API を作成する
  2. AgentCore Gateway を作成する
  3. ターゲットを登録する
  4. Cognitoから認証情報を取得
  5. ローカル上でAIエージェントを構築し動かしてみる

Step 1:API Gateway でモック API を作成する

バックエンドとなる API を Amazon API Gateway のモック統合で作成します。コードを一切書かずに静的な JSON を返せます。

モック統合とは?
API Gateway に「バックエンドがないふりをさせる」機能です。Lambda や外部サーバーへリクエストを転送せず、API Gateway 自身が定義したレスポンスを直接返します。

1-1. REST API を新規作成

  1. AWS マネジメントコンソールで API Gateway を開く
  2. 「REST API」→「構築」 をクリック
  3. 「新しい API」 を選択し、以下を設定して 「API を作成」
項目
API 名 aws-service-description-api
エンドポイントタイプ リージョン

スクリーンショット 2026-03-14 094013.png

1-2. /terms リソースを作成する

  1. 左メニューで 「リソース」 を選択
  2. 「リソースを作成」 をクリック
  3. 以下を入力して 「リソースを作成」
項目
リソースパス /
リソース名 terms

image.png

1-3. /terms/{id} リソースを作成する

  1. /terms リソースを選択した状態で 「リソースを作成」 をクリック
  2. 以下を入力して 「リソースを作成」
項目
リソースパス /terms
リソース名 {id}

ツリーが /terms/{id} になっていれば OK です。
スクリーンショット 2026-03-14 095008.png

1-4. GET /terms にモック統合を設定する

① メソッドを作成

  1. /terms リソースを選択し 「メソッドを作成」
  2. 以下を設定して 「メソッドを作成」
項目
メソッドタイプ GET
統合タイプ Mock

image.png

② 統合リクエストを設定する

  1. 「統合リクエスト」タブ を開く
  2. 「編集」 を開く
  3. 「マッピングテンプレート」→「マッピングテンプレートを追加」
  4. コンテンツタイプ:application/json、テンプレートに以下を入力して 「保存」
{"statusCode": 200}

※デフォルトで設定されていればそのままでOK

③ 統合レスポンスを設定する(返す JSON を定義)

  1. 「統合レスポンス」タブ を開く
  2. ステータスコード 200 のところで「編集」を選択
  3. 「マッピングテンプレート」→ コンテンツタイプ application/json を追加
  4. 以下を入力して 「保存」
[
  {
    "id": 1,
    "term": "Amazon S3",
    "description": "スケーラブルなオブジェクトストレージサービス。静的ファイルやバックアップの保存に使われる。",
    "category": "ストレージ"
  },
  {
    "id": 2,
    "term": "AWS Lambda",
    "description": "サーバーレスのコンピューティングサービス。コードをアップロードするだけで実行環境が整う。",
    "category": "コンピューティング"
  },
  {
    "id": 3,
    "term": "Amazon VPC",
    "description": "AWS 上に構築できる仮想プライベートネットワーク。リソースのネットワーク環境を論理的に隔離できる。",
    "category": "ネットワーキング"
  },
  {
    "id": 4,
    "term": "Amazon RDS",
    "description": "マネージド型のリレーショナルデータベースサービス。MySQL・PostgreSQL・Aurora などに対応。",
    "category": "データベース"
  },
  {
    "id": 5,
    "term": "Amazon Bedrock",
    "description": "フルマネージドの生成 AI サービス。複数の基盤モデルを API 経由で利用できる。",
    "category": "AI/ML"
  }
]

image.png

④ メソッドレスポンスを確認する

  1. 「メソッドレスポンス」タブ を開く
  2. ステータスコード 200 が存在することを確認する(なければ追加)

image.png

⚠️ 注意:メソッドレスポンスに 200 が存在しないと、AgentCore Gateway がターゲット登録時にエラーになります。

1-5. GET /terms/{id} にモック統合を設定する

手順は 1-4 と同様です。統合レスポンスのテンプレートには、1 件分のレスポンスを設定します。

統合リクエストのテンプレート(1-4 と同じ)

{"statusCode": 200}

統合レスポンスのテンプレート

{
  "id": 1,
  "term": "Amazon S3",
  "description": "スケーラブルなオブジェクトストレージサービス。静的ファイルやバックアップの保存に使われる。",
  "category": "ストレージ"
}

image.png

💡 モック統合のため、どの {id} を指定しても同じレスポンスが返ります。今回はあくまで Gateway の動作確認用のサンプルです。

メソッドレスポンスへの 200 の追加も忘れずに。

1-6. デプロイ

  1. 「API をデプロイ」 をクリック
  2. 以下を設定して 「デプロイ」
項目
ステージ 新しいステージ
ステージ名 prod

image.png

  1. デプロイ後に表示される ステージの URL を控えておく
https://xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod

1-7. 動作確認

今回はAPIキーなどでの認証は設定していないため、ブラウザでAPIエンドポイントへアクセスするとJSONが返されることを確認できます!
image.png


Step 2:AgentCore Gateway を作成する

  1. AWS コンソールで Amazon Bedrock AgentCore を開く
  2. 左ナビの 「ゲートウェイ」 を選択
  3. 「Create gateway」 をクリック
  4. 以下を入力して 「ゲートウェイを作成」
項目 設定値
ゲートウェイ名 aws-terms-gateway
インバウンド認証設定 JSON Web Tokens (JWT) を使用(自動セットアップ)
JWT スキーマ設定 Cognitoを利用した設定のクイック作成 - recommended

image.png

作成完了後、MCP エンドポイント URL が発行されます。

https://<gateway-id>.gateway.bedrock-agentcore.ap-northeast-1.amazonaws.com/mcp

📋 この URL をエージェントの接続先として使います。


Step 3:ターゲットを登録する

Gateway にバックエンド API の定義を紐付けます。

  1. Gateway 詳細画面で 「ターゲット」>「追加」 をクリック
  2. 以下を設定
項目 設定値
ターゲットタイプ API Gateway
ターゲット名 aws-terms-target
API 先ほど作成したAPI
ステージ prod
Select API operations どちらも選択
アウトバウンド認証設定 No authorization

※Name overrideには今回はそれぞれ「listTerms」、「getTermById」と設定(ツール名になる)
image.png

本番環境で利用する場合は、アウトバウンド認証設定を設けてください。

  • 「ターゲットを追加」 をクリック

Step 4: Cognitoから認証情報を取得

Cognitoユーザープールから ドメインクライアントIDクライアントシークレットの3つの情報を事前に取得しておきます。
あとでGatewayとの疎通にて利用予定。

4-1. ドメイン

  1. Cognitoユーザープールの画面を開き、「ブランディング」> 「ドメイン」 を選択
  2. Cognitoドメインの値をコピーする
    image.png

4-2. クライアントID、クライアントシークレット

  1. Cognitoユーザープールの画面を開き、「アプリケーションクライアント」 > 対象のアプリケーションクライアントを選択
  2. クライアントIDクライアントシークレットをそれぞれコピーする
    image.png

Step 5:ローカル上でAIエージェントを構築し動かしてみる

Gateway が作成できCognitoの認証情報を取得できたら、AIエージェントから MCP プロトコルで接続できます。以下は Strands Agent SDKとBedrock提供のClaude LLM を使った接続イメージです。

import httpx
from strands import Agent
from strands.models import BedrockModel
from strands.tools.mcp import MCPClient
from mcp.client.streamable_http import streamablehttp_client

# --- 設定 ---
GATEWAY_URL  = "https://xxxxxxxx.gateway.bedrock-agentcore.ap-northeast-1.amazonaws.com/mcp"
TOKEN_URL    = "https://<your-domain>.auth.ap-northeast-1.amazoncognito.com/oauth2/token"
CLIENT_ID     = "<アプリケーションクライアントのCLIENT_ID>"
CLIENT_SECRET = "<アプリケーションクライアントのCLIENT_SECRET>"

# --- トークン取得 ---
resp = httpx.post(
    TOKEN_URL,
    data={
        "grant_type": "client_credentials",
        "client_id": CLIENT_ID,
        "client_secret": CLIENT_SECRET,
    },
    headers={"Content-Type": "application/x-www-form-urlencoded"},
)
resp.raise_for_status()
access_token = resp.json()["access_token"]
print("トークン取得成功")

# --- エージェント呼び出し ---
mcp_client = MCPClient(lambda: streamablehttp_client(
    GATEWAY_URL,
    headers={"Authorization": f"Bearer {access_token}"}
))

model = BedrockModel(model_id="apac.anthropic.claude-3-5-sonnet-20241022-v2:0")

with mcp_client:
    tools = mcp_client.list_tools_sync()
    print("利用可能なツール:", tools)
    agent = Agent(model=model, tools=tools)
    response = agent("AWS のストレージ関連のサービスを教えて")
    print(response)

エージェントは Gateway に問い合わせてツール一覧を取得し、質問内容に応じて listTermsgetTermById を選んで API を呼び出します。

ローカル上で実行した結果、AgentCore Gatewayのターゲットに登録したMCPツールを利用してBedrockモデルが回答を生成してくれました!
image.png


まとめ

  • AgentCore Gateway から API Gateway を指定するだけで MCP 対応ツールが完成する
  • operationIddescription の記述品質がエージェントのツール選択精度に影響する

AIエージェントを作るにあたり、独自のコンテキストや独自のツールへのアクセスをどれだけできるかが成功の鍵になります。
AgentCore Gateway は「既存 API を AI エージェントに使わせたい」というユースケースで非常に強力です。MCP サーバーをゼロから実装することなく、既存のAPI Gatewayの接続や、OpenAPI ファイルなどを利用して接続できるのは大きなメリットです。


参考リンク

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?