다음을 통해 공유


예: Python용 Azure 라이브러리를 사용하여 Azure Storage 만들기

이 문서에서는 Python용 Azure 관리 라이브러리를 사용하여 Azure Storage 계정 및 Blob Storage 컨테이너와 함께 리소스 그룹을 만드는 방법을 알아봅니다.

이러한 리소스를 프로비전한 후 예제: Azure Storage를 사용하여 Python의 Azure 클라이언트 라이브러리를 사용하여 Blob 컨테이너에 파일을 업로드하는 방법을 확인합니다.

bash 및 PowerShell에 해당하는 Azure CLI 명령은 이 문서의 뒷부분에 나와 있습니다. Azure Portal을 사용하려면 Azure Storage 계정 만들기Blob 컨테이너 만들기를 참조하세요.

1: 로컬 개발 환경 설정

아직 실행하지 않은 경우 코드를 실행할 수 있는 환경을 설정합니다. 몇 가지 옵션은 다음과 같습니다.

  • 선택한 도구를 사용하거나 venv, Python 가상 환경을 구성합니다. 가상 환경 사용을 시작하려면 가상 환경을 활성화해야 합니다. Python을 설치하려면 Python 설치를 참조하세요.

    #!/bin/bash
    # Create a virtual environment
    python -m venv .venv
    # Activate the virtual environment
    source .venv/Scripts/activate # only required for Windows (Git Bash)
    
  • conda 환경을 사용합니다. Conda를 설치하려면 Miniconda 설치를 참조하세요.

  • Visual Studio Code 또는 GitHub Codespaces에서 개발 컨테이너를 사용합니다.

2: 필요한 Azure 라이브러리 패키지 설치

  1. 콘솔에서 이 예제에 사용된 관리 라이브러리를 나열하는 requirements.txt 파일을 만듭니다.

    azure-mgmt-resource
    azure-mgmt-storage
    azure-identity
    
  2. 가상 환경이 활성화된 콘솔에서 요구 사항을 설치합니다.

    pip install -r requirements.txt
    

3. 환경 변수 설정

이 단계에서는 이 문서의 코드에서 사용할 환경 변수를 설정합니다. 이 코드는 메서드를 os.environ 사용하여 값을 검색합니다.

#!/bin/bash
export AZURE_RESOURCE_GROUP_NAME=<ResourceGroupName> # Change to your preferred resource group name
export LOCATION=<Location> # Change to your preferred region
export AZURE_SUBSCRIPTION_ID=$(az account show --query id --output tsv)
export STORAGE_ACCOUNT_NAME=<StorageAccountName> # Change to your preferred storage account name
export CONTAINER_NAME=<ContainerName> # Change to your preferred container name

4: 스토리지 계정 및 Blob 컨테이너를 만드는 코드 작성

이 단계에서는 다음 코드를 사용하여 provision_blob.py 이라는 Python 파일을 만듭니다. 이 Python 스크립트는 Python용 Azure SDK 관리 라이브러리를 사용하여 Python용 Azure SDK를 사용하여 리소스 그룹, Azure Storage 계정 및 Blob 컨테이너를 만듭니다.

import os, random

# Import the needed management objects from the libraries. The azure.common library
# is installed automatically with the other libraries.
from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.storage import StorageManagementClient
from azure.mgmt.storage.models import BlobContainer

# Acquire a credential object.
credential = DefaultAzureCredential()

# Retrieve subscription ID from environment variable.
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

# Retrieve resource group name and location from environment variables
RESOURCE_GROUP_NAME = os.environ["AZURE_RESOURCE_GROUP_NAME"]
LOCATION = os.environ["LOCATION"]

# Step 1: Provision the resource group.
resource_client = ResourceManagementClient(credential, subscription_id)

rg_result = resource_client.resource_groups.create_or_update(RESOURCE_GROUP_NAME,
    { "location": LOCATION })

print(f"Provisioned resource group {rg_result.name}")

# For details on the previous code, see Example: Provision a resource group
# at https://docs.microsoft.com/azure/developer/python/azure-sdk-example-resource-group


# Step 2: Provision the storage account, starting with a management object.

storage_client = StorageManagementClient(credential, subscription_id)

STORAGE_ACCOUNT_NAME = os.environ["STORAGE_ACCOUNT_NAME"] 

# Check if the account name is available. Storage account names must be unique across
# Azure because they're used in URLs.
availability_result = storage_client.storage_accounts.check_name_availability(
    { "name": STORAGE_ACCOUNT_NAME }
)

if not availability_result.name_available:
    print(f"Storage name {STORAGE_ACCOUNT_NAME} is already in use. Try another name.")
    exit()

# The name is available, so provision the account
poller = storage_client.storage_accounts.begin_create(RESOURCE_GROUP_NAME, STORAGE_ACCOUNT_NAME,
    {
        "location" : LOCATION,
        "kind": "StorageV2",
        "sku": {"name": "Standard_LRS"}
    }
)

# Long-running operations return a poller object; calling poller.result()
# waits for completion.
account_result = poller.result()
print(f"Provisioned storage account {account_result.name}")


# Step 3: Retrieve the account's primary access key and generate a connection string.
keys = storage_client.storage_accounts.list_keys(RESOURCE_GROUP_NAME, STORAGE_ACCOUNT_NAME)

