Google Cloud Platform(GCP)で展開したAgent 365エージェントを構築する

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、ブループリントを作成し、エージェントを登録します。

GCPの前提条件

  • GCPプロジェクトの作成

  • Cloud Run API 有効

  • 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アクセス:エージェントの設定や希望するモデルプロバイダーに基づいて適切なサービスを選択してください:

エージェント 365 エージェントを作成して Cloud Run にデプロイする

この例では、次の最小限のエージェント 365 エージェントを使用します。

  • GETへの応答 /
  • POST上でボットフレームワークの活動を受け入れる /api/messages
  • Agent 365 SDK 経由で JWT 認証を使用する
  • わかりやすくするために、1 つの index.js ファイル内のすべてのコードが含まれています

プロジェクトを作成

以下の手順に従って、Cloud Run上で動作しBot Frameworkのアクティビティを受け入れる最小限の Node.js エージェントをスキャフォールドします。

  1. プロジェクトディレクトリを作成する

    mkdir gcp-a365-agent
    cd gcp-a365-agent
    
  2. ノードプロジェクトの初期化

    npm init -y
    npm install express @microsoft/agents-hosting dotenv
    
  3. index.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 を書き留めます。

  1. 以下のコマンドを使って、プロジェクトをGoogle Cloud Runにデプロイしてください:

    gcloud run deploy gcp-a365-agent `
    --source . `
    --region us-central1 `
    --platform managed `
    --allow-unauthenticated
    
  2. 終わったら、終点を記入してください:

    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 テスト ツールを使用してエージェントの機能を検証する方法を参照してください。

開発者のワークフロー

セットアップが完了したら、反復開発のワークフローに従います:

  1. ローカルでのテスト(任意)

    Cloud Run にデプロイする前にエージェントをローカルでテストするには、 .env ファイルに正しい資格情報が含まれていることを確認します。

    # Start the agent locally
    node index.js
    

    あなたのエージェントはhttp://localhost:8080で利用可能です。 ヘルスエンドポイントをテストできます。

    curl http://localhost:8080/
    
  2. コードを変更する

    index.jsを編集し、変更を保存します。

  3. Google Cloud Runへの再デプロイ

    gcloud run deploy gcp-a365-agent --source .
    
  4. テストと監視

    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フロンティア ライセンスを手動で割り当てるか、サポートされている場合はライセンスのないユーザー パスを使用します。