Azure Files 스토리지 탑재를 사용하여 컨테이너 앱의 영구 스토리지에 쓰는 방법을 알아봅니다. 스토리지 탑재에 대한 자세한 내용은 Azure 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"
일단 만들어지면 이 명령은 "성공" 메시지를 반환합니다.
이 자습서의 끝에서 리소스 그룹을 삭제하여 이 문서 중에 만든 모든 서비스를 제거할 수 있습니다.
Container Apps 환경을 만듭니다.
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --___location "$LOCATION" \ --query "properties.provisioningState"
일단 만들어지면 이 명령은 "성공" 메시지를 반환합니다.
스토리지 탑재는 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`
Storage 계정 키는 Container Apps 환경에서 스토리지 링크를 만드는 데 필요합니다. Container Apps는 Azure 파일 공유에 대한 ID 기반 액세스를 지원하지 않습니다.
스토리지 탑재 이름을 정의합니다.
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 을 엽니다.
섹션의
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
섹션을 통해 참조할 수 있습니다.volumeMounts
섹션의nginx
컨테이너에containers
섹션을 추가합니다.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
이 명령은 원격 셸을 여는 데 잠시 걸릴 수 있습니다. 셸이 준비되면 파일 시스템 명령을 통해 스토리지 탑재와 상호 작용할 수 있습니다. 자세한 내용은 Azure Container Apps의 컨테이너 콘솔에 연결을 참조하세요.
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로 이동하여 이 절차에서 만든 스토리지 계정을 엽니다.
Data Storage에서 파일 공유를 선택합니다.
myshare를 선택하여 access.log 파일 및 error.log 파일을 확인하세요.
자원을 정리하세요
이 애플리케이션을 계속 사용하지 않려면 다음 명령을 실행하여 이 문서에서 만든 모든 리소스와 함께 리소스 그룹을 삭제합니다.
az group delete \
--name $RESOURCE_GROUP