Hızlı Başlangıç: Go için istemci kitaplığını Azure Blob Depolama

Blobları ve kapsayıcıları yönetmek için Git için Azure Blob Depolama istemci kitaplığını kullanmaya başlayın. Paketi yüklemek için bu adımları izleyin ve temel görevler için örnek kodu deneyin.

API başvuru belgeleri | Kitaplık kaynak kodu | Paketi (pkg.go.dev)

Ön koşullar

Ayarlama

Bu bölümde Go için Azure Blob Depolama istemci kitaplığıyla çalışmak üzere bir proje hazırlama işleminde size yol gösterir.

Örnek uygulamayı indirin:

Bu hızlı başlangıçta kullanılan örnek uygulama, temel bir Go uygulamasıdır.

Uygulamanın bir kopyasını geliştirme ortamınıza indirmek içi Git’i kullanın.

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

Bu komut, depoyu yerel Git klasörünüze kopyalar. Blob Depolama için Go örneğini açmak için adlı storage-quickstart.godosyayı arayın.

Paketleri yükleme

Depolama hesabında blob ve kapsayıcı kaynaklarıyla çalışmak için aşağıdaki komutu kullanarak azblob paketini yükleyin:

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

Microsoft Entra Id ile kimlik doğrulaması yapmak için (önerilen), aşağıdaki komutu kullanarak azidentity modülünü yükleyin:

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

Azure'da kimlik doğrulaması ve blob verilerine erişim yetkisi verme

Azure Blob Depolama uygulama istekleri yetkilendirilmelidir. Blob Depolama dahil olmak üzere kodunuzdaki Azure hizmetlerine parolasız bağlantılar uygulamak için ve Azure Identity istemci kitaplığını kullanmak DefaultAzureCredential önerilen yaklaşımdır.

Ayrıca, hesap erişim anahtarını kullanarak istekleri Azure Blob Depolama yetkilendirmeniz de gerekir. Ancak bu yaklaşım dikkatli kullanılmalıdır. Geliştiriciler, erişim anahtarını güvenli olmayan bir konumda asla kullanıma sunmamak için dikkatli olmalıdır. Erişim anahtarına sahip olan herkes, depolama hesabına yönelik istekleri yetkilendirebiliyor ve tüm verilere etkin bir şekilde erişim sahibi oluyor. DefaultAzureCredential parolasız kimlik doğrulamasına izin vermek için hesap anahtarı üzerinde gelişmiş yönetim ve güvenlik avantajları sunar. Her iki seçenek de aşağıdaki örnekte gösterilmiştir.

DefaultAzureCredential Go için Azure Identity istemci kitaplığı tarafından sağlanan bir kimlik bilgisi zinciri uygulamasıdır. DefaultAzureCredential birden çok kimlik doğrulama yöntemini destekler ve çalışma zamanında hangi yöntemin kullanılacağını belirler. Bu yaklaşım, uygulamanızın ortama özgü kod uygulamadan farklı ortamlarda (yerel ve üretim) farklı kimlik doğrulama yöntemleri kullanmasını sağlar.

Kimlik bilgilerinin arandığı DefaultAzureCredential sıra ve konumlar hakkında daha fazla bilgi edinmek için bkz . Azure Kimlik kitaplığına genel bakış.

Örneğin, uygulamanız yerel olarak geliştirme yaparken Azure CLI oturum açma kimlik bilgilerinizi kullanarak kimlik doğrulaması yapabilir. Azure'a dağıtıldıktan sonra uygulamanız yönetilen kimlik kullanabilir. Ortamlar arasındaki bu geçiş için kod değişikliği gerekmez.

Microsoft Entra kullanıcı hesabınıza rol atama

Yerel olarak geliştirme yaparken blob verilerine erişen kullanıcı hesabının doğru izinlere sahip olduğundan emin olun. Blob verilerini okumak ve yazmak için Depolama Blob Veri Katkıda Bulunanı gerekir. Kendinize bu rolü atamak için Kullanıcı Erişimi Yönetici istrator rolüne veya Microsoft.Authorization/roleAssignments/write eylemini içeren başka bir role atanmalısınız. Azure portalı, Azure CLI veya Azure PowerShell'i kullanarak kullanıcıya Azure RBAC rolleri atayabilirsiniz. Rol atamaları için kullanılabilir kapsamlar hakkında daha fazla bilgiyi kapsam genel bakış sayfasından öğrenebilirsiniz.

Bu senaryoda, En Az Ayrıcalık İlkesi'ni izlemek için depolama hesabı kapsamındaki kullanıcı hesabınıza izinler atayacaksınız. Bu uygulama kullanıcılara yalnızca gereken minimum izinleri verir ve daha güvenli üretim ortamları oluşturur.

Aşağıdaki örnek, depolama hesabınızdaki blob verilerine hem okuma hem de yazma erişimi sağlayan Depolama Blob Verileri Katkıda Bulunanı rolünü kullanıcı hesabınıza atar.

Önemli

Çoğu durumda rol atamasının Azure'a yayılması bir veya iki dakika sürer, ancak nadir durumlarda sekiz dakikaya kadar sürebilir. Kodunuzu ilk kez çalıştırdığınızda kimlik doğrulama hataları alıyorsanız, birkaç dakika bekleyin ve yeniden deneyin.

  1. Azure portalında ana arama çubuğunu veya sol gezintiyi kullanarak depolama hesabınızı bulun.

  2. Depolama hesabına genel bakış sayfasında sol taraftaki menüden Erişim denetimi (IAM) öğesini seçin.

  3. Erişim denetimi (IAM) sayfasında Rol atamaları sekmesini seçin.

  4. Üst menüden + Ekle'yi seçin ve ardından açılan menüden Rol ataması ekle'yi seçin.

    A screenshot showing how to assign a role.

  5. Sonuçları istenen role göre filtrelemek için arama kutusunu kullanın. Bu örnek için Depolama Blob Veri Katkıda Bulunanı'nı arayın, eşleşen sonucu seçin ve ardından İleri'yi seçin.

  6. Erişim ata'nın altında Kullanıcı, grup veya hizmet sorumlusu'na tıklayın ve ardından + Üye seç'e tıklayın.

  7. İletişim kutusunda Microsoft Entra kullanıcı adınızı (genellikle user@domain e-posta adresiniz) arayın ve iletişim kutusunun alt kısmındaki Seç'i seçin.

  8. Son sayfaya gitmek için Gözden geçir + ata'yı seçin ve ardından işlemi tamamlamak için Gözden geçir + yeniden ata'yı seçin.

DefaultAzureCredential kullanarak oturum açın ve uygulama kodunuzu Azure'a bağlayın

Aşağıdaki adımları kullanarak depolama hesabınızdaki verilere erişimi yetkileyebilirsiniz:

  1. Depolama hesabınızda rolü atadığınız Microsoft Entra hesabıyla kimliğinizin doğrulanmış olduğundan emin olun. Aşağıdaki örnekte Azure CLI aracılığıyla kimlik doğrulamasının nasıl yapılacağını gösterilmektedir:

    az login
    
  2. Go uygulamasında kullanmak DefaultAzureCredential için aşağıdaki komutu kullanarak azidentity modülünü yükleyin:

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

Azure'da çalışan uygulamalar için Azure CLI kimlik doğrulaması önerilmez. Azure'a dağıtıldığında, Azure'da çalışan bir uygulamadan Azure Depolama istekleri yetkilendirmek için aynı kodu kullanabilirsiniz. Ancak, Azure'daki uygulamanızda yönetilen kimliği etkinleştirmeniz ve depolama hesabınızı bu yönetilen kimliğin bağlanmasına izin verecek şekilde yapılandırmanız gerekir. Azure hizmetleri arasında bu bağlantıyı yapılandırma hakkında ayrıntılı yönergeler için Bkz. Azure tarafından barındırılan uygulamalardan kimlik doğrulama öğreticisi.

Farklı kimlik doğrulama yöntemleri hakkında daha fazla bilgi edinmek için Go için Azure SDK ile Azure kimlik doğrulaması makalesine bakın.

Örneği çalıştırma

Kod örneği aşağıdaki eylemleri gerçekleştirir:

  • aracılığıyla veri erişimi için yetkilendirilmiş bir istemci nesnesi oluşturur DefaultAzureCredential
  • Depolama hesabında kapsayıcı oluşturur
  • Kapsayıcıya blob yükler
  • Kapsayıcıdaki blobları listeler
  • Blob verilerini arabelleğe indirir
  • Uygulama tarafından oluşturulan blob ve kapsayıcı kaynaklarını siler

Örneği çalıştırmadan önce storage-quickstart.go dosyasını açın. değerini Azure depolama hesabınızın adıyla değiştirin <storage-account-name> .

