Partager via


Utiliser des pools de sessions dans Azure Container Apps

Les pools de sessions garantissent des temps d'allocation de session inférieurs à la seconde pour les nouveaux pools et sont responsables de la gestion et du cycle de vie de chaque session.

Paramétrage

Vous pouvez contrôler le comportement des pools de sessions à l’aide des paramètres suivants disponibles .az containerapp sessionpool create

Objectif Propriété Descriptif
Définir le nombre maximal de sessions max-sessions Nombre maximal de sessions simultanées autorisées dans un pool. Les requêtes entrantes une fois la limite maximale remplie sont retournées une 404 erreur de serveur indiquant qu’il n’y a plus de sessions allouées au pool.
Durée d’attente cooldown-period Nombre de secondes pendant lesquelles une session peut être inactive avant la fin de la session. La période d’inactivité est réinitialisée chaque fois que l’API de la session est appelée. La valeur doit être comprise entre 300 et 3600.
Quantité de session cible ready-sessions Le nombre cible de séances à maintenir prêtes dans un pool.

Créer un pool

Le processus de création d’un pool est légèrement différent selon que vous créez un pool d’interpréteurs de code ou un pool de conteneurs personnalisé.

Pool d’interpréteurs de code

Pour créer un pool de sessions d’interpréteur de code à l’aide d’Azure CLI, vérifiez que vous disposez des dernières versions d’Azure CLI et de l’extension Azure Container Apps avec les commandes suivantes :

# Upgrade the Azure CLI
az upgrade

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

Utilisez la az containerapps sessionpool create commande pour créer le pool. L’exemple suivant crée un pool de sessions d’interpréteur de code Python nommé my-session-pool. Veillez à remplacer <RESOURCE_GROUP> par le nom de votre groupe de ressources avant d’exécuter la commande.

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

Vous pouvez définir les paramètres suivants lorsque vous créez un pool de sessions :

Réglage Descriptif
--container-type Type d’interpréteur de code à utiliser. Les valeurs prises en charge incluent PythonLTS, NodeLTSet Shell.
--max-sessions Nombre maximal de sessions allouées autorisées simultanément. La valeur maximale est 600.
--cooldown-period Nombre de secondes inactives autorisées avant l’arrêt. La période d’inactivité est réinitialisée chaque fois que l’API de la session est appelée. La plage autorisée est comprise entre 300 et 3600.
--network-status Indique si le trafic réseau sortant est autorisé à partir de la session. Les valeurs valides sont EgressDisabled (par défaut) et EgressEnabled.

Important

Si vous activez la sortie, le code en cours d’exécution dans la session peut accéder à Internet. Soyez prudent lorsque le code n’est pas approuvé, car il peut être utilisé pour effectuer des activités malveillantes telles que des attaques par déni de service.

Obtenir le point de terminaison de l’API de gestion

Pour utiliser des sessions d’interpréteur de code avec des intégrations de framework LLM ou en appelant directement les points de terminaison d’API de gestion, vous avez besoin du point de terminaison de l’API de gestion du pool.

Le point de terminaison est au format https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>.

Pour récupérer le point de terminaison de l’API de gestion pour un pool de sessions, utilisez la az containerapps sessionpool show commande. Veillez à remplacer <RESOURCE_GROUP> par le nom de votre groupe de ressources avant d’exécuter la commande.

az containerapp sessionpool show \
    --name my-session-pool \
    --resource-group <RESOURCE_GROUP> \
    --query 'properties.poolManagementEndpoint' -o tsv

Pool de conteneurs personnalisé

Pour créer un pool de sessions de conteneur personnalisé, vous devez fournir des paramètres de configuration d’image de conteneur et de pool.

Vous appelez ou communiquez avec chaque session à l’aide de requêtes HTTP. Le conteneur personnalisé doit exposer un serveur HTTP sur un port que vous spécifiez pour répondre à ces requêtes.

Pour créer un pool de sessions de conteneur personnalisé à l’aide d’Azure CLI, vérifiez que vous disposez des dernières versions d’Azure CLI et de l’extension Azure Container Apps avec les commandes suivantes :

az upgrade
az extension add --name containerapp --upgrade --allow-preview true -y

Les pools de sessions de conteneur personnalisés nécessitent un profil de charge de travail activé pour l’environnement Azure Container Apps. Si vous n’avez pas d’environnement, utilisez la az containerapp env create -n <ENVIRONMENT_NAME> -g <RESOURCE_GROUP> --location <LOCATION> --enable-workload-profiles commande pour en créer un.

Utilisez la az containerapp sessionpool create commande pour créer un pool de sessions de conteneur personnalisé.

L’exemple suivant crée un pool de sessions nommé my-session-pool avec une image myregistry.azurecr.io/my-container-image:1.0conteneur personnalisée.

Avant d’envoyer la requête, remplacez les balises dans les crochets <> par les valeurs correctes correspondant à votre pool de sessions et à l’identificateur de session.

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>

