Esercitazione: Creare un volume di File di Azure montato in App contenitore di Azure

Impara a scrivere su archiviazione permanente in un'app contenitore utilizzando un punto di montaggio di File di Azure. Per altre informazioni sui montaggi di archiviazione, vedere Usare i montaggi di archiviazione in App Azure Container.

Questo tutorial utilizza l'autenticazione dell'identità gestita (preview), che raccomandiamo per i nuovi montaggi SMB. L'identità gestita appartiene all'ambiente Container Apps. Non è necessario recuperare, conservare o rinnovare una chiave dell'account di archiviazione per montare la condivisione file.

In questa esercitazione si apprenderà come:

  • Creare un ambiente Container Apps
  • Creare un account di archiviazione di Azure
  • Definire una condivisione file nell'account di archiviazione
  • Concedere all'identità gestita dell'ambiente l'accesso alla condivisione file
  • Collegare l'ambiente alla condivisione file di archiviazione
  • Montare la condivisione di archiviazione in un singolo contenitore
  • Verificare il montaggio dell'archivio visualizzando il registro di accesso al sito web

Annotazioni

App contenitore di Azure supporta il montaggio di condivisioni file usando protocolli SMB e NFS. Questa esercitazione illustra il montaggio di una condivisione file di Azure usando il protocollo SMB. Per ulteriori informazioni sul montaggio di condivisioni NFS, vedere Usare i montaggi di archiviazione in App contenitore di Azure.

Prerequisiti

  • Installare la versione più recente dell'interfaccia della riga di comando di Azure.
  • Usa un abbonamento Azure con autorizzazioni per creare risorse e assegnare ruoli del controllo degli accessi in base al ruolo di Azure (Azure RBAC). Per assegnare ruoli, serve l'autorizzazione Microsoft.Authorization/roleAssignments/write nell'ambito dell'account di archiviazione.

Configurare l'ambiente

I comandi seguenti definiscono le variabili di ambiente e assicurano che l'estensione App di contenitore sia aggiornata.

  1. Accedi all'interfaccia della riga di comando di Azure.

    az login
    
  2. Configurare le variabili di ambiente usate in vari comandi da seguire.

    RESOURCE_GROUP="my-container-apps-group"
    ENVIRONMENT_NAME="my-storage-environment"
    LOCATION="canadacentral"
    
  3. Assicurati di avere l'ultima versione dell'estensione di interfaccia della riga di comando di Azure per le app container.

    az extension add -n containerapp --upgrade
    
  4. Registrare lo spazio dei nomi Microsoft.App.

    az provider register --namespace Microsoft.App
    
  5. Registrare il provider Microsoft.OperationalInsights per l'area di lavoro di Monitoraggio di Azure Log Analytics, se non è stato usato in precedenza.

    az provider register --namespace Microsoft.OperationalInsights
    

Crea un ambiente

La procedura seguente consente di creare un gruppo di risorse e un ambiente app contenitore.

  1. Creare un gruppo di risorse.

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

    Dopo la creazione, il comando restituisce un messaggio "Succeeded".

    Alla fine di questa esercitazione, è possibile eliminare il gruppo di risorse per rimuovere tutti i servizi creati durante questo articolo.

  2. Crea un ambiente App Container.

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

    Dopo la creazione, il comando restituisce un messaggio "Succeeded".

    Usa il flag --mi-system-assigned per abilitare l'identità gestita assegnata dal sistema dell'ambiente. Nei passaggi successivi, concedi a questa identità l'accesso alla condivisione file.

    I montaggi di archiviazione sono associati a un ambiente app contenitore e configurati all'interno di singole app contenitore.

Impostare un account di archiviazione

Creare quindi un account di archiviazione e stabilire una condivisione file da montare nell'app contenitore.

  1. Definire il nome di un account storage.

    Questo comando genera un suffisso casuale al nome dell'account di archiviazione per garantire l'univocità.

    STORAGE_ACCOUNT_NAME="myacastorageaccount$RANDOM"
    
  2. Creare un account di archiviazione di 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
    

    Dopo la creazione, il comando restituisce un messaggio "Succeeded".

    Il --enable-smb-oauth true flag abilita l'Identità Gestita per SMB (SMBOAuth) sull'account storage. Se usi un account di storage esistente, attiva questa impostazione prima di creare il mount. Per le istruzioni, vedi Configura la proprietà di accesso dell'identità gestita sul tuo account di archiviazione.

    Le impostazioni di sicurezza SMB dell'account di archiviazione devono consentire anche l'autenticazione Kerberos. Se usi un profilo di sicurezza personalizzato per SMB, consulta le impostazioni di sicurezza SMB.

  3. Definire un nome di condivisione file.

    STORAGE_SHARE_NAME="myfileshare"
    
  4. Creare la condivisione di file nello spazio di Archiviazione 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. Definire il nome del montaggio di archiviazione.

    STORAGE_MOUNT_NAME="mystoragemount"
    

    Questo valore è il nome usato per definire il collegamento di montaggio dello storage dall'ambiente Container Apps al tuo account di Archiviazione di Azure.

Concedere l'accesso all'identità gestita

Assegna il ruolo Storage File Data SMB MI Admin all'identità gestita dell'ambiente nell'ambito dell'account di archiviazione. Questo ruolo autorizza l'identità ad accedere a file e directory nella condivisione 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"

Attendere che l'assegnazione del ruolo si propaghi prima di creare il montaggio dell'archiviazione. Per assegnare il ruolo nel portale Azure, vedi Assegna un ruolo RBAC integrato all'identità gestita.

Creare il punto di montaggio dello storage

Ora puoi modificare la configurazione dell'app contenitore per supportare il montaggio della memoria.

  1. Crea un collegamento di archiviazione nell'ambiente.

    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
    

    Questo comando crea un collegamento tra l'ambiente Container Apps e la condivisione file creata con il az storage share-rm comando. L'opzione --azure-file-identity system consente l'autenticazione ad File di Azure utilizzando l'identità gestita assegnata dal sistema dell'ambiente.

    Per un'identità gestita assegnata dall'utente, assegna l'identità all'ambiente e usa il suo ID di risorsa completo invece di system. L'autenticazione della chiave dell'account di archiviazione rimane supportata come alternativa. Non combinare --azure-file-identity con --azure-file-account-key o --azure-file-key-vault-secret-url. Per esempi, vedi Usa i mount di archiviazione in App contenitore di Azure.

    Ora che l'account di archiviazione e l'ambiente sono collegati, è possibile creare un'applicazione container che utilizza il punto di montaggio dello storage.

  2. Definire il nome dell'app contenitore.

    CONTAINER_APP_NAME="my-container-app"
    
  3. Crea l'app contenitore.

    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
    

    Questo comando visualizza l'URL della nuova app contenitore.

  4. Copiare l'URL e incollarlo nel Web browser per passare al sito Web.

    Una volta caricata la pagina, verrà visualizzato il messaggio "Benvenuto in nginx!". Mantenere aperta la scheda del browser. Tornerai al sito web durante i passaggi di verifica del montaggio della memoria.

    Dopo aver verificato che l'app contenitore è configurata, è possibile aggiornare l'app con una definizione di punto di montaggio storage.

  5. Esportare la configurazione dell'app container.

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

    Annotazioni

    Anche se questa applicazione non ha segreti, molte app presentano segreti. Per impostazione predefinita, quando si esporta la configurazione di un'app, i valori per i segreti non sono inclusi nel file YAML generato.

    Se non è necessario modificare i valori dei segreti, è possibile rimuovere la secrets sezione e i segreti rimangono invariati. In alternativa, se è necessario modificare il valore di un segreto, assicurarsi di specificare sia il name che value per tutti i segreti nel file prima di tentare di aggiornare l'app. L'omissione di un segreto dalla secrets sezione elimina il segreto.

  6. Aprire app.yaml in un editor di codice.

  7. Sostituire la volumes: null definizione nella template sezione con una volumes: definizione che fa riferimento al volume di archiviazione. La sezione del modello dovrebbe essere simile alla seguente:

    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 nuova template.volumes sezione include le proprietà seguenti.

    Proprietà Descrizione
    name Questo valore identifica il volume a livello di app ed è referenziato da volumeName nel montaggio del volume del container.
    storageName Questo valore corrisponde al nome della definizione di memoria creato chiamando il az containerapp env storage set comando.
    storageType Questo valore determina il tipo di volume di archiviazione definito per l'ambiente. In questo caso, viene dichiarato un montaggio di File di Azure.

    La sezione volumes definisce i volumi a livello di applicazione a cui il contenitore dell'applicazione o i contenitori sidecar possono fare riferimento tramite la sezione volumeMounts associata a un contenitore.

    L'autenticazione dell'identità gestita non cambia la configurazione dei volumi a livello di app. Continua a usarlo storageType: AzureFile per mount SMB.

  8. Aggiungi una sezione volumeMounts al contenitore nginx nella sezione containers.

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

    La nuova volumeMounts sezione include le proprietà seguenti:

    Proprietà Descrizione
    volumeName Questo valore deve corrispondere al nome definito nella volumes definizione.
    mountPath Questo valore definisce il percorso nel contenitore in cui è montata l'archiviazione.
  9. Aggiorna l'applicazione contenitore con la nuova configurazione di montaggio dello storage.

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

Verificare il montaggio dello spazio di archiviazione

Ora che il mount di archiviazione è stabilito, è possibile modificare i file in Archiviazione di Azure dal proprio container. Usare i comandi seguenti per osservare il montaggio di archiviazione sul luogo di lavoro.

  1. Apri una shell interattiva all'interno dell'applicazione contenitore per eseguire comandi all'interno del contenitore attivo.

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

    Questo comando può richiedere qualche minuto per aprire la shell remota. Quando la shell è pronta, è possibile interagire con il punto di montaggio della memoria tramite i comandi del file system. Per altre informazioni, vedere Connettersi a una console del contenitore in App Azure Container.

  2. Passare alla cartella nginx /var/log/nginx .

    cd /var/log/nginx
    
  3. Tornare al browser e passare al sito Web e aggiornare la pagina alcune volte.

    Le richieste effettuate al sito Web creano una serie di voci del flusso di log.

  4. Tornare al terminale ed elencare i valori della /var/log/nginx cartella.

    ls
    

    Si noti come i file access.log e error.log vengono visualizzati in questa cartella. Questi file vengono scritti sul punto di montaggio di File di Azure nella condivisione di archiviazione su Azure creata nei passaggi precedenti.

  5. Visualizzare il contenuto del file di access.log .

    cat access.log
    
  6. Esci dalla shell interattiva del contenitore per tornare alla sessione del terminale locale.

    exit
    
  7. È ora possibile visualizzare i file nel portale di Azure per verificare che esistano nell'account di archiviazione di Azure. Stampa il nome dell'account di archiviazione generato in modo casuale.

    echo $STORAGE_ACCOUNT_NAME
    
  8. Passare al portale di Azure e aprire l'account di archiviazione creato in questa procedura.

  9. In Archiviazione dati selezionare Condivisioni file.

  10. Seleziona myfileshare per visualizzare i file access.log e file error.log.

Pulire le risorse

Se non si intende continuare a usare questa applicazione, eseguire il comando seguente per eliminare il gruppo di risorse insieme a tutte le risorse create in questo articolo.

az group delete \
  --name $RESOURCE_GROUP

Passaggi successivi