Ardından aşağıdaki komutu kullanarak uygulamayı çalıştırın:

go run storage-quickstart.go

Uygulamanın çıkışı aşağıdaki örneğe benzer:

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

İstemde enter tuşuna bastığınızda, örnek program uygulama tarafından oluşturulan blob ve kapsayıcı kaynaklarını siler.

Bahşiş

Ayrıca, Blob depolamadaki dosyaları görüntülemek için, Azure Depolama Gezgini gibi bir araç da kullanabilirsiniz. Azure Depolama Gezgini, depolama hesabı bilgilerinize erişmenize olanak tanıyan ücretsiz ve platformlar arası bir araçtır.

Örnek kodu anlama

Ardından, nasıl çalıştığını anlamak için örnek kodu inceleyeceğiz.

Erişimi yetkilendirme ve istemci nesnesi oluşturma

SDK kullanarak herhangi bir Azure kaynağıyla çalışma, bir istemci nesnesi oluşturmakla başlar. İstemci nesnesini oluşturmak için kod örneği azblob'u çağırır . Aşağıdaki değerlere sahip NewClient :

  • serviceURL - depolama hesabının URL'si
  • cred - modül aracılığıyla azidentity alınan bir Microsoft Entra kimlik bilgisi
  • options - istemci seçenekleri; varsayılan değerleri kabul etmek için nil değerini geçirin

Aşağıdaki kod örneği, bir depolama hesabındaki kapsayıcı ve blob kaynaklarıyla etkileşim kurmak için bir istemci nesnesi oluşturur:

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

Kapsayıcı oluşturma

Kod örneği, depolama hesabında yeni bir kapsayıcı kaynağı oluşturur. Aynı ada sahip bir kapsayıcı zaten varsa, bir ResourceExistsError oluşturulur.

Önemli

Kapsayıcı adlarının küçük harfle yazılması gerekir. Kapsayıcılar ve bloblar için adlandırma gereksinimleri hakkında daha fazla bilgi edinmek için bkz . Kapsayıcıları, Blobları ve Meta Verileri Adlandırma ve Başvurma.

Aşağıdaki kod örneği, depolama hesabında quickstart-sample-container adlı yeni bir kapsayıcı oluşturur:

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

Blobları kapsayıcıya yükleme

Kod örneği, bazı verilerle bir bayt dizisi oluşturur ve verileri belirtilen kapsayıcıdaki yeni bir blob kaynağına arabellek olarak yükler.

Aşağıdaki kod örneği, UploadBuffer yöntemini kullanarak blob verilerini belirtilen kapsayıcıya yükler:

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)

Kapsayıcıdaki blobları listeleme

Kod örneği, belirtilen kapsayıcıdaki blobları listeler. Bu örnekte, belirtilen İşaretçiden başlayan bloblar için bir çağrıyı döndüren NewListBlobsFlatPager kullanılır. Burada, numaralandırmayı baştan başlatmak ve başka sonuç kalmayıncaya kadar sayfalamaya devam etmek için boş bir İşaretleyici kullanıyoruz. Bu yöntem, blob adlarını sözcük düzeninde döndürür.

Aşağıdaki kod örneği, belirtilen kapsayıcıdaki blobları listeler:

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

Blobu indirme

Kod örneği DownloadStream yöntemini kullanarak bir blob indirir ve verileri okumak için yeniden deneme okuyucusu oluşturur. Okuma sırasında bağlantı başarısız olursa, yeniden deneme okuyucusu yeniden bağlantı kurmak ve okumaya devam etmek için başka isteklerde bulunur. RetryReaderOptions yapısını kullanarak yeniden deneme okuyucusu seçeneklerini belirtebilirsiniz.

Aşağıdaki kod örneği bir blob indirir ve içeriği konsola yazar:

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

Kaynakları temizleme

Bu hızlı başlangıçta karşıya yüklenen bloblara artık ihtiyacınız yoksa, DeleteBlob yöntemini kullanarak tek tek blobu veya DeleteContainer yöntemini kullanarak kapsayıcının tamamını ve içeriğini silebilirsiniz.

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

Sonraki adımlar

Bu hızlı başlangıçta Go kullanarak blobları karşıya yüklemeyi, indirmeyi ve listelemeyi öğrendiniz.

Blob depolama örnek uygulamalarını görmek için devam edin: