Knihovny Azure pro vzorce použití Pythonu
Sada Azure SDK for Python se skládá výhradně z mnoha nezávislých knihoven, které jsou uvedeny v indexu balíčku Python SDK.
Všechny knihovny sdílejí určité společné charakteristiky a vzory použití, jako je instalace a použití vloženého formátu JSON pro argumenty objektu.
Instalace knihovny
Pro instalaci konkrétního balíčku knihovny použijte 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 načte nejnovější verzi knihovny v aktuálním prostředí Pythonu.
Můžete také použít pip k odinstalování knihoven a instalaci specifických verzí, včetně verzí Preview. Další informace najdete v tématu Instalace balíčků knihoven Azure pro Python.
Asynchronních operace
Mnoho operací, které vyvoláte prostřednictvím klientských objektů klienta a správy (například ComputeManagementClient.virtual_machines.begin_create_or_update a WebSiteManagementClient.web_apps.create_or_update ), vrátí objekt typu, AzureOperationPoller[<type>] kde <type> je specifický pro danou operaci.
Obě tyto metody jsou asynchronní. Rozdíl v názvech metod je způsoben rozdíly v verzích. Starší knihovny, které nejsou založené na Azure. Core obvykle používají pojmenované jako create_or_update . Knihovny založené na Azure. Core přidávají begin_ předponu do názvů metod, aby lépe označovali, že jsou asynchronní. Migrace starého kódu do novější knihovny založené na Azure. Core obvykle znamená přidání begin_ předpony do názvů metod, protože většina signatur metod zůstává stejná.
V obou případech AzureOperationPoller návratový typ jednoznačně znamená, že operace je asynchronní. Proto je nutné zavolat metodu tohoto dotazovacího nástroje, result aby čekala na dokončení operace a získala výsledek.
Následující kód, který je pořízený z příkladu: zřízení a nasazení webové aplikace, ukazuje příklad použití nástroje pro hlasování k čekání na výsledek:
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()
V tomto případě návratová hodnota begin_create_or_update je typu AzureOperationPoller[Site] , což znamená, že návratová hodnota poller.result() je objekt begin_create_or_update .
Výjimky
Obecně platí, že knihovny Azure vyvolají výjimky v případě, že se operace nezdaří, a to včetně neúspěšných požadavků HTTP na REST API Azure. Pro kód aplikace můžete použít try...except bloky kolem operací knihovny.
Další informace o typu výjimek, které mohou být vyvolány, najdete v dokumentaci k příslušné operaci.
protokolování
Nejnovější knihovny Azure používají logging ke generování výstupu protokolu standardní knihovnu Pythonu. Úroveň protokolování můžete nastavit pro jednotlivé knihovny, skupiny knihoven nebo všechny knihovny. Po registraci obslužné rutiny streamu protokolování můžete povolit protokolování pro určitý objekt klienta nebo konkrétní operaci. Další informace najdete v tématu protokolování do knihoven Azure.
Konfigurace proxy serveru
Chcete-li zadat proxy server, můžete použít proměnné prostředí nebo nepovinné argumenty. Další informace najdete v tématu Postup konfigurace proxy serverů.
Volitelné argumenty pro klientské objekty a metody
V referenční dokumentaci knihovny často vidíte **kwargs**operation_config argument nebo v signatuře konstruktoru objektu klienta nebo konkrétní metody operace. Tyto zástupné symboly označují, že objekt nebo metoda, které jsou v dotazu, mohou podporovat další pojmenované argumenty. Referenční dokumentace obvykle indikuje konkrétní argumenty, které můžete použít. Existují také některé obecné argumenty, které jsou často podporovány, jak je popsáno v následujících částech.
Argumenty pro knihovny založené na Azure. Core
Tyto argumenty se vztahují na knihovny uvedené v Pythonu – nové knihovny.
| Název | Typ | Výchozí | Description |
|---|---|---|---|
| logging_enable | bool | Ne | Povolí protokolování. Další informace najdete v tématu protokolování do knihoven Azure. |
| Proxy, | dict | {} | Adresy URL proxy serveru. Další informace najdete v tématu Postup konfigurace proxy serverů. |
| use_env_settings | bool | Ano | V případě hodnoty true umožňuje použití HTTP_PROXYHTTPS_PROXY proměnných prostředí a pro proxy servery. Pokud je hodnota false, proměnné prostředí se ignorují. Další informace najdete v tématu Postup konfigurace proxy serverů. |
| connection_timeout | int | 300 | Časový limit v sekundách, po který se připojení k koncovým bodům Azure REST API. |
| read_timeout | int | 300 | Časový limit v sekundách pro dokončení operace Azure REST API (tj. čekání na odpověď). |
| retry_total | int | 10 | Počet povolených opakovaných pokusů o REST API volání. Použijte retry_total=0 k zakázání opakování. |
| retry_mode | enum | exponenciální | Použije opakování časování lineárním nebo exponenciálním způsobem. Pokud se používá Single, pokusy se povedou v pravidelných intervalech. Pokud se jedná o exponenciální, každý pokus o opakování počká dvakrát, dokud nebude předchozí pokus. |
Jednotlivé knihovny nejsou povinny podporovat žádný z těchto argumentů, takže si vždy přečtěte referenční dokumentaci ke každé knihovně, kde najdete přesné podrobnosti.
Argumenty pro jiné než základní knihovny
| Název | Typ | Výchozí | Description |
|---|---|---|---|
| verify | bool | Ano | Ověřte certifikát SSL. |
| cert | str | Žádné | Cesta k místnímu certifikátu pro ověřování na straně klienta. |
| timeout | int | 30 | Časový limit pro navázání připojení k serveru během několika sekund. |
| allow_redirects | bool | Ne | Povolit přesměrování. |
| max_redirects | int | 30 | Maximální počet povolených přesměrování. |
| Proxy, | dict | {} | Adresa URL proxy serveru Další informace najdete v tématu Postup konfigurace proxy serverů. |
| use_env_proxies | bool | Ne | Povolí čtení nastavení proxy serveru z proměnných místního prostředí. |
| opakování | int | 10 | Celkový počet povolených opakovaných pokusů. |
| enable_http_logger | bool | Ne | Povolí protokoly protokolu HTTP v režimu ladění. |
Vložený vzor JSON pro argumenty objektu
Mnoho operací v knihovnách Azure umožňuje vyjádřit argumenty objektu buď jako diskrétní objekty, nebo jako vložené JSON.
Předpokládejme například, že máte objekt, ResourceManagementClient pomocí kterého vytvoříte skupinu prostředků s jeho create_or_update metodou. Druhý argument této metody je typu ResourceGroup .
Pro volání create_or_update můžete vytvořit diskrétní instanci ResourceGroup přímo s jejími povinnými argumenty ( location v tomto případě):
rg_result = resource_client.resource_groups.create_or_update(
"PythonSDKExample-rg",
ResourceGroup(location="centralus")
)
Alternativně můžete předat stejné parametry jako vložené JSON:
rg_result = resource_client.resource_groups.create_or_update(
"PythonAzureExample-rg",
{
"location": "centralus"
}
)
Při použití formátu JSON knihovny Azure automaticky převádějí vložený formát JSON na příslušný typ objektu pro daný argument.
Objekty mohou také obsahovat vnořené argumenty objektu. v takovém případě můžete také použít vnořený kód JSON.
Předpokládejme například, že máte instanci KeyVaultManagementClient objektu a zavoláte jeho create_or_update metodu. V tomto případě je třetí argument typu VaultCreateOrUpdateParameters , který obsahuje argument typu VaultProperties . VaultProperties, zase obsahuje argumenty objektu typu Sku a list[AccessPolicyEntry] . SkuObsahuje SkuName objekt, který AccessPolicyEntry obsahuje objekt Permissions .
Chcete-li volat begin_create_or_update pomocí vložených objektů, použijte kód podobný následujícímu (za předpokladu, že tenant_id a object_id jsou již definovány). Je také možné vytvořit potřebné objekty před voláním funkce.
# Provision a Key Vault using inline parameters
poller = keyvault_client.vaults.begin_create_or_update(
RESOURCE_GROUP_NAME,
KEY_VAULT_NAME_A,
VaultCreateOrUpdateParameters(
location = "centralus",
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()
Stejné volání pomocí vloženého formátu JSON se zobrazí takto:
# Provision a Key Vault using inline JSON
poller = keyvault_client.vaults.begin_create_or_update(
RESOURCE_GROUP_NAME,
KEY_VAULT_NAME_B,
{
'location': 'centralus',
'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()
Vzhledem k tomu, že obě formy jsou ekvivalentní, můžete zvolit, co dáváte přednost, a dokonce je Intermix. (Úplný kód pro tyto příklady najdete na GitHub.)
Pokud váš kód JSON není správně vytvořený, obdržíte obvykle chybu "DeserializationError: nejde deserializovat do objektu: Type, AttributeError: objekt str nemá žádný atribut get. Běžnou příčinou této chyby je, že poskytujete jeden řetězec pro vlastnost, když knihovna očekává vnořený objekt JSON. Například použití "sku": "standard" v předchozím příkladu generuje tuto chybu, protože sku parametr je Sku objekt, který očekává vložený vložený objekt JSON, v tomto případě { "name": "standard"} , který je namapován na očekávaný SkuName typ.
Další kroky
Teď, když rozumíte běžným vzorům pro používání knihoven Azure pro Python, si přečtěte následující samostatné příklady a prozkoumejte konkrétní scénáře správy a klientské knihovny. Tyto příklady můžete vyzkoušet v libovolném pořadí, protože nejsou ani sekvenční ani vzájemně závislé.