Tutorial: Erstellen einer Azure Files-Volumeeinbindung in Azure Container Apps

Erfahren Sie, wie Sie in einen permanenten Speicher in einer Container-App schreiben, indem Sie eine Azure Files-Speicherbereitstellung verwenden. Weitere Informationen zu Speicher-Einbindungen finden Sie unter Verwenden von Speicher-Einbindungen in Azure Container Apps.

Dieses Tutorial verwendet eine verwaltete Identitätsauthentifizierung (Vorschau), die wir für neue SMB-Datei-Mounts empfehlen. Die verwaltete Identität gehört zur Container-Apps-Umgebung. Du musst keinen Speicherkontoschlüssel abrufen, speichern oder rotieren, um den Share zu mounten.

In diesem Tutorial lernen Sie Folgendes:

  • Container-Apps-Umgebung erstellen
  • Erstellen eines Azure-Speicherkontos
  • Definition einer Dateifreigabe im Speicherkonto
  • Gewähren Sie der verwalteten Identität der Umgebung Zugriff auf die Dateifreigabe
  • Verknüpfen der Umgebung mit der Speicherdateifreigabe
  • Bereitstellen der Speicherfreigabe in einem einzelnen Container
  • Überprüfen der Speichereinbindung durch Anzeigen des Websitezugriffsprotokolls

Hinweis

Azure Container Apps unterstützt das Einbinden von Dateifreigaben mithilfe der SMB- und NFS-Protokolle. In diesem Tutorial wird das Einbinden einer Azure Files-Freigabe mithilfe des SMB-Protokolls veranschaulicht. Weitere Informationen zum Bereitstellen von NFS-Freigaben finden Sie unter Verwenden von Speicherbereitstellungen in Azure Container Apps.

Voraussetzungen

  • Installieren Sie die aktuelle Version der Azure CLI.
  • Verwenden Sie ein Azure-Abonnement mit Berechtigungen, um Ressourcen zu erstellen und Azure RBAC-Rollen (Rollenbasierte Azure-Zugriffssteuerung) zuzuweisen. Um Rollen zuzuweisen, benötigen Sie im Bereich des Speicherkontos die Berechtigung Microsoft.Authorization/roleAssignments/write.

Einrichten der Umgebung

Die folgenden Befehle definieren Umgebungsvariablen und stellen sicher, dass die Container-Apps-Erweiterung auf dem neuesten Stand ist.

  1. Melden Sie sich bei der Azure CLI an.

    az login
    
  2. Richten Sie Umgebungsvariablen ein, die in verschiedenen nachfolgenden Befehlen verwendet werden.

    RESOURCE_GROUP="my-container-apps-group"
    ENVIRONMENT_NAME="my-storage-environment"
    LOCATION="canadacentral"
    
  3. Stellen Sie sicher, dass Sie über die neueste Version der Azure CLI-Erweiterung für Container-Apps verfügen.

    az extension add -n containerapp --upgrade
    
  4. Registrieren Sie den Microsoft.App Namespace.

    az provider register --namespace Microsoft.App
    
  5. Registrieren Sie den Microsoft.OperationalInsights-Anbieter für den Azure Monitor Log Analytics-Arbeitsbereich, wenn Sie ihn noch nicht verwendet haben.

    az provider register --namespace Microsoft.OperationalInsights
    

Erstellen einer Umgebung

Die folgenden Schritte erstellen eine Ressourcengruppe und eine Container-Apps-Umgebung.

  1. Erstellen Sie eine Ressourcengruppe.

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

    Nach der Erstellung gibt der Befehl eine Nachricht „Erfolgreich“ zurück.

    Am Ende dieses Lernprogramms können Sie die Ressourcengruppe löschen, um alle während dieses Artikels erstellten Dienste zu entfernen.

  2. Erstellen Sie eine Container Apps-Umgebung.

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

    Nach der Erstellung gibt der Befehl eine Nachricht „Erfolgreich“ zurück.

    Verwenden Sie das --mi-system-assigned-Flag, um die systemseitig zugewiesene verwaltete Identität der Umgebung zu aktivieren. In späteren Schritten gewährst du dieser Identität Zugriff auf die Dateifreigabe.

    Speicherbereitstellungen sind einer Container-Apps-Umgebung zugeordnet und in einzelnen Container-Apps konfiguriert.

Einrichten eines Speicherkontos

