Schnellstart: Azure Blob Storage-Clientbibliothek für Go

Beginnen Sie mit der Azure Blob Storage-Clientbibliothek für Go zum Verwalten von Blobs und Containern. Führen Sie die nachfolgenden Schritte aus, um das Paket zu installieren und den Beispielcode für grundlegende Aufgaben zu testen.

API-Referenzdokumentation | Quellcode der Bibliothek | Paket (pkg.go.dev) | Beispiele (GitHub)

Voraussetzungen

Sie benötigen ein Azure-Abonnement, um auf Azure Storage zuzugreifen. Wenn Sie noch kein Abonnement haben, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

Der gesamte Zugriff auf Azure Storage erfolgt über ein Speicherkonto. Für diesen Schnellstart erstellen Sie über das Azure-Portal mithilfe von Azure PowerShell oder über die Azure-Befehlszeilenschnittstelle ein Speicherkonto. Hilfe bei der Speicherkontoerstellung finden Sie unter Erstellen eines Speicherkontos.

Stellen Sie sicher, dass die folgenden weiteren Komponenten installiert sind:

  • Go 1.17 oder höher

  • Azure Storage Blob SDK für Go. Laden Sie das SDK mit dem folgenden Befehl herunter:

    go get -u github.com/Azure/azure-sdk-for-go/sdk/storage/azblob

    Hinweis

    Achten Sie darauf, dass Sie Azure in der URL großschreiben, um Probleme mit der Groß-/Kleinschreibung bei der Verwendung des SDK zu vermeiden. Azure muss in den Importanweisungen ebenfalls großgeschrieben werden.

Herunterladen der Beispielanwendung

Die in diesem Schnellstart verwendete Beispielanwendung ist eine einfache Go-Anwendung.

Verwenden Sie Git, um eine Kopie der Anwendung in Ihre Entwicklungsumgebung herunterzuladen.

git clone https://github.com/Azure-Samples/storage-blobs-go-quickstart 

Mit diesem Befehl wird das Repository in Ihren lokalen Git-Ordner geklont. Suchen Sie zum Öffnen des Go-Beispiels für Blobspeicher nach der Datei storage-quickstart.go.

Anmelden mit der Azure CLI

Zur Unterstützung der lokalen Entwicklung werden mit dem Azure Identity-Anmeldeinformationstyp DefaultAzureCredential Benutzer authentifiziert, die bei der Azure CLI angemeldet sind.

Führen Sie den folgenden Befehl aus, um sich bei der Azure CLI anzumelden:

az login

Die Azure CLI-Authentifizierung wird für Anwendungen, die in Azure ausgeführt werden, nicht empfohlen.

Weitere Informationen zu den verschiedenen Authentifizierungsmethoden finden Sie unter Azure-Authentifizierung mit dem Azure SDK für Go.

Zuweisen von RBAC-Berechtigungen zum Speicherkonto

Azure-Speicherkonten erfordern explizite Berechtigungen, um Lese- und Schreibvorgänge durchzuführen. Damit Sie das Speicherkonto verwenden können, müssen Sie dem Konto Berechtigungen zuweisen. Dazu müssen Sie Ihrem Konto eine entsprechende RBAC-Rolle zuweisen. Führen Sie az ad signed-in-user show --query objectId aus, um die objectID des aktuell angemeldeten Benutzer abzurufen.

Führen Sie den folgenden AzureCli-Befehl aus, um die Speicherkontoberechtigungen zuzuweisen:

az role assignment create --assignee "<ObjectID>" --role "Storage Blob Data Contributor" --scope "<StorageAccountResourceID>"

Weitere Informationen zu in Azure integrierten RBAC-Rollen finden Sie unter Integrierte Rollen.

Hinweis: Die Azure CLI hat integrierte Hilfsfunktionen erstellt, die die Speicherzugriffsschlüssel abrufen, wenn die Berechtigungen nicht erkannt werden. Diese Funktion wird nicht auf „DefaultAzureCredential“ übertragen, was der Grund für die Zuweisung von RBAC-Rollen zu Ihrem Konto ist.

Ausführen des Beispiels

Dieses Beispiel erstellt einen Azure-Speichercontainer, lädt ein Blob hoch, listet das Blob im Container auf und lädt die Blobdaten dann in einen Puffer herunter.

Öffnen Sie die Datei storage-quickstart.go, bevor Sie das Beispiel ausführen. Ersetzen Sie <StorageAccountName> durch den Namen Ihres Azure-Speicherkontos.

Führen Sie die Anwendung dann mit Befehl go run aus:

go run storage-quickstart.go

Die folgende Ausgabe ist ein Beispiel der Ausgabe, die zurückgegeben wird, wenn die Anwendung ausgeführt wird.

Azure Blob storage quick start sample
Creating a container named quickstart-4052363832531531139
Creating a dummy file to test the upload and download
Listing the blobs in the container:
blob-8721479556813186518

hello world this is a blob

Press enter key to delete the blob fils, example container, and exit the application.

Cleaning up.
Deleting the blob blob-8721479556813186518
Deleting the blob quickstart-4052363832531531139

Wenn Sie die Taste zum Fortzusetzen drücken, löscht das Beispielprogramm den Speichercontainer und die Dateien.

Tipp

Sie können zum Anzeigen der Dateien in Blob Storage auch ein Tool, z.B. den Azure Storage-Explorer, verwenden. Der Azure Storage-Explorer ist ein kostenloses plattformübergreifendes Tool, das Ihnen den Zugriff auf die Speicherkontoinformationen ermöglicht.

Grundlagen des Beispielcodes

Als Nächstes gehen wir schrittweise durch den Beispielcode, damit Sie verstehen können, wie er funktioniert.

Erstellen von ContainerURL- und BlobURL-Objekten

Erstellen Sie zunächst die Verweise auf die Objekte „ContainerURL“ und „BlobURL“, die zum Zugreifen auf und Verwalten von Blob Storage verwendet werden. Diese Objekte bieten Low-Level-APIs (beispielsweise für Erstellungs-, Upload- und Downloadvorgänge) zum Ausgeben von REST-APIs.

  • Authentifizieren Sie sich bei Azure mit DefaultAzureCredential.

  • Verwenden Sie die Struktur NewServiceClient zum Speichern Ihrer Anmeldeinformationen.

  • Instanziieren Sie eine neue ContainerURL und ein neues Objekt vom Typ BlockBlobClient, um Vorgänge für Container (Erstellen) und Blobs (Hochladen und Herunterladen) auszuführen.

Sobald das ContainerURL-Objekt vorhanden ist, können Sie das BlobURL-Objekt instanziieren, das auf einen Blob verweist, und Vorgänge wie Hochladen, Herunterladen und Kopieren ausführen.

Wichtig

Die Containernamen müssen klein geschrieben werden. Weitere Informationen zu Container- und Blobnamen finden Sie unter Benennen von Containern, Blobs und Metadaten und Verweisen auf diese.

In diesem Abschnitt erstellen Sie einen neuen Container. Der Name des Containers lautetquickstartblobs-[zufällige Zeichenfolge] .

url := "https://storageblobsgo.blob.core.windows.net/"
ctx := context.Background()

// Create a default Azure credential
credential, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
    log.Fatal("Invalid credentials with error: " + err.Error())
}

serviceClient, err := azblob.NewServiceClient(url, credential, nil)
if err != nil {
    log.Fatal("Invalid credentials with error: " + err.Error())
}

// Create the container
containerName := fmt.Sprintf("quickstart-%s", randomString())
fmt.Printf("Creating a container named %s\n", containerName)

containerClient := serviceClient.NewContainerClient(containerName)
_, err = containerClient.Create(ctx, nil)

if err != nil {
    log.Fatal(err)
}

Hochladen von Blobs in den Container

Blobspeicher unterstützt Block-, Anfüge- und Seitenblobs. Blockblobs werden am häufigsten und auch in diesem Schnellstart verwendet.

Das SDK bietet High-Level-APIs, die auf den Low-Level-REST-APIs aufbauen. So verwendet die Funktion UploadBufferToBlockBlob beispielsweise Vorgänge vom Typ „StageBlock“ (PutBlock), um eine Datei parallel in Blöcken hochzuladen und so den Durchsatz zu optimieren. Ist die Datei kleiner als 256 MB, wird stattdessen „Upload“ (PutBlob) verwendet, um die Übertragung mit einer einzelnen Transaktion durchzuführen.

Im folgenden Beispiel wird die Datei in einen Container mit dem Namen quickstartblob-[zufällige Zeichenfolge] hochgeladen.

