メインロジックを Lambda 関数にオフロードする AWS Lambda MCP Server を試す

記事タイトルとURLをコピーする

はじめに

本記事では、エージェント機能を持つ Amazon Q for command cli を使用して、AWS Lambda MCP Server 試す一連の流れを紹介します。

awslabs.github.io

上記サイトでも紹介されているように、AWS Lambda MCP Server を使用することで、単体の MCP サーバーに複数の Lambda 関数を関連付けることができます。これにより、以下の観点でメリットを享受できると述べられています。

観点 メリット
セキュリティ MCP サーバーが直接呼び出す AWS サービスは Lambda のみで、AWS 認証情報に紐づく権限を最小限に設定できる。他の AWS サービスの操作権限を Lambda の実行ロールに持たせられる。
ツールの管理 ツールが Lambda 関数単位で管理できる。複数ツールをそれぞれ別のチームで管理しているような場合でも、言語を統一するような必要はない。

community.aws

以降、内容に沿ってリーソースの作成と実装をすることで、それらを Amazon Q for command cli 経由で呼び出すまでを実施できます。

前準備

uv

Python のプロジェクト(パッケージ)管理ツール uv の使用を前提に進めます。 uv に関しては以下の資料などをご参照ください。

github.com

blog.serverworks.co.jp

Amazon Q for command cli

Amazon Q for command cli が未インストールの場合ははじめにインストールします。インストールには以下のブログ、公式ドキュメントをご参照ください。

blog.serverworks.co.jp

blog.serverworks.co.jp

docs.aws.amazon.com

Lambda 関数の作成

本記事では、MCP サーバーから呼び出されるツールのメインロジックを実行する Lambda 関数を 2 つ作成します。

1 つめの関数

「Lambda のコンソール」>「Create function」を押下します。

項目
Function name lambda-mcp-sushi-function
Runtime Python 3.13

「Create」を押下します。

import json
import random


def lambda_handler(event, context):

    sushi = ["Maguro", "Buri", "Ika"]
    sushi_name = random.choice(sushi)

    return {
        'statusCode': 200,
        'body': json.dumps(sushi_name)
    }

上記のプログラムを入力し「Deploy」を押下します。

「Configuration」>「General configuration」>「Edit」

項目
Description 寿司ネタをランダムに返します。

「Save」を押下します。

2 つめの関数

「Lambda のコンソール」>「Create function」を押下します。

項目
Function name lambda-mcp-neko-function
Runtime Python 3.13

「Create」を押下します。

import json
import random


def lambda_handler(event, context):

    neko = ["Mike", "Buchi", "Chatora"]
    neko_name = random.choice(neko)

    return {
        'statusCode': 200,
        'body': json.dumps(neko_name)
    }

上記のプログラムを入力し「Deploy」を押下します。

「Configuration」>「General configuration」>「Edit」

項目
Description 猫の種類をランダムに返します。

「Save」を押下します。

MCP サーバーの設定

作業ディレクトリとMCP サーバーの設定ファイルを作成します。

$ mkdir amazon-q-sushi-neko-mcp
$ cd amazon-q-sushi-neko-mcp
$ mkdir .amazonq
$ touch .amazonq/mcp.json

上記のように .amazonq ディレクトリ配下に mcp.json を配置すると、作業ディレクトリ内でのみで有効な MCP サーバーの設定ができます。グローバルに MCP サーバーを設定したい場合は ~/.aws/amazonq/mcp.json に設定を記述します。

mcp.json に以下の内容を記述します。

{
  "mcpServers": {
    "awslabs.lambda-mcp-server": {
      "command": "uvx",
      "args": [
        "awslabs.lambda-mcp-server@latest"
      ],
      "env": {
        "AWS_PROFILE": <REPLACE_ME>,
        "AWS_REGION": <REPLACE_ME>,
        "FUNCTION_LIST": "lambda-mcp-sushi-function, lambda-mcp-neko-function"
      }
    }
  }
}

AWS_PROFILE 及び AWS_REGION の値は使用する AWS 認証情報のプロファイル名、Lambda 関数を作成した AWS リージョンに応じて書き換えてください。

対話から呼び出す

q

Amazon Q for command cli を立ち上げ、ツールを認識しているか確認します。

> 何のツールが使える?
現在使用可能なツールは以下のとおりです:

1. execute_bash - Bashコマンドを実行するツール
2. fs_read - ファイルやディレクトリの内容を読み取るツール
3. fs_write - ファイルを作成・編集するツール
4. use_aws - AWS CLIを使用してAWSサービスを操作するツール
5. report_issue - チャットの問題を報告するためのツール
6. awslabslambda_mcp_server___lambda_mcp_sushi_function - 寿司ネタ
の種類をランダムに返すツール
7. awslabslambda_mcp_server___lambda_mcp_neko_function - 猫の種類
をランダムに返すツール

特に面白いのは最後の2つで、寿司ネタや猫の種類をランダムに取得でき
るMCP(Model Context Protocol)ツールです。何か特定のツールについ
て詳しく知りたい場合は、お気軽にお尋ねください。

作成した Lambda 関数をツールとして認識していることが分かりました。最後に、対話の流れからそれぞれ Lambda 関数が実行されて値が返ってくるかを確かめます。

> 何の寿司を食べようかな。
寿司のネタをランダムに選んでみましょう。寿司ネタを取得するツールを使います。


🛠️  Using tool: lambda_mcp_sushi_function from mcp server awslabslambda_mcp_server
 ⋮ 
 ● Running lambda_mcp_sushi_function with the param:
 ⋮  {
 ⋮    "arguments": {
 ⋮      "parameters": {}
 ⋮    },
 ⋮    "name": "lambda_mcp_sushi_function"
 ⋮  }
Allow this action? Use 't' to trust (always allow) this tool for the session. [y/n/t]:

> y

 ⋮ 
 ● Completed in 0.438s


今日のおすすめは「イカ」です!イカは歯ごたえがあり、さっぱりとした味わいが特徴的な寿
司ネタですね。新鮮なイカの寿司は透き通るような白さと甘みがあり、醤油を少しつけて食べ
ると美味しいですよ。

続いて猫にも言及してみます。

> どんな猫を飼おうかな。
どんな猫を飼うか考えているんですね。猫の種類をランダムに選んでみましょう。


🛠️  Using tool: lambda_mcp_neko_function from mcp server awslabslambda_mcp_server
 ⋮ 
 ● Running lambda_mcp_neko_function with the param:
 ⋮  {
 ⋮    "arguments": {
 ⋮      "parameters": {}
 ⋮    },
 ⋮    "name": "lambda_mcp_neko_function"
 ⋮  }
Allow this action? Use 't' to trust (always allow) this tool for the session. [y/n/t]:

> y

 ⋮ 
 ● Completed in 0.821s


今日のおすすめは「ブチ猫」です!ブチ猫は白地に黒や茶色などの斑点模様がある猫で、個性
的な見た目が特徴です。

ブチ模様の猫は正式な猫種というよりは毛色のパターンで、様々な猫種に見られます。特に三
毛猫やキャリコ猫によく見られる模様です。性格は個体によって異なりますが、活発で遊び好
きな子が多いと言われています。

ブチ猫は見た目が独特で、家に迎えると個性的な存在感を放ちますよ。もちろん、猫を飼う際
は見た目だけでなく、あなたのライフスタイルに合った性格の子を選ぶことが大切です。保護
猫施設で実際に触れ合ってみるのもいいかもしれませんね。

ツールの使用許可について

Q が対話の中で特定のツールを使用を検討した際には、ユーザーの入力が促されます。

Allow this action? Use 't' to trust (always allow) this tool for the session. [y/n/t]:

y: yes, n: no のいずれか選択した場合は、ツールの使用検討に対し1度きりの許可・拒否の指示を与えます。 t を指定した場合は q コマンドで実行された該当のセッションの中であれば、以降の特定のツールの使用は許可されます。

まとめ

AWS Lambda MCP Server を Amazon Q for command cli のエージェント機能を経由して試してみました。MCP サーバーの設定がシンプルで、Lambda 関数をツールとして利用することが容易にできる点が魅力的でした!

今回は GET 処理にフォーカスしましたが、Lambda 関数に渡すパラメータをスキーマとして定義してデータを登録したり、リソース情報を更新するような POST, PATCH 的な操作も可能です。スキーマ定義を使用したツールの使用についても試してみたいと思います。

2021年4月新卒入社。目に見えて、動かせるものが好き。