Användningsmönster för Azure-bibliotek för Python

Azure SDK för Python består endast av många oberoende bibliotek som listas i paketindexet för Python SDK.

Alla bibliotek har vissa gemensamma egenskaper och användningsmönster, till exempel installation och användning av infogade JSON för objektargument.

Biblioteksinstallation

Om du vill installera ett specifikt bibliotekspaket använder du 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 hämtar den senaste versionen av ett bibliotek i din aktuella Python-miljö.

Du kan också använda för pip att avinstallera bibliotek och installera specifika versioner, inklusive förhandsversioner. Mer information finns i Så här installerar du Azure-bibliotekspaket för Python.

Asynkrona åtgärder

Många åtgärder som du anropar via klient- och hanteringsklientobjekt (till exempel och ) returnerar ett objekt av typen där är specifikt ComputeManagementClient.virtual_machines.begin_create_or_updateWebSiteManagementClient.web_apps.create_or_update för den aktuella AzureOperationPoller[<type>]<type> åtgärden.

Båda dessa metoder är asynkrona. Skillnaden i metodnamnen beror på versionsskillnader. Äldre bibliotek som inte baseras på azure.core använder vanligtvis namngivna som create_or_update . Bibliotek baserade på azure.core lägger till begin_ prefixet i metodnamnen för att bättre indikera att de är asynkrona. Migrering av gammal kod till ett nyare azure.core-baserat bibliotek innebär vanligtvis att prefixet läggs till i metodnamnen, eftersom de flesta begin_ metodsignaturer förblir desamma.

I båda fallen innebär en AzureOperationPoller returtyp definitivt att åtgärden är asynkron. Därför måste du anropa avsökningsmetoden för result att vänta tills åtgärden har avslutats och få dess resultat.

Följande kod, som kommer från Exempel: Etableraoch distribuera en webbapp , visar ett exempel på hur du använder avsökning för att vänta på ett resultat:

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()

I det här fallet är returvärdet begin_create_or_update för av typen , vilket innebär att AzureOperationPoller[Site] returvärdet för är ett poller.result()begin_create_or_update

Undantag

I allmänhet kan Azure-biblioteken skapa undantag när åtgärder inte fungerar som avsett, inklusive misslyckade HTTP-begäranden till Azure-REST API. För appkod kan du sedan använda block try...except runt biblioteksåtgärder.

Mer information om vilken typ av undantag som kan uppstå finns i dokumentationen för åtgärden i fråga.

Loggning

De senaste Azure-biblioteken använder Pythons logging standardbibliotek för att generera loggutdata. Du kan ange loggningsnivå för enskilda bibliotek, grupper av bibliotek eller alla bibliotek. När du har registrerat en loggningsströmhanterare kan du aktivera loggning för ett specifikt klientobjekt eller en specifik åtgärd. Mer information finns i Logga i Azure-biblioteken.

Proxykonfiguration

Om du vill ange en proxyserver kan du använda miljövariabler eller valfria argument. Mer information finns i Så här konfigurerar du proxy.

Valfria argument för klientobjekt och metoder

I biblioteksreferensdokumentationen visas ofta ett - eller -argument i **kwargs**operation_config signaturen för en klientobjektkonstruktor eller en specifik åtgärdsmetod. Dessa platshållare anger att objektet eller metoden i fråga kan ha stöd för ytterligare namngivna argument. Referensdokumentationen anger vanligtvis de specifika argument som du kan använda. Det finns även vissa allmänna argument som ofta stöds enligt beskrivningen i följande avsnitt.

Argument för bibliotek baserade på azure.core

Dessa argument gäller för de bibliotek som listas i Python – Nya bibliotek.

Namn Typ Standardvärde Description
logging_enable boolesk Falskt Aktiverar loggning. Mer information finns i Logga i Azure-biblioteken.
proxyservrar dict {} Url:er för proxyserver. Mer information finns i Så här konfigurerar du proxy.
use_env_settings bool Sant Om sant tillåter användning av HTTP_PROXYHTTPS_PROXY miljövariabler och för proxy. Om det är False ignoreras miljövariablerna. Mer information finns i Så här konfigurerar du proxy.
connection_timeout int 300 Tidsgränsen i sekunder för att upprätta en anslutning till Azure REST API slutpunkter.
read_timeout int 300 Tidsgränsen i sekunder för att slutföra en Azure REST API åtgärd (det vill säga att vänta på ett svar).
retry_total int 10 Antalet tillåtna återförsök för REST API anrop. Använd retry_total=0 för att inaktivera återförsök.
retry_mode Enum Exponentiell Tillämpar tidsinställning för återförsök på ett linjärt eller exponentiellt sätt. Om det är "single" görs återförsök med jämna mellanrum. Om det är "exponentiellt" väntar varje nytt försök två gånger så länge som det tidigare återförsöket.

