Sessioni di contenitori personalizzate di App Contenitore di Azure (anteprima)
Oltre all'interprete di codice predefinito fornito dalle sessioni dinamiche di App Contenitore di Azure, è anche possibile usare contenitori personalizzati per definire sandbox di sessione personalizzate.
Nota
Le sessioni dinamiche di App contenitore di Azure sono attualmente in anteprima. Per altre informazioni, vedere Limitazioni dell'anteprima.
Usi delle sessioni di contenitori personalizzate
I contenitori personalizzati consentono di creare soluzioni personalizzate in base alle esigenze. Consentono di eseguire codice o eseguire applicazioni in ambienti veloci e temporanei e offrono spazi protetti e in modalità sandbox con Hyper-V. Inoltre, possono essere configurati con l'isolamento di rete facoltativo. Alcuni esempi includono:
Interpreti di codice: quando è necessario eseguire codice non attendibile in sandbox sicure da un linguaggio non supportato nell'interprete predefinito oppure è necessario il controllo completo sull'ambiente dell'interprete del codice.
Esecuzione isolata: quando è necessario eseguire applicazioni in scenari multi-tenant ostili in cui ogni tenant o utente ha un proprio ambiente in modalità sandbox. Questi ambienti sono isolati l'uno dall'altro e dall'applicazione host. Alcuni esempi includono applicazioni che eseguono codice fornito dall'utente, codice che concede all'utente finale l'accesso a una shell basata su cloud, agenti di intelligenza artificiale e ambienti di sviluppo.
Uso delle sessioni di contenitori personalizzate
Per usare sessioni di contenitori personalizzate, creare prima di tutto un pool di sessioni con un'immagine del contenitore personalizzata. Le App contenitore di Azure avviano automaticamente i contenitori nelle proprie sandbox Hyper-V usando l'immagine fornita. Dopo l'avvio, il contenitore è disponibile per il pool di sessioni.
Quando l'applicazione richiede una sessione, un'istanza viene allocata immediatamente dal pool. La sessione rimane attiva fino a quando non entra in uno stato di inattività, e viene quindi arrestata ed eliminata automaticamente.
Creazione di un pool di sessioni di contenitori personalizzato
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.
Per creare un pool di sessioni di contenitori personalizzato usando l'interfaccia della riga di comando di Azure, assicurarsi di disporre delle versioni più recenti dell'interfaccia della riga di comando di Azure e dell'estensione App contenitore di Azure con i comandi seguenti:
az upgrade
az extension add --name containerapp --upgrade --allow-preview true -y
I pool di sessioni di contenitori personalizzati richiedono un profilo del carico di lavoro abilitato per l'ambiente App Contenitore di Azure. Se non si ha un ambiente, usare il comando az containerapp env create -n <ENVIRONMENT_NAME> -g <RESOURCE_GROUP> --location <LOCATION> --enable-workload-profiles
per crearne uno.
Usare il comando az containerapp sessionpool create
per creare un pool di sessioni di contenitori personalizzato.
Nell'esempio seguente viene creato un pool di sessioni denominato my-session-pool
con un'immagine del contenitore personalizzata myregistry.azurecr.io/my-container-image:1.0
.
Prima di inviare la richiesta, sostituire i segnaposto tra le parentesi <>
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 | valore | Descrizione |
---|---|---|
--name |
my-session-pool |
Il nome del pool di sessioni. |
--resource-group |
my-resource-group |
Il gruppo di risorse che contiene il pool di sessioni. |
--environment |
my-environment |
Il nome o l'ID della risorsa dell'ambiente app contenitore. |
--container-type |
CustomContainer |
Il tipo di contenitore del pool di sessioni. Deve essere CustomContainer per le 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 |
Il nome utente per accedere al registro contenitori. |
--registry-password |
my-password |
La password per accedere al registro contenitori. |
--cpu |
0.25 |
La CPU richiesta in core. |
--memory |
0.5Gi |
La memoria richiesta. |
--target-port |
80 |
La porta di sessione usata per il traffico in ingresso. |
--cooldown-period |
300 |
Il numero di secondi in cui una sessione può essere inattiva prima che 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 |
Indica se il traffico di rete in uscita è consentito dalla sessione. I valori validi sono EgressDisabled (valore predefinito) e EgressEnabled . |
|
--max-sessions |
10 |
Il 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 comando az containerapp sessionpool update
.
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.
Uso delle sessioni
L'applicazione interagisce con una sessione usando l'API di gestione del pool di sessioni.
Un endpoint di gestione del pool per le sessioni di contenitori personalizzate segue questo formato: https://<SESSION_POOL>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io
.
Per recuperare l'endpoint di gestione del pool di sessioni, usare il comando az containerapp sessionpool show
:
az containerapp sessionpool show \
--name <SESSION_POOL_NAME> \
--resource-group <RESOURCE_GROUP> \
--query "properties.poolManagementEndpoint" \
--output tsv
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 della stringa di query identifier
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.
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 può comportare l'uso improprio o l'accesso non autorizzato ai dati archiviati nelle sessioni degli utenti. Per altre informazioni, vedere Identificatori di sessione
Inoltro delle richieste al contenitore della sessione:
Qualsiasi elemento nel percorso che segue l'endpoint di gestione del pool di base viene inoltrato al contenitore della sessione.
Ad esempio, se si effettua una chiamata a <POOL_MANAGEMENT_ENDPOINT>/api/uploadfile
, la richiesta viene instradata al contenitore della sessione in 0.0.0.0:<TARGET_PORT>/api/uploadfile
.
Interazione di sessione continua:
È possibile continuare a effettuare richieste alla stessa sessione. Se non sono presenti richieste alla sessione per più tempo rispetto al periodo di raffreddamento, la sessione viene eliminata automaticamente.
Esempio di richiesta
Nell'esempio seguente viene illustrata una richiesta a una sessione di contenitore personalizzata in base a un ID utente.
Prima di inviare la richiesta, sostituire i segnaposto tra le parentesi <>
con valori specifici della richiesta.
POST https://<SESSION_POOL_NAME>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io/<API_PATH_EXPOSED_BY_CONTAINER>?identifier=<USER_ID>
Authorization: Bearer <TOKEN>
{
"command": "echo 'Hello, world!'"
}
Questa richiesta viene inoltrata alla sessione del contenitore personalizzata con l'identificatore per l'ID dell'utente. Se la sessione non è già in esecuzione, App Contenitore di Azure assegna una sessione dal pool prima di inoltrare la richiesta.
Nell'esempio, il contenitore della sessione riceve la richiesta in http://0.0.0.0:<INGRESS_PORT>/<API_PATH_EXPOSED_BY_CONTAINER>
.
Fatturazione
Le sessioni di contenitori personalizzate vengono fatturate in base alle risorse utilizzate dal pool di sessioni. Per altre informazioni, vedere Fatturazione delle app contenitore di Azure.