Condividi tramite


Usare i pool di sessioni nelle app Azure Container

I pool di sessioni forniscono tempi di allocazione delle sessioni inferiori a un secondo e gestiscono il ciclo di vita di ogni sessione.

Concetti comuni per entrambi i pool

Il processo di creazione di un pool è leggermente diverso a seconda che si stia creando un pool di sessioni dell'interprete del codice o un pool di contenitori personalizzato. I concetti seguenti si applicano a entrambi.

Per creare pool di sessioni usando l'interfaccia della riga di comando di Azure, assicurarsi di avere le versioni più recenti dell'interfaccia della riga di comando di Azure e l'estensione App Azure Container:

# Upgrade the Azure CLI
az upgrade

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

I comandi comuni del pool di sessioni includono:

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

Usare --help con qualsiasi comando per visualizzare gli argomenti disponibili e i valori supportati.

Per controllare lo stato di un pool di sessioni, usare il az containerapp sessionpool show comando :

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

Quando si crea o si aggiorna un pool, è possibile impostare un numero massimo di sessioni simultanee, un periodo di inattività, e se sia consentito il traffico di rete in uscita per le sessioni.

Importante

Se si abilita l'uscita, il codice in esecuzione nella sessione può accedere a Internet. Prestare attenzione quando il codice non è attendibile perché può essere usato per eseguire attività dannose, ad esempio attacchi Denial of Service.

Importante

Se la sessione viene usata per eseguire codice non attendibile, non includere informazioni o dati a cui non si vuole che il codice non attendibile acceda. Si supponga che il codice sia dannoso e abbia accesso completo al contenitore, incluse le variabili di ambiente, i segreti e i file.

Configurare un pool

Usare az containerapp sessionpool create --help per visualizzare gli argomenti più recenti della CLI per la configurazione del pool di sessioni. Questa sezione è incentrata sulle opzioni di configurazione avanzate che si applicano tra le versioni dell'API.

Configurazione del ciclo di vita della sessione

Quando si crea o si aggiorna un pool di sessioni, è possibile configurare la modalità di terminazione delle sessioni impostando properties.dynamicPoolConfiguration.lifecycleConfiguration. A partire dalla versione 2025-01-01dell'API, scegliere uno dei due tipi di ciclo di vita.

Per la specifica dell'API completa, vedere la specifica dell'API SessionPools.

Temporizzato (impostazione predefinita)

Con il Timed ciclo di vita, una sessione viene eliminata dopo un periodo di inattività. Qualsiasi richiesta inviata a una sessione reimposta il timer di intervallo di attesa, estendendo il tempo di vita della sessione di cooldownPeriodInSeconds.

Annotazioni

Timed è supportato per tutti i tipi di pool di sessioni e funziona come executionType: Timed nelle versioni precedenti dell'API.

{
  "dynamicPoolConfiguration": {
    "lifecycleConfiguration": {
      "cooldownPeriodInSeconds": 600,
      "lifecycleType": "Timed"
    }
  }
}
Proprietà Description
cooldownPeriodInSeconds La sessione viene eliminata quando non sono presenti richieste per questa durata.
maxAlivePeriodInSeconds Non supportato per il ciclo di vita Timed.

Endpoint di gestione

Importante

L'identificatore di sessione è costituito da informazioni riservate che richiedono un processo sicuro durante la creazione e la gestione del relativo valore. Per proteggere questo valore, l'applicazione deve assicurarsi che ogni utente o tenant abbia accesso solo alle proprie sessioni.

L'impossibilità di proteggere l'accesso alle sessioni potrebbe comportare l'uso improprio o l'accesso non autorizzato ai dati archiviati nelle sessioni degli utenti. Per altre informazioni, vedere Identificatori di sessione

Tutte le richieste all'endpoint di gestione del pool devono includere un'intestazione Authorization con un token di connessione. Per informazioni su come eseguire l'autenticazione con l'API di gestione del pool, vedere Autenticazione.

