자습서: Azure Container Apps에서 Azure Files 볼륨 탑재 만들기

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

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

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

필수 조건

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

환경 설정

다음 명령은 변수를 정의하고 Container Apps 확장이 최신 상태인지 확인하는 데 도움이 됩니다.

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

    az login
    
  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. 컨테이너 앱 환경을 만듭니다.

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

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

    스토리지 탑재는 Container Apps 환경과 연결되고 개별 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`
    

    Container Apps 환경에서 스토리지 링크를 만들려면 스토리지 계정 키가 필요합니다.

  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. template 섹션의 volumes: null 정의를 스토리지 볼륨을 참조하는 volumes: 정의로 바꿉니다. 템플릿 섹션은 다음처럼 표시됩니다.

    template:
      volumes:
      - name: my-azure-file-volume
        storageName: mystoragemount
        storageType: AzureFile
      containers:
      - image: nginx
        name: my-container-app
        volumeMounts:
        - volumeName: my-azure-file-volume
          mountPath: /var/log/nginx
        resources:
          cpu: 0.5
          ephemeralStorage: 3Gi
          memory: 1Gi
      initContainers: null
      revisionSuffix: ''
      scale:
        maxReplicas: 1
        minReplicas: 1
        rules: null
    

    새로운 template.volumes 섹션에는 다음 속성이 포함됩니다.

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

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

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

    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
    

    이 명령으로 원격 셸을 여는 데 잠시 걸릴 수 있습니다. 셸이 준비되면 파일 시스템 명령을 통해 스토리지 탑재와 상호 작용할 수 있습니다.

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

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

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

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

    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. 데이터 스토리지에서 파일 공유를 선택합니다.

  10. myshare를 선택하여 access.logerror.log 파일을 봅니다.

리소스 정리

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

az group delete \
  --name $RESOURCE_GROUP

다음 단계