다음을 통해 공유


튜토리얼: Azure Container Apps에서 Azure Files 볼륨 마운트 만들기

Azure Files 스토리지 탑재를 사용하여 컨테이너 앱의 영구 스토리지에 쓰는 방법을 알아봅니다. 스토리지 탑재에 대한 자세한 내용은 Azure Container Apps에서 스토리지 탑재 사용을 참조하세요.

이 튜토리얼에서는 다음을 배우게 됩니다:

  • 컨테이너 앱 환경 만들기
  • Azure Storage 계정 만들기
  • 스토리지 계정에서 파일 공유 정의
  • 환경을 스토리지 파일 공유에 연결
  • 개별 컨테이너에 스토리지 공유 탑재
  • 웹 사이트 액세스 로그를 확인하여 스토리지 탑재 확인

비고

Azure Container Apps는 SMB 및 NFS 프로토콜을 사용하여 파일 공유 탑재를 지원합니다. 이 자습서에서는 SMB 프로토콜을 사용하여 Azure Files 공유를 탑재하는 방법을 보여 줍니다. NFS 공유 탑재에 대한 자세한 내용은 Azure Container Apps에서 스토리지 탑재 사용을 참조하세요.

필수 조건

  • 최신 버전의 Azure CLI를 설치합니다.

환경 설정

다음 명령은 환경 변수를 정의하고 Container Apps 확장이 최신 상태인지 확인합니다.

  1. Azure CLI에 로그인합니다.

  2. 따라야 할 다양한 명령에 사용되는 환경 변수를 설정합니다.

    RESOURCE_GROUP="my-container-apps-group"
    ENVIRONMENT_NAME="my-storage-environment"
    LOCATION="canadacentral"
    
  3. 최신 버전의 Container Apps Azure CLI 확장이 있는지 확인합니다.

    az extension add -n containerapp --upgrade
    
  4. Microsoft.App 네임스페이스를 등록합니다.

    az provider register --namespace Microsoft.App
    
  5. 이전에 사용하지 않은 경우 Azure Monitor Log Analytics 작업 영역에 대한 Microsoft.OperationalInsights 공급자를 등록합니다.

    az provider register --namespace Microsoft.OperationalInsights
    

환경 만들기

다음 단계에서는 리소스 그룹 및 Container Apps 환경을 만듭니다.

  1. 리소스 그룹을 만듭니다.

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

    일단 만들어지면 이 명령은 "성공" 메시지를 반환합니다.

    이 자습서의 끝에서 리소스 그룹을 삭제하여 이 문서 중에 만든 모든 서비스를 제거할 수 있습니다.

  2. Container Apps 환경을 만듭니다.

    az containerapp env create \
      --name $ENVIRONMENT_NAME \
      --resource-group $RESOURCE_GROUP \
      --___location "$LOCATION" \
      --query "properties.provisioningState"
    

    일단 만들어지면 이 명령은 "성공" 메시지를 반환합니다.

    스토리지 탑재는 Container Apps 환경과 연결되고 개별 컨테이너 앱 내에서 구성됩니다.

스토리지 계정 설정

다음으로, 스토리지 계정을 만들고 컨테이너 앱에 탑재할 파일 공유를 설정합니다.

  1. 스토리지 계정 이름을 정의합니다.

    이 명령은 고유성을 보장하기 위해 스토리지 계정 이름에 임의의 접미사를 생성합니다.

    STORAGE_ACCOUNT_NAME="myacastorageaccount$RANDOM"
    
  2. 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 \
      --query provisioningState
    

    일단 만들어지면 이 명령은 "성공" 메시지를 반환합니다.

  3. 파일 공유 이름을 정의합니다.

    STORAGE_SHARE_NAME="myfileshare"
    
  4. 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. 스토리지 계정 키를 가져옵니다.

    STORAGE_ACCOUNT_KEY=`az storage account keys list -n $STORAGE_ACCOUNT_NAME --query "[0].value" -o tsv`
    

    Storage 계정 키는 Container Apps 환경에서 스토리지 링크를 만드는 데 필요합니다. Container Apps는 Azure 파일 공유에 대한 ID 기반 액세스를 지원하지 않습니다.

  6. 스토리지 탑재 이름을 정의합니다.

    STORAGE_MOUNT_NAME="mystoragemount"
    

    이 값은 Container Apps 환경에서 Azure Storage 계정으로 스토리지 탑재 링크를 정의하는 데 사용되는 이름입니다.

스토리지 마운트 생성

이제 스토리지 탑재를 지원하도록 컨테이너 앱 구성을 업데이트할 수 있습니다.

  1. 환경에서 스토리지 링크를 만듭니다.

    az containerapp env storage set \
      --access-mode ReadWrite \
      --azure-file-account-name $STORAGE_ACCOUNT_NAME \
      --azure-file-account-key $STORAGE_ACCOUNT_KEY \
      --azure-file-share-name $STORAGE_SHARE_NAME \
      --storage-name $STORAGE_MOUNT_NAME \
      --name $ENVIRONMENT_NAME \
      --resource-group $RESOURCE_GROUP \
      --output table
    

    이 명령은 컨테이너 앱 환경과 명령으로 az storage share-rm 만든 파일 공유 간에 링크를 만듭니다.

    이제 스토리지 계정 및 환경이 연결되었으므로 스토리지 탑재를 사용하는 컨테이너 앱을 만들 수 있습니다.

  2. 컨테이너 앱 이름을 정의합니다.

    CONTAINER_APP_NAME="my-container-app"
    
  3. 컨테이너 앱을 만듭니다.

    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
    

    이 명령은 새 컨테이너 앱의 URL을 표시합니다.

  4. URL을 복사하고 웹 브라우저에 붙여넣어 웹 사이트로 이동합니다.

    페이지가 로드되면 "nginx 시작!" 메시지가 표시됩니다. 이 브라우저 탭을 열어 두세요. 스토리지 마운트 검증 단계 중에 웹 사이트로 다시 돌아갑니다.

    컨테이너 앱이 구성되었는지 확인했으므로 스토리지 탑재 정의로 앱을 업데이트할 수 있습니다.

  5. 컨테이너 앱의 구성을 내보냅니다.

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

    비고

    이 애플리케이션에는 비밀이 없지만 많은 앱은 비밀을 포함하고 있습니다. 기본적으로 앱의 구성을 내보낼 때 비밀 값은 생성된 YAML에 포함되지 않습니다.

    비밀 값을 변경할 필요가 없는 경우 섹션을 secrets 제거할 수 있으며 비밀은 변경되지 않은 상태로 유지됩니다. 비밀의 값을 변경해야 하는 경우, 앱을 업데이트하기 전에 파일에 있는 모든 비밀에 대해 namevalue를 모두 제공해야 합니다. 섹션에서 비밀을 생략하면 비밀 secrets 이 삭제됩니다.

  6. 코드 편집기에서 app.yaml 을 엽니다.

  7. 섹션의 volumes: null 정의를 template 스토리지 볼륨을 volumes: 참조하는 정의로 바꿉니다. 템플릿 섹션은 다음과 같습니다.

    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
    

    template.volumes 섹션에는 다음 속성이 포함되어 있습니다.

    재산 설명
    name 이 값은 명령을 호출하여 만든 볼륨과 일치합니다 az containerapp env storage set .
    storageName 이 값은 스토리지 볼륨에 액세스하기 위해 환경의 컨테이너에서 사용하는 이름을 정의합니다.
    storageType 이 값은 환경에 대해 정의된 스토리지 볼륨의 유형을 결정합니다. 이 경우 Azure Files 탑재가 선언됩니다.

    애플리케이션 수준에서 볼륨을 정의하는 volumes 섹션은 애플리케이션 컨테이너 또는 사이드카 컨테이너가 컨테이너와 연결된 volumeMounts 섹션을 통해 참조할 수 있습니다.

  8. volumeMounts 섹션의 nginx 컨테이너에 containers 섹션을 추가합니다.

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

    volumeMounts 섹션에는 다음 속성이 포함되어 있습니다.

    재산 설명
    volumeName 이 값은 정의에 volumes 정의된 이름과 일치해야 합니다.
    mountPath 이 값은 스토리지가 탑재되는 컨테이너의 경로를 정의합니다.
  9. 새 스토리지 탑재 구성으로 컨테이너 앱을 업데이트합니다.

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

스토리지 탑재 확인

이제 스토리지 탑재가 설정되었으므로 컨테이너에서 Azure Storage의 파일을 조작할 수 있습니다. 다음 명령을 사용하여 작업 시 스토리지 탑재를 관찰합니다.

  1. 컨테이너 앱 내에서 대화형 셸을 열어 실행 중인 컨테이너 내에서 명령을 실행합니다.

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

    이 명령은 원격 셸을 여는 데 잠시 걸릴 수 있습니다. 셸이 준비되면 파일 시스템 명령을 통해 스토리지 탑재와 상호 작용할 수 있습니다. 자세한 내용은 Azure Container Apps의 컨테이너 콘솔에 연결을 참조하세요.

  2. nginx /var/log/nginx 폴더로 변경합니다.

    cd /var/log/nginx
    
  3. 브라우저로 돌아가서 웹 사이트로 이동하여 페이지를 몇 번 새로 고칩니다.

    웹 사이트에 대한 요청은 일련의 로그 스트림 항목을 만듭니다.

  4. 터미널로 돌아가서 폴더의 값을 나열합니다 /var/log/nginx .

    ls
    

    이 폴더에 access.logerror.log 파일이 어떻게 표시되는지 확인합니다. 이 파일들은 이전 단계에서 생성된 Azure Storage 공유의 Azure Files 탑재 위치에 기록됩니다.

  5. access.log 파일의 내용을 봅니다.

    cat access.log
    
  6. 로컬 터미널 세션으로 돌아가려면 컨테이너의 대화형 셸에서 종료합니다.

    exit
    
  7. 이제 Azure Portal에서 파일을 보고 Azure Storage 계정에 파일이 있는지 확인할 수 있습니다. 임의로 생성된 스토리지 계정의 이름을 인쇄합니다.

    echo $STORAGE_ACCOUNT_NAME
    
  8. Azure Portal로 이동하여 이 절차에서 만든 스토리지 계정을 엽니다.

  9. Data Storage에서 파일 공유를 선택합니다.

  10. myshare를 선택하여 access.log 파일 및 error.log 파일을 확인하세요.

자원을 정리하세요

이 애플리케이션을 계속 사용하지 않려면 다음 명령을 실행하여 이 문서에서 만든 모든 리소스와 함께 리소스 그룹을 삭제합니다.

az group delete \
  --name $RESOURCE_GROUP

다음 단계