Handledning: Skapa en Azure Files-volymmontering i Azure Container Apps

Lär dig att skriva till permanent lagring i en containerapp med hjälp av en Azure Files-lagringsmontering. Mer information om lagringsmonteringar finns i Använda lagringsmonteringar i Azure Container Apps.

Denna handledning använder hanterad identitetsautentisering (förhandsgranskning), vilket vi rekommenderar för nya SMB-filmonteringar. Den hanterade identiteten tillhör Container Apps-miljön. Du behöver inte hämta, lagra eller rotera/byta ut en lagringskontonyckel för att montera filresursen.

I den här tutorialen lär du dig följande:

  • Skapa en Container Apps-miljö
  • Skapa ett Azure Storage-konto
  • Definiera en fildelning i lagringskontot
  • Ge den hanterade identiteten för miljön åtkomst till fildelen
  • Länka miljön till lagringsfildelning
  • Montera lagringsdelen i en enskild container
  • Verifiera lagringsmonteringen genom att visa åtkomstloggen för webbplatsen

Anmärkning

Azure Container Apps stöder montering av fildelningar med hjälp av SMB- och NFS-protokoll. Den här handledningen visar hur du monterar en Azure Files-dela med hjälp av SMB-protokollet. Mer information om hur du monterar NFS-delningar finns i Använda lagringsmonteringar i Azure Container Apps.

Förutsättningar

  • Installera den senaste versionen av Azure CLI.
  • Använd en Azure-prenumeration med behörighet att skapa resurser och tilldela roller för rollbaserad åtkomstkontroll i Azure (Azure RBAC). För att tilldela roller behöver du Microsoft.Authorization/roleAssignments/write behörighet på lagringskontonivå.

Konfigurera miljön

Följande kommandon definierar miljövariabler och ser till att containerapptillägget är uppdaterat.

  1. Logga in på Azure CLI.

    az login
    
  2. Konfigurera miljövariabler som används i olika kommandon framöver.

    RESOURCE_GROUP="my-container-apps-group"
    ENVIRONMENT_NAME="my-storage-environment"
    LOCATION="canadacentral"
    
  3. Se till att du har den senaste versionen av Azure CLI-tillägget för Container Apps.

    az extension add -n containerapp --upgrade
    
  4. Registrera Microsoft.App namnområde.

    az provider register --namespace Microsoft.App
    
  5. Registrera Microsoft.OperationalInsights-providern till Azure Monitor Log Analytics arbetsytan om du inte har använt den tidigare.

    az provider register --namespace Microsoft.OperationalInsights
    

Skapa en miljö

Följande steg skapar en resursgrupp och en Container Apps-miljö.

  1. Skapa en resursgrupp.

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

    När kommandot har skapats returneras meddelandet "Lyckades".

    I slutet av den här handledningen kan du ta bort resursgruppen för att ta bort alla tjänster som skapades i den här handledningen.

  2. Skapa en Container Apps-miljö.

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

    När kommandot har skapats returneras meddelandet "Lyckades".

    Använd flaggan --mi-system-assigned för att aktivera miljöns systemtilldelade hanterade identitet. I senare steg ger du denna identitet tillgång till fildelningen.

    Lagringsmonteringar är kopplade till en Container Apps-miljö och konfigureras inom enskilda containerappar.

Konfigurera ett lagringskonto

Skapa sedan ett lagringskonto och etablera en fildelning som ska monteras till containerappen.

  1. Definiera ett lagringskontonamn.

    Det här kommandot genererar ett slumpmässigt suffix till lagringskontots namn för att säkerställa unikhet.

    STORAGE_ACCOUNT_NAME="myacastorageaccount$RANDOM"
    
  2. skapa ett 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
    

    När kommandot har skapats returneras meddelandet "Lyckades".

    Flaggan --enable-smb-oauth true aktiverar Managed Identity for SMB (SMBOAuth) på lagringskontot. Om du använder ett befintligt lagringskonto, aktivera denna inställning innan du skapar mounten. För instruktioner, se Konfigurera den hanterade identitetens åtkomstegenskap på ditt lagringskonto.

    Lagringskontots SMB-säkerhetsinställningar måste också tillåta Kerberos-autentisering. Om du använder en anpassad SMB-säkerhetsprofil, se SMB-säkerhetsinställningar.

  3. Ange ett namn för delning av filer.

    STORAGE_SHARE_NAME="myfileshare"
    
  4. Skapa Azure Storage fildelning.

    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. Definiera namnet på lagringsmonteringen.

    STORAGE_MOUNT_NAME="mystoragemount"
    

    Det här värdet är det namn som används för att definiera länken för lagringsmontering från containerappmiljön till ditt Azure Storage-konto.

Giv den hanterade identiteten åtkomst

Tilldela Storage File Data SMB MI Admin-rollen till miljöns hanterade identitet på lagringskontonivå. Denna roll auktoriserar identiteten för att få tillgång till filer och kataloger i SMB-sharen.

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"

Ge tid för rolltilldelningen att sprida sig innan lagringsmounten skapas. För att tilldela rollen i Azure-portalen istället, se Tilldela en inbyggd RBAC-roll till den hanterade identiteten.

Skapa lagringsmontering

Nu kan du uppdatera konfigurationen av containerappen för att stödja lagringsmonteringen.

  1. Skapa lagringslänken i miljön.

    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
    

    Detta kommando skapar en länk mellan Container Apps-miljön och fildelningen som skapades med kommandot az storage share-rm. Alternativet --azure-file-identity system autentiserar sig mot Azure Files genom att använda miljöns systemtilldelade hanterade identitet.

    För en användartilldelad hanterad identitet, tilldela identiteten till miljön och använd dess fullständiga resurs-ID istället för system. Autentisering av lagringskontonyckeln stöds fortfarande som ett alternativ. Kombinera --azure-file-identity inte med --azure-file-account-key eller --azure-file-key-vault-secret-url. För exempel, se Använd lagringsmounts i Azure Container Apps.

    Nu när lagringskontot och miljön är länkade kan du skapa en containerapp som använder lagringsmonteringen.

  2. Definiera namnet på containerappen.

    CONTAINER_APP_NAME="my-container-app"
    
  3. Skapa containerappen.

    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
    

    Det här kommandot visar URL:en för din nya containerapp.

  4. Kopiera URL:en och klistra in den i webbläsaren för att navigera till webbplatsen.

    När sidan har lästs in visas meddelandet "Välkommen till nginx!". Håll den här webbläsarfliken öppen. Du kommer tillbaka till webbplatsen medan verifieringsstegen för lagringsmonteringen pågår.

    Nu när du har bekräftat att containerappen har konfigurerats kan du uppdatera appen till med en definition för lagringsmontering.

  5. Exportera containerappens konfiguration.

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

    Anmärkning

    Även om det här programmet inte har några hemligheter, har många appar funktioner med hemligheter. När du exporterar en apps konfiguration inkluderas som standard inte värdena för hemligheter i den genererade YAML:en.

    Om du inte behöver ändra hemliga värden kan du ta bort secrets avsnittet och dina hemligheter förblir oförändrade. Om du behöver ändra en hemlighets värde måste du också ange både name och value för alla hemligheter i filen innan du försöker uppdatera appen. Om du utelämnar en hemlighet från secrets avsnittet tas hemligheten bort.

  6. Öppna app.yaml i en kodredigerare.

  7. volumes: null Ersätt definitionen i template avsnittet med en volumes: definition som refererar till lagringsvolymen. Mallavsnittet bör se ut så här:

    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
    

    Det nya template.volumes avsnittet innehåller följande egenskaper.

    Fastighet Beskrivning
    name Detta värde identifierar appnivåvolymen och refereras av volumeName i containerns volymmontering.
    storageName Detta värde matchar namnet på lagringsdefinitionen som skapades genom att anropa kommandot az containerapp env storage set.
    storageType Det här värdet avgör vilken typ av lagringsvolym som definierats för miljön. I det här fallet deklareras en Azure Files-montering.

    Avsnittet volumes definierar volymer på appnivå som din programcontainer eller sidovagnscontainrar kan referera till via ett volumeMounts avsnitt som är associerat med en container.

    Autentisering med hanterad identitet ändrar inte volymkonfigurationen på appnivå. Fortsätt använda storageType: AzureFile för SMB-monteringar.

  8. Lägg till ett volumeMounts avsnitt i containern nginx i avsnittet containers .

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

    Det nya volumeMounts avsnittet innehåller följande egenskaper:

    Fastighet Beskrivning
    volumeName Det här värdet måste matcha det namn som definierats i volumes definitionen.
    mountPath Det här värdet definierar sökvägen i containern där lagringen är monterad.
  9. Uppdatera containerappen med den nya konfigurationen för lagringsmontering.

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

Kontrollera lagringsmonteringen

Nu när lagringsmonteringen har upprättats kan du ändra filer i Azure Storage från containern. Använd följande kommandon för att observera lagringsmonteringen på jobbet.

  1. Öppna ett interaktivt gränssnitt i containerappen för att köra kommandon i containern som körs.

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

    Det här kommandot kan ta en stund att öppna fjärrgränssnittet. När skalet är klart kan du interagera med lagringsmonteringen via filsystemkommandon. Mer information finns i Ansluta till en containerkonsol i Azure Container Apps.

  2. Ändra till mappen nginx /var/log/nginx .

    cd /var/log/nginx
    
  3. Gå tillbaka till webbläsaren och gå till webbplatsen och uppdatera sidan några gånger.

    En serie logginlägg skapas av begäranden som görs till webbplatsen.

  4. Gå tillbaka till terminalen och visa en lista över värdena för /var/log/nginx mappen.

    ls
    

    Observera hur access.log - och error.log-filerna visas i den här mappen. De här filerna skrivs till Azure Files-monteringen i din Azure Storage-resurs som skapades i föregående steg.

  5. Visa innehållet i access.log-filen .

    cat access.log
    
  6. Avsluta containerns interaktiva gränssnitt för att återgå till den lokala terminalsessionen.

    exit
    
  7. Nu kan du visa filerna i Azure-portalen för att kontrollera att de finns i ditt Azure Storage-konto. Skriv ut namnet på ditt slumpmässigt genererade lagringskonto.

    echo $STORAGE_ACCOUNT_NAME
    
  8. Gå till Azure-portalen och öppna lagringskontot som skapades i den här proceduren.

  9. Under Datalagring väljer du Filresurser.

  10. Välj myfileshare för att visa access.log- och error.log-filerna.

Rensa resurser

Om du inte fortsätter att använda det här programmet kör du följande kommando för att ta bort resursgruppen tillsammans med alla resurser som skapats i den här artikeln.

az group delete \
  --name $RESOURCE_GROUP

Nästa steg