Google Agent Development Kit (ADK) でCloud Runにデプロイする

Googleが先日、Agent Development Kit（ADK）を公開しました。

https://developers.googleblog.com/en/agent-development-kit-easy-to-build-multi-agent-applications/

これを使うとLLMを用いたAIエージェントを簡単に開発できます。OpenAI Agents SDKなどの類似の製品との違いは、WebのUIがデフォルトで付いていたり、Google Cloudとの親和性にあるようです。

本稿ではADKを使って開発したエージェントをCloud Runにデプロイしてみました。そもそもCloud Runもシンプルな製品ですが、ADKからデプロイするのはかなり簡単になっています。

## 環境
- uv 0.6.6 
- Python 3.13.2
- google-adk>=0.1.0

### ディレクトリ構成（抜粋）

```
├── mise.toml
├── pyproject.toml
├── src
│   └── google_adk
│        ├── __init__.py
│        └── agent.py
└── uv.lock
```

## AIエージェントの構築
本稿では、Geminiに現在時刻を取得する関数をツールを与えて、「いま何時？」と質問したら答えてくれるような簡単なエージェントを構築します。だいたい[Agent Development Kit公式ドキュメントのクイックスタート](https://google.github.io/adk-docs/get-started/quickstart/)に書いてあるとおりです。

まず、`$ uv add google-adk`みたいな感じでADKをインストールします。

最初に`src/google_adk/__init__.py`を作成します。
```python:src/google_adk/__init__.py
from . import agent
```

次に、`src/google_adk/agent.py`を作成します。読めば分かると思いますが、これがLLMを呼び出すエージェントの本体と、ツールのプログラムの本体です。簡単ですね。

```python:src/google_adk/agent.py
from datetime import datetime
from google import adk

def get_time() -> dict:
    """現在時刻を取得する関数"""
    return {"status": "success", "report": datetime.now().strftime("%Y-%m-%d %H:%M:%S")}

root_agent = adk.Agent(
    name="アシスタント",
    model="gemini-2.0-flash-exp",
    description=(
        "優秀なアシスタント"
    ),
    instruction=(
        "あなたは優秀なアシスタントです"
    ),
    tools=[get_time],
)
```

実行します。

```
$ uv run adk web ./src
```

ADKにはWeb画面が付いています。 http://localhost:8000/ にアクセスし、エージェントを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50391/834abe66-a68d-4868-b95a-e0f991394d92.png)

「いま何時？」と聞いてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50391/c39805e9-36cc-4f48-b66e-6ccd45781292.png)

無事に答えてくれました。

## ADKで開発したエージェントのCloud Runへのデプロイ

ADKで作ったエージェントは、そのままGoogle CloudのサーバレスサービスであるCloud Runにデプロイできます。`$ adk deploy cloud_run`というコマンドが用意されていて、これを実行すると裏側でDockerfileの作成やビルド済コンテナのArtifact Registryへの登録などが自動で良い感じに行われて、Web上にデプロイされます。

[Cloud Run \- Agent Development Kit](https://google.github.io/adk-docs/deploy/cloud-run/)

```
$ uv run adk deploy cloud_run \
  --project=<GoogleCloudプロジェクト名> \
  --region=us-central1 \
  --service_name=<CloudRunサービス名> \
  --with_ui \
  ./src/google_adk
```

注意点として、指定したモデルが利用できるリージョンにデプロイしないといけないようです。`gemini-2.0-flash-001`は日本含むアジアリージョンでまだ使えないので注意が必要です。本稿では`us-central1`にしています。詳細は下記で確認できます。

[Vertex AI の生成 AI のロケーション  \|  Generative AI on Vertex AI  \|  Google Cloud](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/locations?hl=ja#asia-pacific)

これだけでWeb上に公開してアクセスできるようになりました。Cloud Runは放っておくと勝手にゼロスケールしてインスタンス料金が掛からなくなるので、簡単なPoCなどに便利だと思います。

### 余談: Cloud Run用Identity-Aware Proxyでアクセス制限
Cloud Runにアクセス制限を掛ける方法はいくつかありますが、Google Cloudのプロジェクトが[組織に所属](https://cloud.google.com/resource-manager/docs/project-migration?hl=ja)していれば、先日プレビューになったCloud Run用Identity-Aware Proxyでアクセス制限ができます。

[Cloud Run 用に Identity\-Aware Proxy を構成する  \|  Cloud Run Documentation  \|  Google Cloud](https://cloud.google.com/run/docs/securing/identity-aware-proxy-cloud-run?hl=ja)

デプロイしたCloud Runサービスの「セキュリティ」タブから「Identity-Aware Proxy」を有効にするだけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50391/e8b3ca44-2a9f-4c8e-b8d3-b42f90d12eaf.png)

※Google Cloudプロジェクトが組織に所属していないと、このIdentity-Aware Proxyの項目が表示されません。また表示されていても、どうやら組織に所属してから使えるようになるまで1日程度の時間がかかるようです。

うまく行くと、アクセスした時にログイン画面が表示されるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50391/b4a2ef07-0350-4c00-99e4-f44ffb8c46aa.png)

簡単にアクセス制限が設定できるので、組織内でのPoCなどにも使えるのではないかと思います。