Erstellen Sie als Nächstes ein Speicherkonto und richten Sie eine Dateifreigabe ein, die an die Container-App bereitgestellt werden soll.

  1. Definieren Sie einen Speicherkontonamen.

    Mit diesem Befehl wird ein zufälliges Suffix für den Namen des Speicherkontos generiert, um die Eindeutigkeit sicherzustellen.

    STORAGE_ACCOUNT_NAME="myacastorageaccount$RANDOM"
    
  2. Erstellen Sie ein Azure Storage-Konto.

    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
    

    Nach der Erstellung gibt der Befehl eine „Succeeded“-Meldung zurück.

    Das Flag --enable-smb-oauth true aktiviert Managed Identity für SMB (SMBOAuth) auf dem Speicherkonto. Wenn du ein bestehendes Speicherkonto verwendest, aktiviere diese Einstellung, bevor du die Einbindung erstellst. Anleitungen finden Sie unter Eigenschaft für den Zugriff der verwalteten Identität auf Ihrem Speicherkonto konfigurieren.

    Die SMB-Sicherheitseinstellungen des Speicherkontos müssen ebenfalls Kerberos-Authentifizierung zulassen. Wenn du ein benutzerdefiniertes SMB-Sicherheitsprofil verwendest, siehe SMB-Sicherheitseinstellungen.

  3. Definieren Sie einen Dateifreigabenamen.

    STORAGE_SHARE_NAME="myfileshare"
    
  4. Erstellen Sie die Azure Storage-Dateifreigabe.

    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. Definieren Sie den Namen der Speichereinbindung.

    STORAGE_MOUNT_NAME="mystoragemount"
    

    Dieser Wert ist der Name, der verwendet wird, um den Speicher-Bereitstellungslink aus Ihrer Container-Apps-Umgebung mit Ihrem Azure Storage-Konto zu definieren.

Der verwalteten Identität Zugriff gewähren

Weisen Sie die Rolle Storage File Data SMB MI Admin der verwalteten Identität der Umgebung im Speicherkontoumfang zu. Diese Rolle autorisiert die Identität zum Zugriff auf Dateien und Verzeichnisse in der SMB-Share.

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"

Warten Sie, bis die Rollenzuweisung verteilt wurde, bevor Sie die Speichereinbindung erstellen. Um die Rolle stattdessen im Azure-Portal zuzuweisen, siehe Eine integrierte RBAC-Rolle der verwalteten Identität zuweisen.

Speicher-Mount erstellen

Jetzt können Sie die Container-App-Konfiguration aktualisieren, um die Speicher-Bereitstellung zu unterstützen.

  1. Erstellen Sie die Speicherverbindung in der Umgebung.

    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
    

    Dieser Befehl stellt eine Verbindung zwischen der Container Apps-Umgebung und der mit dem Befehl az storage share-rm erstellten Dateifreigabe her. Mit der Option --azure-file-identity system erfolgt die Authentifizierung bei Azure Files durch Verwendung der systemzugewiesenen verwalteten Identität der Umgebung.

    Für eine vom Benutzer zugewiesene verwaltete Identität weisen Sie die Identität der Umgebung zu und verwenden Sie ihre vollständige Ressourcen-ID anstelle von system. Die Authentifizierung des Speicherkontoschlüssels wird weiterhin als Alternative unterstützt. Kombinieren Sie nicht --azure-file-identity mit --azure-file-account-key oder --azure-file-key-vault-secret-url. Beispiele finden Sie unter Use storage mounts in Azure Container Apps.

    Nachdem das Speicherkonto und die Umgebung verknüpft sind, können Sie eine Container-App erstellen, die die Speicher-Bereitstellung verwendet.

  2. Definieren Sie den Namen der Container-App.

    CONTAINER_APP_NAME="my-container-app"
    
  3. Erstellen Sie die Container-App.

    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
    

    Mit diesem Befehl wird die URL Ihrer neuen Container-App angezeigt.

  4. Kopieren Sie die URL, und fügen Sie sie in Ihren Webbrowser ein, um zur Website zu navigieren.

    Sobald die Seite geladen wurde, wird die Meldung "Willkommen bei nginx!" angezeigt. Halten Sie diese Browser-Registerkarte offen. Sie kehren während der Überprüfungsschritte der Speichereinbindung zur Website zurück.

    Nachdem Sie nun bestätigt haben, dass die Container-App konfiguriert ist, können Sie die App mit einer Definition für das Speicher-Mount aktualisieren.

  5. Exportieren Sie die Konfiguration der Container-App.

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

    Hinweis

    Obwohl diese Anwendung keine geheimen Schlüssel enthält, führen viele Apps geheime Features aus. Wenn Sie die Konfiguration einer App exportieren, sind die Werte für geheime Schlüssel standardmäßig nicht im generierten YAML enthalten.

    Wenn Sie keine geheimen Werte ändern müssen, können Sie den secrets Abschnitt entfernen, und Die geheimen Schlüssel bleiben unverändert. Wenn Sie den Wert eines Geheimnisses ändern müssen, stellen Sie sicher, dass Sie sowohl name als auch value für alle Geheimnisse in der Datei angeben, bevor Sie versuchen, die App zu aktualisieren. Wenn Sie einen geheimen Schlüssel aus dem secrets Abschnitt weglassen, wird der geheime Schlüssel gelöscht.

  6. Öffnen Sie "app.yaml " in einem Code-Editor.

  7. Ersetzen Sie die volumes: null Definition im template Abschnitt durch eine volumes: Definition, die auf das Speichervolume verweist. Der Vorlagenabschnitt sollte wie folgt aussehen:

    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
    

    Der neue template.volumes Abschnitt enthält die folgenden Eigenschaften.

    Eigentum BESCHREIBUNG
    name Dieser Wert identifiziert das App-Level-Volumen und wird von volumeName im Volume-Mount des Containers referenziert.
    storageName Dieser Wert entspricht dem Speicherdefinitionsnamen, der durch den Aufruf des Befehls az containerapp env storage set erstellt wurde.
    storageType Dieser Wert bestimmt den Typ des für die Umgebung definierten Speichervolumes. In diesem Fall wird ein Azure Files-Mount deklariert.

    Der Abschnitt volumes definiert Volumes auf App-Ebene, auf die Ihr Anwendungscontainer oder Sidecar-Container verweisen kann, über einen Abschnitt volumeMounts, der einem Container zugeordnet ist.

    Die Authentifizierung mit verwalteter Identität ändert die Volumekonfiguration auf App-Ebene nicht. Verwenden Sie storageType: AzureFile weiterhin für SMB-Einbindungen.

  8. Fügen Sie dem volumeMounts Container im nginx Abschnitt einen containers Abschnitt hinzu.

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

    Der neue volumeMounts Abschnitt enthält die folgenden Eigenschaften:

    Eigentum BESCHREIBUNG
    volumeName Dieser Wert muss mit dem in der volumes Definition definierten Namen übereinstimmen.
    mountPath Dieser Wert definiert den Pfad in Ihrem Container, in dem der Speicher bereitgestellt wird.
  9. Aktualisieren Sie die Container-App mit der neuen Speicher-Mount-Konfiguration.

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