Ogni richiesta API deve includere anche il parametro identifier della stringa di query con l'ID sessione. Questo ID sessione univoco consente all'applicazione di interagire con sessioni specifiche. Per altre informazioni sugli identificatori di sessione, vedere Identificatori di sessione.

Memorizzazione nella cache delle immagini

Quando un pool di sessioni viene creato o aggiornato, App Azure Container memorizza nella cache l'immagine del contenitore nel pool. Questa memorizzazione nella cache consente di velocizzare il processo di creazione di nuove sessioni.

Le modifiche apportate all'immagine non vengono riflesse automaticamente nelle sessioni. Per aggiornare l'immagine, aggiornare il pool di sessioni con un nuovo tag immagine. Usare un tag univoco per ogni aggiornamento dell'immagine per assicurarsi che la nuova immagine venga estratta.

Pool di sessioni dell'interprete del codice

Usare il az containerapps sessionpool create comando per creare il pool. L'esempio seguente crea un pool di sessioni dell'interprete del codice Python denominato my-session-pool. Assicurarsi di sostituire <RESOURCE_GROUP> con il nome del gruppo di risorse prima di eseguire il comando .

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

Quando si crea un pool di sessioni, è possibile definire le impostazioni seguenti:

Impostazione Description
--container-type Tipo di interprete di codice da usare. I valori supportati includono PythonLTS, NodeLTS, Shelle CustomContainer.
--max-sessions Numero massimo di sessioni allocate consentite contemporaneamente. Il valore massimo è 600.
--cooldown-period Numero di secondi di inattività consentiti prima della terminazione. Il periodo di inattività viene reimpostato ogni volta che viene chiamata l'API della sessione. L'intervallo consentito è compreso tra 300 e 3600.
--network-status Specifica se il traffico di rete in uscita è consentito dalla sessione. I valori validi sono EgressDisabled (impostazione predefinita) e EgressEnabled.

Endpoint di gestione dell'interprete del codice

Per utilizzare le sessioni dell'interprete di codice con le integrazioni del framework LLM o chiamando direttamente gli endpoint dell'API di gestione, è necessario l'endpoint dell'API di gestione del pool.

L'endpoint è nel formato https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>.

Per recuperare l'endpoint API di gestione per un pool di sessioni, vedere la sezione comune precedente per un comando di esempio.

Per la gestione delle sessioni in un pool sono disponibili gli endpoint seguenti:

Percorso endpoint Metodo Description
code/execute POST Eseguire il codice in una sessione.
files/upload POST Caricare un file in una sessione.
files/content/{filename} GET Scaricare un file da una sessione.
files GET Elencare i file in una sessione.

Si compila l'URL completo per ogni endpoint concatenando l'endpoint API gestione del pool con il percorso dell'endpoint. La stringa di query deve includere un identifier parametro contenente l'identificatore di sessione e un api-version parametro con il valore 2024-02-02-preview. Le versioni api possono cambiare, quindi confermare sempre la versione più recente nella documentazione dell'API REST prima di usarla nell'ambiente di produzione.

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

Per informazioni di riferimento sulle API REST, vedere API del piano dati di App contenitore e panoramica delle operazioni del piano dati delle app contenitore.

Pool di sessioni di contenitori personalizzati

Per creare un pool di sessioni di contenitori personalizzato, è necessario fornire un'immagine del contenitore e le impostazioni di configurazione del pool.

È possibile richiamare o comunicare con ogni sessione usando richieste HTTP. Il contenitore personalizzato deve esporre un server HTTP su una porta specificata per rispondere a queste richieste.

Le funzionalità seguenti si applicano solo ai pool di sessioni di contenitori personalizzati.

Endpoint di gestione contenitori personalizzato

Per i pool di sessioni di contenitori personalizzati, ottieni l'endpoint di gestione dal portale di Azure o dall'output della CLI di Azure. L'endpoint viene restituito come poolManagementEndpoint.

L'endpoint è nel formato https://<SESSION_POOL_NAME>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io.

OnContainerExit

Con il OnContainerExit ciclo di vita, una sessione rimane attiva fino a quando il contenitore non viene chiuso autonomamente o fino al raggiungimento del periodo massimo attivo.

{
  "dynamicPoolConfiguration": {
    "lifecycleConfiguration": {
      "maxAlivePeriodInSeconds": 6000,
      "lifecycleType": "OnContainerExit"
    }
  }
}
Proprietà Description
maxAlivePeriodInSeconds Tempo massimo per cui la sessione può rimanere attiva prima di essere eliminata.
cooldownPeriodInSeconds Non supportato per il ciclo di vita OnContainerExit.

Probe di contenitori

Le sonde dei contenitori consentono di definire i controlli di integrità per i contenitori delle sessioni, in modo che il pool possa rilevare sessioni non sane e sostituirle per mantenere sana la destinazione readySessionInstances.

I pool di sessioni supportano i probe di liveness e startup. Per ulteriori informazioni sul comportamento delle sonde, vedere Sonde di integrità nelle Azure Container Apps.

Quando si crea o si aggiorna il pool di sessioni, specificare le sonde in properties.customContainerTemplate.containers. Per lo schema completo del corpo della richiesta, vedere la documentazione di riferimento API per la Creazione o Aggiornamento di SessionPools. L'esempio seguente mostra una configurazione parziale con definizioni di probe:

{
  "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
    }
  }
}

I pool di sessioni di contenitori personalizzati richiedono un ambiente app Azure Container abilitato per i profili di carico di lavoro. Se non si ha un ambiente, usare il az containerapp env create -n <ENVIRONMENT_NAME> -g <RESOURCE_GROUP> --location <LOCATION> comando per crearne uno.

Usare il az containerapp sessionpool create comando per creare un pool di sessioni del contenitore personalizzato.

Nell'esempio seguente viene creato un pool di sessioni denominato my-session-pool con un'immagine myregistry.azurecr.io/my-container-image:1.0del contenitore personalizzata.

Prima di inviare la richiesta, sostituite i segnaposto tra i tag <> con i valori appropriati per il pool di sessioni e l'identificatore di sessione.

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>

Questo comando crea un pool di sessioni con le impostazioni seguenti:

Parametro Value Description
--name my-session-pool Nome del pool di sessioni.
--resource-group my-resource-group Gruppo di risorse che contiene il pool di sessioni.
--environment my-environment Nome o ID risorsa dell'ambiente dell'app contenitore.
--container-type CustomContainer Tipo di contenitore del pool di sessioni. Deve essere CustomContainer per sessioni di contenitori personalizzate.
--image myregistry.azurecr.io/my-container-image:1.0 L'immagine del contenitore da usare per il pool di sessioni.
--registry-server myregistry.azurecr.io Il nome host del server del registro contenitori.
--registry-username my-username Nome utente per accedere al registro contenitori.
--registry-password my-password Password per accedere al registro contenitori.
--cpu 0.25 Numero di core richiesti per la CPU.
--memory 0.5Gi Memoria necessaria.
--target-port 80 La porta di sessione usata per il traffico in ingresso.
--cooldown-period 300 Numero di secondi in cui una sessione può essere inattiva prima che la sessione venga terminata. Il periodo di inattività viene reimpostato ogni volta che viene chiamata l'API della sessione. Il valore deve essere compreso tra 300 e 3600.
--network-status EgressDisabled Specifica se il traffico di rete in uscita è consentito dalla sessione. I valori validi sono EgressDisabled (impostazione predefinita) e EgressEnabled.
--max-sessions 10 Numero massimo di sessioni che è possibile allocare contemporaneamente.
--ready-sessions 5 Numero di sessioni di destinazione pronte per tutto il tempo nel pool di sessioni. Aumentare questo numero se le sessioni vengono allocate più velocemente del pool in fase di rifornimento.
--env-vars "key1=value1" "key2=value2" Variabili di ambiente da impostare nel contenitore.
--location "Supported Location" La posizione del pool di sessioni.

Per aggiornare il pool di sessioni, usare il az containerapp sessionpool update comando .