Példa: Az Azure Storage elérése a Pythonhoz készült Azure-kódtárak használatával

Ebből a cikkből megtudhatja, hogyan tölthet fel fájlokat egy Azure Blob Storage-tárolóba az Azure-ügyfélkódtárak Python-alkalmazáskódban való használatával. A cikk feltételezi, hogy létrehozta az Azure Storage létrehozása című példában látható erőforrásokat.

A cikkben szereplő összes parancs ugyanúgy működik a Linux/macOS bash és a Windows parancshéjakban, hacsak fel nem jegyezzük.

1: A helyi fejlesztési környezet beállítása

Ha még nem tette meg, hozzon létre 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.

2: Kódtárcsomagok telepítése

A requirements.txt fájlban adjon hozzá sorokat a használni kívánt ügyfélkódtár-csomaghoz, és mentse a fájlt.

azure-storage-blob
azure-identity

Ezután telepítse a követelményeket a terminálban vagy a parancssorban.

pip install -r requirements.txt

3: Feltöltendő fájl létrehozása

Hozzon létre egy sample-source.txt nevű forrásfájlt. Ez a fájlnév az, amit a kód elvár.

Hello there, Azure Storage. I'm a friendly file ready to be stored in a blob.

4: Blob Storage használata alkalmazáskódból

Az alábbi két szakasz két módszert mutat be a példaként létrehozott blobtároló elérésére: Az Azure Storage létrehozása.

Az első módszer (hitelesítéssel) hitelesíti az alkalmazást DefaultAzureCredential a Python-alkalmazások Azure-szolgáltatásokba való hitelesítése szolgáltatásnevek használatával végzett helyi fejlesztés során. Ezzel a módszerrel először a megfelelő engedélyeket kell hozzárendelnie az alkalmazás identitásához, ami az ajánlott eljárás.

A második módszer (kapcsolati sztring) egy kapcsolati sztring használ a tárfiók közvetlen eléréséhez. Bár ez a módszer egyszerűbbnek tűnik, két jelentős hátránya van:

  • A kapcsolati sztring eredendően a Storage-fiókkal hitelesíti a csatlakozó ügynököt, nem pedig az adott fiókon belüli egyes erőforrásokkal. Ennek eredményeképpen egy kapcsolati sztring a szükségesnél szélesebb körű engedélyezést biztosít.

  • A kapcsolati sztring egyszerű szövegben tartalmazzák a hozzáférési adatokat, ezért potenciális biztonsági réseket jelentenek, ha nem megfelelően vannak kialakítva vagy védve. Ha egy ilyen kapcsolati sztring elérhetővé válnak, a Tárfiókon belüli erőforrások széles skáláját érheti el.

Ezen okokból javasoljuk, hogy használja a hitelesítési módszert az éles kódban.

4a: Blob Storage használata hitelesítéssel

  1. Hozzon létre egy use_blob_auth.py nevű fájlt a következő kóddal. A megjegyzések ismertetik a lépéseket.

    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}")
    

    Referenciákra mutató hivatkozások:

  2. Hozzon létre egy környezeti változót:AZURE_STORAGE_BLOB_URL

    set AZURE_STORAGE_BLOB_URL=https://pythonazurestorage12345.blob.core.windows.net
    

    Cserélje le a "pythonazurestorage12345" kifejezést a tárfiók nevére.

    A AZURE_STORAGE_BLOB_URL környezeti változót csak ez a példa használja. Az Azure-kódtárak nem használják.

  3. Az az ad sp create-for-rbac paranccsal hozzon létre egy új szolgáltatásnevet az alkalmazáshoz. A parancs egyidejűleg létrehozza az alkalmazás regisztrációját az alkalmazáshoz. Adja meg a szolgáltatásnévnek az Ön által választott nevet.

    az ad sp create-for-rbac --name {service-principal-name}
    

    A parancs kimenete a következőhöz hasonlóan fog kinézni. Jegyezze fel ezeket az értékeket, vagy tartsa nyitva ezt az ablakot, mivel a következő lépésben szüksége lesz ezekre az értékekre, és nem fogja tudni újra megtekinteni a jelszó (titkos ügyfélkód) értékét. Később azonban hozzáadhat új jelszót anélkül, hogy szükség esetén érvénytelenítenék a szolgáltatásnevet vagy a meglévő jelszavakat.

    {
      "appId": "00000000-0000-0000-0000-000000000000",
      "displayName": "{service-principal-name}",
      "password": "abcdefghijklmnopqrstuvwxyz",
      "tenant": "11111111-1111-1111-1111-111111111111"
    }
    

    Az Azure CLI-parancsok futtathatók az Azure Cloud Shellben vagy egy munkaállomáson, amelyen telepítve van az Azure CLI.

  4. Hozzon létre környezeti változókat az application service principal számára:

    Hozza létre az alábbi környezeti változókat az előző parancs kimenetéből származó értékekkel. Ezek a változók az application service principal használatát jelzik DefaultAzureCredential .

    • AZURE_CLIENT_ID → Az alkalmazásazonosító értéke.
    • AZURE_TENANT_ID → a bérlőazonosító értékét.
    • AZURE_CLIENT_SECRET → Az alkalmazáshoz létrehozott jelszó/hitelesítő adatok.
    set AZURE_CLIENT_ID=00000000-0000-0000-0000-000000000000
    set AZURE_TENANT_ID=11111111-1111-1111-1111-111111111111
    set AZURE_CLIENT_SECRET=abcdefghijklmnopqrstuvwxyz
    
  5. Próbálja meg futtatni a kódot (amely szándékosan meghiúsul):

    python use_blob_auth.py
    
  6. Figyelje meg a következő hibaüzenetet: "Ez a kérés nem jogosult a művelet végrehajtására ezzel az engedéllyel". A hiba azért várható, mert a helyi szolgáltatásnév, amelyet használ, még nem rendelkezik engedéllyel a blobtároló eléréséhez.

  7. Adjon közreműködői engedélyeket a blobtárolón a szolgáltatásnévnek az Az role assignment create Azure CLI paranccsal:

    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"
    

    Az --assignee argumentum azonosítja a szolgáltatásnevet. Cserélje le <AZURE_CLIENT_ID> helyőrzőt a szolgáltatásnév alkalmazásazonosítójára.

    Az --scope argumentum azonosítja a szerepkör-hozzárendelés helyét. Ebben a példában a "Blob-container-01" nevű tároló szolgáltatásnévének adja meg a "Storage Blob Data Contributor" szerepkört.

    • Cserélje le PythonAzureExample-Storage-rg a pythonazurestorage12345 tárfiókot tartalmazó erőforráscsoportot és a tárfiók pontos nevét. Szükség esetén módosítsa a blobtároló nevét is. Ha nem a megfelelő nevet használja, a következő hibaüzenet jelenik meg: "Nem lehet végrehajtani a kért műveletet a beágyazott erőforráson. A "pythonazurestorage12345" szülőerőforrás nem található."

    • Cserélje le a <AZURE_SUBSCRIPTION_ID> helyőrzőt az Azure-előfizetés azonosítójára. (Futtathatja az az account show parancsot, és lekérheti az előfizetés azonosítóját a id kimenetben lévő tulajdonságból.)

    Tipp.

    Ha a szerepkör-hozzárendelési parancs "Nem található kapcsolati adapter" hibaüzenetet ad vissza a Bash-rendszerhéj használatakor, próbálja meg beállítani export MSYS_NO_PATHCONV=1 az elérési út fordításának elkerülését. További információkért tekintse meg ezt a problémát.

  8. Várjon egy-két percet az engedélyek propagálására, majd futtassa újra a kódot annak ellenőrzéséhez, hogy működik-e. Ha ismét megjelenik az engedélyhiba, várjon egy kicsit tovább, majd próbálkozzon újra a kóddal.

