Samouczek: Zamontowanie woluminu Azure Files w usłudze Azure Container Apps

Dowiedz się, jak zapisywać w trwałej pamięci masowej w aplikacji kontenerowej przy użyciu punktu montażu Azure Files. Aby uzyskać więcej informacji na temat montowania magazynu, zobacz Używanie montowania magazynu w usłudze Azure Container Apps.

Ten samouczek wykorzystuje uwierzytelnianie za pomocą tożsamości zarządzanej (podgląd), co zalecamy dla nowych instalacji montowania plików SMB. Zarządzana tożsamość należy do środowiska Container Apps. Nie musisz pobierać, przechowywać ani rotować klucza konta pamięci, aby zamontować udział plików.

Z tego samouczka dowiesz się, jak wykonywać następujące działania:

  • Tworzenie środowiska usługi Container Apps
  • Tworzenie konta usługi Azure Storage
  • Określenie udziału plików w koncie magazynowym
  • Udziel zarządzanej tożsamości środowiska dostępu do udziału plików
  • Powiąż środowisko z udziałem plików storage.
  • Montowanie udziału magazynu w jednym kontenerze
  • Zweryfikuj punkt montowania magazynu, wyświetlając dziennik dostępu do witryny internetowej

Uwaga

Usługa Azure Container Apps obsługuje montowanie udziałów plików przy użyciu protokołów SMB i NFS. W tym samouczku przedstawiono instalowanie udziału usługi Azure Files przy użyciu protokołu SMB. Aby dowiedzieć się więcej na temat montowania udziałów NFS, sprawdź Montowanie zasobów w usłudze Azure Container Apps.

Wymagania wstępne

  • Zainstaluj najnowszą wersję interfejsu wiersza polecenia platformy Azure.
  • Użyj subskrypcji Azure z uprawnieniami do tworzenia zasobów i przypisywania ról kontroli dostępu opartej na rolach na platformie Azure (Azure RBAC). Aby przypisać role, potrzebujesz Microsoft.Authorization/roleAssignments/write uprawnienia w zakresie konta magazynu.

Konfigurowanie środowiska

Następujące polecenia definiują zmienne środowiskowe i upewnij się, że rozszerzenie Container Apps jest aktualne.

  1. Zaloguj się do Azure CLI.

    az login
    
  2. Skonfiguruj zmienne środowiskowe używane w kolejnych poleceniach.

    RESOURCE_GROUP="my-container-apps-group"
    ENVIRONMENT_NAME="my-storage-environment"
    LOCATION="canadacentral"
    
  3. Upewnij się, że masz najnowszą wersję rozszerzenia CLI Azure dla Container Apps.

    az extension add -n containerapp --upgrade
    
  4. Zarejestruj przestrzeń nazw Microsoft.App.

    az provider register --namespace Microsoft.App
    
  5. Zarejestruj dostawcę Microsoft.OperationalInsights dla obszaru roboczego usługi Azure Monitor Log Analytics, jeśli jeszcze go nie używałeś.

    az provider register --namespace Microsoft.OperationalInsights
    

Tworzenie środowiska

Poniższe kroki umożliwiają utworzenie grupy zasobów i środowiska usługi Container Apps.

  1. Utwórz grupę zasobów.

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

    Po utworzeniu polecenie zwraca komunikat "Powodzenie".

    Na końcu tego samouczka możesz usunąć grupę zasobów, aby usunąć wszystkie usługi utworzone w tym artykule.

  2. Tworzenie środowiska usługi Container Apps.

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

    Po utworzeniu polecenie zwraca komunikat "Powodzenie".

    Użyj flagi --mi-system-assigned, aby włączyć przypisaną przez system tożsamość zarządzaną środowiska. W kolejnych etapach przyznajesz tej tożsamości dostęp do udziału plików.

    Punkty montowania magazynu są skojarzone ze środowiskiem aplikacji kontenerowych i konfigurowane w ramach poszczególnych aplikacji kontenerowych.

Konfigurowanie konta magazynu

Następnie utwórz konto magazynu i utwórz udział plików, aby podłączyć go do aplikacji kontenera.

  1. Zdefiniuj nazwę konta pamięci masowej.

    To polecenie generuje losowy sufiks nazwy konta magazynu w celu zapewnienia unikalności.

    STORAGE_ACCOUNT_NAME="myacastorageaccount$RANDOM"
    
  2. Tworzenie konta usługi Azure Storage.

    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
    

    Po utworzeniu polecenie zwraca komunikat "Powodzenie".

    Flaga --enable-smb-oauth true włącza Managed Identity for SMB (SMBOAuth) na koncie pamięci masowej. Jeśli używasz istniejącego konta pamięci, włącz to ustawienie przed utworzeniem mounta. Instrukcje można znaleźć w artykule Konfiguruj właściwość dostępu do zarządzanej tożsamości na koncie magazynu.

    Ustawienia bezpieczeństwa SMB konta magazynowego muszą również umożliwiać uwierzytelnianie Kerberos. Jeśli używasz niestandardowego profilu bezpieczeństwa SMB, zobacz ustawienia bezpieczeństwa SMB.

  3. Zdefiniuj nazwę udziału plików.

    STORAGE_SHARE_NAME="myfileshare"
    
  4. Utwórz udział plikowy usługi Azure Storage.

    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. Zdefiniuj nazwę instalacji magazynu.

    STORAGE_MOUNT_NAME="mystoragemount"
    

    Ta wartość jest nazwą używaną do definiowania linku instalacji magazynu ze środowiska usługi Container Apps do konta usługi Azure Storage.

Przyznaj zarządzanej tożsamości dostęp

Przypisz rolę Storage File Data SMB MI Admin do zarządzanej tożsamości środowiska w zakresie konta magazynowego. Ta rola autoryzuje tożsamość do dostępu do plików i katalogów w udziale 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"

Odczekaj, aż przypisanie ról się rozpropaguje, przed utworzeniem punktu instalacji magazynu. Aby przypisać rolę w portalu Azure, zobacz Przypisz wbudowaną rolę RBAC do tożsamości zarządzanej.

Stwórz punkt montażu dysku

Teraz możesz zaktualizować konfigurację aplikacji kontenera, aby obsługiwać montowanie magazynu.

  1. Utwórz link do pamięci masowej w środowisku.

    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
    

    To polecenie tworzy połączenie między środowiskiem Container Apps a udziałem plików utworzonym za pomocą polecenia az storage share-rm. Opcja --azure-file-identity system uwierzytelnia się w usłudze Azure Files, korzystając z tożsamości zarządzanej przypisanej przez system środowiska.

    Dla zarządzanej tożsamości przypisanej przez użytkownika przypisz tę tożsamość środowisku i użyj jej pełnego ID zasobu zamiast system. Uwierzytelnianie klucza konta magazynowego pozostaje wspierane jako alternatywa. Nie należy łączyć --azure-file-identity z --azure-file-account-key ani z --azure-file-key-vault-secret-url. Przykłady można znaleźć w artykule Use storage mounts in Azure Container Apps.

    Teraz, gdy konto magazynu i środowisko są połączone, możesz utworzyć aplikację kontenera, która korzysta z punktu montowania magazynu.

  2. Zdefiniuj nazwę aplikacji kontenera.

    CONTAINER_APP_NAME="my-container-app"
    
  3. Utwórz aplikację kontenera.

    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
    

    To polecenie wyświetla adres URL nowej aplikacji kontenera.

  4. Skopiuj adres URL i wklej go w przeglądarce internetowej, aby przejść do witryny internetowej.

    Po załadowaniu strony zostanie wyświetlony komunikat "Witamy w nginx!". Pozostaw otwartą kartę przeglądarki. Wrócisz do witryny internetowej podczas kroków weryfikacji montowania pamięci.

    Po potwierdzeniu, że aplikacja kontenera została skonfigurowana, możesz zaktualizować aplikację, dodając definicję połączenia magazynu.

  5. Wyeksportuj konfigurację aplikacji kontenera.

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

    Uwaga

    Chociaż ta aplikacja nie ma tajemnic, wiele aplikacji zawiera sekrety. Domyślnie podczas eksportowania konfiguracji aplikacji wartości tajnych danych nie są uwzględniane w wygenerowanym pliku YAML.

    Jeśli nie musisz zmieniać wartości wpisów tajnych, możesz usunąć sekcję secrets , a wpisy tajne pozostaną niezmienione. Alternatywnie, jeśli musisz zmienić wartość wpisu tajnego, przed podjęciem próby zaktualizowania aplikacji upewnij się, że podano zarówno name, jak i value dla wszystkich wpisów tajnych w pliku. Pominięcie tajemnicy z sekcji secrets powoduje usunięcie tej tajemnicy.

  6. Otwórz plik app.yaml w edytorze kodu.

  7. Zastąp definicję volumes: null w sekcji template definicją volumes: odwołującą się do woluminu magazynu. Sekcja szablonu powinna wyglądać następująco:

    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
    

    Nowa template.volumes sekcja zawiera następujące właściwości.

    Nieruchomość / Majątek Opis
    name Ta wartość identyfikuje wolumin na poziomie aplikacji i jest przywoływana przez volumeName w punkcie montowania woluminu kontenera.
    storageName Ta wartość odpowiada nazwie definicji magazynu utworzonej przez wywołanie polecenia az containerapp env storage set.
    storageType Ta wartość określa typ woluminu magazynu zdefiniowanego dla środowiska. W takim przypadku instalacja usługi Azure Files jest zadeklarowana.

    Sekcja volumes definiuje woluminy na poziomie aplikacji, do których kontener aplikacji lub kontenery pomocnicze mogą odwoływać się za pomocą sekcji volumeMounts powiązanej z kontenerem.

    Uwierzytelnianie tożsamości zarządzanej nie zmienia konfiguracji woluminów na poziomie aplikacji. Kontynuuj używanie storageType: AzureFile do montażu SMB.

  8. Dodaj sekcję volumeMounts do kontenera nginx w sekcji containers.

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

    volumeMounts Nowa sekcja zawiera następujące właściwości:

    Nieruchomość / Majątek Opis
    volumeName Ta wartość musi być zgodna z nazwą zdefiniowaną volumes w definicji.
    mountPath Ta wartość definiuje ścieżkę w kontenerze, w którym jest zainstalowany magazyn.
  9. Zaktualizuj aplikację kontenera przy użyciu nowej konfiguracji punktu montowania pamięci.

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

Weryfikowanie instalacji magazynu

Po zamontowaniu magazynu, możesz zarządzać plikami w usłudze Azure Storage z poziomu kontenera. Użyj następujących poleceń, aby obserwować działanie montowania pamięci masowej.

  1. Otwórz interaktywną powłokę dla aplikacji kontenerowej, aby wykonywać polecenia wewnątrz działającego kontenera.

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

    To polecenie może potrwać chwilę, aby otworzyć powłokę zdalną. Gdy powłoka będzie gotowa, możesz wchodzić w interakcje z instalacją magazynu za pomocą poleceń systemu plików. Aby uzyskać więcej informacji, zobacz Łączenie z konsolą kontenera w usłudze Azure Container Apps.

  2. Przejdź do folderu nginx /var/log/nginx .

    cd /var/log/nginx
    
  3. Wróć do przeglądarki i przejdź do witryny internetowej i odśwież stronę kilka razy.

    Żądania kierowane do witryny internetowej tworzą serię wpisów w strumieniu dziennika.

  4. Wróć do terminalu /var/log/nginx i wyświetl wartości folderu.

    ls
    

    Zwróć uwagę, jak pliki access.log i error.log są wyświetlane w tym folderze. Te pliki są zapisywane w instalacji usługi Azure Files w udziale usługi Azure Storage utworzonym w poprzednich krokach.

  5. Wyświetl zawartość pliku access.log .

    cat access.log
    
  6. Zamknij interaktywną powłokę kontenera, aby wrócić do lokalnej sesji terminalu.

    exit
    
  7. Teraz możesz wyświetlić pliki w witrynie Azure Portal, aby sprawdzić, czy istnieją na koncie usługi Azure Storage. Wydrukuj nazwę losowo wygenerowanego konta przechowywania.

    echo $STORAGE_ACCOUNT_NAME
    
  8. Przejdź do portalu Azure i otwórz konto magazynowe utworzone w tej procedurze.

  9. W obszarze Magazyn danych wybierz pozycję Udziały plików.

  10. Wybierz myfileshare , aby zobaczyć pliki access.log i error.log .

Czyszczenie zasobów

Jeśli nie zamierzasz nadal używać tej aplikacji, uruchom następujące polecenie, aby usunąć grupę zasobów wraz ze wszystkimi zasobami utworzonymi w tym artykule.

az group delete \
  --name $RESOURCE_GROUP

Następne kroki