Bereitstellen der Teams-App im Containerdienst

Sie können einen Teams-Bot oder eine Registerkarten-App in einem Azure Container Apps, Azure Kubernetes Service (AKS) oder einem lokalen Kubernetes-Cluster bereitstellen.

Voraussetzungen

Laden Sie den Teams-Beispielbot oder die Teams-Registerkarten-Beispiel-App herunter, die eine sofort einsatzbereite Erfahrung für die Entwicklung von Azure Container Apps bietet. Sie können einige Konfigurationsänderungen vornehmen und in AKS oder einem lokalen Kubernetes-Cluster bereitstellen.

Bevor Sie beginnen, stellen Sie sicher, dass Sie über die folgenden Tools verfügen:

  • Azure-Konto.

  • Azure-Befehlszeilenschnittstellen (CLI) für Azure Container Apps oder AKS-Bereitstellung.

Hinweis

  • Die Befehle im Artikel basieren auf Git Bash. Wenn Sie eine andere Schnittstelle verwenden, aktualisieren Sie die Befehle nach Bedarf.
  • Stellen Sie bei der Bereitstellung in einem Containerdienst sicher, dass Sie die erforderlichen Umgebungsvariablen konfigurieren, wie unter Konfigurieren der Authentifizierung in einem JavaScript-Agent beschrieben.

Bereitstellen an Azure-Container-Apps

Azure Container Apps ist ein vollständig verwalteter Dienst, mit dem Sie containerisierte Anwendungen in der Cloud ausführen können. Dies ist eine ideale Wahl, wenn Sie keinen direkten Zugriff auf alle nativen Kubernetes-APIs und Clusterverwaltung benötigen und eine vollständig verwaltete Erfahrung bevorzugen, die auf bewährten Methoden basiert.

Mithilfe von Beispielanwendungen können Sie die Bereitstellungs- und Bereitstellungsbefehle im Microsoft 365 Agents Toolkit (früher als Teams Toolkit bezeichnet) ausführen. Agents Toolkit erstellt eine Azure Container Registry und Azure Container Apps für Sie, erstellt Ihre App in einem Containerimage und stellt sie in Azure Container Apps bereit.

Der provision Befehl erstellt und konfiguriert die folgenden Ressourcen:

  • Eine Teams-App mit Registerkarten- oder Botfunktion.
  • An Azure Container Registry zum Hosten Ihres Containerimages
  • Eine Azure Container App-Umgebung und eine Azure Container Apps zum Hosten Ihrer App.
  • Eine Microsoft Entra-App zur Authentifizierung.

Im Teams-Beispielbot erstellt der provision Befehl auch eine Azure Bot Service, um den Teams-Client und Azure Container-Apps zu kanalisieren.

Der deploy Befehl führt die folgenden Aktionen aus:

  • Erstellt die App in ein Containerimage.
  • Überträgt das Containerimage an Azure Container Registry.
  • Stellt das Image in Azure-Container-Apps bereit.

Bereitstellen eines Teams-Bots in Azure Kubernetes Service

AKS ist ein verwalteter Containerorchestrierungsdienst, der von Azure bereitgestellt wird. Mit AKS können Sie die Kubernetes-Erfahrung vollständig in Azure verwalten.

Architektur

Screenshot zeigt die Architektur des Teams-Bots zu Azure Kubernetes Service.

Der Teams-Back-End-Server interagiert über die Azure Bot Service mit Ihrem Bot. Dieser Dienst erfordert, dass Ihr Bot über einen öffentlichen HTTPS-Endpunkt erreichbar ist. Stellen Sie zum Einrichten einen Eingangscontroller auf Ihrem Kubernetes-Cluster bereit, und sichern Sie ihn mit einem TLS-Zertifikat.

Sie können Microsoft Entra ID verwenden, um Ihren Bot mit Azure Bot Service zu authentifizieren. Erstellen Sie ein Kubernetes-Geheimnis, das die App-ID und das Kennwort enthält, und integrieren Sie das Geheimnis in die Laufzeitkonfiguration Ihres Containers.