data := []byte("\nhello world this is a blob\n")
blobName := "quickstartblob" + "-" + randomString()

var blockOptions azblob.HighLevelUploadToBlockBlobOption

blobClient, err := azblob.NewBlockBlobClient(url+containerName+"/"+blobName, credential, nil)
if err != nil {
    log.Fatal(err)
}

// Upload to data to blob storage
_, err = blobClient.UploadBufferToBlockBlob(ctx, data, blockOptions)

if err != nil {
    log.Fatalf("Failure to upload to blob: %+v", err)
}

Auflisten der Blobs in einem Container

Rufen Sie eine Liste mit Dateien im Container ab, indem Sie die ListBlobs-Methode auf ein ContainerURL-Objekt anwenden. Blobnamen werden in lexikografischer Reihenfolge zurückgegeben. Nachdem Sie ein Segment abgerufen haben, verarbeiten Sie es, und rufen Sie dann ListBlobs erneut auf.

	// List the blobs in the container
pager := containerClient.ListBlobsFlat(nil)

for pager.NextPage(ctx) {
    resp := pager.PageResponse()

    for _, v := range resp.ContainerListBlobFlatSegmentResult.Segment.BlobItems {
        fmt.Println(*v.Name)
    }
}

if err = pager.Err(); err != nil {
    log.Fatalf("Failure to list blobs: %+v", err)
}

// Download the blob
get, err := blobClient.Download(ctx, nil)
if err != nil {
    log.Fatal(err)
}

Herunterladen des Blobs

Wenn Blobs mit der Low-Level-Funktion Download für eine BlobURL heruntergeladen werden, wird eine Struktur DownloadResponse zurückgegeben. Führen Sie die Funktion Body für die Struktur aus, um zum Lesen der Daten einen Datenstrom vom Typ RetryReader zu erhalten. Sollte beim Lesen der Daten ein Verbindungsfehler auftreten, wird durch andere Anforderungen versucht, die Verbindung wiederherzustellen und den Lesevorgang fortzusetzen. Wenn „MaxRetryRequests“ für „RetryReaderOption“ auf „0“ festgelegt ist (Standardeinstellung), wird der ursprüngliche Antworttext zurückgegeben, und es werden keine Wiederholungen durchgeführt. Alternativ können Sie die High-Level-API DownloadBlobToBuffer oder DownloadBlobToFile verwenden, um Ihren Code zu vereinfachen.

Der folgende Code lädt das Blob mithilfe der Funktion Download herunter. Die Inhalte des Blobs werden in einen Puffer geschrieben und auf der Konsole angezeigt.

// Download the blob
get, err := blobClient.Download(ctx, nil)
if err != nil {
    log.Fatal(err)
}

downloadedData := &bytes.Buffer{}
reader := get.Body(azblob.RetryReaderOptions{})
_, err = downloadedData.ReadFrom(reader)
if err != nil {
    log.Fatal(err)
}
err = reader.Close()
if err != nil {
    log.Fatal(err)
}

fmt.Println(downloadedData.String())

Bereinigen von Ressourcen

Wenn Sie die in diesem Schnellstart hochgeladenen Blobs nicht mehr benötigen, können Sie mit Delete-Methode den gesamten Container löschen.

// Cleaning up the quick start by deleting the blob and container
fmt.Printf("Press enter key to delete the blob fils, example container, and exit the application.\n")
bufio.NewReader(os.Stdin).ReadBytes('\n')
fmt.Printf("Cleaning up.\n")

// Delete the blob
fmt.Printf("Deleting the blob " + blobName + "\n")

_, err = blobClient.Delete(ctx, nil)
if err != nil {
    log.Fatalf("Failure: %+v", err)
}

// Delete the container
fmt.Printf("Deleting the blob " + containerName + "\n")
_, err = containerClient.Delete(ctx, nil)

if err != nil {
    log.Fatalf("Failure: %+v", err)
}

Ressourcen für die Entwicklung von Go-Anwendungen mit Blobs

Sehen Sie sich diese anderen Ressourcen zur Go-Entwicklung mit Blobspeicher an:

Nächste Schritte

In diesem Schnellstart haben Sie gelernt, wie Sie mit Go Dateien zwischen einem lokalen Datenträger und Azure Blob Storage übertragen. Weitere Informationen zur Azure Storage Blob-Clientbibliothek finden Sie im Quellcode und in der API-Referenz.