この Codelab について
1. はじめに
この Codelab では、データベース向け MCP ツールボックスを利用するエージェント開発キット(ADK)を使用してエージェントを構築します。
この Codelab では、次の手順で進めていきます。
- ホテル データベースとサンプルデータを含む Cloud SQL for PostgreSQL データベースをプロビジョニングします。
- データへのアクセスを提供する MCP Toolbox for Databases を設定します。
- エージェント開発キット(ADK)を使用してエージェントを設計し、MCP ツールボックスを使用してユーザーからのクエリに回答します。
- ローカルで、および Cloud Run サービス経由で Google Cloud で、Agent and MCP Toolbox for Databases をテストするオプションを確認します。
演習内容
- 地域のホテルに関するユーザーの質問に回答したり、ホテル名で検索したりするエージェントを設計、構築、デプロイします。
学習内容
- Cloud SQL for PostgreSQL データベースをプロビジョニングしてサンプルデータを入力する。
- Cloud SQL for PostgreSQL データベース インスタンスに MCP Toolbox for Databases を設定します。
- エージェント開発キット(ADK)を使用してエージェントを設計、開発し、ユーザーのクエリに回答します。
- ローカル環境でエージェントとデータベース向け MCP ツールボックスをテストします。
- (省略可)Google Cloud にデータベース用エージェントと MCP ツールボックスをデプロイします。
必要なもの
- Chrome ウェブブラウザ
- Gmail アカウント
- 課金が有効になっている Cloud プロジェクト
この Codelab は、初心者を含むあらゆるレベルのデベロッパーを対象としており、サンプル アプリケーションで Python を使用します。ただし、ここで説明するコンセプトを理解するために Python の知識は必要ありません。
2. 始める前に
プロジェクトを作成する
- Google Cloud コンソールのプロジェクト選択ページで、Google Cloud プロジェクトを選択または作成します。
- Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
- Cloud Shell(Google Cloud で動作するコマンドライン環境)を使用します。この環境には bq がプリロードされています。Google Cloud コンソールの上部にある [Cloud Shell をアクティブにする] をクリックします。
- Cloud Shell に接続したら、次のコマンドを使用して、認証が完了していることと、プロジェクトがプロジェクト ID に設定されていることを確認します。
gcloud auth list
- Cloud Shell で次のコマンドを実行して、gcloud コマンドがプロジェクトを認識していることを確認します。
gcloud config list project
- プロジェクトが設定されていない場合は、次のコマンドを使用して設定します。
gcloud config set project <YOUR_PROJECT_ID>
- 次のコマンドを使用して、必要な API を有効にします。処理には数分かかることがありますので、少々お待ちください。
gcloud services enable cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
cloudfunctions.googleapis.com \
aiplatform.googleapis.com \
sqladmin.googleapis.com \
compute.googleapis.com
コマンドが正常に実行されると、次のようなメッセージが表示されます。
Operation "operations/..." finished successfully.
gcloud コマンドの代わりに、コンソールで各プロダクトを検索するか、このリンクを使用します。
いずれかの API が不足している場合は、実装中にいつでも有効にできます。
gcloud コマンドとその使用方法については、ドキュメントをご覧ください。
3. Cloud SQL インスタンスを作成する
ホテルデータを保存するために、Google Cloud SQL for PostgreSQL インスタンスを使用します。Cloud SQL for PostgreSQL は、Google Cloud Platform 上のフルマネージド データベース サービスで、PostgreSQL リレーショナル データベースの設定、維持、管理、運営に役立ちます。
Cloud Shell で次のコマンドを実行してインスタンスを作成します。
gcloud sql instances create hoteldb-instance \
--database-version=POSTGRES_15 \
--cpu=2 \
--memory=8GiB \
--region=us-central1 \
--edition=ENTERPRISE \
--root-password=postgres
このコマンドの実行には 3 ~ 5 分かかります。コマンドが正常に実行されると、コマンドが完了したことを示す出力と、NAME、DATABASE_VERSION、LOCATION などの Cloud SQL インスタンス情報が表示されます。
4. Hotels データベースを準備する
次は、ホテル エージェント用のサンプルデータを作成します。
Cloud コンソールの Cloud SQL ページに移動します。hoteldb-instance
が作成され、準備ができていることを確認します。以下に示すように、インスタンスの名前(hoteldb-instance
)をクリックします。
Cloud SQL の左側のメニューで、次の図に示すように [Cloud SQL Studio
] メニュー オプションに移動します。
Cloud SQL Studio にログインするよう求められます。この Studio で、いくつかの SQL コマンドを実行します。[データベース] オプションで [postgres
] を選択し、[ユーザー] と [パスワード] の両方で、使用する値は postgres
です。AUTHENTICATE
をクリックします。
まず、以下のスキーマに従ってホテル テーブルを作成します。Cloud SQL Studio のいずれかのエディタペインで、次の SQL を実行します。
CREATE TABLE hotels(
id INTEGER NOT NULL PRIMARY KEY,
name VARCHAR NOT NULL,
location VARCHAR NOT NULL,
price_tier VARCHAR NOT NULL,
checkin_date DATE NOT NULL,
checkout_date DATE NOT NULL,
booked BIT NOT NULL
);
次に、hotels テーブルにサンプルデータを入力します。次の SQL を実行します。
INSERT INTO hotels(id, name, location, price_tier, checkin_date, checkout_date, booked)
VALUES
(1, 'Hilton Basel', 'Basel', 'Luxury', '2024-04-22', '2024-04-20', B'0'),
(2, 'Marriott Zurich', 'Zurich', 'Upscale', '2024-04-14', '2024-04-21', B'0'),
(3, 'Hyatt Regency Basel', 'Basel', 'Upper Upscale', '2024-04-02', '2024-04-20', B'0'),
(4, 'Radisson Blu Lucerne', 'Lucerne', 'Midscale', '2024-04-24', '2024-04-05', B'0'),
(5, 'Best Western Bern', 'Bern', 'Upper Midscale', '2024-04-23', '2024-04-01', B'0'),
(6, 'InterContinental Geneva', 'Geneva', 'Luxury', '2024-04-23', '2024-04-28', B'0'),
(7, 'Sheraton Zurich', 'Zurich', 'Upper Upscale', '2024-04-27', '2024-04-02', B'0'),
(8, 'Holiday Inn Basel', 'Basel', 'Upper Midscale', '2024-04-24', '2024-04-09', B'0'),
(9, 'Courtyard Zurich', 'Zurich', 'Upscale', '2024-04-03', '2024-04-13', B'0'),
(10, 'Comfort Inn Bern', 'Bern', 'Midscale', '2024-04-04', '2024-04-16', B'0');
次に示すように SELECT SQL を実行して、データを検証しましょう。
SELECT * FROM hotels;
hotels テーブルに次のようなレコードがいくつか表示されます。
Cloud SQL インスタンスの設定プロセスが完了し、サンプルデータが作成されました。次のセクションでは、データベース用の MCP ツールボックスを設定します。
5. データベース向け MCP ツールボックスを設定する
データベース向け MCP ツールボックスは、データベース用のオープンソースの MCP サーバーです。エンタープライズ グレードと本番環境品質を念頭に設計されています。これにより、接続プーリングや認証などの複雑な処理に対応して、ツールの開発をより簡単、迅速、安全に行うことができます。
ツールボックスは、エージェントがデータベース内のデータにアクセスできるようにする生成 AI ツールの構築に役立ちます。ツールボックスには次のような機能があります。
- 開発の簡素化: 10 行未満のコードでツールをエージェントに統合し、複数のエージェントやフレームワーク間でツールを再利用し、新しいバージョンのツールを簡単にデプロイできます。
- パフォーマンスの向上: 接続プーリング、認証などのベスト プラクティス。
- セキュリティの強化: 統合された認証により、データへのアクセスをより安全に行うことができます。
- エンドツーエンドのオブザーバビリティ: OpenTelemetry のサポートが組み込まれた、すぐに使用できる指標とトレース。
Toolbox は、アプリケーションのオケストレーション フレームワークとデータベースの間にあり、ツールの変更、配布、呼び出しに使用されるコントロール プレーンを提供します。ツールの保存と更新を一元化できるため、ツールの管理が簡素化されます。エージェントとアプリケーション間でツールを共有し、アプリケーションを再デプロイしなくてもツールを更新できます。
MCP Toolbox for Databases でサポートされているデータベースの 1 つが Cloud SQL であることがわかります。このデータベースは、前のセクションでプロビジョニングしました。
ツールボックスのインストール
Cloud Shell ターミナルを開き、mcp-toolbox
という名前のフォルダを作成します。
mkdir mcp-toolbox
次のコマンドを使用して mcp-toolbox
フォルダに移動します。
cd mcp-toolbox
以下のスクリプトを使用して、データベース向け MCP ツールボックスのバイナリ バージョンをインストールします。
export VERSION=0.3.0
curl -O https://storage.googleapis.com/genai-toolbox/v$VERSION/linux/amd64/toolbox
chmod +x toolbox
これで、ツールボックスのバイナリ バージョンが使用できるようになりました。次のステップでは、データソースなどの構成を使用してツールボックスを構成します。
tools.yaml の構成
Toolbox を構成する主な方法は、tools.yaml
ファイルを使用する方法です。同じフォルダ(mcp-toolbox
)に tools.yaml
という名前のファイルを作成します。ファイルの内容は次のとおりです。
Cloud Shell で利用可能な nano エディタを使用できます。nano コマンドは「nano tools.yaml
」です。
YOUR_PROJECT_ID
の値は、Google Cloud プロジェクト ID に置き換えてください。
sources:
my-cloud-sql-source:
kind: cloud-sql-postgres
project: YOUR_PROJECT_ID
region: us-central1
instance: hoteldb-instance
database: postgres
user: postgres
password: postgres
tools:
search-hotels-by-name:
kind: postgres-sql
source: my-cloud-sql-source
description: Search for hotels based on name.
parameters:
- name: name
type: string
description: The name of the hotel.
statement: SELECT * FROM hotels WHERE name ILIKE '%' || $1 || '%';
search-hotels-by-location:
kind: postgres-sql
source: my-cloud-sql-source
description: Search for hotels based on location.
parameters:
- name: location
type: string
description: The location of the hotel.
statement: SELECT * FROM hotels WHERE location ILIKE '%' || $1 || '%';
toolsets:
my_first_toolset:
- search-hotels-by-name
- search-hotels-by-location
ファイルについて簡単に説明します。
Sources
は、ツールが操作できるさまざまなデータソースを表します。Source は、ツールが操作できるデータソースを表します。Sources
は、tools.yaml ファイルの sources セクションでマップとして定義できます。通常、ソース構成には、データベースとの接続と操作に必要な情報が含まれます。この例では、認証情報を使用して Cloud SQL for PostgreSQL インスタンスを指す単一のソースを構成しました。詳細については、ソース リファレンスをご覧ください。Tools
は、エージェントが実行できるアクション(ソースへの読み取りや書き込みなど)を定義します。ツールは、エージェントが実行できるアクション(SQL ステートメントの実行など)を表します。Tools
は、tools.yaml ファイルの tools セクションでマップとして定義できます。通常、ツールは対象となるソースが必要です。この例では、2 つのツール(search-hotels-by-name
とsearch-hotels-by-location
)を定義し、対象となるソース、SQL、パラメータを指定します。詳細については、ツールのリファレンスをご覧ください。- 最後に、
Toolset
があります。これを使用すると、一緒に読み込むツールのグループを定義できます。これは、エージェントやアプリケーションに基づいて異なるグループを定義する場合に役立ちます。この例では、my_first_toolset
という単一のツールセットがあり、定義した 2 つのツールが含まれています。
データベース向け MCP ツールボックス サーバーを実行する
次のコマンドを実行して(mcp-toolbox
フォルダから)サーバーを起動します。
./toolbox --tools-file "tools.yaml"
サーバーがデータソースに接続し、ツールセットとツールを読み込んだことを示す出力が表示されれば理想的です。出力例を次に示します。
./toolbox --tools-file "tools.yaml"
2025-04-23T14:32:29.564903079Z INFO "Initialized 1 sources."
2025-04-23T14:32:29.565009291Z INFO "Initialized 0 authServices."
2025-04-23T14:32:29.565070176Z INFO "Initialized 2 tools."
2025-04-23T14:32:29.565120847Z INFO "Initialized 2 toolsets."
2025-04-23T14:32:29.565510068Z INFO "Server ready to serve!"
MCP ツールボックス サーバーは、デフォルトでポート 5000 で実行されます。Cloud Shell を使用して、これをテストしてみましょう。
以下に示すように、Cloud Shell で [ウェブでプレビュー] をクリックします。
[ポートを変更] をクリックし、下に示すようにポートを 5000 に設定して、[変更してプレビュー] をクリックします。
次の出力が表示されます。
ブラウザの URL に、次の URL を追加します。
/api/toolset
これで、現在構成されているツールが表示されます。出力例を以下に示します。
{
"serverVersion": "0.3.0+container.12222fe27ae070f2689a0632d60fda45412d1f97",
"tools": {
"search-hotels-by-location": {
"description": "Search for hotels based on location.",
"parameters": [
{
"name": "location",
"type": "string",
"description": "The location of the hotel.",
"authSources": []
}
]
},
"search-hotels-by-name": {
"description": "Search for hotels based on name.",
"parameters": [
{
"name": "name",
"type": "string",
"description": "The name of the hotel.",
"authSources": []
}
]
}
}
}
データベース向け MCP ツールボックスでは、ツールを検証してテストする Python の方法について説明しています。詳しくは、こちらをご覧ください。次のセクションでは、これらのツールを使用するエージェント開発キット(ADK)に直接進みます。
6. エージェント開発キット(ADK)を使用してエージェントを作成する
エージェント開発キット(ADK)をインストールする
Cloud Shell で新しいターミナルタブを開き、次のように my-agents
という名前のフォルダを作成します。my-agents
フォルダにも移動します。
mkdir my-agents
cd my-agents
次のように、venv
を使用して仮想 Python 環境を作成しましょう。
python -m venv .venv
次のように仮想環境を有効にします。
source .venv/bin/activate
次のように ADK パッケージとデータベース向け MCP ツールボックス パッケージをインストールします。
pip install google-adk toolbox-core
これで、次のように adk
ユーティリティを呼び出せるようになりました。
adk
コマンドのリストが表示されます。
$ adk
Usage: adk [OPTIONS] COMMAND [ARGS]...
Agent Development Kit CLI tools.
Options:
--help Show this message and exit.
Commands:
api_server Starts a FastAPI server for agents.
create Creates a new app in the current folder with prepopulated agent template.
deploy Deploys agent to hosted environments.
eval Evaluates an agent given the eval sets.
run Runs an interactive CLI for a certain agent.
web Starts a FastAPI server with Web UI for agents.
最初のエージェント アプリケーションを作成する
次に、adk
を使用して、adk
create
コマンドとアプリ名 **(hotel-agent-app)
**を使用して、ホテル エージェント アプリケーションのスキャフォールディングを作成します。
adk create hotel-agent-app
手順に沿って、以下を選択します。
- ルート エージェントのモデルを選択するための Gemini モデル。
- バックエンドに Vertex AI を選択します。
- デフォルトの Google プロジェクト ID とリージョンが表示されます。デフォルト自体を選択します。
Choose a model for the root agent:
1. gemini-2.0-flash-001
2. Other models (fill later)
Choose model (1, 2): 1
1. Google AI
2. Vertex AI
Choose a backend (1, 2): 2
You need an existing Google Cloud account and project, check out this link for details:
https://google.github.io/adk-docs/get-started/quickstart/#gemini---google-cloud-vertex-ai
Enter Google Cloud project ID [gcp-experiments-349209]:
Enter Google Cloud region [us-central1]:
Agent created in /home/romin/hotel-agent-app:
- .env
- __init__.py
- agent.py
エージェント用のデフォルト テンプレートと必要なファイルが作成されたフォルダを確認します。
まず、.env
ファイルです。内容は次のとおりです。
GOOGLE_GENAI_USE_VERTEXAI=1
GOOGLE_CLOUD_PROJECT=YOUR_GOOGLE_PROJECT_ID
GOOGLE_CLOUD_LOCATION=YOUR_GOOGLE_PROJECT_REGION
これらの値は、Vertex AI を介して Gemini を使用することを示しています。また、Google Cloud プロジェクト ID とロケーションの値も示しています。
次に、フォルダをモジュールとしてマークし、agent.py
ファイルからエージェントをインポートする単一のステートメントを含む __init__.py
ファイルがあります。
from . import agent
最後に、agent.py
ファイルを見てみましょう。内容は次のとおりです。
from google.adk.agents import Agent
root_agent = Agent(
model='gemini-2.0-flash-001',
name='root_agent',
description='A helpful assistant for user questions.',
instruction='Answer user questions to the best of your knowledge',
)
これは ADK で記述できる最もシンプルなエージェントです。ADK ドキュメントのページによると、エージェントは、特定の目標を達成するために自律的に動作するように設計された自己完結型の実行ユニットです。エージェントは、タスクの実行、ユーザーとのやり取り、外部ツールの利用、他のエージェントとの連携を行うことができます。
特に、LLMAgent(一般にエージェントというエイリアス)は、大規模言語モデル(LLM)をコアエンジンとして使用して、自然言語の理解、推論、計画、レスポンスを生成し、どのように進めるか、どのツールを使用するかを動的に決定します。これにより、柔軟で言語中心のタスクに最適です。LLM エージェントについて詳しくは、こちらをご覧ください。
agent.py
のコードは次のように変更します。
from google.adk.agents import Agent
root_agent = Agent(
model='gemini-2.0-flash-001',
name='hotel_agent',
description='A helpful assistant that answers questions about a specific city.',
instruction='Answer user questions about a specific city to the best of your knowledge. Do not answer questions outside of this.',
)
エージェント アプリをローカルでテストする
既存のターミナル ウィンドウで、次のコマンドを実行します。hotel-agent-app
フォルダを含む親フォルダ (my-agents)
にいることを確認します。
adk web
実行例を以下に示します。
INFO: Started server process [5015]
INFO: Waiting for application startup.
+-----------------------------------------------------------------------------+
| ADK Web Server started |
| |
| For local testing, access at http://localhost:8000. |
+-----------------------------------------------------------------------------+
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
最後のリンクをクリックすると、エージェントをテストするためのウェブ コンソールが開きます。ブラウザに次のように表示されます。
左上に、hotel-agent-app が識別されていることがわかります。これで、エージェントとの会話を開始できます。都市に関するいくつかのプロンプトを用意します。会話の例を次に示します。
Cloud Shell ターミナルで実行中のプロセスをシャットダウンできます(Ctrl-C)。
エージェントをテストする別の方法として、my-agents
フォルダから次の adk run
コマンドを使用することもできます。
adk run hotel-agent-app
このコマンドを試すと、コマンドライン(ターミナル)でエージェントと会話できます。「exit
」と入力して会話を閉じます。
7. エージェントとツールを接続する
これで、エージェントを作成してローカルでテストする方法がわかりました。このエージェントをツールに接続します。ADK のコンテキストでは、ツールは AI エージェントに提供される特定の機能を表します。これにより、エージェントはコアとなるテキスト生成機能と推論機能を超えて、アクションを実行し、外部とやり取りできるようになります。
この例では、データベース向け MCP ツールボックスで構成したツールをエージェントに装備します。
agent.py
ファイルを次のコードで変更します。
from google.adk.agents import Agent
from toolbox_core import ToolboxSyncClient
toolbox = ToolboxSyncClient("http://127.0.0.1:5000")
# Load single tool
# tools = toolbox.load_tool('search-hotels-by-location')
# Load all the tools
tools = toolbox.load_toolset('my_first_toolset')
root_agent = Agent(
name="hotel_agent",
model="gemini-2.0-flash",
description=(
"Agent to answer questions about hotels in a city or hotels by name."
),
instruction=(
"You are a helpful agent who can answer user questions about the hotels in a specific city or hotels by name. Use the tools to answer the question"
),
tools=tools,
)
これで、MCP Toolbox for Databases で構成された PostgreSQL データベースから実際のデータを取得するエージェントをテストできます。
手順は次のとおりです。
Cloud Shell のターミナルで、データベース用の MCP ツールボックスを起動します。前述のテストでローカルのポート 5000 ですでに実行されている可能性があります。起動していない場合は、mcp-toolbox
フォルダから次のコマンドを実行してサーバーを起動します。
./toolbox --tools_file "tools.yaml"
サーバーがデータソースに接続し、ツールセットとツールを読み込んだことを示す出力が表示されれば理想的です。出力例を次に示します。
./toolbox --tools-file "tools.yaml"
2025-04-23T14:32:29.564903079Z INFO "Initialized 1 sources."
2025-04-23T14:32:29.565009291Z INFO "Initialized 0 authServices."
2025-04-23T14:32:29.565070176Z INFO "Initialized 2 tools."
2025-04-23T14:32:29.565120847Z INFO "Initialized 2 toolsets."
2025-04-23T14:32:29.565510068Z INFO "Server ready to serve!"
MCP サーバーが正常に起動したら、別のターミナルで、前述のように adk run
(my-agents
フォルダ内)コマンドを使用してエージェントを起動します。必要に応じて、adk web
コマンドを使用することもできます。
$ adk run hotel-agent-app/
Log setup complete: /tmp/agents_log/agent.20250423_170001.log
To access latest log: tail -F /tmp/agents_log/agent.latest.log
Running agent hotel_agent, type exit to exit.
user: what can you do for me?
[hotel_agent]: I can help you find hotels in a specific city or search for hotels by name.
user: I would like to search for hotels
[hotel_agent]: Great, do you have a specific city or hotel name in mind?
user: Yes a specific city
[hotel_agent]: Great, which city are you interested in?
user: Basel
[hotel_agent]: OK. I found three hotels in Basel: Hilton Basel, Hyatt Regency Basel, and Holiday Inn Basel.
エージェントが、データベース向け MCP ツールボックスで構成した 2 つのツール(search-hotels-by-name
と search-hotels-by-location
)を使用して、正しいオプションを提供していることに注目してください。これにより、PostgreSQL インスタンス データベースからデータをシームレスに取得し、それに応じてレスポンスをフォーマットできます。
これで、エージェント開発キット(ADK)を使用して構築し、データベース向け MCP ツールボックスで構成したツールを活用したホテル エージェントのローカル開発とテストが完了しました。
8. (省略可)データベース向け MCP ツールボックスとエージェントを Cloud Run にデプロイする
前のセクションでは、Cloud Shell ターミナルを使用して MCP Toolbox サーバーを起動し、エージェントでツールをテストしました。これは、Cloud Shell 環境でローカルに実行されていました。
MCP ツールボックス サーバーとエージェントの両方を、これらのアプリケーションをホストできる Google Cloud サービスにデプロイすることもできます。
Cloud Run で MCP ツールボックス サーバーをホストする
まず、MCP ツールボックス サーバーを Cloud Run でホストします。これにより、他のアプリケーションやエージェント アプリケーションと統合できるパブリック エンドポイントが作成されます。Cloud Run でホストする手順については、こちらをご覧ください。主な手順は次のとおりです。
新しい Cloud Shell ターミナルを起動するか、既存の Cloud Shell ターミナルを使用します。toolbox
バイナリと tools.yaml
が存在する mcp-toolbox
フォルダに移動します。
次のコマンドを実行します(各コマンドの説明は後述します)。
PROJECT_ID
変数を Google Cloud プロジェクト ID を指すように設定します。
export PROJECT_ID="YOUR_GOOGLE_CLOUD_PROJECT_ID"
次に、プロジェクトで次の Google Cloud サービスが有効になっていることを確認します。
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
iam.googleapis.com \
secretmanager.googleapis.com
Google Cloud Run にデプロイする Toolbox サービスの ID として機能する別のサービス アカウントを作成しましょう。また、このサービス アカウントに適切なロール(Secret Manager にアクセスして Cloud SQL と通信する機能など)が付与されていることを確認します。
gcloud iam service-accounts create toolbox-identity
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com \
--role roles/secretmanager.secretAccessor
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:toolbox-identity@$PROJECT_ID.iam.gserviceaccount.com \
--role roles/cloudsql.client
tools.yaml
ファイルをシークレットとしてアップロードします。Cloud Run に Toolbox をインストールする必要があるため、Toolbox に最新のコンテナ イメージを使用し、IMAGE 変数に設定します。
gcloud secrets create tools --data-file=tools.yaml
export IMAGE=us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest
Cloud Run へのデプロイ コマンドの最後のステップは次のとおりです。
gcloud run deploy toolbox \
--image $IMAGE \
--service-account toolbox-identity \
--region us-central1 \
--set-secrets "/app/tools.yaml=tools:latest" \
--args="--tools_file=/app/tools.yaml","--address=0.0.0.0","--port=8080" \
--allow-unauthenticated
これにより、構成済みの tools.yaml
を使用して Toolbox サーバーを Cloud Run にデプロイするプロセスが開始されます。デプロイが正常に完了すると、次のようなメッセージが表示されます。
Deploying container to Cloud Run service [toolbox] in project [YOUR_PROJECT_ID] region [us-central1]
OK Deploying new service... Done.
OK Creating Revision...
OK Routing traffic...
OK Setting IAM Policy...
Done.
Service [toolbox] revision [toolbox-00001-zsk] has been deployed and is serving 100 percent of traffic.
Service URL: https://toolbox-<SOME_ID>.us-central1.run.app
上記の Service URL
にブラウザでアクセスできるようになりました。前に表示された「Hello World」というメッセージが表示されます。また、次の URL にアクセスして、利用可能なツールを確認することもできます。
SERVICE URL/api/toolset
Google Cloud コンソールから Cloud Run にアクセスすると、Cloud Run のサービスリストに Toolbox サービスが表示されます。
注: Hotel Agent をローカルで実行し、新しくデプロイされた Cloud Run サービスに接続する場合は、my-agents/hotel-agent-app/agent.py
ファイルに 1 つの変更を加えるだけで済みます。
以下ではなく、
toolbox = ToolboxSyncClient("http://127.0.0.1:5000")
次のように、Cloud Run サービスの Service URL に変更します。
toolbox = ToolboxSyncClient("CLOUD_RUN_SERVICE_URL")
前述のように、adk run
または adk web
を使用してエージェント アプリケーションをテストします。
Cloud Run にホテル エージェント アプリをデプロイする
まず、上記の手順に沿って my-agents/hotel-agent-app/agent.py
を変更し、ローカルホストではなく Cloud Run で実行されている Toolbox サービス URL を参照するようにします。
新しい Cloud Shell ターミナルまたは既存のターミナル セッションで、前に設定した正しい Python 仮想環境にいることを確認します。
まず、my-agents/hotel-agent-app
フォルダに requirements.txt ファイルを作成します。
google-adk
toolbox-core
my-agents
フォルダに移動し、まず次の環境変数を設定します。
export GOOGLE_CLOUD_PROJECT=YOUR_GOOGLE_CLOUD_PROJECT_ID
export GOOGLE_CLOUD_LOCATION=us-central1
export AGENT_PATH="hotel-agent-app/"
export SERVICE_NAME="hotels-service"
export APP_NAME="hotels-app"
export GOOGLE_GENAI_USE_VERTEXAI=True
最後に、次の adk deploy
cloud_run コマンドを使用して、エージェント アプリケーションを Cloud Run にデプロイします。サービスへの未認証の呼び出しを許可するよう求められた場合は、今のところ値として「y」を指定してください。
adk deploy cloud_run \
--project=$GOOGLE_CLOUD_PROJECT \
--region=$GOOGLE_CLOUD_LOCATION \
--service_name=$SERVICE_NAME \
--app_name=$APP_NAME \
--with_ui \
$AGENT_PATH
これにより、Hotel Agent アプリケーションを Cloud Run にデプロイするプロセスが開始されます。ソースがアップロードされ、Docker コンテナにパッケージ化されて Artifact Registry に push され、Cloud Run にサービスがデプロイされます。処理には数分かかることがありますので、少々お待ちください。
次のようなメッセージが表示されます。
Start generating Cloud Run source files in /tmp/cloud_run_deploy_src/20250424_045623
Copying agent source code...
Copying agent source code complete.
Creating Dockerfile...
Creating Dockerfile complete: /tmp/cloud_run_deploy_src/20250424_045623/Dockerfile
Deploying to Cloud Run...
Building using Dockerfile and deploying container to Cloud Run service [hotels-service] in project [YOUR_GOOGLE_CLOUD_PROJECT] region [us-central1]
| Building and deploying... Uploading sources.
| Uploading sources...
OK Building and deploying... Done.
OK Uploading sources...
OK Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds;region=us-central1/b02f5a74-6da6-4367-aaba-0c8aa098edf5?project=415458962931].
OK Creating Revision...
OK Routing traffic...
Done.
Service [hotels-service] revision [hotels-service-00002-cpm] has been deployed and is serving 100 percent of traffic.
Service URL: https://hotels-service-<SOME_ID>.us-central1.run.app
Cleaning up the temp folder: /tmp/cloud_run_deploy_src/20250424_045623
デプロイが成功すると、Service URL の値が提供されます。この URL にブラウザでアクセスすると、先ほどローカル設定で確認したように、ホテル エージェントとチャットできる同じウェブ アプリケーションが表示されます。