Azure CLI를 사용하여 Blob 컨테이너 관리

Microsoft Azure Blob Storage를 사용하면 많은 양의 비정형 개체 데이터를 저장할 수 있습니다. Blob Storage를 사용하여 미디어, 콘텐츠 또는 애플리케이션 데이터를 수집하거나 사용자에게 노출할 수 있습니다. 모든 Blob 데이터는 컨테이너 내에 저장되므로 데이터 업로드를 시작하기 전에 스토리지 컨테이너를 만들어야 합니다. Blob Storage에 대해 자세히 알아보려면 Azure Blob Storage 소개를 읽어보세요.

Azure CLI는 Azure 리소스를 관리하기 위한 Azure의 플랫폼 간 명령줄 환경입니다. 브라우저에서 Azure Cloud Shell과 함께 사용할 수 있습니다. macOS, Linux 또는 Windows에 설치하여 명령줄에서 로컬로 실행할 수도 있습니다.

이 방법 문서에서는 Azure CLI를 Bash와 함께 사용하여 컨테이너 개체를 사용하는 방법을 알아봅니다.

필수 조건

Azure Storage에 액세스하려면 Azure 구독이 있어야 합니다. 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.

Azure Storage에 대한 모든 액세스는 스토리지 계정을 통해 수행됩니다. 이 빠른 시작에서는 Azure Portal, Azure PowerShell 또는 Azure CLI를 사용하여 스토리지 계정을 만듭니다. 스토리지 계정을 만드는 데 도움이 필요한 경우 스토리지 계정 만들기를 참조하세요.

Azure CLI에 대한 환경 준비

  • 항상 최신 버전의 Azure CLI를 설치하는 것이 좋습니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.

Blob 스토리지에 대한 액세스 권한 부여

Microsoft Entra 자격 증명을 사용하거나 스토리지 계정 액세스 키를 사용하여 Azure CLI에서 Blob 스토리지에 대한 액세스 권한을 부여할 수 있습니다. Microsoft Entra 자격 증명을 사용하는 것이 권장되며 이 문서의 예에서는 Microsoft Entra ID만 사용합니다.

Blob 스토리지에 대한 데이터 작업에 사용하는 Azure CLI 명령은 지정된 작업에 권한을 부여하는 방법을 지정할 수 있는 --auth-mode 매개 변수를 지원합니다. Microsoft Entra 자격 증명으로 권한 부여하려면 --auth-mode 매개 변수를 login으로 설정합니다. 자세한 내용은 Azure CLI를 사용하여 Blob 또는 큐 데이터에 대한 액세스 권한 부여를 참조하세요.

login 명령을 실행하여 브라우저를 열고 Azure 구독에 연결합니다.

az login

컨테이너 만들기

Azure 명령줄 인터페이스를 사용하여 컨테이너를 만들려면 az storage container create 명령을 호출합니다. 다음 예제에서는 az storage container create 명령을 사용하여 Blob 컨테이너를 만들기 위한 세 가지 옵션을 보여 줍니다. 첫 번째 접근 방식은 단일 컨테이너를 만드는 반면 나머지 두 가지 접근 방식은 Bash 스크립팅 작업을 사용하여 컨테이너 만들기를 자동화합니다.

이 예제를 사용하려면 변수에 대한 값을 제공하고 로그인해야 합니다. 대괄호의 자리 표시자 값을 사용자 고유의 값으로 바꿔야 합니다.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
containerPrefix="demo-container-"

# Approach 1: Create a container
az storage container create \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# Approach 2: Create containers with a loop
for value in {2..5}
do
    az storage container create \
        --name $containerPrefix$value \
        --account-name $storageAccount \
        --auth-mode login
done

# Approach 3: Create containers by splitting multiple values
containerList="${containerPrefix}6 ${containerPrefix}7 ${containerPrefix}8"
for container in $containerList
do
    az storage container create \
        --name $container \
        --account-name $storageAccount \
        --auth-mode login
done

컨테이너 나열

az storage container list 명령을 사용하여 스토리지 컨테이너 목록을 검색합니다. 이름이 지정된 문자열로 시작하는 컨테이너 목록을 반환할 수 있도록 문자열을 --prefix 매개 변수 값으로 전달합니다.

--num-results 매개 변수를 사용하여 요청에 의해 반환되는 컨테이너 수를 제한할 수 있습니다. Azure Storage는 단일 목록 작업에서 반환되는 컨테이너 수를 5000으로 제한합니다. 이 제한을 통해 관리 가능한 양의 데이터를 검색할 수 있습니다. 반환된 컨테이너 수가 --num-results 값 또는 서비스 제한을 초과하면 연속 토큰이 반환됩니다. 이 토큰을 사용하면 여러 요청을 사용하여 원하는 수의 컨테이너를 검색할 수 있습니다.

