Python kullanım desenleri için Azure kitaplıkları
Python için Azure SDK, Python SDK paket dizininde listelenen birçok bağımsız kitaplıklardan oluşur.
Tüm kitaplıklar, yükleme ve nesne bağımsız değişkenleri için satır içi JSON kullanımı gibi bazı ortak özellikleri ve kullanım desenlerini paylaşır.
Yerel geliştirme ortamınızı kurun
Henüz yapmadıysanız, bu kodu çalıştırabileceğiniz bir ortam ayarlayabilirsiniz. Aşağıda bazı seçenekleri görebilirsiniz:
veya seçtiğiniz aracı kullanarak
venv
bir Python sanal ortamı yapılandırın. 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.
Kitaplık yüklemesi
Belirli bir kitaplık paketini yüklemek için kullanın pip install
:
# Install the management library for Azure Storage
pip install azure-mgmt-storage
# Install the client library for Azure Blob Storage
pip install azure-storage-blob
pip install
geçerli Python ortamınızdaki bir kitaplığın en son sürümünü alır.
Ayrıca, kitaplıkları kaldırmak ve önizleme sürümleri de dahil olmak üzere belirli sürümleri yüklemek için de kullanabilirsiniz pip
. Daha fazla bilgi için bkz . Python için Azure kitaplık paketlerini yükleme.
Zaman uyumsuz işlemler
Zaman uyumsuz kitaplıklar
Birçok istemci ve yönetim kitaplığı zaman uyumsuz sürümler (.aio
) sağlar. Kitaplık asyncio
Python 3.4'ten beri kullanılabilir ve async/await anahtar sözcükleri Python 3.5'te kullanıma sunulmuştur. Kitaplıkların zaman uyumsuz sürümlerinin Python 3.5 ve üzeri sürümlerle kullanılması amaçlanmıştır.
Zaman uyumsuz sürümlere sahip Azure Python SDK kitaplıklarına örnek olarak şunlar verilebilir: azure.storage.blob.aio, azure.servicebus.aio, azure.mgmt.keyvault.aio ve azure.mgmt.compute.aio.
Bu kitaplıkların çalışması için zaman aiohttp
uyumsuz bir aktarım gerekir. Kitaplık azure-core
, AioHttpTransport
zaman uyumsuz kitaplıklar tarafından kullanılan bir zaman uyumsuz aktarım sağlar.
Aşağıdaki kod, Azure Blob Depolama kitaplığının zaman uyumsuz sürümü için nasıl istemci oluşturulacağını gösterir:
credential = DefaultAzureCredential()
async def run():
async with BlobClient(
storage_url,
container_name="blob-container-01",
blob_name=f"sample-blob-{str(uuid.uuid4())[0:5]}.txt",
credential=credential,
) as blob_client:
# Open a local file and upload its contents to Blob Storage
with open("./sample-source.txt", "rb") as data:
await blob_client.upload_blob(data)
print(f"Uploaded sample-source.txt to {blob_client.url}")
# Close credential
await credential.close()
asyncio.run(run())
Tam örnek use_blob_auth_async.py GitHub'dadır. Bu kodun zaman uyumlu sürümü için bkz . Örnek: Blobu karşıya yükleme.
Uzun süre çalışan işlemler
Çağırdığınız bazı yönetim işlemleri (örneğin ComputeManagementClient.virtual_machines.begin_create_or_update
ve WebSiteManagementClient.web_apps.begin_create_or_update
uzun süre çalışan işlemler için bir poller döndürür; LROPoller[<type>]
burada <type>
söz konusu işleme özgüdür.
Not
Bir kitaplıktaki yöntem adlarında, sürüm farklılıkları nedeniyle farklılıklar fark edebilirsiniz. azure.core tabanlı olmayan eski kitaplıklarda genellikle gibi create_or_update
adlar kullanılır. azure.core tabanlı kitaplıklar, uzun yoklama işlemleri olduğunu daha iyi belirtmek için yöntem adlarına ön eki ekler begin_
. Eski kodu daha yeni bir azure.core tabanlı kitaplığa geçirmek genellikle yöntem adlarına ön ek eklemek begin_
anlamına gelir. Yöntem imzalarının çoğu aynı kalır.
LROPoller
Dönüş türü, işlemin zaman uyumsuz olduğu anlamına gelir. Buna göre, işlemin bitmesini beklemek ve sonucunu almak için bu poller'ın result
yöntemini çağırmanız gerekir.
Örnek: Bir web uygulaması oluşturma ve dağıtma bölümünden alınan aşağıdaki kod, bir sonucu beklemek için poller kullanma örneğini gösterir:
poller = app_service_client.web_apps.begin_create_or_update(RESOURCE_GROUP_NAME,
WEB_APP_NAME,
{
"location": LOCATION,
"server_farm_id": plan_result.id,
"site_config": {
"linux_fx_version": "python|3.8"
}
}
)
web_app_result = poller.result()
Bu durumda, değerinin dönüş değeri begin_create_or_update
türündedir AzureOperationPoller[Site]
, yani değerinin dönüş değeri poller.result()
bir Site nesnesidir.
Özel durumlar
Genel olarak Azure kitaplıkları, Azure REST API'ye yapılan başarısız HTTP istekleri de dahil olmak üzere işlemlerin beklendiği gibi gerçekleştirilemediği durumlarda özel durumlar oluşturur. Uygulama kodu için kitaplık işlemlerinin etrafındaki blokları kullanabilirsiniz try...except
.
Oluşturulabilecek özel durumların türü hakkında daha fazla bilgi için, söz konusu işlemin belgelerine bakın.
Günlük Kaydı
En son Azure kitaplıkları, günlük çıktısı oluşturmak için Python standart logging
kitaplığını kullanır. Tek tek kitaplıklar, kitaplık grupları veya tüm kitaplıklar için günlük düzeyini ayarlayabilirsiniz. Bir günlük akışı işleyicisini kaydettikten sonra, belirli bir istemci nesnesi veya belirli bir işlem için günlüğe kaydetmeyi etkinleştirebilirsiniz. Daha fazla bilgi için bkz . Azure kitaplıklarında günlüğe kaydetme.
Ara sunucu yapılandırması
Ara sunucu belirtmek için ortam değişkenlerini veya isteğe bağlı bağımsız değişkenleri kullanabilirsiniz. Daha fazla bilgi için bkz . Proxy'leri yapılandırma.
İstemci nesneleri ve yöntemleri için isteğe bağlı bağımsız değişkenler
Kitaplık başvurusu belgelerinde genellikle bir istemci nesne oluşturucusunun veya belirli bir **kwargs
işlem yönteminin imzasında bir veya **operation_config
bağımsız değişkeni görürsünüz. Bu yer tutucular, söz konusu nesnenin veya yöntemin diğer adlandırılmış bağımsız değişkenleri destekleyeebileceğini gösterir. Genellikle, başvuru belgeleri kullanabileceğiniz belirli bağımsız değişkenleri gösterir. Ayrıca, genellikle aşağıdaki bölümlerde açıklandığı gibi desteklenen bazı genel bağımsız değişkenler de vardır.
azure.core tabanlı kitaplıklar için bağımsız değişkenler
Bu bağımsız değişkenler Python - Yeni Kitaplıklar'da listelenen kitaplıklar için geçerlidir. Örneğin, için anahtar sözcük bağımsız değişkenlerinin bir alt kümesi aşağıda verilmiştir azure-core
. Tam liste için bkz. azure-core için GitHub README.
Adı | Tip | Varsayılan | Açıklama |
---|---|---|---|
logging_enable | ikili | False | Günlüğe kaydetmeyi etkinleştirir. Daha fazla bilgi için bkz . Azure kitaplıklarında günlüğe kaydetme. |
ara sunucular | Dict | {} | Ara sunucu URL'leri. Daha fazla bilgi için bkz . Proxy'leri yapılandırma. |
use_env_settings | ikili | True | True ise proxy'ler HTTP_PROXY için ve HTTPS_PROXY ortam değişkenlerinin kullanılmasına izin verir. False ise ortam değişkenleri yoksayılır. Daha fazla bilgi için bkz . Proxy'leri yapılandırma. |
connection_timeout | int | 300 | Azure REST API uç noktalarına bağlantı oluşturmak için saniyeler içinde zaman aşımı. |
read_timeout | int | 300 | Azure REST API işlemini tamamlama (yani yanıt bekleme) için saniyeler içinde zaman aşımı. |
retry_total | int | 10 | REST API çağrıları için izin verilebilen yeniden deneme denemelerinin sayısı. Yeniden denemeleri devre dışı bırakmak için kullanın retry_total=0 . |
retry_mode | enum | üssel | Yeniden deneme zamanlamasını doğrusal veya üstel bir şekilde uygular. 'Tek' ise, yeniden denemeler düzenli aralıklarla yapılır. 'Üstel' ise, her yeniden deneme önceki yeniden denemenin iki katı kadar bekler. |
Tek tek kitaplıklar bu bağımsız değişkenlerin hiçbirini desteklemek zorunda değildir, bu nedenle tam ayrıntılar için her zaman her kitaplığın başvuru belgelerine bakın. Ayrıca, her kitaplık diğer bağımsız değişkenleri destekleyemeyebilir. Örneğin blob depolamaya özgü anahtar sözcük bağımsız değişkenleri için bkz. azure-storage-blob için GitHub BENİOKU.
Nesne bağımsız değişkenleri için satır içi JSON deseni
Azure kitaplıklarındaki birçok işlem, nesne bağımsız değişkenlerini ayrık nesneler veya satır içi JSON olarak ifade etmenizi sağlar.
Örneğin, yöntemiyle create_or_update
bir ResourceManagementClient
kaynak grubu oluşturduğunuz bir nesneniz olduğunu varsayalım. Bu yöntemin ikinci bağımsız değişkeni türündedir ResourceGroup
.
yöntemini çağırmak create_or_update
için, gerekli bağımsız değişkenleriylelocation
(bu durumda) doğrudan ayrık bir örneği ResourceGroup
oluşturabilirsiniz:
# Provision the resource group.
rg_result = resource_client.resource_groups.create_or_update(
"PythonSDKExample-rg",
ResourceGroup(location="centralus")
)
Alternatif olarak, satır içi JSON ile aynı parametreleri geçirebilirsiniz:
# Provision the resource group.
rg_result = resource_client.resource_groups.create_or_update(
"PythonAzureExample-rg", {"location": "centralus"}
)
Satır içi JSON kullandığınızda, Azure kitaplıkları satır içi JSON'ı otomatik olarak söz konusu bağımsız değişken için uygun nesne türüne dönüştürür.
Nesnelerin iç içe nesne bağımsız değişkenleri de olabilir, bu durumda iç içe JSON da kullanabilirsiniz.
Örneğin, nesnesinin KeyVaultManagementClient
bir örneğine sahip olduğunuzu ve yöntemini çağırdığınız create_or_update
varsayalım. Bu durumda, üçüncü bağımsız değişken türündedir VaultCreateOrUpdateParameters
ve türünde bir bağımsız değişken VaultProperties
içerir. VaultProperties
, ve türünde Sku
list[AccessPolicyEntry]
nesne bağımsız değişkenleri içerir. A Sku
bir SkuName
nesne içerir ve her AccessPolicyEntry
bir nesne içerir Permissions
.
Katıştırılmış nesnelerle çağırmak begin_create_or_update
için aşağıdaki gibi bir kod kullanırsınız (, object_id
ve LOCATION
zaten tanımlanmış olduğu varsayılaraktenant_id
). İşlev çağrısından önce gerekli nesneleri de oluşturabilirsiniz.
# Provision a Key Vault using inline parameters
poller = keyvault_client.vaults.begin_create_or_update(
RESOURCE_GROUP_NAME,
KEY_VAULT_NAME_A,
VaultCreateOrUpdateParameters(
location = LOCATION,
properties = VaultProperties(
tenant_id = tenant_id,
sku = Sku(
name="standard",
family="A"
),
access_policies = [
AccessPolicyEntry(
tenant_id = tenant_id,
object_id = object_id,
permissions = Permissions(
keys = ['all'],
secrets = ['all']
)
)
]
)
)
)
key_vault1 = poller.result()
Satır içi JSON kullanan aynı çağrı aşağıdaki gibi görünür:
# Provision a Key Vault using inline JSON
poller = keyvault_client.vaults.begin_create_or_update(
RESOURCE_GROUP_NAME,
KEY_VAULT_NAME_B,
{
'location': LOCATION,
'properties': {
'sku': {
'name': 'standard',
'family': 'A'
},
'tenant_id': tenant_id,
'access_policies': [{
'tenant_id': tenant_id,
'object_id': object_id,
'permissions': {
'keys': ['all'],
'secrets': ['all']
}
}]
}
}
)
key_vault2 = poller.result()
Her iki form da eşdeğer olduğundan, hangisini tercih ettiğinizi seçebilir ve hatta birbirine karıştırabilirsiniz. (Bu örneklerin tam kodunuGitHub.)
JSON'unuz düzgün biçimlendirilmemişse genellikle "Seri Durumdan ÇıkarmaError: Nesne seri durumdan çıkarılamıyor: type, AttributeError: 'str' nesnesinin 'get' özniteliği yok" hatasını alırsınız. Bu hatanın yaygın nedenlerinden biri, kitaplık iç içe JSON nesnesi beklediğinde bir özellik için tek bir dize sağladığınızdır. Örneğin, önceki örnekte kullanıldığında 'sku': 'standard'
bu hata oluşturulur çünkü sku
parametresi satır içi JSON bekleyen bir Sku
nesnedir ve bu durumda {'name': 'standard'}
beklenen SkuName
türle eşlenir.
Sonraki adımlar
Python için Azure kitaplıklarını kullanmaya yönelik yaygın desenleri anladığınıza göre, belirli yönetim ve istemci kitaplığı senaryolarını keşfetmek için aşağıdaki tek başına örneklere bakın. Sıralı veya birbirine bağlı olmadığından bu örnekleri istediğiniz sırayla deneyebilirsiniz.