はじめに
本記事は下記のインフルエンサー検索エージェントに、追加実装を行ったという記事になります。
細かなアーキテクチャ構成には触れませんので、ご了承ください。
アーキテクチャ図
下図のとおり、Strands Agents内でPythonファイルとして実行していた各種ツールをLambdaに切り出しました。
その際、LambdaをAmazon Bedrock AgentCore GatewayでMCP互換ツールに変換して、Strands Agentsから呼び出すことにしました。
実装の背景と参考とした記事、どの部分をどう変えたか
実装の背景
Lambdaに切り出そうと思った背景は下記です。
- Youtuber検索、インスタグラマー検索のツールに問題が発生した場合や追加で実装を行いたくなった場合、その度にAgentCoreへビルド・デプロイを実施しなくてはいけない
- TiktokやXのインフルエンサーなどの検索ツールを拡張していく想定をしたとき、逐一Pythonファイルの追加やToolsの追加を行う必要があり、プログラミングで記載することの運用を考えるとミスも発生しやすいと考えた
参考にした記事
下記のリンクを参考にして、Lambdaの実装とAgentCore Gatewayの実装を行いました。
LambdaとAgentCore Gatewayの活用により、どう変わったか
今までは下記のようにツールを記述していました。
そのため、スクリプトに修正があった場合はその度デプロイする必要があったのと、機能追加した場合に起きたエラーによって全体に及ぶ不具合が発生した際にAgentCoreが止まってしまう事象が発生する可能性がありました。
@tool
def youtube_search...
@tool
def instagram_search...
agent = Agent(
model=MODEL,
system_prompt=(
"あなたはPRコンサルタントを支援する担当です。\n"
"商品をPRするために適したインフルエンサーを、....\n"
"各ツールの呼び出しは2回までとしてください。"
),
tools=[youtube_search, instagram_search],
# 拡張する際に↑のリストを追加する必要があった
session_manager=session_manager,
)
これを、上記のリンクをもとにして、Lambda関数によるツールへと変更しました。
そうすることにより、下記の通りMCP互換ツールを呼び出すだけの処理でよくなったことから、都度AgentCoreへデプロイする必要がなくなりました。
with mcp_client:
tools = mcp_client.list_tools_sync()
agent = Agent(
model=MODEL,
system_prompt=(
"あなたはPRコンサルタントを支援する担当です。\n"
"商品をPRするために適したインフルエンサーを、....\n"
"各ツールの呼び出しは2回までとしてください。"
),
tools=tools,
# MCP互換ツールとして変換されたLambdaのリストを呼び出すようにした
session_manager=session_manager,
)
そして機能を拡張したい場合、Lambdaを作成し下記のAgentCore Gatewayから「追加」を押すだけで呼び出せるツールが増やせるようになりました。
うまく動くのか。果たして...
うまくいってそうです。ちなみに前回の記事で書くのを忘れてしまっていたのですが、下記のようにメモリ機能もうまく果たせていることが確認できます。

最後に
ただ単に開発するだけでなく、運用を回していくためにどうしたらいいかを考えていくと、よりAgentCoreの機能の魅力を発見できると感じました。
また実装については既に出来ているものも多く、非常に参考になりました。
(Japan AWS Jr.Championsの人の記事がいつも非常に参考になっており、改めて同じコミュニティで活動している人のすごさを実感しました。)
余談ですが、スクレイピングを利用したため、LambdaでPlaywrightを使いたいという要件が発生しました。
初めてLambdaをECRイメージから作ったということも良い経験になりました。
(下記の記事を参考にしました。)
以上で今回は終わりにしたいと思います。


