Freigeben über


Verwenden von Sitzungspools in Azure-Container-Apps

Sitzungspools bieten Zuweisungszeiten von Bruchteilen einer Sekunde und verwalten den Lebenszyklus jeder Sitzung.

Allgemeine Konzepte für beide Pools

Der Prozess zum Erstellen eines Pools unterscheidet sich geringfügig davon, ob Sie einen Codedolmetschersitzungspool oder einen benutzerdefinierten Containerpool erstellen. Die folgenden Konzepte gelten für beide.

Um Sitzungspools mit der Azure CLI zu erstellen, stellen Sie sicher, dass Sie über die neuesten Versionen der Azure CLI und die Azure Container Apps-Erweiterung verfügen:

# Upgrade the Azure CLI
az upgrade

# Install or upgrade the Azure Container Apps extension
az extension add --name containerapp --upgrade --allow-preview true -y

Allgemeine Sitzungspoolbefehle umfassen:

  • az containerapp sessionpool create
  • az containerapp sessionpool show
  • az containerapp sessionpool list
  • az containerapp sessionpool update
  • az containerapp sessionpool delete

Verwenden Sie --help mit einem Befehl, um verfügbare Argumente und unterstützte Werte anzuzeigen.

Verwenden Sie den az containerapp sessionpool show Befehl, um den Status eines Sitzungspools zu überprüfen:

az containerapp sessionpool show \
    --name <SESSION_POOL_NAME> \
    --resource-group <RESOURCE_GROUP> \
    --query "properties.poolManagementEndpoint" \
    --output tsv

Wenn Sie einen Pool erstellen oder aktualisieren, können Sie eine maximale Anzahl gleichzeitiger Sitzungen, einen Leerlaufzeitraum und festlegen, ob ausgehender Netzwerkdatenverkehr für Sitzungen zulässig ist.

Von Bedeutung

Wenn Sie ausgehenden Datenverkehr zulassen, kann Code, der in der Sitzung ausgeführt wird, auf das Internet zugreifen. Seien Sie vorsichtig, wenn der Code nicht vertrauenswürdig ist, da er zum Ausführen bösartiger Aktivitäten wie Denial-of-Service-Angriffe verwendet werden kann.

Von Bedeutung

Wenn die Sitzung verwendet wird, um nicht vertrauenswürdigen Code auszuführen, schließen Sie keine Informationen oder Daten ein, auf die der nicht vertrauenswürdige Code zugreifen soll. Gehen Sie davon aus, dass der Code bösartig ist und vollzugriff auf den Container hat, einschließlich der Umgebungsvariablen, geheimen Schlüssel und Dateien.

Konfigurieren eines Pools

Verwenden Sie az containerapp sessionpool create --help, um die neuesten CLI-Argumente für die Konfiguration des Sitzungspools anzuzeigen. Dieser Abschnitt konzentriert sich auf erweiterte Konfigurationsoptionen, die für API-Versionen gelten.

Sitzungslebenszykluskonfiguration

Wenn Sie einen Sitzungspool erstellen oder aktualisieren, können Sie konfigurieren, wie Sitzungen durch Festlegen properties.dynamicPoolConfiguration.lifecycleConfigurationbeendet werden. Wählen Sie ab API-Version 2025-01-01einen von zwei Lebenszyklustypen aus.

Die vollständige API-Spezifikation finden Sie in der SessionPools-API-Spezifikation.

Zeitgesteuert (Standard)

Während des Timed Lebenszyklus wird eine Sitzung nach einem Zeitraum der Inaktivität gelöscht. Jede an eine Sitzung gesendete Anfrage setzt den Cooldown-Timer zurück und verlängert die Lebensdauer der Sitzung um cooldownPeriodInSeconds.

Hinweis

Timed wird für alle Sitzungspooltypen unterstützt und funktioniert genauso wie executionType: Timed in früheren API-Versionen.

{
  "dynamicPoolConfiguration": {
    "lifecycleConfiguration": {
      "cooldownPeriodInSeconds": 600,
      "lifecycleType": "Timed"
    }
  }
}
Eigentum Description
cooldownPeriodInSeconds Die Sitzung wird gelöscht, wenn keine Anforderungen für diese Dauer vorhanden sind.
maxAlivePeriodInSeconds Wird für den Timed Lebenszyklus nicht unterstützt.

Verwaltungsendpunkt

Von Bedeutung

Der Sitzungsbezeichner ist vertrauliche Informationen, die einen sicheren Prozess erfordern, während Sie seinen Wert erstellen und verwalten. Um diesen Wert zu schützen, muss Ihre Anwendung sicherstellen, dass jeder Benutzer oder Mandant nur Zugriff auf seine eigenen Sitzungen hat.

Wenn sie den Zugriff auf Sitzungen nicht sichern, kann es zu Missbrauch oder unbefugtem Zugriff auf daten führen, die in den Sitzungen Ihrer Benutzer gespeichert sind. Weitere Informationen finden Sie unter Sitzungsbezeichner

Alle Anforderungen an den Poolverwaltungsendpunkt müssen einen Authorization Header mit einem Bearertoken enthalten. Informationen zum Authentifizieren mit der Poolverwaltungs-API finden Sie unter "Authentifizierung".

Jede API-Anforderung muss auch den Abfragezeichenfolgenparameter identifier mit der Sitzungs-ID enthalten. Mit dieser eindeutigen Sitzungs-ID kann Ihre Anwendung mit bestimmten Sitzungen interagieren. Weitere Informationen zu Sitzungsbezeichnern finden Sie unter Sitzungs-IDs.

Zwischenspeichern von Bildern

Wenn ein Sitzungspool erstellt oder aktualisiert wird, zwischenspeichert Azure Container Apps das Container-Image im Pool. Mit dieser Zwischenspeicherung können Sie den Prozess des Erstellens neuer Sitzungen beschleunigen.

Alle Änderungen am Bild werden in den Sitzungen nicht automatisch wiedergegeben. Um das Image zu aktualisieren, aktualisieren Sie den Sitzungspool mit einem neuen Imagetag. Verwenden Sie für jede Bildaktualisierung ein eindeutiges Tag, um sicherzustellen, dass das neue Bild abgerufen wird.

Code-Interpreter-Sitzungspool

Verwenden Sie den az containerapps sessionpool create Befehl, um den Pool zu erstellen. Im folgenden Beispiel wird ein Python-Codedolmetscher-Sitzungspool mit dem Namen erstellt my-session-pool. Stellen Sie sicher, dass Sie <RESOURCE_GROUP> durch den Namen Ihrer Ressourcengruppe ersetzen, bevor Sie den Befehl ausführen.

az containerapp sessionpool create \
    --name my-session-pool \
    --resource-group <RESOURCE_GROUP> \
    --location westus2 \
    --container-type PythonLTS \
    --max-sessions 100 \
    --cooldown-period 300 \
    --network-status EgressDisabled

Sie können beim Erstellen eines Sitzungspools die folgenden Einstellungen definieren:

Setting Description
--container-type Der Typ des zu verwendenden Codedolmetschers. Unterstützte Werte: PythonLTS, NodeLTS, Shell und CustomContainer.
--max-sessions Die maximale Anzahl der zugewiesenen Sitzungen, die gleichzeitig zulässig sind. Der Maximalwert ist 600.
--cooldown-period Die Anzahl der zulässigen Leerlauf-Sekunden vor der Beendigung. Der Leerlaufzeitraum wird jedes Mal zurückgesetzt, wenn die API der Sitzung aufgerufen wird. Der zulässige Bereich liegt zwischen 300 und 3600.
--network-status Gibt an, ob ausgehender Netzwerkdatenverkehr aus der Sitzung zulässig ist. Gültige Werte sind EgressDisabled (Standard) und EgressEnabled.

Codedolmetscherverwaltungsendpunkt

Um Sitzungen mit Code-Interpreter mit LLM-Framework-Integrationen zu nutzen oder direkt die Verwaltungs-API-Endpunkte aufzurufen, benötigen Sie den Verwaltungs-API-Endpunkt des Pools.

Der Endpunkt befindet sich im Format https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>.

Um den Management-API-Endpunkt für einen Sitzungspool abzurufen, finden Sie oben im allgemeinen Abschnitt einen Beispielbefehl.

Die folgenden Endpunkte stehen für die Verwaltung von Sitzungen in einem Pool zur Verfügung:

Endpunktpfad Methode Description
code/execute POST Ausführen von Code in einer Sitzung.
files/upload POST Hochladen einer Datei in eine Sitzung.
files/content/{filename} GET Laden Sie eine Datei aus einer Sitzung herunter.
files GET Die Dateien in einer Sitzung auflisten.

Sie erstellen die vollständige URL für jeden Endpunkt, indem Sie den Verwaltungs-API-Endpunkt des Pools mit dem Endpunktpfad verketten. Die Abfragezeichenfolge muss einen identifier Parameter enthalten, der den Sitzungsbezeichner und einen api-version Parameter mit dem Wert 2024-02-02-previewenthält. API-Versionen können sich ändern. Bestätigen Sie daher immer die neueste Version in den REST-API-Dokumenten, bevor Sie sie in der Produktion verwenden.

Beispiel: {sessionManagementEndpoint}/code/execute?api-version=2024-02-02-preview&identifier=<IDENTIFIER>

Informationen zu REST-API-Verweisen finden Sie unter Container-Apps-Datenebenen-APIs und der Übersicht über Datenebenenvorgänge für Container-Apps.

Benutzerdefinierter Container-Sitzungspool

Um einen benutzerdefinierten Containersitzungspool zu erstellen, müssen Sie ein Containerimage und Konfigurationseinstellungen für den Pool bereitstellen.

Sie rufen jede Sitzung mithilfe von HTTP-Anfragen auf oder kommunizieren mit ihnen. Der benutzerdefinierte Container muss einen HTTP-Server auf einem Port verfügbar machen, den Sie angeben, um auf diese Anforderungen zu reagieren.

Die folgenden Funktionen gelten nur für benutzerdefinierte Containersitzungspools.

Benutzerdefinierter Containerverwaltungsendpunkt

Für benutzerdefinierte Container-Sitzungspools rufen Sie den Verwaltungsendpunkt über das Azure-Portal oder die Ausgabe der Azure CLI ab. Der Endpunkt wird als poolManagementEndpoint zurückgegeben.

Der Endpunkt befindet sich im Format https://<SESSION_POOL_NAME>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io.

BeiVerlassenDesContainers

Bei dem OnContainerExit-Lebenszyklus bleibt eine Sitzung so lange aktiv, bis der Container von selbst beendet wird oder die maximale Lebensdauer erreicht ist.

{
  "dynamicPoolConfiguration": {
    "lifecycleConfiguration": {
      "maxAlivePeriodInSeconds": 6000,
      "lifecycleType": "OnContainerExit"
    }
  }
}
Eigentum Description
maxAlivePeriodInSeconds Maximale Zeit, bis die Sitzung aktiv bleiben kann, bevor sie gelöscht wird.
cooldownPeriodInSeconds Wird für den OnContainerExit Lebenszyklus nicht unterstützt.

Containersonden

Mithilfe von Container-Probes können Sie Integritätsprüfungen für Sitzungscontainer definieren, sodass der Pool fehlerhafte Sitzungen erkennen und ersetzen kann, um das readySessionInstances-Ziel fehlerfrei zu halten.

Session-Pools unterstützen Liveness und Startup-Tests. Weitere Informationen zum Probeverhalten finden Sie unter Health Probes in Azure Container Apps.

Beim Erstellen oder Aktualisieren eines Sitzungspools müssen Tests in properties.customContainerTemplate.containers angegeben werden. Informationen zum vollständigen Anforderungstextschema finden Sie in der Referenz "SessionPools Create" oder "Update API". Das folgende Beispiel zeigt eine partielle Konfiguration mit Probedefinitionen:

{
  "properties": {
    "customContainerTemplate": {
      "containers": [
        {
          "name": "my-session-container",
          "image": "myregistry.azurecr.io/my-session-image:latest",
          "probes": [
            {
              "type": "Liveness",
              "httpGet": {
                "path": "/health",
                "port": 8080
              },
              "periodSeconds": 10,
              "failureThreshold": 3
            },
            {
              "type": "Startup",
              "httpGet": {
                "path": "/ready",
                "port": 8080
              },
              "periodSeconds": 5,
              "failureThreshold": 30
            }
          ]
        }
      ]
    },
    "dynamicPoolConfiguration": {
      "readySessionInstances": 5
    }
  }
}

Für benutzerdefinierte Container-Sitzungspools ist eine Azure Container Apps-Umgebung mit aktivierten Workload-Profilen erforderlich. Wenn Sie nicht über eine Umgebung verfügen, verwenden Sie den az containerapp env create -n <ENVIRONMENT_NAME> -g <RESOURCE_GROUP> --location <LOCATION> Befehl zum Erstellen einer Umgebung.

Verwenden Sie den Befehl az containerapp sessionpool create, um einen benutzerdefinierten Containersitzungspool zu erstellen.

Im folgenden Beispiel wird ein Sitzungspool namens my-session-pool mit einem benutzerdefinierten Containerimage myregistry.azurecr.io/my-container-image:1.0 erstellt.

Ersetzen Sie vor dem Senden der Anforderung die Platzhalter zwischen den <> Klammern durch die entsprechenden Werte für Den Sitzungspool und den Sitzungsbezeichner.

az containerapp sessionpool create \
    --name my-session-pool \
    --resource-group <RESOURCE_GROUP> \
    --environment <ENVIRONMENT> \
    --registry-server myregistry.azurecr.io \
    --registry-username <USER_NAME> \
    --registry-password <PASSWORD> \
    --container-type CustomContainer \
    --image myregistry.azurecr.io/my-container-image:1.0 \
    --cpu 0.25 --memory 0.5Gi \
    --target-port 80 \
    --cooldown-period 300 \
    --network-status EgressDisabled \
    --max-sessions 10 \
    --ready-sessions 5 \
    --env-vars "key1=value1" "key2=value2" \
    --location <LOCATION>

Mit diesem Befehl wird ein Sitzungspool mit den folgenden Einstellungen erstellt:

Parameter Wert Description
--name my-session-pool Der Name des Sitzungspools.
--resource-group my-resource-group Die Ressourcengruppe, die den Sitzungspool enthält.
--environment my-environment Der Name oder die Ressourcen-ID der Umgebung der Container-App.
--container-type CustomContainer Der Containertyp des Sitzungspools. Für benutzerdefinierte Containersitzungen muss der Typ CustomContainer sein.
--image myregistry.azurecr.io/my-container-image:1.0 Das Container-Image, das für den Sitzungspool verwendet werden soll.
--registry-server myregistry.azurecr.io Der Hostname des Containerregistrierungsservers.
--registry-username my-username Der Benutzername, der sich bei der Containerregistrierung anmeldet.
--registry-password my-password Das Kennwort für die Anmeldung bei der Containerregistrierung.
--cpu 0.25 Die erforderliche CPU in Kernen.
--memory 0.5Gi Der erforderliche Arbeitsspeicher.
--target-port 80 Der Sitzungsport, der für eingehenden Datenverkehr verwendet wird.
--cooldown-period 300 Die Anzahl der Sekunden, die eine Sitzung im Leerlauf sein kann, bevor die Sitzung beendet wird. Der Leerlaufzeitraum wird jedes Mal zurückgesetzt, wenn die API der Sitzung aufgerufen wird. Der Wert muss zwischen 300 und 3600.
--network-status EgressDisabled Gibt an, ob ausgehender Netzwerkdatenverkehr aus der Sitzung zulässig ist. Gültige Werte sind EgressDisabled (Standard) und EgressEnabled.
--max-sessions 10 Die maximale Anzahl von Sitzungen, die gleichzeitig zugewiesen werden können.
--ready-sessions 5 Die Zielanzahl der Sitzungen, die immer im Sitzungspool bereit sind. Erhöhen Sie diese Anzahl, wenn Sitzungen schneller zugewiesen werden, als der Pool aufgefüllt wird.
--env-vars "key1=value1" "key2=value2" Die Umgebungsvariablen, die im Container festgelegt werden sollen.
--location "Supported Location" Der Speicherort des Sitzungspools.

Verwenden Sie den az containerapp sessionpool update Befehl, um den Sitzungspool zu aktualisieren.