Handleiding: Een Azure Files-volumekoppeling maken in Azure Container Apps

Meer informatie over het schrijven naar permanente opslag in een container-app met behulp van een Azure Files-opslagkoppeling. Voor meer informatie over opslagkoppelingen, zie Opslagkoppelingen gebruiken in Azure Container Apps.

Deze tutorial gebruikt beheerde identiteitsauthenticatie (preview), die wij aanraden voor nieuwe SMB-bestandsmounts. De beheerde identiteit behoort tot de Container Apps-omgeving. Je hoeft geen opslagaccountsleutel op te halen, op te slaan of te roteren om de share te mounten.

In deze zelfstudie leert u het volgende:

  • Een Container Apps-omgeving maken
  • Een Azure Storage-account maken
  • Een bestandsshare definiëren in het opslagaccount
  • Verleen de beheerde identiteit van de omgeving toegang tot de bestandsdeling
  • De omgeving koppelen aan de opslagbestandsshare
  • Bevestig het opslaggedeelte in een afzonderlijke container
  • Controleer de opslagmontage door het toegangslogboek van de website te bekijken

Opmerking

Azure Container Apps ondersteunt het koppelen van bestandsshares met behulp van SMB- en NFS-protocollen. In deze zelfstudie ziet u hoe u een Azure Files-share kunt koppelen met behulp van het SMB-protocol. Zie Opslagkoppelingen gebruiken in Azure Container Apps voor meer informatie over het koppelen van NFS-shares.

Vereiste voorwaarden

  • Installeer de nieuwste versie van de Azure CLI.
  • Gebruik een Azure-abonnement met permissies om resources te creëren en Azure role-based access control (Azure RBAC) rollen toe te wijzen. Om rollen toe te wijzen, heb je de machtiging Microsoft.Authorization/roleAssignments/write nodig op het bereik van het opslagaccount.

De omgeving instellen

Met de volgende opdrachten definieert u omgevingsvariabelen en zorgt u ervoor dat uw Container Apps-extensie up-to-date is.

  1. Meld u aan bij de Azure CLI.

    az login
    
  2. Stel omgevingsvariabelen in die in verschillende opdrachten worden gebruikt.

    RESOURCE_GROUP="my-container-apps-group"
    ENVIRONMENT_NAME="my-storage-environment"
    LOCATION="canadacentral"
    
  3. Zorg ervoor dat u de nieuwste versie van de Azure CLI-extensie voor Container Apps hebt.

    az extension add -n containerapp --upgrade
    
  4. Registreer de Microsoft.App naamruimte.

    az provider register --namespace Microsoft.App
    
  5. Registreer de Microsoft.OperationalInsights-provider voor de Azure Monitor Log Analytics-werkruimte als u deze nog niet eerder hebt gebruikt.

    az provider register --namespace Microsoft.OperationalInsights
    

Een omgeving maken

Met de volgende stappen maakt u een resourcegroep en een Container Apps-omgeving.

  1. Maak een resourcegroep.

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

    Zodra de opdracht is gemaakt, wordt het bericht Geslaagd geretourneerd.

    Aan het einde van deze zelfstudie kunt u de resourcegroep verwijderen om alle services te verwijderen die tijdens dit artikel zijn gemaakt.

  2. Maak een Container Apps-omgeving.

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

    Zodra de opdracht is gemaakt, wordt het bericht Geslaagd geretourneerd.

    Gebruik de --mi-system-assigned vlag om de door het systeem toegewezen beheerde identiteit van de omgeving in te schakelen. In latere stappen verleen je deze identiteit toegang tot de bestandsdeling.

    Opslagkoppelingen zijn gekoppeld aan een Container Apps-omgeving en worden geconfigureerd binnen individuele container-apps.

Een opslagaccount instellen

Maak vervolgens een opslagaccount en stel een bestandsshare in om te koppelen aan de container-app.

  1. Definieer de naam van een opslagaccount.

    Met deze opdracht wordt een willekeurig achtervoegsel gegenereerd voor de naam van het opslagaccount om de uniekheid te garanderen.

    STORAGE_ACCOUNT_NAME="myacastorageaccount$RANDOM"
    
  2. Een Azure Storage-account maken.

    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
    

    Zodra de opdracht is gemaakt, wordt het bericht Geslaagd geretourneerd.

    De --enable-smb-oauth true vlag maakt Managed Identity voor SMB (SMBOAuth) mogelijk op het opslagaccount. Als je een bestaand opslagaccount gebruikt, schakel dan deze instelling in voordat je de mount aanmaakt. Voor instructies, zie De toegangseigenschap van de beheerde identiteit configureren op je opslagaccount.

    De SMB-beveiligingsinstellingen van het opslagaccount moeten ook Kerberos-authenticatie toestaan. Als je een aangepast SMB-beveiligingsprofiel gebruikt, zie dan de SMB-beveiligingsinstellingen.

  3. Definieer de naam van een bestandsshare.

    STORAGE_SHARE_NAME="myfileshare"
    
  4. Maak de Azure Storage-bestandsshare.

    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. Definieer de naam van de opslagkoppeling.

    STORAGE_MOUNT_NAME="mystoragemount"
    

    Deze waarde is de naam die wordt gebruikt om de koppeling voor opslagkoppeling vanuit uw Container Apps-omgeving naar uw Azure Storage-account te definiëren.

Verleen de beheerde identiteit toegang

Wijs de rol Storage File Data SMB MI Admin toe aan de beheerde identiteit van de omgeving binnen het opslagaccount-scope. Deze rol autoriseert de identiteit om toegang te krijgen tot bestanden en mappen in de 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"

Wacht even tot de roltoewijzing is doorgevoerd voordat je de storage mount maakt. Om de rol in het Azure-portaal toe te wijzen, zie Wijs een ingebouwde RBAC-rol toe aan de beheerde identiteit.

De opslagmount maken

U kunt nu de configuratie van de container-app bijwerken ter ondersteuning van de opslagkoppeling.

  1. Maak de opslagkoppeling in de omgeving.

    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
    

    Dit commando creëert een verbinding tussen de Container Apps-omgeving en de bestandsdeling die met het commando az storage share-rm is aangemaakt. De --azure-file-identity system optie verifieert zich bij Azure Files door gebruik te maken van de systeem-toegewezen beheerde identiteit van de omgeving.

    Voor een door de gebruiker toegewezen beheerde identiteit wijs je de identiteit toe aan de omgeving en gebruik je de volledige resource ID in plaats van system. Verificatie met opslagsleutel van opslagaccount blijft ondersteund als alternatief. Combineer niet --azure-file-identity met --azure-file-account-key of --azure-file-key-vault-secret-url. Zie voor voorbeelden Opslagkoppelingen gebruiken in Azure Container Apps.

    Nu het opslagaccount en de omgeving zijn gekoppeld, kunt u een container-app maken die gebruikmaakt van de opslagkoppeling.

  2. Definieer de naam van de container-app.

    CONTAINER_APP_NAME="my-container-app"
    
  3. Maak de 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
    

    Met deze opdracht wordt de URL van uw nieuwe container-app weergegeven.

  4. Kopieer de URL en plak deze in uw webbrowser om naar de website te navigeren.

    Zodra de pagina is geladen, ziet u het bericht Welkom bij nginx!. Houd dit browsertabblad geopend. U keert terug naar de website tijdens de verificatiestappen voor opslagkoppelingen.

    Nu u hebt bevestigd dat de container-app is geconfigureerd, kunt u de app bijwerken naar een definitie voor opslagkoppeling.

  5. Exporteer de configuratie van de container-app.

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

    Opmerking

    Hoewel deze toepassing geen geheimen heeft, hebben veel apps geheimen. Wanneer u de configuratie van een app exporteert, worden de waarden voor geheimen standaard niet opgenomen in de gegenereerde YAML.

    Als u geen geheime waarden hoeft te wijzigen, kunt u de secrets sectie verwijderen en blijven uw geheimen ongewijzigd. Als u de waarde van een geheim wilt wijzigen, moet u ook zowel de name als value voor alle geheimen in het bestand opgeven voordat u de app probeert bij te werken. Als u een geheim weglaat uit de secrets sectie, wordt het geheim verwijderd.

  6. Open app.yaml in een code-editor.

  7. Vervang de volumes: null definitie in de template sectie door een volumes: definitie die verwijst naar het opslagvolume. De sjabloonsectie moet er als volgt uitzien:

    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
    

    De nieuwe template.volumes sectie bevat de volgende eigenschappen.

    Vastgoed Beschrijving
    name Deze waarde identificeert het volume op app-niveau en is het volume waarnaar door volumeName wordt verwezen in de volumemount van de container.
    storageName Deze waarde komt overeen met de naam van de opslagdefinitie die is aangemaakt door de opdracht az containerapp env storage set aan te roepen.
    storageType Deze waarde bepaalt het type opslagvolume dat is gedefinieerd voor de omgeving. In dit geval wordt een Azure Files-koppeling gedeclareerd.

    De volumes sectie definieert volumes op app-niveau waarnaar uw toepassingscontainer of sidecar-containers kunnen verwijzen via een volumeMounts sectie die is gekoppeld aan een container.

    Beheerde identiteitsauthenticatie verandert de volumeconfiguratie op app-niveau niet. Blijf storageType: AzureFile gebruiken voor SMB-mounts.

  8. Voeg een volumeMounts sectie toe aan de nginx container in de containers sectie.

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

    De nieuwe volumeMounts sectie bevat de volgende eigenschappen:

    Vastgoed Beschrijving
    volumeName Deze waarde moet overeenkomen met de naam die is gedefinieerd in de volumes definitie.
    mountPath Deze waarde definieert het pad in uw container waar de opslag is gekoppeld.
  9. Werk de container-app bij met de nieuwe configuratie voor opslagkoppeling.

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

De opslagmontage controleren

Nu de opslagkoppeling tot stand is gebracht, kunt u bestanden in Azure Storage bewerken vanuit uw container. Gebruik de volgende opdrachten om de opslagmount in actie te observeren.

  1. Open een interactieve shell in de container-app om opdrachten uit te voeren in de actieve container.

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

    Het kan even duren voordat deze opdracht de externe shell opent. Zodra de shell gereed is, kunt u communiceren met de opslagkoppeling via bestandssysteemopdrachten. Zie Verbinding maken met een containerconsole in Azure Container Apps voor meer informatie.

  2. Verander naar de map nginx /var/log/nginx .

    cd /var/log/nginx
    
  3. Ga terug naar de browser en navigeer naar de website en vernieuw de pagina een paar keer.

    De aanvragen aan de website creëren een reeks logboekvermeldingen.

  4. Ga terug naar de terminal en vermeld de waarden van de /var/log/nginx map.

    ls
    

    U ziet hoe de access.log - en error.log-bestanden in deze map worden weergegeven. Deze bestanden worden naar de Azure Files-mount in uw Azure Storage-share geschreven, die u in de vorige stappen hebt aangemaakt.

  5. De inhoud van het access.log-bestand weergeven.

    cat access.log
    
  6. Sluit de interactieve shell van de container af om terug te keren naar uw lokale terminalsessie.

    exit
    
  7. U kunt nu de bestanden bekijken in Azure Portal om te controleren of ze bestaan in uw Azure Storage-account. Druk de naam van uw willekeurig gegenereerde opslagaccount af.

    echo $STORAGE_ACCOUNT_NAME
    
  8. Navigeer naar Azure Portal en open het opslagaccount dat in deze procedure is gemaakt.

  9. Selecteer onder Gegevensopslagbestandskoppelingen.

  10. Selecteer myfileshare om de access.log - en error.log bestanden te bekijken.

De hulpbronnen opschonen

Als u deze toepassing niet wilt blijven gebruiken, voert u de volgende opdracht uit om de resourcegroep te verwijderen, samen met alle resources die in dit artikel zijn gemaakt.

az group delete \
  --name $RESOURCE_GROUP

Volgende stappen