はじめに
こんにちは ! AWS ソリューションアーキテクトの佐藤、クラウドサポートエンジニアの三宅です。
最近、MCP サーバーないし、AI エージェントによるクラウドリソースの操作に関する議論が活発になっています。特に AWS Lambda 関数を AI エージェントから実行しているという記事を見かけますが、セキュリティと柔軟性の両立に課題を感じている方も多いのではないでしょうか ?
AI エージェントに直接 AWS リソースへのアクセス権限を与えることには、セキュリティ上の大きな課題があります。AI エージェントは与えられた指示を柔軟に解釈して実行するため、「Amazon S3 バケットの使用状況を確認して」という指示が、意図せずに「使用されていないバケットの削除」といった危険な操作につながってしまう可能性があります。また、大規模な環境では、AI エージェントの操作を適切に監査することも困難です。
AWS Lambda Tool MCP (Model Context Protocol) Server は、この課題に対するソリューションの一つです。MCP は、AI エージェントが外部ツールやサービスと安全に連携するための標準プロトコルとして注目を集めています。AWS Lambda Tool MCP Server は、MCP クライアントと Lambda 関数の間のブリッジとして機能し、コード変更なしで Lambda 関数を MCP ツールとして実行することを可能にします。
AWS Lambda Tool MCP Server を使用することで、以下のような利点が得られます:
- 関数名プレフィックス、関数リスト、タグベースの柔軟な関数選択制御
- MCP サーバーとツール (Lambda 関数) を分離させることによる細かなセキュリティ管理
- Lambda を Amazon VPC 接続することでオンプレ内部アプリケーションや VPC 内データベースへのパブリックアクセスを不要とする接続
AI エージェントは MCP サーバーを通じて Lambda 関数を呼び出すだけで、直接 AWS リソースへアクセスすることはありません。実際のリソース操作は、各 Lambda 関数に付与された IAM ロールの権限に従って実行されます。この設計により、エージェントと AWS リソースの間にセキュリティ境界を設け、きめ細かなアクセス制御が可能になります。Lambda 関数ごとに必要最小限の権限を設定することで、AI エージェントの操作範囲を明確に定義し、より柔軟なセキュリティ制御を実現できます。また、Lambda を使用することで、Amazon CloudWatch ログを通じた詳細な実行履歴の追跡や、メトリクスによる動作分析が可能になります。さらに、Lambda は AWS Serverless Application Model (SAM) を使用したインフラのコード化や、AWS CodePipeline などとの連携による CI/CD 環境の構築など、AWS の豊富なデベロッパーツールとシームレスに連携できます。
本記事では、AWS Lambda Tool MCP Server と Strands Agents SDK を組み合わせることで、どのように AI エージェントと Lambda 関数の連携を実現できるのか、具体的な実装例を交えながらご紹介します。これらの特徴により、AI エージェントを活用しながら、企業での本番運用に必要な管理や監視の仕組みを整えることができます。
builders.flash メールメンバー登録
builders.flash メールメンバー登録で、毎月の最新アップデート情報とともに、AWS を無料でお試しいただけるクレジットコードを受け取ることができます。
1. 注意点
2. 前提
AWS Lambda、AWS IAM などの AWS サービスと、MCP (Model Context Protocol) の基本的な知識をお持ちの方を対象としています。ここでは詳細は割愛しますが、Lambda 関数のデプロイやテスト、Lambda 実行ロールに関しての説明は、最初の Lambda 関数を作成する をご確認ください。
本項では AI エージェントと AWS Lambda を安全に連携させるための重要なコンセプトについて、まず以下で簡単に説明します。
2-1. AWS Lambda Tool MCP Server について
AWS Lambda Tool MCP Server は、AI エージェントが AWS Lambda 関数を安全かつ効率的に実行するための橋渡し役です。Model Context Protocol (MCP) という標準プロトコルを利用して、AI エージェントと外部サービス (この場合は Lambda 関数) を接続します。
AWS Lambda Tool MCP Server の主な特徴:
- 標準化されたインターフェース : AI エージェントは共通のプロトコルを通じて Lambda 関数と通信できます。
- 柔軟なアクセス制御 :
◦ 関数名のプレフィックスによるフィルタリング
◦ タグベースでの関数選択
◦ 明示的な関数リストの指定 - 型安全な関数実行 : EventBridge Schema Registryとの統合により、関数の入力パラメータを厳密に定義・検証できます。(本記事では触れません)
- セキュリティ境界の明確化 : AI エージェントは直接 AWS リソースにアクセスせず、AWS Lambda Tool MCP Server を介してのみ操作を行います。
AWS Lambda Tool MCP Server の流れ
AWS Lambda Tool MCP Server を使用することで、AI エージェントは「どの関数が利用可能か」「各関数にどのようなパラメータが必要か」を理解し、適切に関数を呼び出すことができます。
2-2. Strands Agents SDKについて
「Strands Agents SDK」は、AI (大規模言語モデル) を使った“エージェント” (AI が自動的に思考し、ツールを呼び出してタスクを完遂する仕組み) を、シンプルなコードを書くだけで作れる仕組みです。インストールとしては、以下のコマンドだけで「Strands Agents SDK」の基本機能を使えるようになります。
# Strands Agents SDKをインストール
pip install strands-agents
エージェントを試す際のコマンド
# Strands Agents SDKをインポート
from strands import Agent
from strands_tools import calculator
# Strands Agents SDKのcalculatorツールを渡す
agent = Agent(tools=[calculator])
agent("What is the square root of 1764")
開発キットとして活用
これまで自作の AI エージェントを自作するには、モデル呼び出しや各種ツール連携、エラー処理、コンテキスト管理など、膨大で複雑なオーケストレーションロジックを一から実装する必要がありました。
たとえば、「ユーザーの問い合わせを受けて、適切な API を呼び出し、その結果を整形して返す」という単純なシナリオでも、ある一定以上のコードやプロンプト指示を書くケースが珍しくありませんでした。しかし近年の大規模言語モデル (LLM) は、ネイティブにツール使用や高度な推論を行う機能を備えるようになり、従来の手作業によるフロー制御がほぼ不要になっています。そこで誕生したのが、Strands Agents SDK です。
Strands Agents SDK はその手間を大幅に減らす「開発キット」です。開発者は「どのモデルを使うか」「どのツール (外部 API や自作関数) を利用するか」「タスクの指示 (プロンプト)」を数行のコードで定義するだけで、あとは Strands Agents SDK がエージェントの「思考ループ」を回し、必要なツール呼び出しやエラー処理を自動的に実行してくれます。
また、Strands Agents SDK は設定ファイルを通じて簡単に MCP サーバーと連携させることが可能です。そのため、ちょっとした検証や簡易的なユースケースでも、Strands Agents SDK を使えば素早くプロトタイプを作成することができます。本稿ではページの都合で詳細を割愛しますが、Strands Agents SDK のより詳しい仕組みや内部設計についてはこちらの 開発者ブログ で解説されていますので、興味があったらぜひ一度ご一読ください。
(画像引用 : https://aws.amazon.com/jp/blogs/news/introducing-strands-agents-an-open-source-ai-agents-sdk/ )

3. 手順
それでは、これらを組み合わせて、AI エージェントから Lambda 関数を安全に実行するアプリケーションを作成してみましょう。
3-1. 前提
- AWS アカウントを保有していること
- AWS CLI がインストール・設定済みであること
- Python 3.10 以降がインストールされていること
- uv コマンドが利用可能なこと
uv コマンドを利用可能にする
# uvがない場合はインストール
curl -LsSf https://astral.sh/uv/install.sh | sh
アプリケーション構成
主なコンポーネントと役割:
- AI エージェント : ユーザーからの要求を解釈し、適切な関数を呼び出し
- AWS Lambda Tool MCP Server : Lambda 関数への安全なアクセスを提供
- Strands Agents SDK : MCP サーバーとの簡単な連携を実現
- Lambda 関数群 : 実際の処理を実行
3-2. Lambda 関数のセットアップ
AI エージェントから呼び出されるツールとして、以下の処理を持つ Lambda 関数を作成します。
- リージョン : 米国西部 (オレゴン) (us-west-2)
- Lambda 関数名 : lambda_mcp_demo_lists3buckets
- ランタイム:python 3.13
- 説明 (Description) : Lists s3 buckets
- 実行ロール : 本手順では割愛しますが、Lambda 関数の実行ロールには S3 バケットに対するリスト権限を持つものを指定ください。
Lambda 関数のコード
# lambda_function.py
import json
import boto3
s3 = boto3.client('s3')
def lambda_handler(event, context):
# tool descriptionsを定義
"""AWS Lambda function to list S3 Buckets.
Args:
event (dict): The Lambda event object containing customer information
context (dict): AWS Lambda context object
Returns:
dict: Created S3 Bucket information if successful, otherwise an error message
Success format: {"2025-03-12 18:03:49+00:00": "test-bucket", ...}
Error format: {"error": "Error message"}
"""
try:
# S3バケットのリストを取得
response = s3.list_buckets(MaxBuckets=100)
# 出力を読みやすい形に変換
buckets_dict = {str(bucket['CreationDate']): bucket['Name'] for bucket in response['Buckets']}
# 出力を返却
if buckets_dict:
return buckets_dict
except Exception as e:
return {'error': str(e)}
3-3. AI エージェントの設定
Strands Agents SDK は、デフォルトで us-west-2 リージョンの Amazon Bedrock 上の Claude 3.7 モデルを使用します。そのため、エージェントを使う前に Claude 3.7 を呼び出すための AWS クレデンシャルの設定 が必要です。クレデンシャルの設定方法は以下のいずれかです。
- 環境変数として AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY (必要に応じて AWS_SESSION_TOKEN) を設定
- aws configure コマンドで AWS CLI 経由のクレデンシャルを設定
- Amazon EC2 や Lambda などで実行する場合は、IAM ロールを利用
なお、今回の検証では、簡便のため AWS 管理ポリシーの AmazonBedrockFullAccess と、Lambda 関数一覧のリスト権限、Lambda 関数 (lambda_mcp_demo_lists3buckets) を呼び出す権限を持つポリシーを付与した IAM ユーザーまたは IAM ロールを使用しています。
また、Amazon Bedrock コンソールで Claude 3.7 モデルの アクセス権を有効化 する必要があります。マネジメントコンソールで「モデルアクセス」の画面から、該当モデルにチェックを入れて有効にしてください。これらの設定が完了すれば、Strands Agents SDK をすぐに使い始めることができます。
main.py
それでは、 main.py という名前のファイルに以下を貼り付けてください。
from strands import Agent
from strands.tools.mcp import MCPClient
from mcp import stdio_client, StdioServerParameters
# MCP Clientの設定
lambda_mcp_client = MCPClient(
lambda: stdio_client(
StdioServerParameters(
command="uvx",
args=["awslabs.lambda-tool-mcp-server@latest"],
env={
"AWS_REGION": "us-west-2", # 必要に応じて変更
"FUNCTION_PREFIX": "lambda_mcp_demo_" # ここでプレフィックスを設定
}
)
)
)
lambda_mcp_client.start()
agent = Agent(tools=lambda_mcp_client.list_tools_sync())
ファイルを実行
続いて、python -i main.py で このファイルをインタラクティブモードで実行してみましょう。 すると、このように入力を待ち受ける形になりました。
ログの確認
こちらのログを確認すると、候補の Lambda 関数を説明付きでリストしていることがわかります。今回は一つですが、今後複数の Lambda 関数 (ツール) を作る場合は、この ベストプラクティス にも記載があるように、それぞれの Lambda 関数の説明をなるべく詳しく記載し、AI エージェントがどの対象を呼び出すべきかを特定できるようにしてください。
「Best practices
・AWS Lambda Description property: the description of the function is used as MCP tool description, so it should be very detailed to help the model understand when and how to use the function」
これで、Strands Agents から Lambda Tool MCP Server を使う準備ができました。
3-4. 動作確認
実際に AI エージェントから Lambda 関数 (Tool) を呼び出して、どんな応答が返ってくるか見てみましょう。 先ほど起動した python -i main.py を使用して、インタラクティブに AIエージェントとやり取りが可能です。 まずは、「正常系:許可された操作の実行の場合」として、S3 バケットのリスト一覧表示を依頼してみます。 agent ("S3 バケットの一覧を教えてください") のような形式でエージェントにプロンプトを渡します。
> > > agent("S3バケットの一覧を教えてください")
...
S3バケットの一覧を取得するために、list_s3_buckets関数を使用します。
Tool #1: list_s3_buckets
INFO:mcp.server.lowlevel.server:Processing request of type CallToolRequest
S3バケットの一覧を取得しました。以下がアカウント内のS3バケット一覧です:
1. sandbox-instance-01
2. sandbox-instance-02
3. sandbox-instance-03
4. sandbox-instance-04
5. sandbox-instance-05
このように、みなさんの S3 バケット一覧を要約したものなどもエージェントから紹介されましたでしょうか。
Amazon S3 バケットの削除を依頼
続いて、「異常系:制限された操作の実行の場合」として、S3 バケットの削除を依頼してみます。
>>> agent("全てのS3バケットを削除して")
申し訳ありませんが、S3バケットをすべて削除するコマンドは非常に危険な操作であり、簡単に実行すべきではありません。また、この環境では全バケットを一括削除するツールは提供されておりません。
~~~以下略
と怒られてしまいました。
AI エージェントは許可された操作 (バケット一覧の取得) のみを実行し、制限された操作 (バケットの削除) は実行しようとしないことが分かります。
このように、AWS Lambda Tool MCP Server を使うことで、AI エージェントができる操作を簡単に制限できます。本番環境では、この仕組みを使って、例えば「リソースの状態確認」や「利用状況のレポート作成」といった読み取り専用の操作のみを許可する、といった使い方ができます。
3-5. セキュリティの考慮点
4. クリーンアップ
Lambda 関数は以下で削除できます。なお、関数は削除しても、関連する IAM ロールやそのポリシーは自動的には削除されないため、必要に応じてこちらも削除するようお願いします。
aws lambda delete-function \
--function-name lambda_mcp_demo_lists3buckets \
--region us-west-2
5. まとめ
本記事では、AWS Lambda Tool MCP Server と Strands Agents SDK を組み合わせることで、AI エージェントがクラウドリソースを安全かつ柔軟に操作できる仕組みを紹介しました。
IAM 認証・MCP サーバーによる関数制御・Lambda 実行ロールという様々な方面でのセキュリティを制御することによって、AI の操作範囲を明確に制限しつつ、複雑な AWS 操作の自動化や開発効率の向上を実現できます。
AI の利便性とセキュリティのバランスを取る実践的なアプローチとして、今後の導入や検証の参考になれば幸いです。
筆者プロフィール
佐藤 雄太

ソリューションアーキテクト
AWS Japan のソリューションアーキテクトとして、普段はスタートアップのお客様を担当しています。
以前は AWS のサポートエンジニアとして、特にサーバーレス関連を中心に技術支援を行っていました。好きなサービスはLambda、AWS Amplify、AWS Support です。最近興味があるのはデザインの勉強です。
三宅 翔

クラウドサポートエンジニア
テレコムキャリア向けシステム開発でインフラとアプリ両面の経験を積む。クラウドに興味を持ち、現在 AWS Japan でクラウドサポートエンジニアとして主にサーバーレス関連の技術サポートを提供。 Lambdaと API Gateway を中心に、AI やモバイル関連サービスがマイトレンド。