Freigeben über


Festlegen oder Ändern der Zugriffsebene eines Blockblobs mit Python

In diesem Artikel wird beschrieben, wie die Zugriffsebene eines Blockblobs mithilfe der Azure Storage-Clientbibliothek für Python festgelegt oder geändert wird.

Informationen zum Ändern der Zugriffsebene eines Blobs mithilfe asynchroner APIs finden Sie unter Asynchrones Ändern der Zugriffsebene eines Blobs.

Voraussetzungen

  • In diesem Artikel wird davon ausgegangen, dass Sie bereits ein Projekt für die Arbeit mit der Azure Blob Storage-Clientbibliothek für Python eingerichtet haben. Informationen zum Einrichten Ihres Projekts, einschließlich der Paketinstallation, dem Hinzufügen von import-Anweisungen und dem Erstellen eines autorisierten Clientobjekts, finden Sie unter Erste Schritte mit Azure Blob Storage und Python.
  • Der Autorisierungsmechanismus muss über Berechtigungen zum Festlegen der Zugriffsebene des Blobs verfügen. Weitere Informationen finden Sie im Autorisierungsleitfaden für die folgenden REST-API-Vorgänge:

Informationen zu Zugriffsebenen für Blockblobs

Um die Kosten für die Speicheranforderungen im Blick zu behalten, kann es hilfreich sein, die Daten anhand ihrer Zugriffshäufigkeit und Aufbewahrungsdauer zu organisieren. Azure Storage weist verschiedene Zugriffsebenen auf, sodass Sie Blobdaten basierend auf ihrer Verwendung auf die kostengünstigste Weise speichern können.

Zugriffsebenen für Blobdaten

Folgende Azure Storage-Zugriffsebenen stehen zur Verfügung:

  • Heiße Zugriffsebene: Onlineebene, die für die Speicherung von Daten optimiert ist, auf die häufig zugegriffen wird oder die häufig geändert werden. Die heiße Ebene hat die höchsten Speicherkosten, aber auch die niedrigsten Zugriffskosten.
  • Kalte Zugriffsebene: Onlineebene, die für die Speicherung von Daten optimiert ist, auf die nicht häufig zugegriffen wird oder die nicht häufig geändert werden. Daten auf der kalten Ebene sollten für mindestens 30 Tage gespeichert werden. Für die kalte Ebene fallen im Vergleich zur heißen Ebene niedrigere Speicherkosten, aber höhere Zugriffskosten an.
  • Ebene „Cold“ – Eine Onlineebene, die für die Speicherung von Daten optimiert ist, auf die nur selten zugegriffen wird oder die selten geändert werden. Daten auf der Ebene „Cold“ sollten für mindestens 90 Tage gespeichert werden. Für die Ebene „Cold“ fallen im Vergleich zur kalten Ebene niedrigere Speicherkosten und höhere Zugriffskosten an.
  • Archivebene – Eine Offline-Dienstebene, welche für die Speicherung von Daten optimiert ist, auf die nur selten zugegriffen wird und die flexible Wartezeitanforderungen in der Größenordnung von Stunden aufweist. Daten auf Archivzugriffsebene müssen mindestens 180 Tage lang gespeichert werden.

Weitere Informationen zu Zugriffsebenen finden Sie unter Zugriffsebenen für Blobdaten.

Während ein Blob sich auf der Archivebene befindet, wird es als offline betrachtet und kann nicht gelesen oder geändert werden. Wenn Daten in einem archivierten Blob gelesen oder geändert werden sollen, müssen Sie das Blob zuerst auf einer Onlineebene aktivieren. Weitere Informationen zum Aktivieren eines Blobs aus der Archivebene auf einer Onlineebene finden Sie unter Aktivierung von Blobs aus der Archivebene.

Beschränkungen

Das Festlegen der Zugriffsebene ist nur für Blockblobs gestattet. Weitere Informationen zu Einschränkungen beim Festlegen der Zugriffsebene eines Blockblobs finden Sie unter Festlegen der Blobebene (REST-API).

Hinweis

Um mithilfe von Python die Zugriffsebene auf Cold festzulegen, müssen Sie mindestens die Version 12.15.0 der Clientbibliothek verwenden.

Festlegen der Zugriffsebene eines Blobs während dem Upload

Sie können die Zugriffsebene eines Blobs für den Upload festlegen, indem Sie das standard_blob_tier-Schlüsselwortargument an upload_blob oder an upload_blob_from_url übergeben.

Im folgenden Codebeispiel wird gezeigt, wie die Zugriffsebene beim Upload eines Blobs festgelegt wird:

