Örnek: Python için Azure kitaplıklarını kullanarak Azure Depolama erişme
Bu makalede Python uygulama kodundaki Azure istemci kitaplıklarını kullanarak azure blob depolama kapsayıcısına dosya yüklemeyi öğreneceksiniz. Makalede, Örnek: Azure Depolama oluşturma bölümünde gösterilen kaynakları oluşturduğunuz varsayılır.
Bu makaledeki tüm komutlar, not edilmediği sürece Linux/macOS bash ve Windows komut kabuklarında aynı şekilde çalışır.
1: Yerel geliştirme ortamınızı ayarlama
Henüz yapmadıysanız, bu kodu çalıştırabileceğiniz bir ortam ayarlayın. Aşağıda bazı seçenekleri görebilirsiniz:
Python sanal ortamını yapılandırma. Sanal ortamı yerel olarak veya Azure Cloud Shell'de oluşturabilir ve kodu orada çalıştırabilirsiniz. Kullanmaya başlamak için sanal ortamı etkinleştirdiğinizden emin olun.
Conda ortamı kullanın.
Visual Studio Code veya GitHub Codespaces'ta Geliştirme Kapsayıcısı kullanın.
2: Kitaplık paketlerini yükleme
requirements.txt dosyanızda, kullanacağınız istemci kitaplığı paketi için satırlar ekleyin ve dosyayı kaydedin.
azure-storage-blob
azure-identity
Ardından, terminal veya komut isteminizde gereksinimleri yükleyin.
pip install -r requirements.txt
3: Karşıya yüklenecek bir dosya oluşturma
sample-source.txt adlı bir kaynak dosyası oluşturun. Bu dosya adı, kodun beklediği addır.
Hello there, Azure Storage. I'm a friendly file ready to be stored in a blob.
4: Uygulama kodundan blob depolamayı kullanma
Aşağıdaki iki bölümde Örnek aracılığıyla oluşturulan blob kapsayıcısına erişmenin iki yolu gösterilmektedir: Azure Depolama oluşturma.
İlk yöntem (kimlik doğrulaması ile), hizmet sorumlularını kullanarak yerel geliştirme sırasında Azure hizmetlerine Python uygulamalarının kimliğini doğrulama bölümünde açıklandığı gibi uygulamanın DefaultAzureCredential
kimliğini doğrular. Bu yöntemle, önce önerilen uygulama olan uygulama kimliğine uygun izinleri atamanız gerekir.
İkinci yöntem (bağlantı dizesi ile) depolama hesabına doğrudan erişmek için bir bağlantı dizesi kullanır. Bu yöntem daha basit görünse de iki önemli dezavantajı vardır:
bir bağlantı dizesi, bu hesaptaki tek tek kaynaklar yerine Depolama hesabıyla bağlantı aracısının kimliğini doğal olarak doğrular. Sonuç olarak, bir bağlantı dizesi gerekenden daha geniş bir yetkilendirme verir.
bağlantı dizesi düz metin olarak erişim bilgileri içerir ve bu nedenle düzgün bir şekilde yapılandırılmamış veya güvenli hale getirilmemişse olası güvenlik açıklarını gösterir. Böyle bir bağlantı dizesi kullanıma sunulursa, Depolama hesabındaki çok çeşitli kaynaklara erişmek için kullanılabilir.
Bu nedenlerden dolayı, üretim kodunda kimlik doğrulama yöntemini kullanmanızı öneririz.
4a: Kimlik doğrulaması ile blob depolama kullanma
Aşağıdaki kodla use_blob_auth.py adlı bir dosya oluşturun. Açıklamalar adımları açıklar.
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}")
Başvuru bağlantıları:
adlı
AZURE_STORAGE_BLOB_URL
bir ortam değişkeni oluşturun:"pythonazurestorage12345" yerine depolama hesabınızın adını yazın.
Ortam
AZURE_STORAGE_BLOB_URL
değişkeni yalnızca bu örnek tarafından kullanılır. Azure kitaplıkları tarafından kullanılmaz.Uygulama için yeni bir hizmet sorumlusu oluşturmak için az ad sp create-for-rbac komutunu kullanın. komutu, uygulama için uygulama kaydını aynı anda oluşturur. Hizmet sorumlusuna seçtiğiniz adı verin.
az ad sp create-for-rbac --name {service-principal-name}
Bu komutun çıkışı aşağıdaki gibi görünür. Bu değerleri not alın veya sonraki adımda bu değerlere ihtiyacınız olacağı ve parola (istemci gizli dizisi) değerini yeniden görüntüleyemeyeceğiniz için bu pencereyi açık tutun. Ancak, gerekirse hizmet sorumlusunu veya mevcut parolaları geçersiz hale getirmeden daha sonra yeni bir parola ekleyebilirsiniz.
{ "appId": "00000000-0000-0000-0000-000000000000", "displayName": "{service-principal-name}", "password": "abcdefghijklmnopqrstuvwxyz", "tenant": "11111111-1111-1111-1111-111111111111" }
Azure CLI komutları Azure Cloud Shell'de veya Azure CLI yüklü bir iş istasyonunda çalıştırılabilir.
Uygulama hizmet sorumlusu için ortam değişkenleri oluşturun:
Önceki komutun çıkışındaki değerlerle aşağıdaki ortam değişkenlerini oluşturun. Bu değişkenler uygulama hizmet sorumlusunu kullanmayı söyler
DefaultAzureCredential
.AZURE_CLIENT_ID
Uygulama kimliği değerini →.AZURE_TENANT_ID
kiracı kimliği değerini →.AZURE_CLIENT_SECRET
→ Uygulama için oluşturulan parola/kimlik bilgisi.
Kodu çalıştırma girişimi (kasıtlı olarak başarısız olur):
python use_blob_auth.py
"Bu isteğin bu izni kullanarak bu işlemi gerçekleştirme yetkisi yok" hatasını gözlemleyin. Kullandığınız yerel hizmet sorumlusu henüz blob kapsayıcısına erişim iznine sahip olmadığından hata beklenir.
az role assignment create Azure CLI komutunu kullanarak blob kapsayıcısı üzerinde hizmet sorumlusuna katkıda bulunan izinleri verin:
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"
--assignee
bağımsız değişkeni hizmet sorumlusunu tanımlar. AZURE_CLIENT_ID> yer tutucusunu hizmet sorumlunuzun uygulama kimliğiyle değiştirin<.Bağımsız değişken,
--scope
bu rol atamasının nereye uygulanacağı tanımlar. Bu örnekte, "blob-container-01" adlı kapsayıcının hizmet sorumlusuna "Depolama Blob Veri Katkıda Bulunanı" rolünü verirsiniz.ve
pythonazurestorage12345
değerini depolama hesabınızı ve depolama hesabınızın tam adını içeren kaynak grubuyla değiştirinPythonAzureExample-Storage-rg
. Ayrıca gerekirse blob kapsayıcısının adını ayarlayın. Yanlış ad kullanıyorsanız, "İstenen işlem iç içe kaynakta gerçekleştirilemiyor. 'pythonazurestorage12345' üst kaynağı bulunamadı."<AZURE_SUBSCRIPTION_ID> yer tutucusunu Azure abonelik kimliğiniz ile değiştirin. (az account show komutunu çalıştırabilir ve çıkıştaki
id
özelliğinden abonelik kimliğinizi alabilirsiniz.)
İpucu
Rol atama komutu bash kabuğu kullanılırken "Bağlantı bağdaştırıcısı bulunamadı" hatası döndürüyorsa, yol çevirisini önlemek için ayarı
export MSYS_NO_PATHCONV=1
deneyin. Daha fazla bilgi için bu soruna bakın.İzinlerin yayılması için bir veya iki dakika bekleyin, ardından şimdi çalıştığını doğrulamak için kodu yeniden çalıştırın. İzinler hatasını yeniden görürseniz, biraz daha bekleyin ve kodu yeniden deneyin.
Rol atamaları hakkında daha fazla bilgi için bkz . Azure CLI kullanarak rol izinleri atama.
4b: blob depolamayı bağlantı dizesi ile kullanma
Aşağıdaki kodla use_blob_conn_string.py adlı bir Python dosyası oluşturun. Açıklamalar adımları açıklar.
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}")
değeri depolama hesabının tam bağlantı dizesi olan adlı
AZURE_STORAGE_CONNECTION_STRING
bir ortam değişkeni oluşturun. (Bu ortam değişkeni çeşitli Azure CLI açıklamaları tarafından da kullanılır.) az storage account show-connection-string komutunu çalıştırarak depolama hesabınız için bağlantı dizesi alabilirsiniz.az storage account show-connection-string --resource-group PythonAzureExample-Storage-rg --name pythonazurestorage12345
ve
pythonazurestorage12345
değerini depolama hesabınızı ve depolama hesabınızın tam adını içeren kaynak grubuyla değiştirinPythonAzureExample-Storage-rg
.Ortam değişkenini ayarladığınızda, tırnak işaretleri de dahil olmak üzere çıktıdaki özelliğin tüm değerini
connectionString
kullanın.Kodu çalıştırın:
python use_blob_conn_string.py
Bu yöntem basit olsa da, bir bağlantı dizesi bir depolama hesabındaki tüm işlemleri yetkiler. Üretim koduyla, önceki bölümde açıklandığı gibi belirli izinleri kullanmak daha iyidir.
5. Blob oluşturmayı doğrulama
İki yöntemin kodunu çalıştırdıktan sonra Azure portalına gidin, blob kapsayıcısına gidin ve sample-source.txt dosyasıyla aynı içerikle.txt sample-blob-{random}adlı yeni bir blob bulunduğunu doğrulayın:
adlı AZURE_STORAGE_CONNECTION_STRING
bir ortam değişkeni oluşturduysanız az storage blob list komutunu kullanarak blob'un mevcut olduğunu doğrulamak için Azure CLI'yı da kullanabilirsiniz:
az storage blob list --container-name blob-container-01
Blob depolamayı kimlik doğrulamasıyla kullanma yönergelerini izlediyseniz, parametresini --connection-string
depolama hesabınızın bağlantı dizesi önceki komuta ekleyebilirsiniz. bağlantı dizesi nasıl edineceğinizi öğrenmek için 4b: blob depolamayı bağlantı dizesi ile kullanma yönergelerine bakın. Tırnak işaretleri dahil olmak üzere tüm bağlantı dizesi kullanın.
6: Kaynakları temizleme
Bu örnekte kullanılan kaynak grubunu ve depolama kaynaklarını tutmanız gerekmiyorsa az group delete komutunu çalıştırın. Kaynak grupları aboneliğinizde devam eden ücret ödemez, ancak kaynak grubundaki depolama hesapları gibi kaynaklar ücrete tabi olabilir. Etkin olarak kullanmadığınız tüm grupları temizlemek iyi bir uygulamadır. --no-wait
bağımsız değişkeni, işlemin bitmesini beklemek yerine komutun hemen döndürülmesini sağlar.
az group delete -n PythonAzureExample-Storage-rg --no-wait
Bir kaynak grubunu koddan silmek için yöntemini de kullanabilirsiniz ResourceManagementClient.resource_groups.begin_delete
. Örnek: Kaynak grubu oluşturma içindeki kod kullanımı gösterir.
Blob depolamayı kimlik doğrulamasıyla kullanma yönergelerini izlediyseniz, oluşturduğunuz uygulama hizmet sorumlusunu silmek iyi bir fikirdir. az ad app delete komutunu kullanabilirsiniz. <AZURE_CLIENT_ID> yer tutucusunu hizmet sorumlunuzun uygulama kimliğiyle değiştirin.
az ad app delete --id <AZURE_CLIENT_ID>
Ayrıca bkz.
- Örnek: Kaynak grubu oluşturma
- Örnek: Abonelikteki kaynak gruplarını listeleme
- Örnek: Web uygulaması oluşturma ve kod dağıtma
- Örnek: Azure Depolama oluşturma
- Örnek: Veritabanı oluşturma ve sorgulama
- Örnek: Sanal makine oluşturma
- Sanal makinelerle Azure Yönetilen Diskler kullanma
- Python için Azure SDK hakkında kısa bir anket tamamlama
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin