Contoh: Mengakses Azure Storage menggunakan pustaka Azure untuk Python
Dalam artikel ini, Anda mempelajari cara menggunakan pustaka klien Azure dalam kode aplikasi Python untuk mengunggah file ke kontainer penyimpanan Azure Blob. Artikel ini mengasumsikan Anda telah membuat sumber daya yang ditampilkan di Contoh: Membuat Azure Storage.
Semua perintah dalam artikel ini bekerja secara sama di bash Linux/macOS dan shell perintah Windows kecuali ada catatan.
1: Siapkan lingkungan pengembangan lokal Anda
Jika Anda belum melakukannya, siapkan lingkungan tempat Anda dapat menjalankan kode ini. Berikut ini adalah beberapa opsi:
Mengonfigurasi lingkungan virtual Python. Anda dapat membuat lingkungan virtual secara lokal atau di Azure Cloud Shell dan menjalankan kode di sana. Pastikan untuk mengaktifkan lingkungan virtual untuk mulai menggunakannya.
Gunakan lingkungan conda.
Gunakan Kontainer Dev di Visual Studio Code atau GitHub Codespaces.
2: Pasang paket pustaka
Dalam file requirements.txt Anda, tambahkan baris untuk paket pustaka klien yang akan Anda gunakan dan simpan file.
azure-storage-blob
azure-identity
Kemudian, di terminal atau prompt perintah Anda, instal persyaratannya.
pip install -r requirements.txt
3: Buat file yang akan diunggah
Buat file sumber bernama sample-source.txt. Nama file ini adalah apa yang diharapkan kode.
Hello there, Azure Storage. I'm a friendly file ready to be stored in a blob.
4: Gunakan penyimpanan blob dari kode aplikasi
Dua bagian berikut menunjukkan dua cara untuk mengakses kontainer blob yang dibuat melalui Contoh: Membuat Azure Storage.
Metode pertama (dengan autentikasi) mengautentikasi aplikasi dengan DefaultAzureCredential
seperti yang dijelaskan dalam Mengautentikasi aplikasi Python ke layanan Azure selama pengembangan lokal menggunakan perwakilan layanan. Dengan metode ini, Anda harus terlebih dahulu menetapkan izin yang sesuai ke identitas aplikasi, yang merupakan praktik yang direkomendasikan.
Metode kedua (dengan string koneksi) menggunakan string koneksi untuk mengakses akun penyimpanan secara langsung. Meskipun metode ini tampaknya lebih sederhana, metode ini memiliki dua kekurangan yang signifikan:
String koneksi secara inheren mengautentikasi agen penghubung dengan akun Storage daripada dengan sumber daya individu dalam akun tersebut. Akibatnya, string koneksi memberikan otorisasi yang lebih luas daripada yang mungkin diperlukan.
string koneksi berisi info akses dalam teks biasa dan oleh karena itu menyajikan potensi kerentanan jika tidak dibangun atau diamankan dengan benar. Jika string koneksi seperti itu terekspos, string koneksi dapat digunakan untuk mengakses berbagai sumber daya dalam akun Penyimpanan.
Untuk alasan ini, sebaiknya gunakan metode autentikasi dalam kode produksi.
4a: Gunakan penyimpanan blob dengan autentikasi
Buat file bernama use_blob_auth.py dengan kode berikut. Komentar menjelaskan langkah-langkahnya.
import os import uuid from azure.identity import DefaultAzureCredential # Import the client object from the SDK library from azure.storage.blob import BlobClient credential = DefaultAzureCredential() # Retrieve the storage blob service URL, which is of the form # https://<your-storage-account-name>.blob.core.windows.net/ storage_url = os.environ["AZURE_STORAGE_BLOB_URL"] # Create the client object using the storage URL and the credential blob_client = BlobClient( storage_url, container_name="blob-container-01", blob_name=f"sample-blob-{str(uuid.uuid4())[0:5]}.txt", credential=credential, ) # Open a local file and upload its contents to Blob Storage with open("./sample-source.txt", "rb") as data: blob_client.upload_blob(data) print(f"Uploaded sample-source.txt to {blob_client.url}")
Link referensi:
Buat variabel lingkungan bernama
AZURE_STORAGE_BLOB_URL
:Ganti "pythonazurestorage12345" dengan nama akun penyimpanan Anda.
Variabel
AZURE_STORAGE_BLOB_URL
lingkungan hanya digunakan oleh contoh ini. Ini tidak digunakan oleh pustaka Azure.Gunakan perintah az ad sp create-for-rbac untuk membuat perwakilan layanan baru untuk aplikasi. Perintah membuat pendaftaran aplikasi untuk aplikasi secara bersamaan. Beri nama perwakilan layanan yang Anda pilih.
az ad sp create-for-rbac --name {service-principal-name}
Output perintah ini akan terlihat seperti berikut ini. Catat nilai-nilai ini atau biarkan jendela ini terbuka karena Anda akan memerlukan nilai-nilai ini di langkah berikutnya dan tidak akan dapat melihat nilai kata sandi (rahasia klien) lagi. Namun, Anda dapat menambahkan kata sandi baru nanti tanpa membatalkan perwakilan layanan atau kata sandi yang ada jika diperlukan.
{ "appId": "00000000-0000-0000-0000-000000000000", "displayName": "{service-principal-name}", "password": "abcdefghijklmnopqrstuvwxyz", "tenant": "11111111-1111-1111-1111-111111111111" }
Perintah Azure CLI dapat dijalankan di Azure Cloud Shell atau pada stasiun kerja dengan Azure CLI terpasang.
Buat variabel lingkungan untuk perwakilan layanan aplikasi:
Buat variabel lingkungan berikut dengan nilai dari output perintah sebelumnya. Variabel ini memberi tahu
DefaultAzureCredential
untuk menggunakan perwakilan layanan aplikasi.AZURE_CLIENT_ID
→ Nilai ID aplikasi.AZURE_TENANT_ID
→ Nilai ID penyewa.AZURE_CLIENT_SECRET
→ Kata sandi/mandat yang dihasilkan untuk aplikasi.
Coba jalankan kode (yang gagal dengan sengaja):
python use_blob_auth.py
Amati kesalahan "Permintaan ini tidak berwenang untuk melakukan operasi ini menggunakan izin ini." Kesalahan diharapkan karena perwakilan layanan lokal yang Anda gunakan belum memiliki izin untuk mengakses kontainer blob.
Berikan izin kontributor pada kontainer blob ke perwakilan layanan menggunakan perintah az role assignment create Azure CLI:
az role assignment create --assignee <AZURE_CLIENT_ID> \ --role "Storage Blob Data Contributor" \ --scope "/subscriptions/<AZURE_SUBSCRIPTION_ID>/resourceGroups/PythonAzureExample-Storage-rg/providers/Microsoft.Storage/storageAccounts/pythonazurestorage12345/blobServices/default/containers/blob-container-01"
Argumen
--assignee
mengidentifikasi perwakilan layanan. Ganti <tempat penampung AZURE_CLIENT_ID> dengan ID aplikasi perwakilan layanan Anda.Argumen
--scope
mengidentifikasi lokasi penetapan peran ini berlaku. Dalam contoh ini, Anda memberikan peran "Kontributor Data Blob Penyimpanan" kepada perwakilan layanan untuk kontainer bernama "blob-container-01".Ganti
PythonAzureExample-Storage-rg
danpythonazurestorage12345
dengan grup sumber daya yang berisi akun penyimpanan Anda dan nama yang tepat dari akun penyimpanan Anda. Selain itu, sesuaikan nama kontainer blob, jika perlu. Jika menggunakan nama yang salah, Anda melihat kesalahan, "Tidak dapat melakukan operasi yang diminta pada sumber daya bersarang. Sumber daya induk 'pythonazurestorage12345' tidak ditemukan."Ganti tempat <penampung AZURE_SUBSCRIPTION_ID> dengan ID langganan Azure Anda. (Anda dapat menjalankan perintah az account show dan mendapatkan ID langganan Anda dari
id
properti di output.)
Tip
Jika perintah penetapan peran mengembalikan kesalahan "Tidak ada adaptor koneksi yang ditemukan" saat menggunakan shell bash, coba atur
export MSYS_NO_PATHCONV=1
untuk menghindari terjemahan jalur. Untuk informasi selengkapnya, lihat masalah ini.Tunggu satu atau dua menit agar izin menyebar, lalu jalankan kode lagi untuk memverifikasi bahwa kode tersebut sekarang berfungsi. Jika Anda melihat kesalahan izin lagi, tunggu sedikit lebih lama, lalu coba kode lagi.
Untuk informasi selengkapnya tentang penetapan peran, lihat Cara menetapkan izin peran menggunakan Azure CLI.
4b: Gunakan penyimpanan blob dengan string koneksi
Buat file Python bernama use_blob_conn_string.py dengan kode berikut. Komentar menjelaskan langkah-langkahnya.
import os import uuid # Import the client object from the SDK library from azure.storage.blob import BlobClient # Retrieve the connection string from an environment variable. Note that a # connection string grants all permissions to the caller, making it less # secure than obtaining a BlobClient object using credentials. conn_string = os.environ["AZURE_STORAGE_CONNECTION_STRING"] # Create the client object for the resource identified by the connection # string, indicating also the blob container and the name of the specific # blob we want. blob_client = BlobClient.from_connection_string( conn_string, container_name="blob-container-01", blob_name=f"sample-blob-{str(uuid.uuid4())[0:5]}.txt", ) # Open a local file and upload its contents to Blob Storage with open("./sample-source.txt", "rb") as data: blob_client.upload_blob(data) print(f"Uploaded sample-source.txt to {blob_client.url}")
Buat variabel lingkungan bernama
AZURE_STORAGE_CONNECTION_STRING
, nilai yang merupakan string koneksi penuh untuk akun penyimpanan. (Variabel lingkungan ini juga digunakan oleh berbagai komentar Azure CLI.) Anda bisa mendapatkan string koneksi untuk akun penyimpanan Anda dengan menjalankan perintah az storage account show-connection-string.az storage account show-connection-string --resource-group PythonAzureExample-Storage-rg --name pythonazurestorage12345
Ganti
PythonAzureExample-Storage-rg
danpythonazurestorage12345
dengan grup sumber daya yang berisi akun penyimpanan Anda dan nama yang tepat dari akun penyimpanan Anda.Saat Anda mengatur variabel lingkungan, gunakan seluruh nilai
connectionString
properti dalam output termasuk tanda kutip.Jalankan kode:
python use_blob_conn_string.py
Sekali lagi, meskipun metode ini sederhana, string koneksi mengotorisasi semua operasi dalam akun penyimpanan. Dengan kode produksi, lebih baik menggunakan izin tertentu seperti yang dijelaskan di bagian sebelumnya.
5. Verifikasi pembuatan blob
Setelah menjalankan kode salah satu metode, buka portal Azure, navigasikan ke kontainer blob untuk memverifikasi bahwa blob baru ada bernama sample-blob-{random}.txt dengan konten yang sama dengan file sample-source.txt:
Jika Anda membuat variabel lingkungan bernama AZURE_STORAGE_CONNECTION_STRING
, Anda juga dapat menggunakan Azure CLI untuk memverifikasi bahwa blob ada menggunakan perintah az storage blob list :
az storage blob list --container-name blob-container-01
Jika Anda mengikuti instruksi untuk menggunakan penyimpanan blob dengan autentikasi, Anda dapat menambahkan --connection-string
parameter ke perintah sebelumnya dengan string koneksi untuk akun penyimpanan Anda. Untuk mempelajari cara mendapatkan string koneksi, lihat instruksi dalam 4b: Menggunakan penyimpanan blob dengan string koneksi. Gunakan seluruh string koneksi termasuk tanda kutip.
6: Membersihkan sumber daya
Jalankan perintah az group delete jika Anda tidak perlu menyimpan grup sumber daya dan sumber daya penyimpanan yang digunakan 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.
Jika Anda mengikuti instruksi untuk menggunakan penyimpanan blob dengan autentikasi, ada baiknya menghapus perwakilan layanan aplikasi yang Anda buat. Anda dapat menggunakan perintah az ad app delete . <Ganti tempat penampung AZURE_CLIENT_ID> dengan ID aplikasi perwakilan layanan Anda.
az ad app delete --id <AZURE_CLIENT_ID>
Lihat juga
- Contoh: Membuat grup sumber daya
- Contoh: Cantumkan grup sumber daya dalam langganan
- Contoh: Membuat aplikasi web dan menyebarkan kode
- Contoh: Membuat Azure Storage
- Contoh: Membuat dan mengkueri database
- Contoh: Membuat komputer virtual
- Gunakan Azure Managed Disks dengan mesin virtual
- Menyelesaikan survei singkat tentang SDK Azure untuk Python
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk