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
- 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 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:
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
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 azasyncio
eseményhurokot. A koroutinok az aszinkron/várakozási szintaxissal vannak deklarálva. Ebben a példában amain()
coroutine először a legfelső szintetBlobServiceClient
async with
hozza létre, majd meghívja a tárolóbérletet beszerző metódust. 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 = 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())
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 aawait
kulcsszót a metódus meghívásakor használja aacquire
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.
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
- 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 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:
- Bérlettároló (REST API)
Ü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.