Azure-kódtárak Python-használati mintákhoz
Az Azure SDK for Python számos független kódtárból áll, amelyek szerepelnek a Python SDK-csomagindexében.
Minden kódtár közös jellemzőkkel és használati mintákkal rendelkezik, például a telepítéssel és a beágyazott JSON használatával az objektumargumentumokhoz.
A helyi fejlesztési környezet beállítása
Ha még nem tette meg, beállíthat egy környezetet, ahol futtathatja ezt a kódot. Íme néhány lehetőség:
Python virtuális környezet konfigurálása. Létrehozhatja a virtuális környezetet helyileg vagy az Azure Cloud Shellben, és ott futtathatja a kódot. Mindenképpen aktiválja a virtuális környezetet a használat megkezdéséhez.
Használjon conda környezetet.
Használjon Dev-tárolót a Visual Studio Code-ban vagy a GitHub Codespace-ben.
Kódtár telepítése
Egy adott kódtárcsomag telepítéséhez használja a következőt 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
Lekéri egy kódtár legújabb verzióját az aktuális Python-környezetben.
A kódtárak eltávolítására és bizonyos verziók, köztük az előzetes verziók telepítésére is használható pip
. További információ: Azure Library-csomagok telepítése Pythonhoz.
Aszinkron műveletek
Aszinkron kódtárak
Számos ügyfél- és felügyeleti kódtár biztosít aszinkron verziót (.aio
). A asyncio
kódtár a Python 3.4 óta érhető el, és a Python 3.5-ben bevezették az aszinkron/várakozási kulcsszavakat. A kódtárak aszinkron verziói a Python 3.5-ös és újabb verzióival használhatók.
Az aszinkron verziójú Azure Python SDK-kódtárak például a következők: azure.storage.blob.aio, azure.servicebus.aio, azure.mgmt.keyvault.aio és azure.mgmt.compute.aio.
Ezeknek a kódtáraknak aszinkron átvitelre, például aiohttp
működésre van szükségük. A azure-core
kódtár aszinkron átvitelt biztosít, AioHttpTransport
amelyet az aszinkron kódtárak használnak.
Az alábbi kód bemutatja, hogyan hozhat létre ügyfelet az Azure Blob Storage-kódtár aszinkron verziójához:
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())
A teljes példa a GitHubon található use_blob_auth_async.py. A kód szinkron verziójáról lásd : Példa: Blob feltöltése.
Hosszú ideig futó műveletek
Néhány olyan felügyeleti művelet, amelyet meghív (például ComputeManagementClient.virtual_machines.begin_create_or_update
WebSiteManagementClient.web_apps.begin_create_or_update
egy lekérdezést a hosszú ideig futó műveletekhez, LROPoller[<type>]
ahol <type>
a szóban forgó műveletre jellemző).
Feljegyzés
A kódtárakban a metódusnevekben eltéréseket tapasztalhat, ami a verzióeltérésnek köszönhető. A régebbi, nem azure.core-alapú kódtárak általában olyan neveket használnak, mint a create_or_update
. Az azure.core-alapú kódtárak hozzáadják az előtagot a begin_
metódusnevekhez, hogy jobban jelezzék, hogy hosszú lekérdezési műveletek. A régi kód egy újabb azure.core-alapú kódtárba való migrálása általában azt jelenti, hogy hozzáadja az előtagot a begin_
metódusnevekhez, mivel a legtöbb metódus-aláírás változatlan marad.
A LROPoller
visszatérési típus azt jelenti, hogy a művelet aszinkron. Ennek megfelelően meg kell hívnia a poller metódusát result
, hogy várja meg, amíg a művelet befejeződik, és megkapja annak eredményét.
A következő, webalkalmazás létrehozása és üzembe helyezése című példából vett kód egy példát mutat be arra, hogy a lekérdezés használatával várja meg az eredményt:
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()
Ebben az esetben a visszatérési begin_create_or_update
érték típus AzureOperationPoller[Site]
, ami azt jelenti, hogy a visszatérési poller.result()
érték egy Hely objektum.
Kivételek
Az Azure-kódtárak általában kivételeket emelnek ki, ha a műveletek nem a kívánt módon hajthatók végre, beleértve az Azure REST API-nak küldött sikertelen HTTP-kéréseket is. Alkalmazáskód esetén blokkokat használhat try...except
a kódtárműveletek körül.
Az esetlegesen felmerülő kivételek típusával kapcsolatos további információkért tekintse meg a szóban forgó művelet dokumentációját.
Naplózás
A legutóbbi Azure-kódtárak a Python standard logging
kódtárat használják a naplókimenet létrehozásához. Beállíthatja az egyes kódtárak, kódtárcsoportok vagy az összes tár naplózási szintjét. Miután regisztrál egy naplózási adatfolyam-kezelőt, engedélyezheti a naplózást egy adott ügyfélobjektumhoz vagy egy adott művelethez. További információ: Naplózás az Azure-kódtárakban.
Proxy konfigurálása
Proxy megadásához használhat környezeti változókat vagy választható argumentumokat. További információ: Proxyk konfigurálása.
Nem kötelező argumentumok ügyfélobjektumokhoz és metódusokhoz
A kódtár referenciadokumentációjában gyakran megjelenik egy **kwargs
**operation_config
vagy több argumentum egy ügyfélobjektum-konstruktor vagy egy adott műveleti módszer aláírásában. Ezek a helyőrzők azt jelzik, hogy a szóban forgó objektum vagy metódus más nevesített argumentumokat is támogathat. A referenciadokumentáció általában a használható argumentumokat jelzi. Vannak olyan általános argumentumok is, amelyek gyakran támogatottak az alábbi szakaszokban leírtak szerint.
Az azure.core-on alapuló kódtárak argumentumai
Ezek az argumentumok a Python – Új kódtárakban felsorolt kódtárakra vonatkoznak. Íme például a kulcsszóargumentumok azure-core
egy részhalmaza. A teljes listát az Azure-core GitHub README-ében találja.
Név | Típus | Alapértelmezett | Leírás |
---|---|---|---|
logging_enable | logikai | Hamis | Engedélyezi a naplózást. További információ: Naplózás az Azure-kódtárakban. |
proxyk | diktálás | {} | Proxykiszolgáló URL-címei. További információ: Proxyk konfigurálása. |
use_env_settings | logikai | Igaz | Ha igaz, lehetővé teszi a HTTP_PROXY proxyk használatát és HTTPS_PROXY a környezeti változókat. Ha hamis, a környezeti változók figyelmen kívül lesznek hagyva. További információ: Proxyk konfigurálása. |
connection_timeout | egész | 300 | Az Azure REST API-végpontokkal való kapcsolat létrehozásához szükséges időtúllépés másodpercben. |
read_timeout | egész | 300 | Az Azure REST API-művelet végrehajtásának időtúllépése másodpercben (azaz válaszra vár). |
retry_total | egész | 10 | A REST API-hívások engedélyezett újrapróbálkozási kísérleteinek száma. Az újrapróbálkozések letiltására használható retry_total=0 . |
retry_mode | Enum | Exponenciális | Lineáris vagy exponenciális módon alkalmazza az újrapróbálkozási időzítést. Ha "önálló", az újrapróbálkozások rendszeres időközönként történnek. Ha "exponenciális", minden újrapróbálkozás kétszer annyi ideig vár, mint az előző újrapróbálkozás. |
Az egyes kódtárak nem kötelesek ezen argumentumok egyikét sem támogatni, ezért a pontos részletekért mindig tekintse meg az egyes kódtárak referenciadokumentációját. Emellett az egyes kódtárak más argumentumokat is támogathatnak. Blob Storage-specifikus kulcsszóargumentumok esetén például tekintse meg az Azure-Storage-blob GitHub README-ját.
Beágyazott JSON-minta objektumargumentumokhoz
Az Azure-kódtárakon belüli számos művelet lehetővé teszi az objektumargumentumok diszkrét objektumokként vagy beágyazott JSON-ként történő kifejezését.
Tegyük fel például, hogy van egy ResourceManagementClient
objektuma, amelyen keresztül létrehoz egy erőforráscsoportot annak metódusával create_or_update
. A metódus második argumentuma típus.ResourceGroup
A create_or_update
metódus meghívásához létrehozhat egy különálló példányt ResourceGroup
közvetlenül a szükséges argumentumokkal (location
ebben az esetben):
# Provision the resource group.
rg_result = resource_client.resource_groups.create_or_update(
"PythonSDKExample-rg",
ResourceGroup(location="centralus")
)
Másik lehetőségként ugyanazokat a paramétereket adhatja át, mint a beágyazott JSON:
# Provision the resource group.
rg_result = resource_client.resource_groups.create_or_update(
"PythonAzureExample-rg", {"location": "centralus"}
)
Beágyazott JSON használatakor az Azure-kódtárak automatikusan átalakítják a beágyazott JSON-t a szóban forgó argumentum megfelelő objektumtípusára.
Az objektumok beágyazott objektumargumentumokkal is rendelkezhetnek, ebben az esetben beágyazott JSON-t is használhat.
Tegyük fel például, hogy rendelkezik az KeyVaultManagementClient
objektum egy példányával, és meghívja annak metódusát create_or_update
. Ebben az esetben a harmadik argumentum típus VaultCreateOrUpdateParameters
, amely maga is tartalmaz egy típus VaultProperties
argumentumot . VaultProperties
, viszont a típus és list[AccessPolicyEntry]
a . típusú Sku
objektumargumentumokat tartalmaz. Az A Sku
tartalmaz egy objektumot SkuName
, és mindegyik AccessPolicyEntry
tartalmaz egy objektumot Permissions
.
Beágyazott objektumokkal való híváshoz begin_create_or_update
az alábbihoz hasonló kódot kell használnia (feltételezve tenant_id
, object_id
hogy LOCATION
már definiálva van). A függvényhívás előtt is létrehozhatja a szükséges objektumokat.
# 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()
Ugyanez a hívás a beágyazott JSON használatával az alábbiak szerint jelenik meg:
# 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()
Mivel mindkét űrlap egyenértékű, kiválaszthatja, hogy melyiket szeretné, és akár össze is keverheti őket. (A példák teljes kódja a következő oldalon található: GitHub.)
Ha a JSON nem megfelelően van kialakítva, általában a következő hibaüzenet jelenik meg: "DeserializationError: Nem lehet deszerializálni az objektumot: type, AttributeError: 'str' objektum nem rendelkezik "get" attribútummal. A hiba gyakori oka, hogy egyetlen sztringet ad meg egy tulajdonsághoz, amikor a kódtár beágyazott JSON-objektumot vár. Az előző példában például ez a hiba azért fordul elő, 'sku': 'standard'
mert a sku
paraméter egy Sku
olyan objektum, amely beágyazott JSON objektumot vár, ebben az esetben {'name': 'standard'}
, amely a várt SkuName
típusra van leképezve.
Következő lépések
Most, hogy megismerte az Azure-kódtárak Pythonhoz való használatának gyakori mintáit, tekintse meg az alábbi különálló példákat a konkrét felügyeleti és ügyfélkódtár-forgatókönyvek megismeréséhez. Ezeket a példákat bármilyen sorrendben kipróbálhatja, mivel azok nem egymástól vagy egymástól függenek.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: