Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 createaz containerapp sessionpool showaz containerapp sessionpool listaz containerapp sessionpool updateaz 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 .