def upload_blob_access_tier(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
    blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
    
    #Upload blob to the cool tier
    with open(file=os.path.join(r'file_path', blob_name), mode="rb") as data:
        blob_client = blob_client.upload_blob(data=data, overwrite=True, standard_blob_tier=StandardBlobTier.COOL)

Weitere Informationen zum Hochladen eines Blobs mit Python finden Sie unter Hochladen eines Blobs mit Python.

Ändern der Zugriffsebene für einen vorhandenen Blockblob

Sie können die Zugriffsebene eines vorhandenen Blockblobs ändern, indem Sie die folgende Funktion verwenden:

Das folgende Codebeispiel zeigt, wie Sie die Zugriffsebene für einen vorhandenen Blob zu Cool ändern:

def change_blob_access_tier(self, blob_client: BlobClient):
    # Change the blob access tier to cool
    blob_client.set_standard_blob_tier(StandardBlobTier.COOL)

Wenn Sie einen archivierten Blob erneut aktivieren, können Sie optional das Schlüsselwortargument „rehydrate_priority“ als „HIGH“ oder „STANDARD“ übergeben.

Kopieren eines Blobs in eine andere Zugriffsebene

Sie können die Zugriffsebene eines vorhandenen Blockblobs ändern, indem Sie im Rahmen eines Kopiervorgangs eine Zugriffsebene angeben. Um die Zugriffsebene während eines Kopiervorgangs zu ändern, übergeben Sie das Schlüsselwortargument „standard_blob_tier“ an start_copy_from_url. Wenn Sie einen Blob aus der Archivebene mithilfe eines Kopiervorgangs erneut aktivieren, können Sie optional das Schlüsselwortargument „rehydrate_priority“ als „HIGH“ oder „STANDARD“ übergeben.

Das folgende Codebeispiel demonstriert Ihnen, wie Sie einen archivierten Blob mithilfe eines Kopiervorgangs in die Ebene „Hot“ aktivieren:

def rehydrate_blob_using_copy(self, source_archive_blob: BlobClient, destination_rehydrated_blob: BlobClient):
    # Note: the destination blob must have a different name than the source blob

    # Start the copy operation - specify the rehydrate priority and blob access tier
    copy_operation = dict()
    copy_operation = destination_rehydrated_blob.start_copy_from_url(
        source_url=source_archive_blob.url,
        standard_blob_tier=StandardBlobTier.HOT,
        rehydrate_priority=RehydratePriority.STANDARD,
        requires_sync=False)

Weitere Informationen zum Kopieren eines Blobs mit Python finden Sie unter Kopieren eines Blobs mit Python.

Asynchrones Ändern der Zugriffsebene eines Blobs

Die Azure Blob Storage-Clientbibliothek für Python unterstützt das asynchrone Ändern der Zugriffsebene eines Blobs. Weitere Informationen zu den Projekteinrichtungsanforderungen finden Sie unter Asynchrone Programmierung.

Führen Sie die folgenden Schritte aus, um die Zugriffsebene eines Blobs mithilfe asynchroner APIs zu ändern:

  1. Fügen Sie die folgenden import-Anweisungen hinzu:

    import asyncio
    
    from azure.storage.blob import (
    StandardBlobTier
    )
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import (
    BlobServiceClient,
    BlobClient
    )
    
  2. Fügen Sie Code hinzu, um das Programm mithilfe von asyncio.run auszuführen. Diese Funktion führt die übergebene Coroutine aus, main() in unserem Beispiel, und verwaltet die Ereignisschleife von asyncio. Coroutinen werden mit der async/await-Syntax deklariert. In diesem Beispiel erstellt die Coroutine main() zunächst das BlobServiceClient-Element auf oberster Ebene mit async with und ruft dann die Methode auf, welche die Zugriffsebene des Blobs ändert. Beachten Sie, dass nur der Client auf oberster Ebene async withverwenden muss, da andere von ihm erstellte Clients denselben Verbindungspool aufweisen.

    async def main():
        sample = BlobAccessTierSamples()
    
        # TODO: Replace <storage-account-name> with an 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:
            # Change the blob access tier to cool
            blob_client = blob_service_client.get_blob_client(container="sample-container", blob="sample-blob.txt")
            await sample.change_blob_access_tier(blob_client=blob_client)
    
    if __name__ == '__main__':
        asyncio.run(main())
    
  3. Fügen Sie Code hinzu, um die Zugriffsebene des Blobs zu ändern. Der Code ist identisch mit dem synchronen Beispiel, mit der Ausnahme, dass die Methode mit dem Schlüsselwort „async“ deklariert wird und das Schlüsselwort „await‘‘ beim Aufrufen der Methode „set_standard_blob_tier“ verwendet wird.

    async def change_blob_access_tier(self, blob_client: BlobClient):
        # Change the blob access tier to cool
        await blob_client.set_standard_blob_tier(StandardBlobTier.COOL)
    

Mit dieser grundlegenden Einrichtung können Sie weitere Beispiele in diesem Artikel als Coroutinen mit async/await-Syntax implementieren.

Ressourcen

Weitere Informationen zum Festlegen von Zugriffsebenen mithilfe der Azure Blob Storage-Clientbibliothek für Python finden Sie in den folgenden Ressourcen.

REST-API-Vorgänge

Das Azure SDK für Python enthält Bibliotheken, die auf der Azure-REST-API basieren, und ermöglicht Ihnen so die Interaktion mit REST-API-Vorgängen über vertraute Python-Paradigmen. Die Methoden der Clientbibliothek zum Festlegen von Zugriffsebenen verwenden den folgenden REST-API-Vorgang:

Ressourcen zur Clientbibliothek

Codebeispiele

Siehe auch