Dela via


Snabbstart: Azure Blob Storage-klientmodul för Go

Kom igång med Azure Blob Storage-klientmodulen för Go för att hantera blobar och containrar. Följ de här stegen för att installera paketet och prova exempelkod för grundläggande uppgifter.

API-referensdokumentationEns källkodspaket | för bibliotek (pkg.go.dev) |

Förutsättningar

Konfigurera

Det här avsnittet beskriver hur du förbereder ett projekt för att arbeta med Azure Blob Storage-klientmodulen för Go.

Hämta exempelprogrammet

Exempelprogrammet som används i den här snabbstarten är ett enkelt Go-program.

Använd git för att ladda ned en kopia av programmet till utvecklingsmiljön.

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

Det här kommandot klonar lagret till den lokala git-mappen. Om du vill öppna Go-exemplet för Blob Storage letar du efter filen med namnet storage-quickstart.go.

Installera paketen

Om du vill arbeta med blob- och containerresurser i ett lagringskonto installerar du azblob-paketet med följande kommando:

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

Om du vill autentisera med Microsoft Entra-ID (rekommenderas) installerar du azidentity-modulen med följande kommando:

go get github.com/Azure/azure-sdk-for-go/sdk/azidentity

Autentisera till Azure och auktorisera åtkomst till blobdata

Programbegäranden till Azure Blob Storage måste vara auktoriserade. Användning DefaultAzureCredential och Azure Identity-klientbiblioteket är den rekommenderade metoden för att implementera lösenordslösa anslutningar till Azure-tjänster i din kod, inklusive Blob Storage.

Du kan också auktorisera begäranden till Azure Blob Storage med hjälp av kontoåtkomstnyckeln. Den här metoden bör dock användas med försiktighet. Utvecklare måste vara noggranna för att aldrig exponera åtkomstnyckeln på en osäker plats. Alla som har åtkomstnyckeln kan auktorisera begäranden mot lagringskontot och har effektivt åtkomst till alla data. DefaultAzureCredential ger bättre hanterings- och säkerhetsfördelar jämfört med kontonyckeln för att tillåta lösenordslös autentisering. Båda alternativen visas i följande exempel.

DefaultAzureCredential är en implementering av autentiseringskedjan som tillhandahålls av Azure Identity-klientbiblioteket för Go. DefaultAzureCredential stöder flera autentiseringsmetoder och avgör vilken metod som ska användas vid körning. Med den här metoden kan din app använda olika autentiseringsmetoder i olika miljöer (lokalt jämfört med produktion) utan att implementera miljöspecifik kod.

Mer information om ordningen och platserna där DefaultAzureCredential du söker efter autentiseringsuppgifter finns i Översikt över Azure Identity Library.

Din app kan till exempel autentisera med dina Inloggningsuppgifter för Azure CLI med när du utvecklar lokalt. När den har distribuerats till Azure kan din app sedan använda en hanterad identitet. Den här övergången mellan miljöer kräver inga kodändringar.

Tilldela roller till ditt Microsoft Entra-användarkonto

När du utvecklar lokalt kontrollerar du att användarkontot som har åtkomst till blobdata har rätt behörigheter. Du behöver Storage Blob Data-deltagare för att läsa och skriva blobdata. Om du vill tilldela dig själv den här rollen måste du tilldelas rollen Administratör för användaråtkomst eller en annan roll som innehåller åtgärden Microsoft.Authorization/roleAssignments/write . Du kan tilldela Azure RBAC-roller till en användare med hjälp av Azure Portal, Azure CLI eller Azure PowerShell. Du kan lära dig mer om tillgängliga omfång för rolltilldelningar på översiktssidan för omfång .

I det här scenariot tilldelar du behörigheter till ditt användarkonto, begränsat till lagringskontot, för att följa principen om lägsta behörighet. Den här metoden ger användarna endast de minsta behörigheter som krävs och skapar säkrare produktionsmiljöer.

I följande exempel tilldelas rollen Storage Blob Data Contributor till ditt användarkonto, vilket ger både läs- och skrivåtkomst till blobdata i ditt lagringskonto.

Viktigt!

I de flesta fall tar det en minut eller två för rolltilldelningen att spridas i Azure, men i sällsynta fall kan det ta upp till åtta minuter. Om du får autentiseringsfel när du först kör koden väntar du en stund och försöker igen.

  1. Leta upp ditt lagringskonto i Azure Portal med hjälp av huvudsökfältet eller det vänstra navigeringsfältet.

  2. På översiktssidan för lagringskontot väljer du Åtkomstkontroll (IAM) på den vänstra menyn.

  3. På sidan Åtkomstkontroll (IAM) väljer du fliken Rolltilldelningar .

  4. Välj + Lägg till på den översta menyn och sedan Lägg till rolltilldelning från den resulterande nedrullningsbara menyn.

    En skärmbild som visar hur du tilldelar en roll.

  5. Använd sökrutan för att filtrera resultatet till önskad roll. I det här exemplet söker du efter Storage Blob Data Contributor och väljer matchande resultat och väljer sedan Nästa.

  6. Under Tilldela åtkomst till väljer du Användare, grupp eller tjänstens huvudnamn och sedan + Välj medlemmar.

  7. I dialogrutan söker du efter ditt Microsoft Entra-användarnamn (vanligtvis din user@domain e-postadress) och väljer sedan Välj längst ned i dialogrutan.

  8. Välj Granska + tilldela för att gå till den sista sidan och sedan Granska + tilldela igen för att slutföra processen.