--query 매개 변수를 사용하여 명령의 결과에 대한 JMESPath 쿼리를 실행할 수도 있습니다. JMESPath는 CLI 출력에서 반환된 데이터를 선택하고 수정할 수 있는 JSON의 쿼리 언어입니다. 쿼리는 형식을 지정하기 전에 JSON 출력에서 실행됩니다. 자세한 내용은 JMESPath 쿼리를 사용하여 Azure CLI 명령 출력을 쿼리하는 방법을 참조하세요.

다음 예제에서는 먼저 최대 컨테이너 수를 나열합니다(서비스 제한에 따라). 다음으로, --num-results--prefix 매개 변수에 대한 값을 제공하여 이름이 접두사 container-로 시작하는 컨테이너 세 개를 나열합니다. 마지막으로, --prefix 매개 변수에 알려진 컨테이너 이름을 제공하여 단일 컨테이너가 나열됩니다.

az storage container list에 대해 자세히 읽어 보세요.

#!/bin/bash
storageAccount="<storage-account>"
containerPrefix="demo-container-"
containerName="demo-container-1"
numResults="3"

# Approach 1: List maximum containers
az storage container list \
    --account-name $storageAccount \
    --auth-mode login

# Approach 2: List a defined number of named containers
az storage container list \
    --prefix $containerPrefix \
    --num-results $numResults \
    --account-name $storageAccount \
    --auth-mode login

# Approach 3: List an individual container
az storage container list \
    --prefix $containerPrefix \
    --query "[?name=='$containerName']" \
    --account-name $storageAccount \
    --auth-mode login

컨테이너 속성 및 메타데이터 읽기

컨테이너는 시스템 속성과 사용자 정의 메타데이터를 모두 노출합니다. 시스템 속성은 각 Blob Storage 리소스에 있습니다. 일부 속성은 읽기 전용이고 다른 속성은 읽거나 설정할 수 있습니다. 내부적으로 일부 시스템 속성은 특정 표준 HTTP 헤더에 매핑됩니다.

사용자 정의 메타데이터는 Blob Storage 리소스에 대해 지정하는 하나 이상의 이름-값 쌍으로 구성됩니다. 메타데이터를 사용하여 리소스와 함께 추가 값을 저장할 수 있습니다. 메타데이터 값은 고유한 목적으로만 사용되며 리소스의 동작 방식에 영향을 주지 않습니다.

컨테이너 속성

Azure CLI를 사용하여 컨테이너의 속성을 표시하기 위해 az storage container show 명령을 호출합니다.

다음 예제에서 첫 번째 접근 방식은 명명된 단일 컨테이너의 속성을 표시합니다. 그 다음에는 demo-container- 접두사가 있는 모든 컨테이너를 검색하고 반복하여 해당 속성을 나열합니다. 예제의 자리 표시자 값은 실제 값으로 바꾸세요.

#!/bin/bash
storageAccount="<storage-account>"
containerPrefix="demo-container-"
containerName="demo-container-1"

# Show a named container's properties
az storage container show \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# List several containers and show their properties
containerList=$(az storage container list \
    --query "[].name" \
    --prefix $containerPrefix \
    --account-name $storageAccount \
    --auth-mode login \
    --output tsv)

for row in $containerList
do
  tmpRow=$(echo $row | sed -e 's/\r//g')
  az storage container show --name $tmpRow --account-name $storageAccount --auth-mode login
done

컨테이너 메타데이터 읽기 및 쓰기

스토리지 계정에 수천 개의 개체가 있는 사용자는 메타데이터를 기반으로 특정 컨테이너를 빠르게 찾을 수 있습니다. 메타데이터를 읽기 위해 az storage container metadata show 명령을 사용합니다. 메타데이터를 업데이트하려면 az storage container metadata update 명령을 호출해야 합니다. 이 방법은 공백으로 구분된 키 값 쌍만 허용합니다. 자세한 내용은 az storage container metadata 설명서를 참조하세요.

아래 첫 번째 예제는 명명된 컨테이너의 메타데이터를 업데이트한 다음 검색합니다. 두 번째 예제에서는 -prefix 값과 일치하는 컨테이너 목록을 반복합니다. 이름에 짝수가 포함된 컨테이너에는 메타데이터 변수에 포함된 값이 있는 메타데이터 집합이 있습니다.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
containerPrefix="demo-container-"