Verifizieren der Speicherbereitstellung

Nachdem das Speichermount eingerichtet wurde, können Sie Dateien in Azure Storage aus Ihrem Container bearbeiten. Verwenden Sie die folgenden Befehle, um die Speicherbereitstellung bei der Arbeit zu beobachten.

  1. Öffnen Sie eine interaktive Shell innerhalb der Container-App, um Befehle innerhalb des ausgeführten Containers auszuführen.

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

    Dieser Befehl kann einen Moment dauern, um die Remoteshell zu öffnen. Sobald die Shell bereit ist, können Sie über Dateisystembefehle mit dem Speichermount interagieren. Weitere Informationen finden Sie unter Herstellen einer Verbindung mit einer Containerkonsole in Azure Container Apps.

  2. Wechseln Sie in das Verzeichnis /var/log/nginx.

    cd /var/log/nginx
    
  3. Kehren Sie zum Browser zurück, und navigieren Sie zu der Website, und aktualisieren Sie die Seite ein paar Mal.

    Die Anforderungen an die Website erstellen eine Reihe von Logstream-Einträgen.

  4. Kehren Sie zu Ihrem Terminal zurück, und listen Sie die Werte des /var/log/nginx Ordners auf.

    ls
    

    Beachten Sie, wie die dateien access.log und error.log in diesem Ordner angezeigt werden. Diese Dateien werden in die Azure Files-Einbindung in Ihrer Azure Storage-Freigabe geschrieben, die in den vorherigen Schritten erstellt wurde.

  5. Zeigen Sie den Inhalt der access.log Datei an.

    cat access.log
    
  6. Beenden Sie die interaktive Shell des Containers, um zu Ihrer lokalen Terminalsitzung zurückzukehren.

    exit
    
  7. Jetzt können Sie die Dateien im Azure-Portal anzeigen, um zu überprüfen, ob sie in Ihrem Azure Storage-Konto vorhanden sind. Drucken Sie den Namen Ihres zufällig generierten Speicherkontos.

    echo $STORAGE_ACCOUNT_NAME
    
  8. Navigieren Sie zum Azure-Portal, und öffnen Sie das in diesem Verfahren erstellte Speicherkonto.

  9. Wählen Sie unter Datenspeicher die Option Dateifreigaben aus.

  10. Wählen Sie myfileshare, um die access.log- und error.log-Dateien anzuzeigen.

Bereinigen von Ressourcen

Wenn Sie diese Anwendung nicht weiterhin verwenden werden, führen Sie den folgenden Befehl aus, um die Ressourcengruppe zusammen mit allen in diesem Artikel erstellten Ressourcen zu löschen.

az group delete \
  --name $RESOURCE_GROUP

Nächste Schritte