Contoh: Membuat Azure Storage menggunakan pustaka Azure untuk Python

Dalam artikel ini, Anda mempelajari cara menggunakan pustaka manajemen Azure dalam skrip Python untuk membuat grup sumber daya yang berisi akun Azure Storage dan kontainer penyimpanan Blob.

Setelah membuat sumber daya, lihat Contoh: Menggunakan Azure Storage untuk menggunakan pustaka klien Azure di kode aplikasi Python untuk mengunggah file ke kontainer penyimpanan Blob.

Semua perintah dalam artikel ini bekerja secara sama di bash Linux/macOS dan shell perintah Windows kecuali ada catatan.

Perintah Azure CLI yang setara dicantumkan nanti di artikel ini. Jika Anda lebih suka menggunakan portal Azure, lihat Membuat akun penyimpanan Azure dan Membuat kontainer blob.

1: Siapkan lingkungan pengembangan lokal Anda

Jika Anda belum melakukannya, siapkan lingkungan tempat Anda dapat menjalankan kode. Berikut ini adalah beberapa opsi:

2: Instal paket pustaka Azure yang diperlukan

  1. Buat file requirements.txt yang mencantumkan pustaka manajemen yang digunakan dalam contoh ini:

    azure-mgmt-resource
    azure-mgmt-storage
    azure-identity
    
  2. Di terminal Anda dengan lingkungan virtual diaktifkan, instal persyaratan:

    pip install -r requirements.txt
    

3: Menulis kode untuk membuat sumber daya penyimpanan

Buat file Python bernama provision_blob.py dengan kode berikut. Komentar akan menjelaskan detailnya. Skrip membaca ID langganan Anda dari variabel lingkungan, AZURE_SUBSCRIPTION_ID. Anda mengatur variabel ini di langkah selanjutnya. Nama grup sumber daya, lokasi, nama akun penyimpanan, dan nama kontainer semuanya didefinisikan sebagai konstanta dalam kode.

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

# Acquire a credential object.
credential = DefaultAzureCredential()

# 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)

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}")

Autentikasi dalam kode

Kemudian dalam artikel ini, Anda masuk ke Azure dengan Azure CLI untuk menjalankan kode sampel. Jika akun Anda memiliki izin untuk membuat grup sumber daya dan sumber daya penyimpanan di langganan Azure Anda, kode akan berhasil dijalankan.

Untuk menggunakan kode tersebut dalam skrip produksi, Anda dapat mengatur variabel lingkungan untuk menggunakan metode berbasis perwakilan layanan untuk autentikasi. Untuk mempelajari selengkapnya, lihat Cara mengautentikasi aplikasi Python dengan layanan Azure. Anda perlu memastikan bahwa perwakilan layanan memiliki izin yang memadai untuk membuat grup sumber daya dan sumber daya penyimpanan dalam langganan Anda dengan menetapkan peran yang sesuai di Azure; misalnya, peran Kontributor pada langganan Anda.

4. Jalankan skrip

  1. Jika Anda belum melakukannya, masuk ke Azure menggunakan Azure CLI:

    az login
    
  2. Atur AZURE_SUBSCRIPTION_ID variabel lingkungan ke ID langganan Anda. (Anda dapat menjalankan perintah az account show dan mendapatkan ID langganan Anda dari id properti dalam output):

    set AZURE_SUBSCRIPTION_ID=00000000-0000-0000-0000-000000000000
    
  3. Jalankan skrip:

    python provision_blob.py
    

Skrip akan memakan waktu satu atau dua menit untuk diselesaikan.

5: Verifikasi sumber daya

  1. Buka portal Azure untuk memverifikasi bahwa grup sumber daya dan akun penyimpanan dibuat seperti yang diharapkan. Anda mungkin perlu menunggu sebentar dan juga memilih Tampilkan jenis tersembunyi di grup sumber daya.

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

  2. Pilih akun penyimpanan, lalu pilih Penyimpanan data>Wadah di menu sebelah kiri untuk memverifikasi bahwa "blob-container-01" muncul:

    Azure portal page for the storage account showing the blob container

  3. Jika Anda ingin mencoba menggunakan sumber daya ini dari kode aplikasi, lanjutkan dengan Contoh: Gunakan Azure Storage.

Untuk contoh tambahan penggunaan perpustakaan manajemen Azure Storage, lihat Mengelola sampel Penyimpanan Python.

Untuk referensi: perintah Azure CLI yang setara

Perintah Azure CLI berikut menyelesaikan langkah-langkah pembuatan yang sama dengan skrip Python:

rem Provision the resource group

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

rem Provision the storage account

set account=pythonazurestorage%random%
echo Storage account name is %account%

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

rem Retrieve the connection string

FOR /F %i IN ('az storage account show-connection-string -g PythonAzureExample-Storage-rg -n %account% --query connectionString') do (SET connstr=%i)

rem Provision the blob container

az storage container create ^
--name blob-container-01 ^
--account-name %account% ^
--connection-string %connstr%

6: Membersihkan sumber daya

Biarkan sumber daya di tempatnya jika Anda ingin mengikuti artikel Contoh: Gunakan Azure Storage untuk menggunakan sumber daya ini dalam kode aplikasi. Jika tidak, jalankan perintah az group delete jika Anda tidak perlu menyimpan grup sumber daya dan sumber daya penyimpanan yang dibuat dalam contoh ini.

Grup sumber daya tidak dikenakan biaya berkelanjutan dalam langganan Anda, tetapi sumber daya, seperti akun penyimpanan, dalam grup sumber daya mungkin dikenakan biaya. Ini adalah praktik yang baik untuk membersihkan grup apa pun yang tidak Anda gunakan secara aktif. Argumen --no-wait memungkinkan perintah untuk segera kembali alih-alih menunggu operasi selesai.

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

Anda juga dapat menggunakan metode ResourceManagementClient.resource_groups.begin_delete untuk menghapus grup sumber daya dari kode. Kode dalam Contoh: Membuat grup sumber daya menunjukkan penggunaan.

Lihat juga