A szerepkör-hozzárendelésekkel kapcsolatos további információkért lásd : Szerepkör-engedélyek hozzárendelése az Azure CLI használatával.

4b: Blob Storage használata kapcsolati sztring

  1. Hozzon létre egy use_blob_conn_string.py nevű Python-fájlt a következő kóddal. A megjegyzések ismertetik a lépéseket.

    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}")
    
  2. Hozzon létre egy környezeti változót, AZURE_STORAGE_CONNECTION_STRINGamelynek értéke a tárfiók teljes kapcsolati sztring. (Ezt a környezeti változót különböző Azure CLI-megjegyzések is használják.) A tárfiókhoz tartozó kapcsolati sztring az az storage account show-connection-string parancs futtatásával szerezheti be.

    az storage account show-connection-string --resource-group PythonAzureExample-Storage-rg -name pythonazurestorage12345
    

    Cserélje le PythonAzureExample-Storage-rg a pythonazurestorage12345 tárfiókot tartalmazó erőforráscsoportot és a tárfiók pontos nevét.

    A környezeti változó beállításakor használja a tulajdonság teljes értékét connectionString a kimenetben, beleértve az idézőjeleket is.

  3. Futtassa a kódot:

    python use_blob_conn_string.py
    

Bár ez a módszer egyszerű, a kapcsolati sztring minden műveletet engedélyez egy tárfiókban. Az éles kóddal jobb, ha az előző szakaszban leírt engedélyeket használja.

5. Blob létrehozásának ellenőrzése

A metódus kódjának futtatása után lépjen az Azure Portalra, és lépjen a blobtárolóba, és ellenőrizze, hogy létezik-e egy új blob, amely a sample-blob-{random}.txt ugyanazzal a tartalommal rendelkezik, mint a sample-source.txt fájl:

Azure portal page for the blob container, showing the uploaded file

Ha létrehozott egy környezeti változót, AZURE_STORAGE_CONNECTION_STRINGaz Azure CLI-vel is ellenőrizheti, hogy a blob létezik-e az az storage bloblista paranccsal:

az storage blob list --container-name blob-container-01

Ha követte a blobtároló hitelesítéssel való használatára vonatkozó utasításokat, hozzáadhatja a --connection-string paramétert az előző parancshoz a tárfiók kapcsolati sztring. A kapcsolati sztring beszerzéséről a 4b: Blob Storage használata kapcsolati sztring című témakörben talál útmutatást. Használja a teljes kapcsolati sztring az idézőjelekkel együtt.

6: Erőforrások törlése

Futtassa az az group delete parancsot, ha nem kell megtartania az ebben a példában használt erőforráscsoportot és tárerőforrásokat. Az erőforráscsoportok nem számolnak fel folyamatos díjakat az előfizetésben, de az erőforráscsoportban lévő erőforrások, például a tárfiókok díjakat vonhatnak maga után. Ajánlott minden olyan csoportot megtisztítani, amelyet nem használ aktívan. Az --no-wait argumentum lehetővé teszi, hogy a parancs azonnal visszatérjen a művelet befejezésére való várakozás helyett.

az group delete -n PythonAzureExample-Storage-rg  --no-wait

A metódussal ResourceManagementClient.resource_groups.begin_delete egy erőforráscsoportot is törölhet a kódból. A példakód : Erőforráscsoport létrehozása a használatot mutatja be.

Ha követte a blobtároló hitelesítéssel való használatára vonatkozó utasításokat, érdemes törölnie a létrehozott alkalmazás-szolgáltatásnevet. Az az ad app delete parancsot használhatja. Cserélje le a <AZURE_CLIENT_ID> helyőrzőt a szolgáltatásnév alkalmazásazonosítójára.

az ad app delete --id <AZURE_CLIENT_ID>

Lásd még