Teams アプリをコンテナー サービスにデプロイする
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 に基づいています。 他のインターフェイスを使用している場合は、必要に応じてコマンドを更新します。
Azure Container Apps へのデプロイ
Azure Container Apps は、コンテナー化されたアプリケーションをクラウドで実行できるフル マネージド サービスです。 すべてのネイティブ Kubernetes API とクラスター管理に直接アクセスする必要がなく、ベスト プラクティスに基づくフル マネージド エクスペリエンスを好む場合に最適です。
サンプル アプリケーションの助けを借りて、Teams Toolkit でプロビジョニングコマンドとデプロイ コマンドを実行できます。 Teams 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
Teams Toolkit を使用してリソースをプロビジョニングする
Teams Toolkit の provision
コマンドを使用して、ボット機能を備えた Teams アプリを作成し、Azure Bot Serviceを組み込み、認証用のMicrosoft Entra IDを追加できます。
Teams Toolkit でリソースをプロビジョニングするには、次の手順に従います。
前にダウンロードしたサンプル アプリを開きます。
env/.env.${envName}
ファイルに移動し、の値を FQDN で更新します。teamsapp.yml
ファイルに移動し、次のarm/deploy
アクションを更新して、provision
コマンドの実行中に Teams 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
Teams Toolkit で
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 $NAMESPACE
Visual 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 シークレットを作成し、そのシークレットをコンテナーのランタイム構成に統合します。
Teams Toolkit を使用してリソースをプロビジョニングする
Teams Toolkit の provision
コマンドを使用して、ボット機能を備えた Teams アプリを作成し、Azure Bot Serviceを組み込み、認証用のMicrosoft Entra IDを追加できます。
Teams Toolkit でリソースをプロビジョニングするには、次の手順に従います。
前にダウンロードしたサンプル アプリを開きます。
env/.env.${envName}
ファイルに移動し、の値を FQDN で更新します。teamsapp.yml
ファイルに移動し、次のarm/deploy
アクションを更新して、provision
コマンドの実行中に Teams 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
teamsapp.yml
ファイルで、プロビジョニング ステージ中にbotFramework/create
アクションを更新します。 このアクションにより、Teams 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: msteams
Azure リソースは必要ないので、
teamsapp.yml
ファイル内のarm/deploy
アクションを削除できます。Teams Toolkit で
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 $NAMESPACE
Visual 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
Teams Toolkit を使用してリソースをプロビジョニングする
Teams Toolkit の provision
コマンドを使用して、タブ機能を備えた Teams アプリを作成し、Azure Bot Serviceを組み込み、認証用のMicrosoft Entra IDを追加できます。
Teams Toolkit でリソースをプロビジョニングするには、次の手順に従います。
前にダウンロードしたサンプル アプリを開きます。
env/.env.${envName}
ファイルに移動し、の値を FQDN で更新します。teamsapp.yml
ファイルに移動し、追加の Azure リソースは必要がないため、arm/deploy
アクションを削除します。Teams Toolkit で
provision
コマンドを実行します。Teams 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 $NAMESPACE
Visual Studio Code に移動します。
[ 実行とデバッグ ] パネルで、[ リモートの起動 ] 構成を選択します。
AKS にデプロイされた Teams ボット アプリケーションをプレビューするには、[ デバッグの開始 (F5)] を選択します。
Platform Docs