Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk bemutatja, hogyan hozhat létre és kezelhet blobbérleteket a Pythonhoz készült Azure Storage-ügyfélkódtár használatával. Az ügyfélkönyvtár használatával blob bérleteket szerezhet be, újíthat meg, bocsáthat ki és szakíthat meg.
A blob aszinkron API-k használatával történő bérbeadásáról további információt a blobok aszinkron bérlete című témakörben talál.
Előfeltételek
- Azure-előfizetés – hozzon létre egyet ingyenesen
- Azure Storage-fiók – tárfiók létrehozása
- Python 3.8+
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 az pip install használatával:
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 blobbérlet használatához szükséges engedélyekkel. A Microsoft Entra ID használatához történő engedélyezéshez (ajánlott) az Azure RBAC beépített "Storage Blob Data Contributor" szerepkörre vagy magasabb szerepkörre van szükség. További információkért tekintse meg az Lease Blob (REST API) autorizációs ú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 blob bérletről
Egy bérleti szerződés létrehoz és kezel egy blob-zárat az írási és törlési műveletekhez. A zárolás időtartama 15–60 másodperc lehet, vagy végtelen is lehet. Egy blob bérlete kizárólagos írási és törlési hozzáférést biztosít a blobhoz. Ha aktív bérlettel rendelkező blobba szeretne írni, az ügyfélnek tartalmaznia kell az aktív bérlet azonosítóját az írási kérelemmel.
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.
Minden tárolóművelet engedélyezett azon tárolók esetében, amelyek aktív bérlettel rendelkező blobokat tartalmaznak, beleértve a tároló törlése is. Ezért a tároló akkor is törölhető, ha a benne lévő blobok aktív bérletekkel rendelkeznek. A Tárolóbérlet művelettel szabályozhatja a tároló törléséhez szükséges jogosultságokat.
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 tárolóbérletekről az ügyfélkódtár használatával, olvassa el a Tárolóbérletek létrehozása és kezelése a Pythonnal című témakört.
Bérlet beszerzése
Blobbérlet beszerzésekor egy bérletazonosítót kap, amelyet a kód a blobon való működéshez használhat. Ha a blob 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 blob bérleti szerződését úgy is megszerezheti, hogy létrehoz egy BlobClient példányt, és az alábbi módszert alkalmazza:
Az alábbi példa egy blob 30 másodperces bérletét szerzi be:
def acquire_blob_lease(self, blob_service_client: BlobServiceClient, container_name):
# Instantiate a BlobClient
blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
# Acquire a 30-second lease on the blob
lease_client = blob_client.acquire_lease(30)
return lease_client
Bérlet megújítása
Megújíthat egy blobbérletet, ha a kérelemben megadott bérletazonosító megegyezik a blobhoz társított bérletazonosítóval. A bérlet akkor is megújítható, ha lejárt, feltéve, hogy a blobot a bérlet lejárata óta nem módosították vagy bérletezték ú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 blob típusú objektum bérletét:
def renew_blob_lease(self, lease_client: BlobLeaseClient):
# Renew a lease on a blob
lease_client.renew()
Bérlet felszabadítása
Blobbérletet akkor adhat ki, ha a kérelemben megadott bérletazonosító megegyezik a blobhoz 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 blob bérletét.
A bérletet a következő módszerrel oldhatja fel:
Az alábbi példa feloldja a blob bérletét.
def release_blob_lease(self, lease_client: BlobLeaseClient):
# Release a lease on a blob
lease_client.release()
Bérlet megszakítása
Megszakíthatja a blob bérleti szerződését, ha a blobnak aktív bérlete van. Bármilyen engedélyezett kérelem felmondhatja a bérletet; a kérelemhez nem szükséges egyező bérletazonosítót megadni. 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 felbontja egy blob bérletét.
def break_blob_lease(self, lease_client: BlobLeaseClient):
# Break a lease on a blob
lease_client.break_lease()
Blobok aszinkron bérlete
A Pythonhoz készült Azure Blob Storage ügyfélkódtár aszinkron módon támogatja a blobok 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 blob aszinkron API-k használatával történő bérletéhez kövesse az alábbi lépéseket:
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, BlobLeaseClientAdja hozzá a kódot 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 azasyncioeseményhurokot. A korutinok az async/await szintaxissal vannak deklarálva. Ebben a példában amain()coroutine először létrehozza a felső szintBlobServiceClientaasync withhasználatával, majd meghívja a metódust, amely megszerzi a blob bérlését. Vegye figyelembe, hogy csak a legfelső szintű ügyfélnek kell használniaasync with, mivel az abból létrehozott többi ügyfél ugyanazt a kapcsolatkészletet használja.async def main(): sample = BlobSamples() # 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_blob_lease(blob_service_client, "sample-container") if __name__ == '__main__': asyncio.run(main())Adjon hozzá kódot a blobbérlet megszerzéséhez. A kód megegyezik a szinkron példával, azzal a kivétellel, hogy a metódus a kulcsszóval
asyncvan deklarálva, és aawaitkulcsszót a metódus meghívásakor használja aacquire_leaserendszer.async def acquire_blob_lease(self, blob_service_client: BlobServiceClient, container_name): # Instantiate a BlobClient blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt") # Acquire a 30-second lease on the blob lease_client = await blob_client.acquire_lease(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.
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 |
| Rendkívüli hírek | 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 blobot 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 ez a művelet sikeres, az ügyfél tudja, hogy a blob nem módosult a bérletazonosító utolsó érvényességétől kezdve. Ha a kérés meghiúsul, az ügyfél tudja, hogy a blob módosult, vagy a blobot ismét bérletbe adták, mivel a bérlet utoljára aktív volt. Az ügyfélnek ezután új bérelési engedélyt kell szereznie a blobra.
Ha egy bérlet lejár ahelyett, hogy explicit módon fel lett volna szabadítva, előfordulhat, hogy az ügyfélnek akár egy percet is várnia kell, mielőtt új bérletet szerezhet be a blob számára. Az ügyfél azonban azonnal megújíthatja a bérletet a bérletazonosítójával, ha a blobot nem módosították.
A blobok pillanatképeihez nem adható bérlet, mivel a pillanatképek írásvédettek. Amikor bérletet kérsz egy pillanatképhez, az 400 (Bad Request) státuszkódot eredményez.
Források
Ha többet szeretne megtudni a blobbérletek Pythonhoz készült Azure Blob Storage-ügyfélkódtár használatával történő kezeléséről, tekintse meg az alábbi erőforrásokat.
Kódminták
- Szinkron vagy aszinkron kódminták megtekintése ebből a cikkből (GitHub)
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 blobbérletek kezelésére szolgáló ü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
Kapcsolódó tartalom
- Ez a cikk a Python Blob Storage fejlesztői útmutatójának része. További információkért tekintse meg a Python-alkalmazás buildeléséhez kapcsolódó fejlesztői útmutatók teljes listáját.