Teams ボットまたはタブ アプリは、Azure Container Apps、Azure Kubernetes Service (AKS)、またはオンプレミスの Kubernetes クラスターにデプロイできます。
前提条件
サンプルの Teams ボットまたはサンプルの Teams タブ アプリをダウンロードします。このアプリでは、Azure Container Apps 開発にすぐに使用できるエクスペリエンスが提供されます。 いくつかの構成を変更し、AKS またはオンプレミスの Kubernetes クラスターにデプロイできます。
作業を開始する前に、次のツールがあることを確認してください。
Azure アカウント。
Azure Container Apps または AKS デプロイ用の Azure コマンド ライン インターフェイス (CLI)。
注:
- この記事のコマンドは Git Bash に基づいています。 他のインターフェイスを使用している場合は、必要に応じてコマンドを更新します。
- コンテナー サービスにデプロイする場合は、「 JavaScript エージェントでの認証の構成」の説明に従って、必要な環境変数を構成してください。
Azure Container Apps へのデプロイ
Azure Container Apps は、コンテナー化されたアプリケーションをクラウドで実行できるフル マネージド サービスです。 すべてのネイティブ Kubernetes API とクラスター管理に直接アクセスする必要がなく、ベスト プラクティスに基づくフル マネージド エクスペリエンスを好む場合に最適です。
サンプル アプリケーションの助けを借りて、Microsoft 365 Agents Toolkit (以前は Teams Toolkit と呼ばれる) でコマンドのプロビジョニングと展開を実行できます。 Agents Toolkit では、Azure Container Registryと Azure Container Apps が自動的に作成され、アプリがコンテナー イメージに構築され、Azure Container Apps にデプロイされます。
provision コマンドは、次のリソースを作成して構成します。
- タブまたはボット機能を備えた Teams アプリ。
- コンテナー イメージをホストするAzure Container Registry。
- アプリをホストする Azure Container App 環境と Azure Container Apps。
- 認証用のMicrosoft Entra アプリ。
サンプル Teams ボットでは、provision コマンドによって、Teams クライアントと Azure Container Apps をチャネルするための Azure Bot Serviceも作成されます。
deploy コマンドは、次のアクションを実行します。
- コンテナー イメージにアプリをビルドします。
- コンテナー イメージをAzure Container Registryにプッシュします。
- Azure Container Apps にイメージをデプロイします。
Teams ボットをAzure Kubernetes Serviceにデプロイする
AKS は、Azure によって提供されるマネージド コンテナー オーケストレーション サービスです。 AKS を使用すると、Azure 内で Kubernetes エクスペリエンスを完全に管理できます。
アーキテクチャ
Teams バックエンド サーバーは、Azure Bot Serviceを介してボットと対話します。 このサービスでは、パブリック HTTPS エンドポイントを介してボットに到達できる必要があります。 セットアップするには、Kubernetes クラスターにイングレス コントローラーをデプロイし、TLS 証明書でセキュリティで保護します。
Microsoft Entra IDを使用して、Azure Bot Serviceを使用してボットを認証できます。 アプリ ID とパスワードを含む Kubernetes シークレットを作成し、そのシークレットをコンテナーのランタイム構成に統合します。
AKS での HTTPS によるイングレスのセットアップ
AKS がコンテナー イメージをホストするAzure Container Registryに接続されていることを確認します。 詳細については、「 Azure CLI の使用」を参照してください。
次のコマンドを実行して、イングレス コントローラーと証明書マネージャーをインストールします。
NAMESPACE=teams-bot helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update helm install ingress-nginx ingress-nginx/ingress-nginx --create-namespace --namespace $NAMESPACE \ --set controller.nodeSelector."kubernetes\.io/os"=linux \ --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \ --set controller.healthStatus=true \ --set controller.service.externalTrafficPolicy=Local \ --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz helm repo add jetstack https://charts.jetstack.io helm repo update helm install cert-manager jetstack/cert-manager --namespace $NAMESPACE --set installCRDs=true --set nodeSelector."kubernetes\.io/os"=linux注:
アン マネージド イングレス コントローラーの作成 に関するページの手順に従い、 証明書を暗号化して Tls を使用 して Kubernetes クラスターにイングレス証明書と TLS 証明書を設定することもできます。
次のコマンドを実行して、イングレス パブリック IP の DNS を更新し、イングレス エンドポイントを取得します。
> kubectl get services --namespace $NAMESPACE -w ingress-nginx-controller NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) ingress-nginx-controller LoadBalancer $CLUSTER_IP $EXTERNAL_IP 80:32514/TCP,443:32226/TCP > PUBLICIPID=$(az network public-ip list --query "[?ipAddress!=null]|[?contains(ipAddress, '$EXTERNAL_IP')].[id]" --output tsv) > az network public-ip update --ids $PUBLICIPID --dns-name $DNSLABEL > az network public-ip show --ids $PUBLICIPID --query "[dnsSettings.fqdn]" --output tsv $DNSLABEL.$REGION.cloudapp.azure.com
エージェント ツールキットを使用してリソースをプロビジョニングする
Agents Toolkit の provision コマンドを使用して、ボット機能を備えた Teams アプリを作成し、Azure Bot Serviceを組み込み、認証用のMicrosoft Entra IDを追加できます。
エージェント ツールキットを使用してリソースをプロビジョニングするには、次の手順に従います。
前にダウンロードしたサンプル アプリを開きます。
env/.env.${envName}ファイルに移動し、の値を FQDN で更新します。m365agents.ymlファイルに移動し、次のarm/deployアクションを更新して、provisionコマンドの実行中に Agents Toolkit によって Azure Bot Serviceがプロビジョニングされるようにします。- uses: arm/deploy with: subscriptionId: ${{AZURE_SUBSCRIPTION_ID}} resourceGroupName: ${{AZURE_RESOURCE_GROUP_NAME}} templates: - path: ./infra/botRegistration/azurebot.bicep parameters: ./infra/botRegistration/azurebot.parameters.json deploymentName: Create-resources-for-bot bicepCliVersion: v0.9.1エージェント ツールキットで
provisionコマンドを実行します。プロビジョニング後、
env/.env.${envName}ファイル内のBOT_IDと、env/.env.${envName}.userファイル内の暗号化されたSECRET_BOT_PASSWORDを見つけます。BOT_PASSWORDの実際の値を取得します。 [秘密の暗号化解除] 注釈を選択します。BOT_IDとBOT_PASSWORDを含む Kubernetes シークレットを作成するには、キー値ペアを./deploy/.env.dev-secretsファイルに保存し、次のコマンドを実行してシークレットをプロビジョニングします。kubectl create secret generic dev-secrets --from-env-file ./deploy/.env.dev-secrets -n $NAMESPACE
デプロイを適用する
サンプルには、参照用のデプロイ ファイル deploy/sso-bot.yamlが含まれています。
次のプレースホルダーを更新します。
<image>: イメージを更新します。 たとえば、「myacr.azurecr.io/sso-bot:latest」のように入力します。<hostname>: イングレス FQDN を更新します。
deploy/tab.yamlを適用するには、次のコマンドを実行します。kubectl apply -f deploy/sso-bot.yaml -n $NAMESPACEVisual Studio Code に移動します。
[ 実行とデバッグ ] パネルで、[ リモートの起動 ] 構成を選択します。
AKS にデプロイされた Teams ボット アプリケーションをプレビューするには、[ デバッグの開始 (F5)] を選択します。
オンプレミスの Kubernetes クラスターに Teams ボットをデプロイする
AKS に Teams ボットをデプロイするために使用する同様の手順に従って、さまざまなクラウド サービスから個人用 Kubernetes クラスターまたは Kubernetes サービスに Teams ボットをデプロイできます。
アーキテクチャ
Teams バックエンド サーバーは、Azure Bot Serviceを介してボットと対話します。 このサービスでは、パブリック HTTPS エンドポイントを介してボットに到達できる必要があります。 セットアップするには、Kubernetes クラスターにイングレス コントローラーをデプロイし、TLS 証明書でセキュリティで保護します。
Microsoft Entra IDを使用して、Azure Bot Serviceを使用してボットを認証できます。 アプリ ID とパスワードを含む Kubernetes シークレットを作成し、そのシークレットをコンテナーのランタイム構成に統合します。
エージェント ツールキットを使用してリソースをプロビジョニングする
Agents Toolkit の provision コマンドを使用して、ボット機能を備えた Teams アプリを作成し、Azure Bot Serviceを組み込み、認証用のMicrosoft Entra IDを追加できます。
エージェント ツールキットを使用してリソースをプロビジョニングするには、次の手順に従います。
前にダウンロードしたサンプル アプリを開きます。
env/.env.${envName}ファイルに移動し、の値を FQDN で更新します。m365agents.ymlファイルに移動し、次のarm/deployアクションを更新して、provisionコマンドの実行中に Agents Toolkit によって Azure Bot Serviceがプロビジョニングされるようにします。- uses: arm/deploy with: subscriptionId: ${{AZURE_SUBSCRIPTION_ID}} resourceGroupName: ${{AZURE_RESOURCE_GROUP_NAME}} templates: - path: ./infra/botRegistration/azurebot.bicep parameters: ./infra/botRegistration/azurebot.parameters.json deploymentName: Create-resources-for-bot bicepCliVersion: v0.9.1m365agents.ymlファイルで、プロビジョニング ステージ中にbotFramework/createアクションを更新します。 このアクションにより、Agents Toolkit は適切なメッセージング エンドポイントを使用してボットの登録を作成できます。注:
チャネル化には Azure Bot Serviceを使用することをお勧めします。 Azure アカウントを持っていなくても、Azure Bot Serviceを作成できない場合は、ボットの登録を作成できます。
- uses: botFramework/create with: botId: ${{BOT_ID}} name: <Bot display name> messagingEndpoint: https://${{BOT_DOMAIN}}/api/messages description: "" channels: - name: msteamsAzure リソースは必要ないので、
m365agents.ymlファイル内のarm/deployアクションを削除できます。エージェント ツールキットで
provisionコマンドを実行します。プロビジョニング後、
env/.env.${envName}ファイル内のBOT_IDと、env/.env.${envName}.userファイル内の暗号化されたSECRET_BOT_PASSWORDを見つけます。BOT_PASSWORDの実際の値を取得します。 [秘密の暗号化解除] 注釈を選択します。BOT_IDとBOT_PASSWORDを含む Kubernetes シークレットを作成するには、キー値ペアを./deploy/.env.dev-secretsファイルに保存し、次のコマンドを実行してシークレットをプロビジョニングします。kubectl create secret generic dev-secrets --from-env-file ./deploy/.env.dev-secrets -n $NAMESPACE
デプロイを適用する
このサンプルには、ガイダンス用のデプロイ ファイル deploy/sso-bot.yamlが含まれています。
次のプレースホルダーを更新します。
<image>: イメージを更新します。 たとえば、「myacr.azurecr.io/sso-bot:latest」のように入力します。<hostname>: イングレス FQDN を更新します。
deploy/tab.yamlを適用するには、次のコマンドを実行します。kubectl apply -f deploy/sso-bot.yaml -n $NAMESPACEVisual Studio Code に移動します。
[ 実行とデバッグ ] パネルで、[ リモートの起動 ] 構成を選択します。
AKS にデプロイされた Teams ボット アプリケーションをプレビューするには、[ デバッグの開始 (F5)] を選択します。
Teams タブ アプリを Kubernetes に展開する
AKS は、Azure によって提供されるマネージド コンテナー オーケストレーション サービスとして機能します。 AKS を使用すると、Azure 内で Kubernetes エクスペリエンスを完全に管理できます。
AKS への Teams タブ アプリのデプロイは、AKS への Web アプリのデプロイに似ています。 ただし、Teams タブ アプリには HTTPS 接続が必要であるため、AKS でドメインを所有し、TLS イングレスを設定する必要があります。
また、Teams タブ アプリを個人用の Kubernetes クラスターまたは異なるクラウド プラットフォーム上の Kubernetes サービスにデプロイすることもできます。 これには、Azure Kubernetes Serviceにデプロイするときに使用される手順と同様の手順が含まれます。
AKS での HTTPS によるイングレスのセットアップ
AKS が、コンテナー イメージをホストするAzure Container Registryに既に接続されていることを確認します。 詳細については、「 Azure CLI」を参照してください。
次のコマンドを実行して、イングレス コントローラーと証明書マネージャーをインストールします。
NAMESPACE=teams-tab helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update helm install ingress-nginx ingress-nginx/ingress-nginx --create-namespace --namespace $NAMESPACE \ --set controller.nodeSelector."kubernetes\.io/os"=linux \ --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \ --set controller.healthStatus=true \ --set controller.service.externalTrafficPolicy=Local \ --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz helm repo add jetstack https://charts.jetstack.io helm repo update helm install cert-manager jetstack/cert-manager --namespace $NAMESPACE --set installCRDs=true --set nodeSelector."kubernetes\.io/os"=linux注:
アン マネージド イングレス コントローラーの作成 に関するページの手順に従い、 証明書を暗号化して Tls を使用 して Kubernetes クラスターにイングレス証明書と TLS 証明書を設定することもできます。
次のコマンドを実行して、イングレス パブリック IP の DNS を更新し、イングレス エンドポイントを取得します。
> kubectl get services --namespace $NAMESPACE -w ingress-nginx-controller NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) ingress-nginx-controller LoadBalancer $CLUSTER_IP $EXTERNAL_IP 80:32514/TCP,443:32226/TCP > PUBLICIPID=$(az network public-ip list --query "[?ipAddress!=null]|[?contains(ipAddress, '$EXTERNAL_IP')].[id]" --output tsv) > az network public-ip update --ids $PUBLICIPID --dns-name $DNSLABEL > az network public-ip show --ids $PUBLICIPID --query "[dnsSettings.fqdn]" --output tsv $DNSLABEL.$REGION.cloudapp.azure.com
エージェント ツールキットを使用してリソースをプロビジョニングする
エージェント ツールキットの provision コマンドを使用して、タブ機能を備えた Teams アプリを作成し、Azure Bot Serviceを組み込み、認証用のMicrosoft Entra IDを追加できます。
エージェント ツールキットを使用してリソースをプロビジョニングするには、次の手順に従います。
前にダウンロードしたサンプル アプリを開きます。
env/.env.${envName}ファイルに移動し、の値を FQDN で更新します。m365agents.ymlファイルに移動し、追加の Azure リソースは必要がないため、arm/deployアクションを削除します。エージェント ツールキットで
provisionコマンドを実行します。Agents Toolkit を使用して、アプリ環境変数として設定する必要があるMicrosoft Entra IDを作成します。
プロビジョニング後、
env/.env.${envName}ファイル内のAAD_APP_CLIENT_IDと、env/.env.${envName}.userファイル内の暗号化されたSECRET_AAD_APP_CLIENT_SECRETを見つけます。SECRET_AAD_APP_CLIENT_SECRETの実際の値を取得します。 [秘密の暗号化解除] 注釈を選択します。
デプロイを適用する
サンプルには、参照用のデプロイ ファイル deploy/tab.yamlが含まれています。
次のプレースホルダーを更新します。
<tab-image>: イメージを更新します。 たとえば、「myacr.azurecr.io/tab:latest」のように入力します。<api-image>: API イメージを更新します。 API がない場合は、hello-world-apiサービスを削除し、yaml ファイルからデプロイします。<hostname>: イングレス FQDN を更新します。
deploy/tab.yamlを適用するには、次のコマンドを実行します。kubectl apply -f deploy/tab.yaml -n $NAMESPACEVisual Studio Code に移動します。
[ 実行とデバッグ ] パネルで、[ リモートの起動 ] 構成を選択します。
AKS にデプロイされた Teams ボット アプリケーションをプレビューするには、[ デバッグの開始 (F5)] を選択します。
Platform Docs