Tutoriel : Créer un montage de volume Azure Files dans Azure Container Apps

Apprenez à écrire dans un stockage permanent dans une application conteneur à l’aide d’un montage de stockage Azure Files. Pour plus d’informations sur les montages de stockage, consultez Utiliser des montages de stockage dans Azure Container Apps.

Ce tutoriel utilise une authentification par identité managée (preview), que nous recommandons pour les nouveaux montages de fichiers SMB. L’identité gérée appartient à l’environnement Container Apps. Vous n’avez pas besoin de récupérer, stocker ou effectuer la rotation d’une clé de compte de stockage pour monter le partage.

Dans ce tutoriel, vous allez apprendre à :

  • Créer un environnement Container Apps
  • Créer un compte de stockage Azure
  • Définir un partage de fichiers dans le compte de stockage
  • Accorder à l’identité gérée de l’environnement un accès au partage de fichiers
  • Lier l’environnement au partage de fichiers de stockage
  • Monter le partage de stockage dans un conteneur individuel
  • Vérifier le montage du système de stockage en vérifiant le journal des accès au site web

Remarque

Azure Container Apps prend en charge le montage de partages de fichiers à l’aide de protocoles SMB et NFS. Ce tutoriel montre le montage d’un partage Azure Files à l’aide du protocole SMB. Pour en savoir plus sur le montage de partages NFS, consultez Utiliser des montages de stockage dans Azure Container Apps.

Conditions préalables

  • Installez la dernière version d’Azure CLI.
  • Utilisez un abonnement Azure avec les autorisations nécessaires pour créer des ressources et attribuer des rôles de contrôle d’accès en fonction du rôle Azure (Azure RBAC). Pour attribuer des rôles, il faut Microsoft.Authorization/roleAssignments/write une autorisation au niveau du compte de stockage.

Configurer l’environnement

Les commandes suivantes définissent des variables d’environnement et vérifient que votre extension Container Apps est à jour.

  1. Se connecter à Azure CLI.

    az login
    
  2. Configurez les variables d’environnement utilisées dans différentes commandes à suivre.

    RESOURCE_GROUP="my-container-apps-group"
    ENVIRONMENT_NAME="my-storage-environment"
    LOCATION="canadacentral"
    
  3. Vérifiez que vous disposez de la dernière version de l’extension Azure CLI Container Apps.

    az extension add -n containerapp --upgrade
    
  4. Enregistrez l’espace de noms Microsoft.App.

    az provider register --namespace Microsoft.App
    
  5. Enregistrez le fournisseur Microsoft.OperationalInsights pour l’espace de travail Log Analytics Azure Monitor s'il n'a pas encore été utilisé.

    az provider register --namespace Microsoft.OperationalInsights
    

Créer un environnement

Les étapes suivantes créent un groupe de ressources et un environnement Container Apps.

  1. Créez un groupe de ressources.

    az group create \
      --name $RESOURCE_GROUP \
      --location $LOCATION \
      --query "properties.provisioningState"
    

    Après sa création, la commande retourne un message « Succeeded ».

    À la fin de ce tutoriel, vous pouvez supprimer le groupe de ressources pour supprimer tous les services créés pendant cet article.

  2. Créez un environnement Container Apps.

    az containerapp env create \
      --name $ENVIRONMENT_NAME \
      --resource-group $RESOURCE_GROUP \
      --location "$LOCATION" \
      --mi-system-assigned \
      --query "properties.provisioningState"
    

    Après sa création, la commande retourne un message « Opération réussie ».

    Utilisez le drapeau --mi-system-assigned pour activer l’identité gérée assignée par le système de l’environnement. Aux étapes suivantes, vous accordez à cette identité l’accès au partage de fichiers.

    Les montages de stockage sont associés à un environnement Container Apps et configurés dans des applications conteneur individuelles.

Configurer un compte de stockage

Ensuite, créez un compte de stockage et établissez un partage de fichiers à monter sur l’application conteneur.

  1. Définissez un nom de compte de stockage.

    Cette commande génère un suffixe aléatoire au nom du compte de stockage pour garantir l’unicité.

    STORAGE_ACCOUNT_NAME="myacastorageaccount$RANDOM"
    
  2. Créez un compte de stockage Azure.

    az storage account create \
      --resource-group $RESOURCE_GROUP \
      --name $STORAGE_ACCOUNT_NAME \
      --location "$LOCATION" \
      --kind StorageV2 \
      --sku Standard_LRS \
      --enable-large-file-share \
      --enable-smb-oauth true \
      --query provisioningState
    

    Une fois créée, la commande renvoie un message « Succeeded ».

    Le --enable-smb-oauth true drapeau active l’Identité Gérée pour SMB (SMBOAuth) sur le compte de stockage. Si vous utilisez un compte de stockage existant, activez ce réglage avant de créer le montage du volume. Pour les instructions, voir Configurer la propriété d’accès de l’identité gérée sur votre compte de stockage.

    Les paramètres de sécurité SMB du compte de stockage doivent également permettre l’authentification Kerberos. Si vous utilisez un profil de sécurité SMB personnalisé, consultez les paramètres de sécurité SMB.

  3. Définissez un nom de partage de fichiers.

    STORAGE_SHARE_NAME="myfileshare"
    
  4. Créez un partage de fichiers pour le service stockage Azure.

    az storage share-rm create \
      --resource-group $RESOURCE_GROUP \
      --storage-account $STORAGE_ACCOUNT_NAME \
      --name $STORAGE_SHARE_NAME \
      --quota 1024 \
      --enabled-protocols SMB \
      --output table
    
  5. Définissez le nom du montage de stockage.

    STORAGE_MOUNT_NAME="mystoragemount"
    

    Cette valeur est le nom utilisé pour définir le lien de montage de stockage de votre environnement Container Apps vers votre compte stockage Azure.

Accordez à l’identité gérée l’accès

Attribuer le rôle Storage File Data SMB MI Admin à l’identité gérée de l’environnement au niveau du périmètre du compte de stockage. Ce rôle autorise l’identité à accéder aux fichiers et répertoires dans le partage SMB.

ENVIRONMENT_PRINCIPAL_ID=$(az containerapp env show \
  --name $ENVIRONMENT_NAME \
  --resource-group $RESOURCE_GROUP \
  --query identity.principalId \
  --output tsv)

STORAGE_ACCOUNT_ID=$(az storage account show \
  --name $STORAGE_ACCOUNT_NAME \
  --resource-group $RESOURCE_GROUP \
  --query id \
  --output tsv)

az role assignment create \
  --assignee-object-id "$ENVIRONMENT_PRINCIPAL_ID" \
  --assignee-principal-type ServicePrincipal \
  --role "Storage File Data SMB MI Admin" \
  --scope "$STORAGE_ACCOUNT_ID"

Prévoyez le temps nécessaire pour que l’attribution du rôle se propage avant de créer le point de montage de stockage. Pour attribuer le rôle dans le portail Azure à la place, voir Assigner un rôle RBAC intégré à l’identité gérée.

Créer le montage de stockage

Vous pouvez maintenant mettre à jour la configuration de l’application conteneur pour prendre en charge le montage du stockage.

  1. Créez le lien de stockage dans l’environnement.

    az containerapp env storage set \
      --access-mode ReadWrite \
      --storage-type AzureFile \
      --azure-file-account-name $STORAGE_ACCOUNT_NAME \
      --azure-file-identity system \
      --azure-file-share-name $STORAGE_SHARE_NAME \
      --storage-name $STORAGE_MOUNT_NAME \
      --name $ENVIRONMENT_NAME \
      --resource-group $RESOURCE_GROUP \
      --output table
    

    Cette commande crée un lien entre l’environnement Container Apps et le partage de fichiers créé avec la commande az storage share-rm. L'option --azure-file-identity system permet de s'authentifier auprès d'Azure Files en utilisant l'identité managée attribuée au système de l'environnement.

    Pour une identité gérée attribuée par l’utilisateur, attribuez l’identité à l’environnement et utilisez son identifiant de ressource complet au lieu de system. L’authentification des clés de compte de stockage reste prise en charge comme alternative. Ne pas combiner --azure-file-identity avec --azure-file-account-key ou --azure-file-key-vault-secret-url. Pour des exemples, voir Utiliser des montages de stockage dans Azure Container Apps.

    Maintenant que le compte de stockage et l’environnement sont liés, vous pouvez créer une application conteneur qui utilise le montage de stockage.

  2. Définissez le nom de l’application conteneur.

    CONTAINER_APP_NAME="my-container-app"
    
  3. Créez l’application conteneur.

    az containerapp create \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --environment $ENVIRONMENT_NAME \
      --image nginx \
      --min-replicas 1 \
      --max-replicas 1 \
      --target-port 80 \
      --ingress external \
      --query properties.configuration.ingress.fqdn
    

    Cette commande affiche l’URL de votre nouvelle application conteneur.

  4. Copiez l’URL et collez-la dans votre navigateur web pour accéder au site web.

    Une fois la page chargée, le message « Bienvenue dans nginx ! » s’affiche. Maintenez cet onglet de navigateur ouvert. Vous reviendrez sur le site Internet pendant les étapes de vérification du montage de stockage.

    Maintenant que vous avez confirmé que l’application conteneur est configurée, vous pouvez mettre à jour l’application avec une définition de montage de stockage.

  5. Exportez la configuration de l’application conteneur.

    az containerapp show \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --output yaml > app.yaml
    

    Remarque

    Bien que cette application n’ait pas de secrets, de nombreuses applications font des secrets de fonctionnalités. Par défaut, lorsque vous exportez la configuration d’une application, les valeurs des secrets ne sont pas incluses dans le YAML généré.

    Si vous n’avez pas besoin de modifier les valeurs de secret, vous pouvez supprimer la secrets section et vos secrets restent inchangés. Si vous devez modifier la valeur d’un secret, veillez à fournir name et value pour tous les secrets dans le fichier avant de tenter de mettre à jour l’application. Omettre un secret de la section secrets supprime le secret.

  6. Ouvrez app.yaml dans un éditeur de code.

  7. Remplacez la volumes: null définition dans la template section par une volumes: définition référençant le volume de stockage. La section de modèle doit ressembler à ce qui suit :

    template:
      containers:
      - image: nginx
        imageType: ContainerImage
        name: my-container-app
        resources:
          cpu: 0.5
          ephemeralStorage: 2Gi
          memory: 1Gi
        volumeMounts:
        - volumeName: my-azure-file-volume
          mountPath: /var/log/nginx
      initContainers: null
      revisionSuffix: ''
      scale:
        cooldownPeriod: 300
        maxReplicas: 1
        minReplicas: 1
        pollingInterval: 30
        rules: null
      serviceBinds: null
      terminationGracePeriodSeconds: null
      volumes:
      - name: my-azure-file-volume
        storageName: mystoragemount
        storageType: AzureFile
    

    La nouvelle template.volumes section inclut les propriétés suivantes.

    Propriété Descriptif
    name Cette valeur identifie le volume au niveau de l’application et est référencée par volumeName dans le montage de volume du conteneur.
    storageName Cette valeur correspond au nom de définition de stockage créé par l’appel de la az containerapp env storage set commande.
    storageType Cette valeur détermine le type de volume de stockage défini pour l’environnement. Dans ce cas, un montage Azure Files est déclaré.

    La section volumes définit les volumes au niveau de l’application que votre conteneur d’applications ou les conteneurs side-car peuvent référencer via une section volumeMounts associée à un conteneur.

    L’authentification par identité gérée ne modifie pas la configuration des volumes au niveau de l’application. Continuez à utiliser storageType: AzureFile pour les montages SMB.

  8. Ajoutez une volumeMounts section au nginx conteneur dans la containers section.

    containers:
      - image: nginx
        name: my-container-app
        volumeMounts:
        - volumeName: my-azure-file-volume
          mountPath: /var/log/nginx
    

    La nouvelle volumeMounts section inclut les propriétés suivantes :

    Propriété Descriptif
    volumeName Cette valeur doit correspondre au nom défini dans la volumes définition.
    mountPath Cette valeur définit le chemin d’accès dans votre conteneur où le stockage est monté.
  9. Mettez à jour l’application conteneur avec la nouvelle configuration de montage de stockage.

    az containerapp update \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP \
      --yaml app.yaml \
      --output table
    

Vérifier le montage de stockage

Maintenant que le montage de stockage est établi, vous pouvez manipuler des fichiers dans Stockage Azure à partir de votre conteneur. Utilisez les commandes suivantes pour observer le montage de stockage au travail.

  1. Ouvrez un interpréteur de commandes interactif à l’intérieur de l’application conteneur pour exécuter des commandes à l’intérieur du conteneur en cours d’exécution.

    az containerapp exec \
      --name $CONTAINER_APP_NAME \
      --resource-group $RESOURCE_GROUP
    

    Cette commande peut prendre un moment pour ouvrir l’interpréteur de commandes distant. Une fois l’interpréteur de commandes prêt, vous pouvez interagir avec le montage de stockage via les commandes du système de fichiers. Pour plus d’informations, consultez Se connecter à une console de conteneur dans Azure Container Apps.

  2. Accédez au dossier nginx /var/log/nginx .

    cd /var/log/nginx
    
  3. Revenez au navigateur et accédez au site web et actualisez la page quelques fois.

    Les requêtes adressées au site web créent une série d’entrées de flux de journal.

  4. Revenez à votre terminal et listez les valeurs du /var/log/nginx dossier.

    ls
    

    Notez comment les fichiers access.log et error.log apparaissent dans ce dossier. Ces fichiers sont écrits dans le montage Azure Files dans votre partage de stockage Azure créé aux étapes précédentes.

  5. Affichez le contenu du fichier access.log .

    cat access.log
    
  6. Quittez l’interpréteur de commandes interactif du conteneur pour revenir à votre session de terminal locale.

    exit
    
  7. À présent, vous pouvez afficher les fichiers dans le portail Azure pour vérifier qu’ils existent dans votre compte stockage Azure. Imprimez le nom de votre compte de stockage généré de manière aléatoire.

    echo $STORAGE_ACCOUNT_NAME
    
  8. Accédez au portail Azure et ouvrez le compte de stockage créé dans cette procédure.

  9. Sous Stockage de données , sélectionnez Partages de fichiers.

  10. Sélectionnez myfileshare pour voir les fichiers access.log et error.log .

Nettoyer les ressources

Si vous ne souhaitez pas continuer à utiliser cette application, exécutez la commande suivante pour supprimer le groupe de ressources ainsi que toutes les ressources créées dans cet article.

az group delete \
  --name $RESOURCE_GROUP

Étapes suivantes