Condividi tramite


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.

Passaggi successivi