Agent 365 CLIを使って、Google Cloud Run上で動作するAgent 365エージェントの構築、ホスト、登録、公開方法を学びましょう。 Microsoft EntraとGraph はエージェント ID、アクセス許可、ブループリントを提供し、Google Cloud Run はランタイムを提供します。
必要なのは、AWS エンドポイントの背後にあるコードをエージェントにポイントすることだけです。この追加手順は、 Azure 以外のホスティング用に構成 してから、 Agent 365 開発の開始以降のすべての手順に従う必要があります。
目標
"コントロール プレーン" としてエージェント 365 とMicrosoft 365を使用する方法について説明します。
- Google Cloud Run にエージェント ランタイムをデプロイする
- Azure以外のホスティング用に
a365.config.jsonを構成する - Entra IDでエージェントブループリントを作成する
- OAuth2 + 継承可能なアクセス許可を構成する
- Bot FrameworkのメッセージングエンドポイントをGCPに登録する。
- エージェント識別子 + エージェントユーザーを作成する
- Microsoft 365 アプリ サーフェイスに発行する
- エンドツーエンドの相互作用テスト
[前提条件]
開始する前に、次のAzure/Microsoft 365、Google Cloud Platform (GCP)、およびローカル環境の前提条件が満たされていることを確認します。
Azure/Microsoft 365の前提条件
Microsoft Entra テナントへのアクセスを確認し、次のツールをインストールして ID、ブループリントを作成し、エージェントを登録します。
Microsoft Entraテナントには次の要素が含まれています:
- アプリケーションおよびエージェントブループリントを作成する権限または役割(グローバル管理者または同等のもの)
- Microsoft Agent 365 に早期にアクセスするには、Frontier プレビュー プログラムの一部である必要があります。
- エージェント ユーザーが使用できる少なくとも 1 つのMicrosoft 365 ライセンス
GCPの前提条件
GCPプロジェクトの作成
gcloud SDK のインストールと認証
gcloud auth login gcloud config set project <GCP_PROJECT_ID> gcloud config set run/region us-central1 # or your preferred region
地域開発環境の前提条件
コード エディター: 選択したコード エディター。 Visual Studio Code をお勧めします。
(任意)Node.js。 エージェントにはどんな言語でも使えます。 この記事では、以下のステップでノード18+を使用します。
LLM APIアクセス:エージェントの設定や希望するモデルプロバイダーに基づいて適切なサービスを選択してください:
- OpenAI API キー: OpenAI API キーを取得します
- Azure OpenAI: Azure OpenAI リソースを作成してデプロイします API キーとエンドポイントを取得します
エージェント 365 エージェントを作成して Cloud Run にデプロイする
この例では、次の最小限のエージェント 365 エージェントを使用します。
- GETへの応答
/ - POST上でボットフレームワークの活動を受け入れる
/api/messages - Agent 365 SDK 経由で JWT 認証を使用する
- わかりやすくするために、1 つの
index.jsファイル内のすべてのコードが含まれています
プロジェクトを作成
以下の手順に従って、Cloud Run上で動作しBot Frameworkのアクティビティを受け入れる最小限の Node.js エージェントをスキャフォールドします。
プロジェクトディレクトリを作成する
mkdir gcp-a365-agent cd gcp-a365-agentノードプロジェクトの初期化
npm init -y npm install express @microsoft/agents-hosting dotenvindex.jsの作成// Load environment variables from .env file (for local development) require('dotenv').config(); const { CloudAdapter, Application, authorizeJWT, loadAuthConfigFromEnv } = require('@microsoft/agents-hosting'); const express = require('express'); // Loads clientId, clientSecret, tenantId from environment variables // These map to your Agent Blueprint App Registration in Entra ID: // clientId = Blueprint Application (client) ID // clientSecret = Blueprint client secret value // tenantId = Your Microsoft Entra tenant ID const authConfig = loadAuthConfigFromEnv(); // Pass authConfig to adapter so outbound replies can authenticate const adapter = new CloudAdapter(authConfig); const agentApplication = new Application({ adapter }); // Handle incoming messages agentApplication.onMessage(async (context, next) => { await context.sendActivity(`You said: ${context.activity.text}`); await next(); }); // Handle conversation updates agentApplication.onConversationUpdate(async (context, next) => { if (context.activity.membersAdded) { for (const member of context.activity.membersAdded) { if (member.id !== context.activity.recipient.id) { await context.sendActivity('Welcome! This agent is running on GCP.'); } } } await next(); }); // Required: handle agentLifecycle events sent by Agent 365 platform // Without this handler, the SDK throws on first conversation initiation agentApplication.on('agentLifecycle', async (context, next) => { await next(); // acknowledge silently — do NOT call sendActivity here }); const server = express(); server.use(express.json()); // Health check — no auth required server.get('/', (req, res) => res.status(200).send('GCP Agent is running.')); // JWT validation applied only to /api/messages // Bot Framework Service sends a Bearer token signed by botframework.com // This is required even on GCP — the control plane is still Microsoft server.post('/api/messages', authorizeJWT(authConfig), (req, res) => { adapter.process(req, res, async (context) => { await agentApplication.run(context); }); }); const port = process.env.PORT || 8080; server.listen(port, () => console.log(`Agent listening on port ${port}`));
Google Cloud Runへのデプロイ
gcloud run deployを使用して、クラウド実行でサービスをビルドして実行します。 デプロイが完了したら、 messagingEndpointのパブリック URL を書き留めます。
以下のコマンドを使って、プロジェクトをGoogle Cloud Runにデプロイしてください:
gcloud run deploy gcp-a365-agent ` --source . ` --region us-central1 ` --platform managed ` --allow-unauthenticated終わったら、終点を記入してください:
https://gcp-a365-agent-XXXX-uc.run.appこのURL
messagingEndpointは、次のステップでAgent 365 Dev Tools CLIで使用されるURLです。
非Azure ホスティング用に構成する
Cloud Run プロジェクト フォルダーに手動で a365.config.json を作成します。
{
"tenantId": "YOUR_TENANT_ID",
"environment": "prod",
"messagingEndpoint": "https://gcp-a365-agent-XXXX-uc.run.app/api/messages",
"agentIdentityDisplayName": "MyGcpAgent Identity",
"agentBlueprintDisplayName": "MyGcpAgent Blueprint",
"agentUserDisplayName": "MyGcpAgent User",
"agentUserPrincipalName": "mygcpagent@testTenant.onmicrosoft.com",
"agentUserUsageLocation": "US",
"managerEmail": "myManager@testTenant.onmicrosoft.com",
"deploymentProjectPath": ".",
"agentDescription": "GCP-hosted Agent 365 Agent"
}
以下の表は重要な構成フィールドとその目的をまとめたものです。
| フィールド | 意味 |
|---|---|
messagingEndpoint |
Cloud Run の URL + /api/messages |
deploymentProjectPath |
スタンプ .env 行われる場所 |
ビルドエージェント365エージェント
エージェント コードを GCP エンドポイントにデプロイした後、 エージェント 365 開発ライフサイクル の残りの手順に従って、Agent 365 エージェントのセットアップを完了します。 通常、このプロセスには次のものが含まれます。
- Microsoft Entra IDでのエージェント ID の作成
- Bot Framework メッセージング エンドポイントの登録
- エージェント ユーザーの作成
- Microsoft 365 サーフェスへのパブリッシュ
エージェント 365 CLI は、 a365.config.json 構成に基づいて、これらの手順の大部分を自動的に処理します。
エージェントをエンドツーエンドで検証してください
これらのチェックを使用して、GCP でホストされるエージェントに到達可能であることを確認し、Bot Framework アクティビティを受信し、エージェント 365 サーフェス全体で正しく応答します。
Cloud Runの接続性を確認する
GETからmessagingEndpointリクエストをa365.config.jsonの値に送信します。
curl https://gcp-a365-agent-XXXX.run.app/
対応機関には以下を含めるべきです:
GCP Agent is running.
Cloud Runログでボットフレームワークのメッセージが届くか確認してください
Google Cloud Log Explorerを確認するか、以下を実行します:
gcloud run services logs read gcp-a365-agent --region <your region> --limit 50
メッセージがエージェントにヒットすると、エージェント 365 SDK を介してサーバーがアクティビティを受信して処理したことを示すログ エントリが表示されます。
エージェント365の表面からの試験剤
環境に応じて、次を使用します。
- エージェント プレイグラウンド
- Teams(公開された場合)
- エージェント・シェル
これでメッセージを送信したり、Cloud Runのログを確認したりできます。 詳細については、「Microsoft Agent 365 SDK を使用してエージェントをテストする方法と、Agents Playground テスト ツールを使用してエージェントの機能を検証する方法を参照してください。
開発者のワークフロー
セットアップが完了したら、反復開発のワークフローに従います:
ローカルでのテスト(任意)
Cloud Run にデプロイする前にエージェントをローカルでテストするには、
.envファイルに正しい資格情報が含まれていることを確認します。# Start the agent locally node index.jsあなたのエージェントは
http://localhost:8080で利用可能です。 ヘルスエンドポイントをテストできます。curl http://localhost:8080/コードを変更する
index.jsを編集し、変更を保存します。Google Cloud Runへの再デプロイ
gcloud run deploy gcp-a365-agent --source .テストと監視
Agent 365でサーフェスをテストし、Google Cloud Runのログを監視してください。
Troubleshooting
このセクションでは、Google Cloud Run で Agent 365 エージェントをデプロイして実行するときの一般的な問題を診断します。 これは、接続、構成、ライセンスの問題に対する修正プログラムをすばやく適用するのに役立ちます。
ヒント
Agent 365トラブルシューティングガイドには、Agent 365 の開発ライフサイクルの各段階に対応した高レベルのトラブルシューティング推奨事項、ベストプラクティス、トラブルシューティングコンテンツへのリンクが含まれています。
メッセージング エンドポイントに到達しない
以下の詳細をご確認ください:
- 終点は正確に次の通りです:
https://<cloud-run-url>/api/messages - Cloud Runは認証されていないアクセスを許可します
- ファイアウォールルールは使いません
ライセンス譲渡の失敗
有効なMicrosoft 365フロンティア ライセンスを手動で割り当てるか、サポートされている場合はライセンスのないユーザー パスを使用します。