Schnellstart: Azure Blob Storage-Clientmodul für Go
Beginnen Sie mit dem Azure Blob Storage-Clientmodul 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)
Voraussetzungen
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- Azure Storage-Konto – Erstellen eines Speicherkontos
- Go 1.18+
Einrichten
In diesem Abschnitt wird beschrieben, wie ein Projekt zur Verwendung mit dem Azure Blob Storage-Clientmodul für Go vorbereitet wird.
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 Blob Storage nach der Datei mit dem Namen „storage-quickstart.go
“.
Installieren der Pakete
Um mit Blob- und Containerressourcen in einem Speicherkonto zu arbeiten, installieren Sie das azblob-Paket mithilfe des folgenden Befehls:
go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
Um sich mit Microsoft Entra ID zu authentifizieren (empfohlen), installieren Sie das azidentity-Modul mit dem folgenden Befehl:
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Authentifizieren bei Azure und Autorisieren des Zugriffs auf Blobdaten
Anwendungsanforderungen an Azure Blob Storage müssen autorisiert werden. Die Verwendung von DefaultAzureCredential
und der Azure Identity-Client-Bibliothek ist der empfohlene Ansatz für die Implementierung kennwortloser Verbindungen zu Azure-Diensten in Ihrem Code, einschließlich Blob Storage.
Sie können Anforderungen an Azure Blob Storage auch mithilfe des Kontozugriffsschlüssels autorisieren. Dieser Ansatz sollte jedoch mit Vorsicht verwendet werden. Entwickler müssen darauf achten, dass die Zugriffsschlüssel niemals an einem unsicheren Ort offengelegt werden. Jeder, der über den Zugriffsschlüssel verfügt, kann Anforderungen für das Speicherkonto autorisieren und hat somit Zugriff auf alle Daten. DefaultAzureCredential
bietet verbesserte Verwaltungs- und Sicherheitsvorteile gegenüber dem Kontoschlüssel, um kennwortlose Authentifizierung zu ermöglichen. Beide Optionen werden im folgenden Beispiel veranschaulicht.
DefaultAzureCredential
ist eine Implementierung der Berechtigungskette, die von der Azure Identity-Clientbibliothek für Go bereitgestellt wird. „DefaultAzureCredential
“ unterstützt mehrere Authentifizierungsmethoden und bestimmt, welche Methode zur Laufzeit verwendet wird. Bei diesem Ansatz kann Ihre App unterschiedliche Authentifizierungsmethoden in verschiedenen Umgebungen (lokal gegenüber Produktion) verwenden, ohne umgebungsspezifischen Code zu implementieren.
Weitere Informationen über die Reihenfolge und Speicherorte, in denen „DefaultAzureCredential
“ nach Anmeldeinformationen sucht, finden Sie in der Übersicht über die Azure Identity-Bibliothek.
Ihre App kann sich beispielsweise mit Ihren Azure CLI-Anmeldeinformationen authentifizieren, wenn Sie lokal entwickeln. Nachdem Ihre Anwendung in Azure bereitgestellt wurde, kann sie eine verwaltete Identität verwenden. Für diesen Übergang zwischen Umgebungen sind keine Änderungen am Code erforderlich.
Zuweisen von Rollen zu Ihrem Microsoft Entra-Benutzerkonto
Stellen Sie bei lokaler Entwicklung sicher, dass das Benutzerkonto, das auf Blobdaten zugreift, über die richtigen Berechtigungen verfügt. Sie benötigen die Berechtigung Mitwirkender an Storage-Blobdaten zum Lesen und Schreiben von Blobdaten. Um sich selbst diese Rolle zuweisen zu können, benötigen Sie die Rolle Benutzerzugriffsadministrator oder eine andere Rolle, die die Aktion Microsoft.Authorization/roleAssignments/write enthält. Sie können einem Benutzer Azure RBAC-Rollen über das Azure-Portal, die Azure CLI oder mit Azure PowerShell zuweisen. Weitere Informationen zu den verfügbaren Bereichen für Rollenzuweisungen finden Sie auf der Seite Bereichsübersicht.
In diesem Szenario weisen Sie Ihrem Benutzerkonto Berechtigungen zu, die auf das Speicherkonto zugeschnitten sind, um dem Prinzip der geringsten Rechte zu folgen. Auf diese Weise erhalten Benutzer nur die erforderlichen Mindestberechtigungen, und es entstehen sicherere Produktionsumgebungen.
Im folgenden Beispiel wird Ihrem Benutzerkonto die Rolle Mitwirkender an Storage-Blobdaten zugewiesen, die sowohl Lese- als auch Schreibzugriff auf Blobdaten in Ihrem Speicherkonto ermöglicht.
Wichtig
In den meisten Fällen dauert es eine oder zwei Minute(n), bis die Rollenzuweisung in Azure weitergegeben wird. In seltenen Fällen kann es aber bis zu acht Minuten dauern. Wenn bei der ersten Ausführung Ihres Codes Authentifizierungsfehler auftreten, warten Sie einige Momente, und versuchen Sie es dann erneut.
Suchen Sie im Azure-Portal Ihr Speicherkonto mithilfe der Hauptsuchleiste oder der linken Navigationsleiste.
Wählen Sie auf der Übersichtsseite des Speicherkontos im linken Menü die Option Zugriffssteuerung (IAM) aus.
Wählen Sie auf der Seite Zugriffssteuerung (IAM) die Registerkarte Rollenzuweisungen aus.
Wählen Sie im oberen Menü + Hinzufügen und aus dem dann angezeigten Dropdownmenü die Option Rollenzuweisung hinzufügen aus.
Über das Suchfeld können Sie die Ergebnisse für die gewünschte Rolle filtern. Suchen Sie in diesem Beispiel nach Mitwirkender an Speicherblobdaten, wählen Sie das entsprechende Ergebnis und dann Weiter aus.
Wählen Sie unter Zugriff zuweisen zu die Option Benutzer, Gruppe oder Dienstprinzipal und dann die Option + Mitglieder auswählen aus.
Suchen Sie im Dialogfeld nach Ihrem Microsoft Entra-Benutzernamen (normalerweise Ihre E-Mail-Adresse benutzer@domäne), und wählen Sie unten im Dialogfeld Auswählen aus.
Wählen Sie Überprüfen und zuweisen aus, um zur letzten Seite zu gelangen, und wählen Sie erneut Überprüfen und zuweisen aus, um den Vorgang abzuschließen.
Anmelden und Verbinden ihres App-Codes mit Azure mithilfe von „DefaultAzureCredential“
Sie können den Zugriff auf Daten in Ihrem Speicherkonto mithilfe der folgenden Schritte autorisieren:
Stellen Sie sicher, dass Sie mit demselben Microsoft Entra-Konto authentifiziert sind, dem Sie die Rolle für Ihr Speicherkonto zugewiesen haben. Das folgende Beispiel zeigt, wie Sie sich über die Azure-Befehlszeilenschnittstelle authentifizieren:
az login
Um „
DefaultAzureCredential
“ in einer Go-Anwendung zu verwenden, installieren Sie das azidentity-Modul mithilfe des folgenden Befehls:go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Die Azure CLI-Authentifizierung wird für Anwendungen, die in Azure ausgeführt werden, nicht empfohlen. Bei der Bereitstellung in Azure können Sie denselben Code verwenden, um Anforderungen an Azure Storage aus einer in Azure ausgeführten Anwendung zu autorisieren. Sie müssen jedoch in Azure die verwaltete Identität für Ihre Anwendung aktivieren und Ihr Speicherkonto so konfigurieren, dass diese verwaltete Identität eine Verbindung herstellen kann. Ausführliche Anleitungen zum Konfigurieren dieser Verbindung zwischen Azure-Diensten finden Sie im Tutorial Auth from Azure-hosted apps (Autorisieren aus von Azure gehosteten Apps).
Weitere Informationen zu den verschiedenen Authentifizierungsmethoden finden Sie unter Azure-Authentifizierung mit dem Azure SDK für Go.
Ausführen des Beispiels
Der Beispielcode führt die folgenden Aktionen aus:
- Erstellt über
DefaultAzureCredential
ein für den Datenzugriff autorisiertes Clientobjekt - Erstellt einen Container in einem Speicherkonto
- Lädt ein Blob in den Container
- Listet die Blobs im Container auf
- Lädt die Blobdaten in einen Puffer herunter
- Löscht die von der Anwendung erstellten Blob- und Containerressourcen
Öffnen Sie die Datei storage-quickstart.go, bevor Sie das Beispiel ausführen. Ersetzen Sie <storage-account-name>
durch den Namen Ihres Azure-Speicherkontos.
Führen Sie dann mithilfe des folgenden Befehls die Anwendung aus:
go run storage-quickstart.go
Die Ausgabe der App sieht etwa wie das folgende Beispiel aus:
Azure Blob storage quick start sample
Creating a container named quickstart-sample-container
Uploading a blob named sample-blob
Listing the blobs in the container:
sample-blob
Blob contents:
Hello, world! This is a blob.
Press enter key to delete resources and exit the application.
Cleaning up.
Deleting the blob sample-blob
Deleting the container quickstart-sample-container
Wenn Sie in der Eingabeaufforderung die EINGABETASTE drücken, löscht das Beispielprogramm die von der Anwendung erstellten Blob- und Containerressourcen.
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 den Beispielcode Schritt für Schritt durch, damit Sie dessen Funktionsweise nachvollziehen können.
Autorisieren des Zugriffs und Erstellen eines Clientobjekts
Das Arbeiten mit jeder Azure-Ressource mithilfe des SDK beginnt mit dem Erstellen eines Clientobjekts. Um das Clientobjekt zu erstellen, ruft das Codebeispiel azblob.NewClient mit den folgenden Werten auf:
- serviceURL: die URL des Speicherkontos
- cred - eine Microsoft Entra-Anmeldeinformationen, die über das
azidentity
Modul abgerufen wurden. - options: Clientoptionen; um die Standardwerte zu akzeptieren, wird „0“ übergeben
Im folgenden Codebeispiel wird ein Clientobjekt für die Interaktion mit Container- und Blobressourcen in einem Speicherkonto erstellt:
// TODO: replace <storage-account-name> with your actual storage account name
url := "https://<storage-account-name>.blob.core.windows.net/"
ctx := context.Background()
credential, err := azidentity.NewDefaultAzureCredential(nil)
handleError(err)
client, err := azblob.NewClient(url, credential, nil)
handleError(err)
Erstellen eines Containers
Mithilfe des Beispielcodes wird eine neue Containerressource im Speicherkonto erstellt. Wenn bereits ein Container mit demselben Namen vorhanden ist, wird ResourceExistsError
ausgelöst.
Wichtig
Die Containernamen müssen klein geschrieben werden. Weitere Informationen zu Benennungsanforderungen für Container und Blobs finden Sie unter Benennen von und Verweisen auf Container, Blobs und Metadaten.
Im folgenden Codebeispiel wird ein neuer Container namens quickstart-sample-container im Speicherkonto erstellt:
// Create the container
containerName := "quickstart-sample-container"
fmt.Printf("Creating a container named %s\n", containerName)
_, err = client.CreateContainer(ctx, containerName, nil)
handleError(err)
Weitere Informationen zum Erstellen eines Containers und weitere Codebeispiele zum Erkunden finden Sie unter Erstellen eines Blobcontainers mit Go.
Hochladen von Blobs in den Container
Das Codebeispiel erstellt ein Bytearray mit einigen Daten und lädt sie als Puffer in eine neue Blobressource im angegebenen Container hoch.
Im folgenden Codebeispiel werden die Blobdaten mithilfe der UploadBuffer-Methode in den angegebenen Container hochgeladen:
data := []byte("\nHello, world! This is a blob.\n")
blobName := "sample-blob"
// Upload to data to blob storage
fmt.Printf("Uploading a blob named %s\n", blobName)
_, err = client.UploadBuffer(ctx, containerName, blobName, data, &azblob.UploadBufferOptions{})
handleError(err)
Weitere Informationen zum Hochladen von Blobs und weitere Codebeispiele zum Erkunden finden Sie unter Hochladen eines Blobs mit Go.
Auflisten der Blobs in einem Container
Der Beispielcode listet die Blobs im angegebenen Container auf. In diesem Beispiel wird NewListBlobsFlatPager verwendet, wodurch ein Pager für Blobs ab dem angegebenen Marker zurückgegeben wird. Hier verwenden wir einen leeren Marker, um die Enumeration am Anfang zu starten und das Paging solange fortzusetzen, bis keine weiteren Ergebnisse mehr vorliegen. Diese Methode gibt Blobnamen in lexikographischer Reihenfolge zurück.
Das folgende Codebeispiel listet die Blobs im angegebenen Container auf:
// List the blobs in the container
fmt.Println("Listing the blobs in the container:")
pager := client.NewListBlobsFlatPager(containerName, &azblob.ListBlobsFlatOptions{
Include: azblob.ListBlobsInclude{Snapshots: true, Versions: true},
})
for pager.More() {
resp, err := pager.NextPage(context.TODO())
handleError(err)
for _, blob := range resp.Segment.BlobItems {
fmt.Println(*blob.Name)
}
}
Weitere Informationen zum Auflisten von Blobs und weitere Codebeispiele zum Erkunden finden Sie unter Auflisten von Blobs mit Go.
Herunterladen des Blobs
Der Beispielcode lädt ein Blob mithilfe der DownloadStream-Methode herunter und erstellt einen RETRY-Leser zum Lesen von Daten. Sollte beim Lesen der Daten ein Verbindungsfehler auftreten, führt der RETRY-Leser weitere Anforderungen aus, um die Verbindung wiederherzustellen und den Lesevorgang fortzusetzen. Sie können die Optionen für den RETRY-Leser mithilfe der RetryReaderOptions-Struktur angeben.
Das folgende Codebeispiel lädt ein Blob herunter und schreibt den Inhalt in die Konsole:
// Download the blob
get, err := client.DownloadStream(ctx, containerName, blobName, nil)
handleError(err)
downloadedData := bytes.Buffer{}
retryReader := get.NewRetryReader(ctx, &azblob.RetryReaderOptions{})
_, err = downloadedData.ReadFrom(retryReader)
handleError(err)
err = retryReader.Close()
handleError(err)
// Print the contents of the blob we created
fmt.Println("Blob contents:")
fmt.Println(downloadedData.String())
Weitere Informationen zum Herunterladen von Blobs und weitere Codebeispiele zum Erkunden finden Sie unter Herunterladen eines Blobs mit Go.
Bereinigen von Ressourcen
Wenn Sie die in dieser Schnellstartanleitung hochgeladenen Blobs nicht mehr benötigen, können Sie einzelne Blobs mithilfe der DeleteBlob-Methode oder den gesamten Container mit allen Inhalten mithilfe der DeleteContainer-Methode löschen.
// Delete the blob
fmt.Printf("Deleting the blob " + blobName + "\n")
_, err = client.DeleteBlob(ctx, containerName, blobName, nil)
handleError(err)
// Delete the container
fmt.Printf("Deleting the container " + containerName + "\n")
_, err = client.DeleteContainer(ctx, containerName, nil)
handleError(err)
Weitere Informationen zum Löschen von Containern und Blobs sowie weitere Codebeispiele zum Erkunden finden Sie unter Löschen eines Blobs mit Go und Löschen eines Containers mit Go.