# Create metadata string
metadata="key=value pie=delicious"

# Update named container metadata
az storage container metadata update \
    --name $containerName \
    --metadata $metadata \
    --account-name $storageAccount \
    --auth-mode login

# Display metadata
az storage container metadata show \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# Get list of containers
containerList=$(az storage container list \
    --query "[].name" \
    --prefix $containerPrefix \
    --account-name $storageAccount \
    --auth-mode login \
    --output tsv)

# Update and display metadata
for row in $containerList
do
  #Get the container's number
  tmpName=$(echo $row | sed -e 's/\r//g')
  if [ `expr ${tmpName: ${#containerPrefix}} % 2` == 0 ]
  then
    az storage container metadata update \
        --name $tmpName \
        --metadata $metadata \
        --account-name $storageAccount \
        --auth-mode login
    
    echo $tmpName

    az storage container metadata show \
    --name $tmpName \
    --account-name $storageAccount \
    --auth-mode login    
  fi
done

컨테이너 삭제

사용 사례에 따라 az storage container delete 명령을 사용하여 단일 컨테이너나 컨테이너 그룹을 삭제할 수 있습니다. 컨테이너 목록을 삭제하는 경우 아래 예제와 같이 조건부 작업을 사용해야 합니다.

Warning

다음 예제를 실행하면 컨테이너 및 Blob이 영구적으로 삭제될 수 있습니다. 컨테이너와 Blob가 실수로 삭제되지 않도록 컨테이너 일시 삭제를 사용하도록 설정하는 것이 좋습니다. 자세한 내용은 컨테이너에 대한 일시 삭제를 참조하세요.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
containerPrefix="demo-container-"

# Delete a single named container
az storage container delete \
    --name $containerName \
    --account-name $storageAccount \
    --auth-mode login

# Delete containers by iterating a loop
list=$(az storage container list \
    --query "[].name" \
    --prefix $containerPrefix \
    --account-name $storageAccount \
    --auth-mode login \
    --output tsv)
for row in $list
do
    tmpName=$(echo $row | sed -e 's/\r//g')
    az storage container delete \
    --name $tmpName \
    --account-name $storageAccount \
    --auth-mode login
done

스토리지 계정에 대해 컨테이너 일시 삭제를 사용하도록 설정한 경우 삭제된 컨테이너를 검색할 수 있습니다. 스토리지 계정의 일시 삭제 데이터 보호 옵션이 사용하도록 설정된 경우 --include-deleted 매개 변수는 연결된 보존 기간 내에 삭제된 컨테이너를 반환합니다. --include-deleted 매개 변수는 --prefix 매개 변수와 함께 사용할 때 컨테이너를 반환하는 데만 사용할 수 있습니다. 일시 삭제에 대한 자세한 내용은 컨테이너 일시 삭제 문서를 참조하세요.

다음 예제를 사용하여 스토리지 계정의 연결된 보존 기간 내에 삭제된 컨테이너 목록을 검색합니다.

#!/bin/bash
storageAccount="<storage-account>"
containerPrefix="demo-container-"

# Retrieve a list of containers including those recently deleted
az storage container list \
    --prefix $containerPrefix \
    --include-deleted \
    --account-name $storageAccount\
    --auth-mode login

일시 삭제된 컨테이너 복원

컨테이너 나열 섹션에서 언급했듯이 스토리지 계정에서 일시 삭제 데이터 보호 옵션을 구성할 수 있습니다. 사용하도록 설정하면 관련 보존 기간 내에 삭제된 컨테이너를 복원할 수 있습니다. 이 예제를 따르기 전에 일시 삭제를 사용하도록 설정하고 스토리지 계정 중 하나 이상에서 구성해야 합니다.

다음 예제에서는 az storage container restore 명령을 사용하여 일시 삭제된 컨테이너를 복원하는 방법을 설명합니다. 컨테이너의 올바른 버전을 복원하려면 --name--version 매개 변수에 대한 값을 제공해야 합니다. 버전 번호를 모르는 경우 az storage container list 명령을 사용하여 첫 번째 예제와 같이 검색할 수 있습니다. 두 번째 예제에서는 특정 스토리지 계정 내에서 삭제된 모든 컨테이너를 찾아 복원합니다.

일시 삭제 데이터 보호 옵션에 대한 자세한 내용은 컨테이너 일시 삭제 문서를 참조하세요.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"

# Restore an individual named container
containerVersion=$(az storage container list \
    --account-name $storageAccount \
    --query "[?name=='$containerName'].[version]" \
    --auth-mode login \
    --output tsv \
    --include-deleted | sed -e 's/\r//g')