print(f"Primary key for storage account: {keys.keys[0].value}")

conn_string = f"DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName={STORAGE_ACCOUNT_NAME};AccountKey={keys.keys[0].value}"

# print(f"Connection string: {conn_string}")

# Step 4: Provision the blob container in the account (this call is synchronous)
CONTAINER_NAME = os.environ["CONTAINER_NAME"]
container = storage_client.blob_containers.create(RESOURCE_GROUP_NAME, STORAGE_ACCOUNT_NAME, CONTAINER_NAME, BlobContainer())

print(f"Provisioned blob container {container.name}")

코드의 인증

이 문서의 뒷부분에서는 Azure CLI를 사용하여 Azure에 로그인하여 샘플 코드를 실행합니다. 계정에 Azure 구독에서 리소스 그룹 및 스토리지 리소스를 만들 수 있는 충분한 권한이 있는 경우 스크립트는 추가 구성 없이 성공적으로 실행되어야 합니다.

프로덕션 환경에서 이 코드를 사용하려면 환경 변수를 설정하여 서비스 주체를 사용하여 인증합니다. 이 방법을 사용하면 대화형 로그인을 사용하지 않고도 안전하고 자동화된 액세스를 사용할 수 있습니다. 자세한 지침은 Azure 서비스를 사용하여 Python 앱을 인증하는 방법을 참조하세요.

서비스 주체에 리소스 그룹 및 스토리지 계정을 만들 수 있는 충분한 권한이 있는 역할이 할당되었는지 확인합니다. 예를 들어 구독 수준에서 기여자 역할을 할당하면 필요한 액세스 권한이 제공됩니다. 역할 할당에 대한 자세한 내용은 Azure의 RBAC(역할 기반 액세스 제어)를 참조하세요.

5. 스크립트 실행

  1. 아직 로그인하지 않은 경우 Azure CLI를 사용하여 Azure에 로그인합니다.

    az login
    

  2. 스크립트를 실행합니다.

    python provision_blob.py
    

    스크립트를 완료하는 데 1~2분이 걸립니다.

6: 리소스 확인

  1. Azure Portal을 열어 리소스 그룹 및 스토리지 계정이 예상대로 생성되었는지 확인합니다. 잠시 기다렸다가 리소스 그룹에 숨겨진 형식 표시 를 선택해야 할 수도 있습니다.

    스토리지 계정을 보여 주는 새 리소스 그룹에 대한 Azure Portal 페이지

  2. 스토리지 계정을 선택한 다음 왼쪽 메뉴에서 데이터 스토리지>컨테이너 를 선택하여 "Blob-container-01"이 표시되는지 확인합니다.

    Blob 컨테이너를 표시하는 스토리지 계정에 대한 Azure Portal 페이지

  3. 애플리케이션 코드에서 이러한 리소스를 사용하려는 경우 예제: Azure Storage를 계속 사용합니다.

Azure Storage 관리 라이브러리를 사용하는 또 다른 예제는 Python Storage 관리 샘플을 참조하세요.

7: 리소스 정리

앱 코드에서 이러한 리소스를 사용하려면, 예제: Azure Storage를 사용하여라는 기사를 따르고 싶다면 리소스를 그대로 두세요. 그렇지 않으면 이 예제에서 만든 리소스 그룹 및 스토리지 리소스를 유지할 필요가 없는 경우 az group delete 명령을 실행합니다.

리소스 그룹은 구독에서 진행 중인 요금이 발생하지 않지만 리소스 그룹의 스토리지 계정과 같은 리소스에는 요금이 부과될 수 있습니다. 적극적으로 사용하지 않는 그룹을 정리하는 것이 좋습니다. 인수 --no-wait 를 사용하면 작업이 완료되는 것을 기다리는 대신 명령이 즉시 반환됩니다.

#!/bin/bash
az group delete -n $AZURE_RESOURCE_GROUP_NAME --no-wait

참조: 동등한 Azure CLI 명령

다음 Azure CLI 명령은 Python 스크립트와 동일한 만들기 단계를 완료합니다.

#!/bin/bash
#!/bin/bash

# Set variables
export LOCATION=<Location> # Change to your preferred region
export AZURE_RESOURCE_GROUP_NAME=<ResourceGroupName> # Change to your preferred resource group name
export STORAGE_ACCOUNT_NAME=<StorageAccountName> # Change to your preferred storage account name
export CONTAINER_NAME=<ContainerName> # Change to your preferred container name

# Provision the resource group
echo "Creating resource group: $AZURE_RESOURCE_GROUP_NAME"
az group create \
    --location "$LOCATION" \
    --name "$AZURE_RESOURCE_GROUP_NAME"

# Provision the storage account
az storage account create -g $AZURE_RESOURCE_GROUP_NAME -l $LOCATION -n $STORAGE ACCOUNT_NAME --kind StorageV2 --sku Standard_LRS

echo Storage account name is $STORAGE_ACCOUNT_NAME

# Retrieve the connection string
CONNECTION_STRING=$(az storage account show-connection-string -g $AZURE_RESOURCE_GROUP_NAME -n $STORAGE_ACCOUNT_NAME --query connectionString)

# Provision the blob container
az storage container create --name $CONTAINER_NAME --account-name $STORAGE_ACCOUNT_NAME --connection-string $CONNECTION_STRING

참고하십시오