자습서: Azure Container Apps에서 Azure Files 볼륨 탑재 만들기
Azure Files 스토리지 탑재를 사용하여 컨테이너 앱의 영구 스토리지에 쓰는 방법을 알아봅니다. 스토리지 탑재에 대한 자세한 내용은 Azure Container Apps에서 스토리지 탑재 사용을 참조하세요.
이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.
- Container Apps 환경 만들기
- Azure Storage 계정 만들기
- 스토리지 계정에서 파일 공유 정의
- 환경을 스토리지 파일 공유에 연결
- 개별 컨테이너에 스토리지 공유 탑재
- 웹 사이트 액세스 로그를 확인하여 스토리지 탑재 확인
참고 항목
Azure Container Apps는 SMB 및 NFS 프로토콜을 사용하여 파일 공유 탑재를 지원합니다. 이 자습서에서는 SMB 프로토콜을 사용하여 Azure Files 공유를 탑재하는 방법을 보여 줍니다. NFS 공유 탑재에 대해 자세히 알아보려면 Azure Container Apps에서 스토리지 탑재 사용을 참조하세요.
필수 조건
- 최신 버전의 Azure CLI를 설치합니다.
환경 설정
다음 명령은 변수를 정의하고 Container Apps 확장이 최신 상태인지 확인하는 데 도움이 됩니다.
Azure CLI에 로그인합니다.
az login
따라야 할 다양한 명령에 사용되는 환경 변수를 설정합니다.
RESOURCE_GROUP="my-container-apps-group" ENVIRONMENT_NAME="my-storage-environment" LOCATION="canadacentral"
최신 버전의 Container Apps Azure CLI 확장을 사용하는지 확인합니다.
az extension add -n containerapp --upgrade
Microsoft.App
네임스페이스를 등록합니다.az provider register --namespace Microsoft.App
이전에 사용한 적이 없는 경우 Azure Monitor Log Analytics 작업 영역에 대한
Microsoft.OperationalInsights
공급자를 등록합니다.az provider register --namespace Microsoft.OperationalInsights
환경 만들기
다음 단계에서는 리소스 그룹 및 Container Apps 환경을 만듭니다.
리소스 그룹을 만듭니다.
az group create \ --name $RESOURCE_GROUP \ --location $LOCATION \ --query "properties.provisioningState"
일단 만들어지면 이 명령은 "성공" 메시지를 반환합니다.
이 자습서를 마치면 리소스 그룹을 삭제하여 이 문서 중에 만든 모든 서비스를 제거해도 됩니다.
컨테이너 앱 환경을 만듭니다.
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location "$LOCATION" \ --query "properties.provisioningState"
일단 만들어지면 이 명령은 "성공" 메시지를 반환합니다.
스토리지 탑재는 Container Apps 환경과 연결되고 개별 Container Apps 내에서 구성됩니다.
스토리지 계정 설정
다음으로, 스토리지 계정을 만들고 컨테이너 앱에 탑재할 파일 공유를 설정합니다.
스토리지 계정 이름을 정의합니다.
이 명령은 고유성을 보장하기 위해 스토리지 계정 이름에 대한 임의 접미사를 생성합니다.
STORAGE_ACCOUNT_NAME="myacastorageaccount$RANDOM"
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
일단 만들어지면 이 명령은 "성공" 메시지를 반환합니다.
파일 공유 이름을 정의합니다.
STORAGE_SHARE_NAME="myfileshare"
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
스토리지 계정 키를 가져옵니다.
STORAGE_ACCOUNT_KEY=`az storage account keys list -n $STORAGE_ACCOUNT_NAME --query "[0].value" -o tsv`
Container Apps 환경에서 스토리지 링크를 만들려면 스토리지 계정 키가 필요합니다.
스토리지 탑재 이름을 정의합니다.
STORAGE_MOUNT_NAME="mystoragemount"
이 값은 Container Apps 환경에서 Azure Storage 계정으로의 스토리지 탑재 링크를 정의하는 데 사용되는 이름입니다.
스토리지 탑재 만들기
이제 스토리지 탑재를 지원하도록 컨테이너 앱 구성을 업데이트할 수 있습니다.
환경에서 스토리지 링크를 만듭니다.
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
명령을 사용하여 만든 파일 공유 간에 링크를 만듭니다.이제 스토리지 계정과 환경이 연결되었으므로 스토리지 탑재를 사용하는 컨테이너 앱을 만들 수 있습니다.
컨테이너 앱 이름을 정의합니다.
CONTAINER_APP_NAME="my-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
이 명령은 새 컨테이너 앱의 URL을 표시합니다.
URL을 복사하고 웹 브라우저에 붙여넣어 해당 웹 사이트로 이동합니다.
페이지가 로드되면 "nginx 시작!" 메시지가 표시됩니다. 이 브라우저 탭을 열어 둡니다. 스토리지 탑재 확인 단계 중에 웹 사이트로 돌아갑니다.
이제 컨테이너 앱이 구성되었는지 확인했으므로 스토리지 탑재 정의를 사용하여 앱을 업데이트할 수 있습니다.
컨테이너 앱의 구성을 내보냅니다.
az containerapp show \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP \ --output yaml > app.yaml
참고 항목
이 애플리케이션에는 비밀이 없지만 많은 앱에는 비밀이 사용됩니다. 기본적으로 앱의 구성을 내보낼 때 생성된 YAML에 비밀 값이 포함되지 않습니다.
비밀 값을 변경할 필요가 없는 경우
secrets
섹션을 제거할 수 있으며 비밀은 변경되지 않은 상태로 유지됩니다. 또는 비밀의 값을 변경해야 하는 경우 앱을 업데이트하기 전에 파일의 모든 비밀에 대해name
및value
를 모두 제공해야 합니다.secrets
섹션에서 비밀을 생략하면 비밀이 삭제됩니다.코드 편집기에서 app.yaml을 엽니다.
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
섹션을 통해 참조할 수 있는 앱 수준에서 볼륨을 정의합니다.containers
섹션의nginx
컨테이너에volumeMounts
섹션을 추가합니다.containers: - image: nginx name: my-container-app volumeMounts: - volumeName: my-azure-file-volume mountPath: /var/log/nginx
volumeMounts
섹션에는 다음 속성이 포함됩니다.속성 설명 volumeName
이 값은 volumes
정의에 정의된 이름과 일치해야 합니다.mountPath
이 값은 스토리지가 탑재되는 컨테이너의 경로를 정의합니다. 컨테이너 앱을 새 스토리지 탑재 구성으로 업데이트합니다.
az containerapp update \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP \ --yaml app.yaml \ --output table
스토리지 탑재 확인
이제 스토리지 탑재가 설정되었으므로 컨테이너에서 Azure Storage의 파일을 조작할 수 있습니다. 다음 명령을 사용하여 작업 시 스토리지 탑재를 관찰합니다.
컨테이너 앱 내에서 대화형 셸을 열어 실행 중인 컨테이너 내에서 명령을 실행합니다.
az containerapp exec \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP
이 명령으로 원격 셸을 여는 데 잠시 걸릴 수 있습니다. 셸이 준비되면 파일 시스템 명령을 통해 스토리지 탑재와 상호 작용할 수 있습니다.
nginx /var/log/nginx 폴더로 변경합니다.
cd /var/log/nginx
브라우저로 돌아가서 웹 사이트로 이동한 후 페이지를 몇 번 새로 고칩니다.
웹 사이트에 대한 요청은 일련의 로그 스트림 항목을 만듭니다.
터미널로 돌아가서
/var/log/nginx
폴더의 값을 나열합니다.ls
access.log 및 error.log 파일이 이 폴더에 어떻게 표시되는지 확인합니다. 이러한 파일은 이전 단계에서 만든 Azure Storage 공유의 Azure Files 탑재에 기록됩니다.
access.log 파일의 내용을 봅니다.
cat access.log
컨테이너의 대화형 셸에서 나와 로컬 터미널 세션으로 돌아갑니다.
exit
이제 Azure Portal에서 파일을 확인하여 Azure Storage 계정에 파일이 있는지 알아볼 수 있습니다. 임의로 생성된 스토리지 계정의 이름을 출력합니다.
echo $STORAGE_ACCOUNT_NAME
Azure Portal로 이동하여 이 절차에서 만든 스토리지 계정을 엽니다.
데이터 스토리지에서 파일 공유를 선택합니다.
myshare를 선택하여 access.log 및 error.log 파일을 봅니다.
리소스 정리
이 애플리케이션을 계속 사용하지 않으려면 다음 명령을 실행하여 이 문서에서 만든 모든 리소스와 함께 리소스 그룹을 삭제합니다.
az group delete \
--name $RESOURCE_GROUP