Enskilda bibliotek är inte skyldiga att stödja något av dessa argument, så läs alltid referensdokumentationen för varje bibliotek för mer information.

Argument för icke-kärnbibliotek

Namn Typ Standardvärde Description
Kontrollera bool Sant Verifiera SSL-certifikatet.
Cert Str Ingen Sökväg till lokalt certifikat för verifiering på klientsidan.
timeout int 30 Tidsgräns för att upprätta en serveranslutning i sekunder.
allow_redirects boolesk Falskt Aktivera omdirigeringar.
max_redirects int 30 Maximalt antal tillåtna omdirigeringar.
proxyservrar dict {} Webbadress till proxyserver. Mer information finns i Så här konfigurerar du proxy.
use_env_proxies boolesk Falskt Aktivera läsning av proxyinställningar från lokala miljövariabler.
Försök int 10 Totalt antal tillåtna återförsök.
enable_http_logger boolesk Falskt Aktivera loggar för HTTP i felsökningsläge.

Infogade JSON-mönster för objektargument

Med många åtgärder i Azure-biblioteken kan du uttrycka objektargument som diskreta objekt eller som infogade JSON.

Anta till exempel att du har ett ResourceManagementClient -objekt genom vilket du skapar en resursgrupp med dess create_or_update -metod. Det andra argumentet för den här metoden är av typen ResourceGroup .

Om du create_or_update vill anropa kan du skapa en diskret instans av direkt med de argument som krävs ( i ResourceGroup det här location fallet):

rg_result = resource_client.resource_groups.create_or_update(
    "PythonSDKExample-rg",
    ResourceGroup(location="centralus")
)

Alternativt kan du skicka samma parametrar som infogade JSON:

rg_result = resource_client.resource_groups.create_or_update(
    "PythonAzureExample-rg",
    {
        "location": "centralus"
    }
)

När du använder JSON konverterar Azure-biblioteken automatiskt infogade JSON till lämplig objekttyp för argumentet i fråga.

Objekt kan också ha kapslade objektargument, vilket innebär att du även kan använda kapslad JSON.

Anta till exempel att du har en instans av KeyVaultManagementClient objektet och anropar dess create_or_update -metod. I det här fallet är det tredje argumentet av typen VaultCreateOrUpdateParameters , som i sig innehåller ett argument av typen VaultProperties . VaultProperties, innehåller i sin tur objektargument av typen Sku och list[AccessPolicyEntry] . En Sku innehåller ett SkuName -objekt och var och en innehåller ett AccessPolicyEntryPermissions -objekt.

Om du begin_create_or_update vill anropa med inbäddade objekt använder du kod som följande (förutsatt tenant_id att och redan har object_id definierats). Du kan också skapa nödvändiga objekt före funktionsanropet.

# 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()

Samma anrop med hjälp av infogade JSON visas på följande sätt:

# 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()

Eftersom båda formulären är likvärdiga kan du välja det du föredrar och till och med blanda dem. (Den fullständiga koden för de här exemplen finns på GitHub.)

Om din JSON inte är korrekt utformad får du vanligtvis felet "DeserializationError: Unable to deserialize to object: type, AttributeError: 'str' object has no attribute 'get'". En vanlig orsak till det här felet är att du anger en sträng för en egenskap när biblioteket förväntar sig ett kapslat JSON-objekt. Om du till exempel använder i föregående exempel genereras det här felet eftersom parametern är ett objekt som förväntar sig "sku": "standard"skuSku infogade objekt-JSON, i det här fallet , som mappar till { "name": "standard"} den förväntade SkuName typen.

Nästa steg

Nu när du förstår de vanliga mönstren för att använda Azure-biblioteken för Python kan du se följande fristående exempel för att utforska specifika scenarier för hantering och klientbibliotek. Du kan prova de här exemplen i valfri ordning eftersom de varken är sekventiella eller beroende av varandra.