Sessions de conteneur personnalisées Azure Container Apps
Outre l’interpréteur de code intégré fourni par les sessions dynamiques Azure Container Apps, vous pouvez également utiliser des conteneurs personnalisés pour définir vos propres bacs à sable de session.
Utilisations pour les sessions de conteneur personnalisées
Les conteneurs personnalisés vous permettent de créer des solutions adaptées à vos besoins. Ils vous permettent d’exécuter du code ou des applications dans des environnements rapides et éphémères et offrent des espaces bac à sable sécurisés avec Hyper-V. En outre, ils peuvent être configurés avec une isolation réseau facultative. Voici quelques exemples :
Interpréteurs de code : quand vous devez exécuter du code non approuvé dans des bacs à sable sécurisés par un langage non pris en charge dans l’interpréteur intégré, ou si vous avez besoin d’un contrôle total sur l’environnement de l’interpréteur de code.
Exécution isolée : Lorsque vous devez exécuter des applications dans des scénarios hostiles et multi-locataires dans lesquels chaque locataire ou utilisateur dispose de son propre environnement sandbox. Ces environnements sont isolés les uns des autres et de l’application hôte. Voici quelques exemples d’applications qui exécutent du code fourni par l’utilisateur, du code qui accorde à l’utilisateur final l’accès à un interpréteur de commandes cloud, des agents d’IA et des environnements de développement.
Utilisation de sessions de conteneur personnalisées
Pour utiliser des sessions de conteneur personnalisées, vous créez d’abord un pool de sessions avec une image conteneur personnalisée. Azure Container Apps démarre automatiquement les conteneurs dans leurs propres bacs à sable Hyper-V à l’aide de l’image fournie. Une fois le conteneur démarré, il est disponible pour le pool de sessions.
Lorsque votre application demande une session, une instance est allouée instantanément à partir du pool. La session reste active jusqu’à ce qu’elle entre dans un état inactif, qui est ensuite automatiquement arrêté et détruit.
Création d’un pool de sessions de conteneur 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, assurez-vous de disposer 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 commande az containerapp env create -n <ENVIRONMENT_NAME> -g <RESOURCE_GROUP> --location <LOCATION> --enable-workload-profiles
pour en créer un.
Utilisez la commande az containerapp sessionpool create
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 conteneur personnalisée myregistry.azurecr.io/my-container-image:1.0
.
Avant d’envoyer la demande, remplacez les espaces réservés entre crochets <>
par les valeurs appropriées pour 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 | active | Description |
---|---|---|
--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 à connecter au registre de conteneurs. |
--registry-password |
my-password |
Mot de passe à connecter au registre de conteneurs. |
--cpu |
0.25 |
Le CPU requis en cœurs. |
--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 |
Indique si le trafic réseau sortant est autorisé à partir de la session. Les valeurs valides sont EgressDisabled (valeur 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 prêtes dans le pool de sessions à tout moment. Augmentez ce nombre si les sessions sont allouées plus rapidement que le pool 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 commande az containerapp sessionpool show
:
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 commande az containerapp sessionpool update
.
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.
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.
Utilisation des sessions
Votre application interagit avec une session à l’aide de l’API de gestion du pool de sessions.
Un point de terminaison de gestion de pool pour les sessions de conteneur personnalisées suit ce format : https://<SESSION_POOL>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io
.
Pour récupérer le point de terminaison de gestion du pool de sessions, utilisez la commande az containerapp sessionpool show
:
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 d’authentification.
Chaque requête d’API doit également inclure le paramètre de chaîne de requête identifier
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.
Important
L’identificateur de session est une information sensible qui nécessite 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. La non-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.
Transfert de requêtes au conteneur de la session :
Tout ce qui se trouve dans le chemin après le point de terminaison de gestion de pool de base est transféré au conteneur de la session.
Par exemple, si vous appelez <POOL_MANAGEMENT_ENDPOINT>/api/uploadfile
, la requête est acheminée vers le conteneur de la session sur 0.0.0.0:<TARGET_PORT>/api/uploadfile
.
Interaction continue avec la session :
Vous pouvez continuer à adresser des requêtes à la même session. Si aucune requête n’est adressée à la session pendant une période plus longue que la période de refroidissement, la session est automatiquement supprimée.
Exemple de requête
L'exemple suivant montre une demande adressée à une session de conteneur personnalisée par un ID utilisateur.
Avant d’envoyer la demande, remplacez les espaces réservés entre crochets <>
par les valeurs propres à votre demande.
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!'"
}
Cette demande est transmise à la session du conteneur personnalisé avec l'identifiant de l'ID de l'utilisateur. Si la session n’est pas déjà en cours d’exécution, Azure Container Apps alloue une session à partir du pool avant de transférer la demande.
Dans l’exemple, le conteneur de la session reçoit la requête à http://0.0.0.0:<INGRESS_PORT>/<API_PATH_EXPOSED_BY_CONTAINER>
.
Utilisation d’une identité managée
Une identité managée de Microsoft Entra ID permet à vos pools de sessions conteneur personnalisées et à leurs sessions d’accéder à d’autres ressources protégées Microsoft Entra. Pour plus d’informations sur les identités managées dans Microsoft Entra ID, consultez Identités managées pour les ressources Azure.
Vous pouvez activer les identités managées pour vos pools de sessions de conteneur personnalisées. Les identités managées affectées par le système et affectées par l’utilisateur sont prises en charge.
Il existe deux façons d’utiliser des identités managées avec des pools de sessions de conteneur personnalisés :
Authentification par extraction d’images : utilisez l’identité managée pour vous authentifier auprès du registre de conteneurs pour extraire l’image conteneur.
Accès aux ressources : utilisez l’identité managée du pool de sessions dans une session pour accéder à d’autres ressources protégées Microsoft Entra. En raison de ses implications en matière de sécurité, cette fonctionnalité est désactivée par défaut.
Important
Si vous activez l’accès à l’identité managée dans une session, tout code ou programme en cours d’exécution dans la session peut créer des jetons Entra pour l’identité managée du pool. Étant donné que les sessions exécutent généralement du code non approuvé, utilisez cette fonctionnalité avec précaution.
Pour activer l’identité managée pour un pool de sessions de conteneur personnalisé, utilisez Azure Resource Manager.
Logging
Les journaux de console des sessions conteneur personnalisées sont disponibles dans l’espace de travail Log Analytics Azure associé à l’environnement Azure Container Apps dans une table nommée AppEnvSessionConsoleLogs_CL
.
Billing
Nous facturons les sessions de conteneur personnalisé en fonction des ressources consommées par le pool de sessions. Si vous souhaitez en savoir plus, veuillez consulter la rubrique Facturation d’Azure Container Apps.