az storage container restore \
    --name $containerName \
    --deleted-version $containerVersion \
    --account-name $storageAccount \
    --auth-mode login

# Restore a list of deleted containers
containerList=$(az storage container list \
    --account-name $storageAccount \
    --include-deleted \
    --auth-mode login \
    --query "[?deleted].{name:name,version:version}" \
    -o json)

for row in $(echo "${containerList}" | jq -c '.[]' )
do
    tmpName=$(echo $row | jq -r '.name')
    tmpVersion=$(echo $row | jq -r '.version')
    az storage container restore \
        --account-name $storageAccount \
        --name $tmpName \
        --deleted-version $tmpVersion \
        --auth-mode login
done

컨테이너에 대한 공유 액세스 서명 가져오기

SAS(공유 액세스 서명)는 Azure 리소스에 대한 위임된 액세스를 제공합니다. SAS를 사용하면 클라이언트가 데이터에 액세스하는 방법을 세부적으로 제어할 수 있습니다. 예를 들어 클라이언트가 사용할 수 있는 리소스를 지정할 수 있습니다. 클라이언트에서 수행할 수 있는 작업 유형을 제한하고 SAS가 유효하게 유지되는 간격을 지정할 수도 있습니다.

SAS는 일반적으로 권한이 없는 클라이언트에게 임시 및 보안 액세스를 제공하는 데 일반적으로 사용됩니다. 서비스 또는 계정 SAS를 생성하려면 --account-name--account-key 매개 변수에 대한 값을 제공해야 합니다. 이 시나리오의 예로는 사용자가 스토리지 계정에 대한 자신의 데이터를 읽고 쓸 수 있는 서비스가 있습니다.

Azure Storage는 사용자 위임, 서비스 및 계정 SAS의 세 가지 유형의 공유 액세스 서명을 지원합니다. 공유 액세스 서명에 대한 자세한 내용은 SAS(공유 액세스 서명)를 사용하여 Azure Storage 리소스에 대해 제한된 액세스 권한 부여 문서를 참조하세요.

주의

유효한 SAS를 소유한 클라이언트는 해당 SAS에서 허용한 스토리지 계정의 데이터에 액세스할 수 있습니다. 악의적이거나 의도하지 않은 사용으로부터 SAS를 보호하는 것이 중요합니다. SAS 배포는 신중해야 하고, 손상된 SAS를 철회하는 계획을 세워야 합니다.

다음 예제는 az storage container generate-sas 명령을 사용하여 특정 컨테이너에 대한 서비스 SAS를 구성하는 프로세스를 보여 줍니다. 서비스 SAS를 생성하기 때문에 이 예제에서는 먼저 스토리지 계정 키를 검색하여 --account-key 값으로 전달합니다.

이 예제에서는 시작 및 만료 시간과 프로토콜을 사용하여 SAS를 구성합니다. 또한 --permissions 매개 변수를 사용하여 SAS에서 삭제읽기쓰기목록 권한을 지정합니다. 서비스 SAS 만들기 문서에서 전체 권한 표를 참조할 수 있습니다.

Blob SAS 토큰 및 URL 값을 복사하여 안전한 위치에 붙여 넣습니다. 이는 한 번만 표시되며 Bash를 닫은 후에는 검색할 수 없습니다. SAS URL을 구성하려면 스토리지 서비스의 URL에 SAS 토큰(URI)을 추가합니다.

#!/bin/bash
storageAccount="<storage-account>"
containerName="demo-container-1"
permissions="drwl"
expiry=`date -u -d "30 minutes" '+%Y-%m-%dT%H:%MZ'`

accountKey=$(az storage account keys list \
    --account-name $storageAccount \
    --query "[?permissions == 'FULL'].[value]" \
    --output tsv)

accountKey=$( echo $accountKey | cut -d' ' -f1 )
 
az storage container generate-sas \
    --name $containerName \
    --https-only \
    --permissions dlrw \
    --expiry $expiry \
    --account-key $accountKey \
    --account-name $storageAccount

참고 항목

Azure CLI에서 반환된 SAS 토큰에는 URL 쿼리 문자열에 대한 구분 기호 문자('?')가 포함되지 않습니다. 리소스 URL에 SAS 토큰을 추가하는 경우 SAS 토큰을 추가하기 전에 리소스 URL에 구분 기호 문자를 추가해야 합니다.

다음 단계

이 방법 문서에서는 Blob Storage에서 컨테이너를 관리하는 방법을 알아보았습니다. Azure CLI를 사용한 Blob Storage 작업에 대해 자세히 알아보려면 아래 옵션을 선택합니다.