Einrichten von eingehendem Datenverkehr mit HTTPS auf AKS

  1. Stellen Sie sicher, dass Ihr AKS mit Ihrer Azure Container Registry verbunden ist, die Ihre Containerimages hostet. Weitere Informationen finden Sie unter Verwenden der Azure-Befehlszeilenschnittstelle.

  2. Führen Sie den folgenden Befehl aus, um den Eingangscontroller und den Zertifikat-Manager zu installieren:

    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
    

    Hinweis

    Sie können auch die Anweisungen unter Erstellen eines nicht verwalteten Eingangs-Controllers befolgen und TLS mit Let's Encrypt Zertifikaten verwenden , um Eingangs- und TLS-Zertifikate auf Ihrem Kubernetes-Cluster einzurichten.

  3. Führen Sie den folgenden Befehl aus, um den DNS-Namen für die öffentliche Eingangs-IP-Adresse zu aktualisieren und den Eingangsendpunkt abzurufen:

    > 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
    

Bereitstellen von Ressourcen mit Agents Toolkit

Sie können den provision Befehl im Agents-Toolkit verwenden, um eine Teams-App mit Botfunktion zu erstellen, die Azure Bot Service einzubinden und die Microsoft Entra ID für die Authentifizierung hinzuzufügen.

Gehen Sie folgendermaßen vor, um Ressourcen mit dem Agents Toolkit bereitzustellen:

  1. Öffnen Sie die Beispiel-App, die Sie zuvor heruntergeladen haben.

  2. Wechseln Sie zu der env/.env.${envName} Datei, und aktualisieren Sie den BOT_DOMAIN Wert mit Ihrem FQDN.

  3. Navigieren Sie zu der m365agents.yml Datei, und aktualisieren Sie die folgende arm/deploy Aktion, um sicherzustellen, dass Agents Toolkit während der Ausführung des provision Befehls eine Azure Bot Service bereitstellt:

    - 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
    
  4. Führen Sie den provision Befehl im Agents Toolkit aus.

  5. Suchen Sie nach der Bereitstellung nach der BOT_IDenv/.env.${envName} In-Datei und nach der verschlüsselten SECRET_BOT_PASSWORDenv/.env.${envName}.user In-Datei. Um den tatsächlichen Wert von BOT_PASSWORDzu erhalten. Wählen Sie die Anmerkung Geheimnis entschlüsseln aus.

  6. Um ein Kubernetes-Geheimnis zu erstellen, das das Schlüssel-Wert-Paar in der ./deploy/.env.dev-secrets Datei enthält BOT_IDBOT_PASSWORD, und führen Sie den folgenden Befehl aus, um das Geheimnis bereitzustellen:

    kubectl create secret generic dev-secrets --from-env-file ./deploy/.env.dev-secrets -n $NAMESPACE
    

Anwenden der Bereitstellung

Das Beispiel enthält eine Bereitstellungsdatei, deploy/sso-bot.yaml, die Sie als Referenz nutzen können.

  1. Aktualisieren Sie die folgenden Platzhalter:

    1. <image>: Aktualisieren Sie Ihr Image. Beispiel: myacr.azurecr.io/sso-bot:latest.

    2. <hostname>: Aktualisieren Sie Ihren Eingangs-FQDN.

  2. Führen Sie zum Anwenden deploy/tab.yamlden folgenden Befehl aus:

    kubectl apply -f deploy/sso-bot.yaml -n $NAMESPACE
    
  3. Wechseln Sie zu Visual Studio Code.

  4. Wählen Sie im Bereich Ausführen und Debuggen die Konfiguration Remote-starten aus.

  5. Um eine Vorschau der auf AKS bereitgestellten Teams-Bot-Anwendung anzuzeigen, wählen Sie Debuggen starten (F5) aus.

Bereitstellen eines Teams-Bots in einem lokalen Kubernetes-Cluster

Sie können einen Teams-Bot aus verschiedenen Clouddiensten für Ihren persönlichen Kubernetes-Cluster oder einen Kubernetes-Dienst bereitstellen, indem Sie ähnliche Schritte ausführen, die für die Bereitstellung des Teams-Bots auf AKS verwendet werden.

Architektur

Screenshot: Architektur des lokalen Kubernetes-Clusters

Der Teams-Back-End-Server interagiert über die Azure Bot Service mit Ihrem Bot. Dieser Dienst erfordert, dass Ihr Bot über einen öffentlichen HTTPS-Endpunkt erreichbar ist. Stellen Sie zum Einrichten einen Eingangscontroller auf Ihrem Kubernetes-Cluster bereit, und sichern Sie ihn mit einem TLS-Zertifikat.

Sie können Microsoft Entra ID verwenden, um Ihren Bot mit Azure Bot Service zu authentifizieren. Erstellen Sie ein Kubernetes-Geheimnis, das die App-ID und das Kennwort enthält, und integrieren Sie das Geheimnis in die Laufzeitkonfiguration Ihres Containers.

Bereitstellen von Ressourcen mit Agents Toolkit

Sie können den provision Befehl im Agents-Toolkit verwenden, um eine Teams-App mit Botfunktion zu erstellen, die Azure Bot Service einzubinden und die Microsoft Entra ID für die Authentifizierung hinzuzufügen.

Gehen Sie folgendermaßen vor, um Ressourcen mit dem Agents Toolkit bereitzustellen:

  1. Öffnen Sie die Beispiel-App, die Sie zuvor heruntergeladen haben.

  2. Wechseln Sie zu der env/.env.${envName} Datei, und aktualisieren Sie den BOT_DOMAIN Wert mit Ihrem FQDN.

  3. Navigieren Sie zu der m365agents.yml Datei, und aktualisieren Sie die folgende arm/deploy Aktion, um sicherzustellen, dass Agents Toolkit während der Ausführung des provision Befehls eine Azure Bot Service bereitstellt:

    - 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
    
  4. Aktualisieren Sie die botFramework/create Aktion in der m365agents.yml Datei während der Bereitstellungsphase. Mit dieser Aktion kann das Agents-Toolkit eine Bot-Registrierung mit dem entsprechenden Messaging-Endpunkt erstellen.

    Hinweis

    Wir empfehlen, Azure Bot Service für das Channeling zu verwenden. Wenn Sie kein Azure Konto haben und keine Azure Bot Service erstellen können, können Sie eine Bot-Registrierung erstellen.

    - uses: botFramework/create
        with:
        botId: ${{BOT_ID}}
        name: <Bot display name>
        messagingEndpoint: https://${{BOT_DOMAIN}}/api/messages
        description: ""
        channels:
            - name: msteams
    

    Sie können die Aktion in m365agents.yml Datei arm/deploy entfernen, da wir keine Azure-Ressourcen benötigen.

  5. Führen Sie den provision Befehl im Agents Toolkit aus.

  6. Suchen Sie nach der Bereitstellung den BOT_ID in der env/.env.${envName} Datei und den verschlüsselten SECRET_BOT_PASSWORD in der env/.env.${envName}.user Datei. Um den tatsächlichen Wert von BOT_PASSWORDzu erhalten. Wählen Sie die Anmerkung Geheimnis entschlüsseln aus.

  7. Um ein Kubernetes-Geheimnis zu erstellen, das das Schlüssel-Wert-Paar in der ./deploy/.env.dev-secrets Datei enthält BOT_IDBOT_PASSWORD, und führen Sie den folgenden Befehl aus, um das Geheimnis bereitzustellen:

    kubectl create secret generic dev-secrets --from-env-file ./deploy/.env.dev-secrets -n $NAMESPACE
    

Anwenden der Bereitstellung

Das Beispiel enthält eine Bereitstellungsdatei , deploy/sso-bot.yaml, die Ihnen zur Orientierung dient.

  1. Aktualisieren Sie die folgenden Platzhalter:

    1. <image>: Aktualisieren Sie Ihr Image. Beispiel: myacr.azurecr.io/sso-bot:latest.

    2. <hostname>: Aktualisieren Sie Ihren Eingangs-FQDN.

  2. Führen Sie zum Anwenden deploy/tab.yamlden folgenden Befehl aus:

    kubectl apply -f deploy/sso-bot.yaml -n $NAMESPACE
    
  3. Wechseln Sie zu Visual Studio Code.

  4. Wählen Sie im Bereich Ausführen und Debuggen die Konfiguration Remote-starten aus.

  5. Um eine Vorschau der auf AKS bereitgestellten Teams-Bot-Anwendung anzuzeigen, wählen Sie Debuggen starten (F5) aus.

Bereitstellen der Teams-Registerkarten-App in Kubernetes

AKS dient als verwalteter Containerorchestrierungsdienst, der von Azure angeboten wird. Mit AKS können Sie die Kubernetes-Erfahrung vollständig in Azure verwalten.

Das Bereitstellen einer Teams-Registerkarten-App in AKS ähnelt dem Bereitstellen einer Web-App in AKS. Da eine Teams-Registerkarten-App jedoch eine HTTPS-Verbindung erfordert, müssen Sie eine Domäne besitzen und TLS Ingress in Ihrem AKS einrichten.

Sie können auch eine Teams-Registerkarten-App für Ihren persönlichen Kubernetes-Cluster oder einen Kubernetes-Dienst auf verschiedenen Cloudplattformen bereitstellen. Dies beinhaltet Schritte, die denen ähneln, die bei der Bereitstellung in Azure Kubernetes Service verwendet werden.

Einrichten von eingehendem Datenverkehr mit HTTPS auf AKS

  1. Stellen Sie sicher, dass Ihr AKS bereits mit Ihrer Azure Container Registry verbunden ist, die Ihre Containerimages hostet. Weitere Informationen finden Sie unter Azure CLI.

  2. Führen Sie den folgenden Befehl aus, um den Eingangscontroller und den Zertifikat-Manager zu installieren:

    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
    

    Hinweis

    Sie können auch die Anweisungen unter Erstellen eines nicht verwalteten Eingangs-Controllers befolgen und TLS mit Let's Encrypt Zertifikaten verwenden , um Eingangs- und TLS-Zertifikate auf Ihrem Kubernetes-Cluster einzurichten.

  3. Führen Sie den folgenden Befehl aus, um den DNS-Namen für die öffentliche Eingangs-IP-Adresse zu aktualisieren und den Eingangsendpunkt abzurufen:

    > 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
    

Bereitstellen von Ressourcen mit Agents Toolkit

Sie können den provision Befehl im Agents-Toolkit verwenden, um eine Teams-App mit Registerkartenfunktion zu erstellen, die Azure Bot Service einzubinden und die Microsoft Entra ID für die Authentifizierung hinzuzufügen.

Gehen Sie folgendermaßen vor, um Ressourcen mit dem Agents Toolkit bereitzustellen:

  1. Öffnen Sie die Beispiel-App, die Sie zuvor heruntergeladen haben.

  2. Wechseln Sie zu der env/.env.${envName} Datei, und aktualisieren Sie den TAB_DOMAIN Wert mit Ihrem FQDN.

  3. Wechseln Sie zu der m365agents.yml Datei, und entfernen Sie die arm/deploy Aktion, da keine zusätzlichen Azure-Ressourcen erforderlich sind.

  4. Führen Sie den provision Befehl im Agents Toolkit aus.

  5. Verwenden Sie das Agents-Toolkit, um eine Microsoft Entra ID zu erstellen, die Sie möglicherweise als Umgebungsvariablen Ihrer Apps festlegen möchten.

  6. Suchen Sie nach der Bereitstellung den AAD_APP_CLIENT_ID in der env/.env.${envName} Datei und den verschlüsselten SECRET_AAD_APP_CLIENT_SECRET in der env/.env.${envName}.user Datei.

  7. Um den tatsächlichen Wert von SECRET_AAD_APP_CLIENT_SECRETzu erhalten. Wählen Sie die Anmerkung Geheimnis entschlüsseln aus.

Anwenden der Bereitstellung

Das Beispiel enthält eine Bereitstellungsdatei, deploy/tab.yaml, die Sie als Referenz nutzen können.

  1. Aktualisieren Sie die folgenden Platzhalter:

    1. <tab-image>: Aktualisieren Sie Ihr Image. Beispiel: myacr.azurecr.io/tab:latest.

    2. <api-image>: Aktualisieren Sie Ihr API-Image. Wenn Sie nicht über eine API verfügen, entfernen Sie den hello-world-apiDienst, und stellen Sie ihn aus der YAML-Datei bereit.

    3. <hostname>: Aktualisieren Sie Ihren Eingangs-FQDN.

  2. Führen Sie zum Anwenden deploy/tab.yamlden folgenden Befehl aus:

    kubectl apply -f deploy/tab.yaml -n $NAMESPACE
    
  3. Wechseln Sie zu Visual Studio Code.

  4. Wählen Sie im Bereich Ausführen und Debuggen die Konfiguration Remote-starten aus.

  5. Um eine Vorschau der auf AKS bereitgestellten Teams-Bot-Anwendung anzuzeigen, wählen Sie Debuggen starten (F5) aus.