Megosztás a következőn keresztül:


Tárolóbérletek létrehozása és kezelése a Pythonnal

Ez a cikk bemutatja, hogyan hozhat létre és kezelhet tárolóbérleteket a Pythonhoz készült Azure Storage-ügyfélkódtár használatával. Az ügyfélkódtár használatával tárolóbérleteket szerezhet be, újíthat meg, adhat ki és szakíthat meg.

A blobtárolók aszinkron API-k használatával történő bérbeadásáról további információt a tárolók aszinkron bérlete című témakörben talál.

Előfeltételek

Saját környezet beállítása

Ha nem rendelkezik meglévő projekttel, ez a szakasz bemutatja, hogyan állíthat be egy projektet a PythonHoz készült Azure Blob Storage ügyfélkódtár használatához. További részletekért tekintse meg az Azure Blob Storage és a Python használatának első lépéseit.

A jelen cikkben szereplő példakódok használatához kövesse az alábbi lépéseket a projekt beállításához.

Csomagok telepítése

Telepítse a következő csomagokat a következő használatával pip install:

pip install azure-storage-blob azure-identity

Importálási utasítások hozzáadása

Adja hozzá a következő import-utasításokat:

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, BlobLeaseClient

Engedélyezés

Az engedélyezési mechanizmusnak rendelkeznie kell a tárolóbérlet használatához szükséges engedélyekkel. A Microsoft Entra-azonosítóval való engedélyezéshez (ajánlott) az Azure RBAC beépített szerepkörű Storage Blob Data Közreműködő vagy újabb szerepkörre van szüksége. További információkért tekintse meg a bérlettároló (REST API) engedélyezési útmutatóját.

Ügyfélobjektum létrehozása

Ha egy alkalmazást a Blob Storage-hoz szeretne csatlakoztatni, hozzon létre egy BlobServiceClient-példányt. Az alábbi példa bemutatja, hogyan hozhat létre ügyfélobjektumot DefaultAzureCredential engedélyezés céljából:

# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()

# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential=credential)

Ügyfélobjektumokat is létrehozhat adott tárolókhoz vagy blobokhoz közvetlenül vagy az BlobServiceClient objektumból. Az ügyfélobjektumok létrehozásáról és kezeléséről további információt az adaterőforrásokat kezelő ügyfélobjektumok létrehozása és kezelése című témakörben talál.

Tudnivalók a tárolóbérletekről

A bérlet létrehozza és kezeli a tároló zárolását a törlési műveletekhez. A zárolás időtartama 15–60 másodperc lehet, vagy végtelen is lehet. A tárolón lévő bérlet kizárólagos törlési hozzáférést biztosít a tárolóhoz. A tárolóbérletek csak a tároló törlésének lehetőségét vezérli a Tároló REST API törlése művelettel. Aktív bérlettel rendelkező tároló törléséhez az ügyfélnek tartalmaznia kell az aktív bérlet azonosítóját a törlési kérelemmel. Minden más tárolóművelet sikeres egy bérelt tárolón a bérletazonosító nélkül. Ha engedélyezte a tárolók helyreállítható törlését, visszaállíthatja a törölt tárolókat.

Ha többet szeretne megtudni a bérletállapotokról, és hogy mikor hajthat végre egy adott műveletet egy bérleten, tekintse meg a bérletállapotokat és a műveleteket.

A bérletműveleteket a BlobLeaseClient osztály kezeli, amely egy olyan ügyfelet biztosít, amely a blobok és tárolók összes bérletműveletét tartalmazza. Ha többet szeretne megtudni a blobbérletekről az ügyfélkódtár használatával, olvassa el a Blob-bérletek létrehozása és kezelése a Pythonnal című témakört.

Bérlet beszerzése

Tárolóbérlet beszerzésekor egy bérletazonosítót kap, amelyet a kód a tárolón való működéshez használhat. Ha a tároló már rendelkezik aktív bérletekkel, csak az aktív bérletazonosító használatával kérhet új bérletet. Megadhatja azonban az új bérlet időtartamát.

Bérlet beszerzéséhez hozza létre a BlobLeaseClient osztály egy példányát, majd használja a következő módszert:

A ContainerClient osztályból a következő módszerrel is beszerezhet bérletet:

Az alábbi példa 30 másodperces bérletet szerez be egy tárolón:

def acquire_container_lease(self, blob_service_client: BlobServiceClient, container_name):
    # Instantiate a ContainerClient
    container_client = blob_service_client.get_container_client(container=container_name)

    # Acquire a 30-second lease on the container
    lease_client = container_client.acquire_lease(30)

    return lease_client

Bérlet megújítása

Megújíthat egy tárolóbérletet, ha a kérelemben megadott bérletazonosító megegyezik a tárolóhoz társított bérletazonosítóval. A bérlet akkor is megújítható, ha lejárt, feltéve, hogy a tárolót a bérlet lejárta óta nem adták ki újra. Amikor megújít egy bérletet, a bérlet időtartama visszaáll.

A bérlet megújításához használja a következő módszert:

Az alábbi példa megújít egy tároló bérletét:

def renew_container_lease(self, lease_client: BlobLeaseClient):
    # Renew a lease on the container
    lease_client.renew()

Bérlet felszabadítása

Felszabadíthat egy tárolóbérletet, ha a kérelemben megadott bérletazonosító megegyezik a tárolóhoz társított bérletazonosítóval. A bérlet felszabadítása lehetővé teszi, hogy egy másik ügyfél közvetlenül a kiadás befejezése után megszerezze a tároló bérletét.

A bérletet a következő módszerrel oldhatja fel:

Az alábbi példa egy tárolón adja ki a bérletet:

def release_container_lease(self, lease_client: BlobLeaseClient):
    # Release a lease on the container
    lease_client.release()

Bérlet megszakítása

Megszakíthatja a tárolóbérletet, ha a tároló aktív bérletet kapott. Bármely engedélyezett kérelem megszakíthatja a bérletet; a kérelem nem szükséges egyező bérletazonosító megadásához. A bérletek nem újíthatók meg a szerződés megszakadása után, és a bérlet feltörése megakadályozza az új bérlet beszerzését egy ideig, amíg az eredeti bérlet lejár vagy fel nem szabadul.

A bérletet a következő módszerrel szakíthatja meg:

Az alábbi példa megszakítja a tároló bérletét:

def break_container_lease(self, lease_client: BlobLeaseClient):
    # Break a lease on the container
    lease_client.break_lease()

Tárolók aszinkron bérlete

A Pythonhoz készült Azure Blob Storage ügyfélkódtár aszinkron módon támogatja a tárolók bérbeadását. A projektbeállítási követelményekről további információt az Aszinkron programozás című témakörben talál.

A tároló aszinkron API-k használatával történő bérletéhez kövesse az alábbi lépéseket:

  1. Adja hozzá a következő importálási utasításokat:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient, BlobLeaseClient
    
  2. Kód hozzáadása a program futtatásához a következő használatával asyncio.run: . Ez a függvény a példánkban futtatja az átadott koroutint, main() és kezeli az asyncio eseményhurokot. A koroutinok az aszinkron/várakozási szintaxissal vannak deklarálva. Ebben a példában a main() coroutine először a legfelső szintet BlobServiceClient async withhozza létre, majd meghívja a tárolóbérletet beszerző metódust. Vegye figyelembe, hogy csak a legfelső szintű ügyfélnek kell használnia async with, mivel az abból létrehozott többi ügyfél ugyanazt a kapcsolatkészletet használja.

    async def main():
        sample = ContainerSamples()
    
        # TODO: Replace <storage-account-name> with your actual storage account name
        account_url = "https://<storage-account-name>.blob.core.windows.net"
        credential = DefaultAzureCredential()
    
        async with BlobServiceClient(account_url, credential=credential) as blob_service_client:
            lease_client = await sample.acquire_container_lease(blob_service_client, "sample-container")
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Kód hozzáadása tárolóbérlet beszerzéséhez. A kód megegyezik a szinkron példával, azzal a kivétellel, hogy a metódus a kulcsszóval async van deklarálva, és a await kulcsszót a metódus meghívásakor használja a acquire rendszer.

    async def acquire_container_lease(self, blob_service_client: BlobServiceClient, container_name):
        # Instantiate a ContainerClient
        container_client = blob_service_client.get_container_client(container=container_name)
    
        # Acquire a 30-second lease on the container
        lease_client = BlobLeaseClient(container_client)
        await lease_client.acquire(lease_duration=30)
    
        return lease_client
    

Ezzel az alapszintű beállítással a cikkben más példákat is implementálhat coroutinesként az aszinkron/várakozási szintaxis használatával.

Bérletállapotok és műveletek

Az alábbi ábra egy bérlet öt állapotát, valamint a bérletállapot-módosításokat okozó parancsokat vagy eseményeket mutatja be.

A tárolóbérleti állapotokat és az állapotváltozási eseményindítókat bemutató diagram.

Az alábbi táblázat felsorolja az öt bérletállapotot, rövid leírást ad mindegyikről, és felsorolja az adott állapotban engedélyezett bérletműveleteket. Ezek a bérletműveletek állapotváltásokat okoznak, ahogy az a diagramon is látható.

Bérlet állapota Leírás Bérletműveletek engedélyezettek
Elérhető A bérlet feloldva van, és beszerezhető. acquire
Bérelt A bérlet zárolva van. acquire (csak ugyanaz a bérletazonosító), renew, change, releaseés break
Lejárt A bérlet időtartama lejárt. acquire, renew, releaseés break
Törés A bérlet megszakadt, de a bérlet a megszakítási időszak lejártáig zárolva marad. release és break
Törött A bérlet megszakadt, és a megszakítási időszak lejárt. acquire, releaseés break

Ha egy bérlet lejár, a blobszolgáltatás a bérletazonosítót addig tartja karban, amíg a tárolót nem módosítják vagy újra nem bérletelik. Az ügyfél megkísérelheti megújítani vagy felszabadítani a bérletet a lejárt bérletazonosító használatával. Ha a kérés meghiúsul, az ügyfél tudja, hogy a tárolót ismét bérletbe adták, vagy a tárolót törölték, mivel a bérlet utoljára aktív volt.

Ha a bérlet nem explicit módon szabadul fel, hanem lejár egy bérlet, előfordulhat, hogy az ügyfélnek akár egy percet is várnia kell, mielőtt új bérletet szerezhet be a tárolóhoz. Az ügyfél azonban azonnal megújíthatja a bérletet a lejárt bérletazonosítóval.

Források

Ha többet szeretne megtudni a tárolók Pythonhoz készült Azure Blob Storage-ügyfélkódtár használatával történő bérbeadásáról, tekintse meg az alábbi erőforrásokat.

Kódminták

REST API-műveletek

Az Azure SDK for Python olyan kódtárakat tartalmaz, amelyek az Azure REST API-ra épülnek, lehetővé téve a REST API-műveletek használatát jól ismert Python-paradigmákon keresztül. A tárolók bérbeadásához használt ügyfélkódtár-metódusok a következő REST API-műveletet használják:

Ügyfélkódtár erőforrásai

Lásd még