Cette commande crée un pool de sessions avec les paramètres suivants :

Paramètre Valeur Descriptif
--name my-session-pool Nom du pool de sessions.
--resource-group my-resource-group Groupe de ressources qui contient le pool de sessions.
--environment my-environment Nom ou ID de ressource de l’environnement de l’application conteneur.
--container-type CustomContainer Type de conteneur du pool de sessions. Doit être CustomContainer pour les sessions de conteneur personnalisées.
--image myregistry.azurecr.io/my-container-image:1.0 Image conteneur à utiliser pour le pool de sessions.
--registry-server myregistry.azurecr.io Nom d’hôte du serveur de registre de conteneurs.
--registry-username my-username Nom d'utilisateur pour se connecter au registre de conteneurs.
--registry-password my-password Le mot de passe pour se connecter au registre de conteneurs.
--cpu 0.25 Nombre de cœurs requis pour le processeur.
--memory 0.5Gi Mémoire requise.
--target-port 80 Port de session utilisé pour le trafic d’entrée.
--cooldown-period 300 Nombre de secondes pendant lesquelles une session peut être inactive avant la fin de la session. La période d’inactivité est réinitialisée chaque fois que l’API de la session est appelée. La valeur doit être comprise entre 300 et 3600.
--network-status EgressDisabled Indique si le trafic réseau sortant est autorisé à partir de la session. Les valeurs valides sont EgressDisabled (par défaut) et EgressEnabled.
--max-sessions 10 Nombre maximal de sessions qui peuvent être allouées en même temps.
--ready-sessions 5 Nombre cible de sessions disponibles en permanence dans le pool de sessions. Augmentez ce nombre si les sessions sont allouées plus rapidement que le pool ne l'est réapprovisionné.
--env-vars "key1=value1" "key2=value2" Variables d’environnement à définir dans le conteneur.
--location "Supported Location" Emplacement du pool de sessions.

Pour vérifier l’état du pool de sessions, utilisez la az containerapp sessionpool show commande suivante :

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

Pour mettre à jour le pool de sessions, utilisez la az containerapp sessionpool update commande.

Important

Si la session est utilisée pour exécuter du code non approuvé, n’incluez pas d’informations ou de données auxquelles vous ne souhaitez pas que le code non approuvé accède. Supposons que le code est malveillant et dispose d’un accès complet au conteneur, y compris ses variables d’environnement, secrets et fichiers.

Point de terminaison de gestion

Important

L’identificateur de session est des informations sensibles qui nécessitent un processus sécurisé lorsque vous créez et gérez sa valeur. Pour protéger cette valeur, votre application doit s’assurer que chaque utilisateur ou locataire a uniquement accès à ses propres sessions.

L’échec de la sécurisation de l’accès aux sessions peut entraîner une mauvaise utilisation ou un accès non autorisé aux données stockées dans les sessions de vos utilisateurs. Pour plus d’informations, consultez identificateurs de session

Les points de terminaison suivants sont disponibles pour la gestion des sessions dans un pool :

Chemin d’accès au point de terminaison Méthode Descriptif
code/execute POST Exécuter du code dans une session.
files/upload POST Charger un fichier dans une session.
files/content/{filename} GET Téléchargez un fichier à partir d’une session.
files GET Répertoriez les fichiers d’une session.

Vous générez l’URL complète de chaque point de terminaison en concaténant le point de terminaison de l’API de gestion du pool avec le chemin du point de terminaison. La chaîne de requête doit inclure un identifier paramètre contenant l’identificateur de session et un api-version paramètre avec la valeur 2024-02-02-preview.

Par exemple : https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/code/execute?api-version=2024-02-02-preview&identifier=<IDENTIFIER>

Pour récupérer le point de terminaison de gestion du pool de sessions, utilisez la az containerapp sessionpool show commande :

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

Toutes les demandes adressées au point de terminaison de gestion du pool doivent inclure un en-tête Authorization avec un jeton du porteur. Pour savoir comment s’authentifier auprès de l’API de gestion de pool, consultez Authentification.

Chaque requête d’API doit également inclure le paramètre identifier de chaîne de requête avec l’ID de session. Cet ID de session unique permet à votre application d’interagir avec des sessions spécifiques. Pour en savoir plus sur les identificateurs de session, consultez Identificateurs de session.

Mise en cache d’images

Lorsqu’un pool de sessions est créé ou mis à jour, Azure Container Apps met en cache l’image conteneur dans le pool. Cette mise en cache permet d’accélérer le processus de création de sessions.

Les modifications apportées à l’image ne sont pas automatiquement reflétées dans les sessions. Pour mettre à jour l’image, mettez à jour le pool de sessions avec une nouvelle balise d’image. Utilisez une balise unique pour chaque mise à jour d’image pour vous assurer que la nouvelle image est extraite.