Logga in och anslut din appkod till Azure med defaultAzureCredential

Du kan auktorisera åtkomst till data i ditt lagringskonto med hjälp av följande steg:

  1. Kontrollera att du är autentiserad med samma Microsoft Entra-konto som du tilldelade rollen till på ditt lagringskonto. I följande exempel visas hur du autentiserar via Azure CLI:

    az login
    
  2. Om du vill använda DefaultAzureCredential i ett Go-program installerar du azidentity-modulen med hjälp av följande kommando::

    go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
    

Azure CLI-autentisering rekommenderas inte för program som körs i Azure. När du distribuerar till Azure kan du använda samma kod för att auktorisera begäranden till Azure Storage från ett program som körs i Azure. Du måste dock aktivera hanterad identitet i din app i Azure och konfigurera ditt lagringskonto så att den hanterade identiteten kan ansluta. Detaljerade anvisningar om hur du konfigurerar den här anslutningen mellan Azure-tjänster finns i självstudiekursen Auth from Azure-hosted apps (Auth from Azure-hosted apps ).

Mer information om olika autentiseringsmetoder finns i Azure-autentisering med Azure SDK for Go.

Kör exemplet

Kodexemplet utför följande åtgärder:

  • Skapar ett klientobjekt som har behörighet för dataåtkomst via DefaultAzureCredential
  • Skapar en container i ett lagringskonto
  • Laddar upp en blob till containern
  • Visar en lista över blobarna i containern
  • Laddar ned blobdata till en buffert
  • Tar bort blob- och containerresurserna som skapats av appen

Innan du kör exemplet öppnar du filen storage-quickstart.go . Ersätt <storage-account-name> med namnet på ditt Azure Storage-konto.

Kör sedan programmet med följande kommando:

go run storage-quickstart.go

Utdata från appen liknar följande exempel:

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

När du trycker på returnyckeln i kommandotolken tar exempelprogrammet bort de blob- och containerresurser som skapats av appen.

Dricks

Du kan också använda ett verktyg som Azure Storage Explorer för att visa filerna i blobblagringen. Azure Storage Explorer är ett kostnadsfritt verktyg för flera plattformar som gör det möjligt att komma åt information på lagringskontot.

Förstå exempelkoden

Sedan går vi igenom exempelkoden för att förstå hur den fungerar.

Auktorisera åtkomst och skapa ett klientobjekt

Att arbeta med en Azure-resurs med hjälp av SDK börjar med att skapa ett klientobjekt. För att skapa klientobjektet anropar kodexemplet azblob. NewClient med följande värden:

  • serviceURL – URL:en för lagringskontot
  • cred – en Microsoft Entra-autentiseringsuppgift som hämtats via modulen azidentity
  • alternativ – klientalternativ; skicka noll för att acceptera standardvärdena

I följande kodexempel skapas ett klientobjekt som interagerar med container- och blobresurser i ett lagringskonto:

// 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)

Skapa en container

Kodexemplet skapar en ny containerresurs i lagringskontot. Om det redan finns en container med samma namn utlöses en ResourceExistsError .

Viktigt!

Containernamn måste använda gemener. Mer information om namngivningskrav för containrar och blobar finns i Namnge och referera till containrar, blobar och metadata.

I följande kodexempel skapas en ny container med namnet quickstart-sample-container i lagringskontot:

// Create the container
containerName := "quickstart-sample-container"
fmt.Printf("Creating a container named %s\n", containerName)
_, err = client.CreateContainer(ctx, containerName, nil)
handleError(err)

Mer information om hur du skapar en container och om du vill utforska fler kodexempel finns i Skapa en blobcontainer med Go.

Ladda upp blobar i containern

Kodexemplet skapar en bytematris med vissa data och laddar upp data som en buffert till en ny blobresurs i den angivna containern.

I följande kodexempel laddas blobdata upp till den angivna containern med metoden UploadBuffer :

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)

Mer information om hur du laddar upp blobar och om du vill utforska fler kodexempel finns i Ladda upp en blob med Go.

Visa blobar i en container

Kodexemplet visar blobarna i den angivna containern. I det här exemplet används NewListBlobsFlatPager, som returnerar en sidsökare för blobar från den angivna markören. Här använder vi en tom markör för att starta uppräkning från början och fortsätta växlingen tills det inte finns fler resultat. Den här metoden returnerar blobnamn i lexikoografisk ordning.

I följande kodexempel visas blobarna i den angivna containern:

// 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)
	}
}

Mer information om att lista blobar och utforska fler kodexempel finns i Lista blobar med Go.

Ladda ned bloben

Kodexemplet laddar ned en blob med metoden DownloadStream och skapar en återförsöksläsare för att läsa data. Om en anslutning misslyckas vid läsning gör återförsöksläsaren andra begäranden om att återupprätta en anslutning och fortsätta läsa. Du kan ange alternativ för återförsöksläsare med hjälp av structen RetryReaderOptions .

I följande kodexempel laddas en blob ned och innehållet skrivs till konsolen:

// 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())

Mer information om hur du laddar ned blobar och om du vill utforska fler kodexempel finns i Ladda ned en blob med Go.

Rensa resurser

Om du inte längre behöver de blobar som laddas upp i den här snabbstarten kan du ta bort den enskilda bloben med metoden DeleteBlob eller hela containern och dess innehåll med metoden DeleteContainer .

// 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)

Mer information om hur du tar bort blobar och containrar och om du vill utforska fler kodexempel finns i Ta bort en blob med Go och Ta bort en container med Go.

Gå vidare