예: Python용 Azure 라이브러리를 사용하여 Azure Storage 프로비저닝

이 문서에서는 Python 스크립트로 Azure 관리 라이브러리를 사용하여 Azure Storage 계정과 Blob Storage 컨테이너가 포함된 리소스 그룹을 프로비저닝하는 방법을 알아봅니다. (동등한 Azure CLI 명령은 이 문서의 뒷부분에서 제공됩니다. Azure Portal 사용하려면 Azure Storage 계정 만들기Blob 컨테이너 만들기를 참조하세요.)

리소스를 프로비저닝한 후 예: Azure Storage 사용을 참조하여 Python 애플리케이션 코드에서 Azure 클라이언트 라이브러리를 사용하여 Blob Storage 컨테이너에 파일을 업로드합니다.

이 문서의 모든 명령은 언급되지 않는 한 Linux/macOS bash 및 Windows 명령 셸에서 동일하게 작동합니다.

1: 로컬 개발 환경 설정

아직 수행하지 않은 경우 Azure에 대한 로컬 Python 개발 환경 구성모든 지침을 따르세요.

로컬 개발을 위한 서비스 주체를 만들고 이 프로젝트의 가상 환경을 만들어 활성화해야 합니다.

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

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

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

    pip install -r requirements.txt
    

3: 스토리지 리소스를 프로비저닝하는 코드 작성

이 섹션에서는 Python 코드에서 스토리지 리소스를 프로비저닝하는 방법을 설명합니다. 원하는 경우 Azure Portal을 통해 또는 동등 Azure CLI 명령를 통해 리소스를 프로비저닝할 수도 있습니다.

다음 코드를 사용하여 provision_blob.py라는 Python 파일을 만듭니다. 주석은 세부 정보를 설명합니다.

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 AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.storage import StorageManagementClient

# Acquire a credential object using CLI-based authentication.
credential = AzureCliCredential()

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

# Obtain the management object for resources.
resource_client = ResourceManagementClient(credential, subscription_id)

# Constants we need in multiple places: the resource group name and the region
# in which we provision resources. You can change these values however you want.
RESOURCE_GROUP_NAME = "PythonAzureExample-Storage-rg"
LOCATION = "centralus"

# Step 1: Provision the resource group.

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)

# This example uses the CLI profile credentials because we assume the script
# is being used to provision the resource in the same way the Azure CLI would be used.

STORAGE_ACCOUNT_NAME = f"pythonazurestorage{random.randint(1,100000):05}"

# You can replace the storage account here with any unique name. A random number is used
# by default, but note that the name changes every time you run this script.
# The name must be 3-24 lower case letters and numbers only.


# 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 = "blob-container-01"
container = storage_client.blob_containers.create(RESOURCE_GROUP_NAME, STORAGE_ACCOUNT_NAME, CONTAINER_NAME, {})

# The fourth argument is a required BlobContainer object, but because we don't need any
# special values there, so we just pass empty JSON.

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

이 코드는 Azure CLI에서 직접 수행할 수 있는 작업을 보여주므로 CLI 기반 인증(AzureCliCredential 사용)을 사용합니다. 두 경우 모두 인증에 동일한 ID를 사용합니다.

프로덕션 스크립트(예: VM 관리를 자동화하기 위해)에서 이러한 코드를 사용하려면 Azure 서비스를 사용하여 Python 앱을 인증하는 방법에 설명된 대로 (권장) 또는 서비스 주체 기반 메서드를 사용합니다 DefaultAzureCredential .

4. 스크립트 실행

python provision_blob.py

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

5: 리소스 확인

  1. Azure Portal을 열고 리소스 그룹과 스토리지 계정이 예상대로 프로비저닝되었는지 확인합니다. Python 스크립트에서 프로비저닝된 스토리지 계정을 보려면 잠시 기다렸다가 리소스 그룹에서 숨겨진 형식 표시를 선택해야 할 수도 있습니다.

    Azure portal page for the new resource group, showing the storage account

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

    Azure portal page for the storage account showing the blob container

  3. 애플리케이션 코드에서 이러한 프로비저닝된 리소스를 사용하려는 경우 예: Azure Storage 사용을 시도해보세요.

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

참조용: 해당 Azure CLI 명령

다음 Azure CLI 명령은 Python 스크립트와 동일한 프로비저닝 단계를 완료합니다.

rem Provision the resource group

az group create -n PythonAzureExample-Storage-rg -l centralus

rem Provision the storage account

az storage account create -g PythonAzureExample-Storage-rg -l centralus ^
    -n pythonazurestorage12345 --kind StorageV2 --sku Standard_LRS

rem Retrieve the connection string

az storage account show-connection-string -g PythonAzureExample-Storage-rg ^
    -n pythonazurestorage12345

rem Provision the blob container; NOTE: this command assumes you have an environment variable
rem named AZURE_STORAGE_CONNECTION_STRING with the connection string for the storage account.

set AZURE_STORAGE_CONNECTION_STRING=<connection_string>
az storage container create --account-name pythonazurestorage12345 -n blob-container-01

6: 리소스 정리

예: Azure Storage 사용 문서를 따라 앱 코드에서 리소스를 사용하려는 경우 해당 리소스를 제 위치에 그대로 둡니다.

그렇지 않으면 다음 명령을 실행하여 구독 요금이 계속 청구되지 않도록 합니다.

az group delete -n PythonAzureExample-Storage-rg  --no-wait

ResourceManagementClient.resource_groups.begin_delete 메서드를 사용하여 코드에서 리소스 그룹을 삭제할 수도 있습니다. 예: 리소스 그룹 프로비전의 코드는 사용법을 보여줍니다.

참고 항목