Mulai cepat: Pustaka klien Azure Blob Storage untuk Go

Mulai menggunakan pustaka klien Azure Blob Storage untuk Buka untuk mengelola blob dan kontainer. Ikuti langkah-langkah berikut untuk menginstal paket dan mencoba contoh kode untuk tugas dasar.

Dokumentasi | referensi API Paket kode | sumber pustaka (pkg.go.dev)

Prasyarat

Menyiapkan

Bagian ini memancang Anda menyiapkan proyek untuk bekerja dengan pustaka klien Azure Blob Storage untuk Go.

Mengunduh aplikasi contoh

Aplikasi contoh yang digunakan dalam mulai cepat ini adalah aplikasi Go dasar.

Gunakan git untuk mengunduh salinan aplikasi ke lingkungan pengembangan Anda.

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

Perintah ini mengkloning repositori ke folder git lokal Anda. Untuk membuka sampel Go untuk Blob Storage, cari file bernama storage-quickstart.go.

Menginstal paket

Untuk bekerja dengan sumber daya blob dan kontainer di akun penyimpanan, instal paket azblob menggunakan perintah berikut:

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

Untuk mengautentikasi dengan MICROSOFT Entra ID (disarankan), instal modul azidentity menggunakan perintah berikut:

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

Mengautentikasi ke Azure dan mengotorisasi akses ke data blob

Permintaan aplikasi ke Azure Blob Storage harus diotorisasi. Menggunakan DefaultAzureCredential dan pustaka klien Azure Identity adalah pendekatan yang direkomendasikan untuk menerapkan koneksi tanpa kata sandi ke layanan Azure dalam kode Anda, termasuk Blob Storage.

Anda juga dapat mengotorisasi permintaan untuk Azure Blob Storage menggunakan kunci akses akun. Namun, pendekatan ini harus digunakan dengan hati-hati. Pengembang harus rajin untuk tidak pernah mengekspos kunci akses di lokasi yang tidak aman. Siapa pun yang memiliki kunci akses dapat mengotorisasi permintaan terhadap akun penyimpanan, dan secara efektif memiliki akses ke semua data. DefaultAzureCredential menawarkan keuntungan pengelolaan dan keamanan yang ditingkatkan melalui kunci akun untuk memungkinkan autentikasi tanpa kata sandi. Kedua opsi diperlihatkan dalam contoh berikut.

DefaultAzureCredential adalah implementasi rantai kredensial yang disediakan oleh pustaka klien Azure Identity untuk Go. DefaultAzureCredential mendukung beberapa metode autentikasi dan menentukan metode mana yang akan digunakan saat runtime. Pendekatan ini memungkinkan aplikasi Anda menggunakan metode autentikasi yang berbeda di lingkungan yang berbeda (lokal vs. produksi) tanpa menerapkan kode spesifik per lingkungan.

Untuk mempelajari selengkapnya tentang pesanan dan lokasi di mana DefaultAzureCredential mencari kredensial, lihat Gambaran umum pustaka Azure Identity.

Misalnya, aplikasi Anda dapat mengautentikasi menggunakan info masuk Azure CLI Anda saat mengembangkan secara lokal. Setelah disebarkan ke Azure, aplikasi Anda kemudian dapat menggunakan identitas terkelola. Transisi antar lingkungan ini tidak memerlukan perubahan kode apa pun.

Menetapkan peran ke akun pengguna Microsoft Entra Anda

Saat mengembangkan secara lokal, pastikan bahwa akun pengguna yang mengakses data blob memiliki izin yang benar. Anda akan memerlukan Kontributor Data Blob Penyimpanan untuk membaca dan menulis data blob. Untuk menetapkan sendiri peran ini, Anda harus diberi peran Administrator Akses Pengguna, atau peran lain yang menyertakan tindakan Microsoft.Authorization/roleAssignments/write . Anda dapat menetapkan peran Azure RBAC kepada pengguna menggunakan portal Azure, Azure CLI, atau Azure PowerShell. Anda dapat mempelajari selengkapnya tentang cakupan yang tersedia untuk penetapan peran di halaman gambaran umum cakupan.

Dalam skenario ini, Anda akan menetapkan izin ke akun pengguna, yang tercakup ke akun penyimpanan, untuk mengikuti Prinsip Hak Istimewa Paling Rendah. Praktik ini hanya memberi pengguna izin minimum yang diperlukan dan menciptakan lingkungan produksi yang lebih aman.

Contoh berikut akan menetapkan peran Kontributor Data Blob Penyimpanan ke akun pengguna Anda, yang menyediakan akses baca dan tulis ke data blob di akun penyimpanan Anda.

Penting

Dalam kebanyakan kasus, dibutuhkan satu atau dua menit agar penetapan peran disebarluaskan di Azure, tetapi dalam kasus yang jarang terjadi mungkin perlu waktu hingga delapan menit. Jika Anda menerima kesalahan autentikasi saat pertama kali menjalankan kode, tunggu beberapa saat dan coba lagi.

  1. Di portal Azure, temukan akun penyimpanan Anda menggunakan bilah pencarian utama atau navigasi kiri.

  2. Di halaman gambaran umum akun penyimpanan, pilih Kontrol akses (IAM) dari menu kiri.

  3. Di halaman Kontrol akses (IAM), pilih tab Penetapan peran.

  4. Pilih + Tambahkan dari menu atas lalu Tambahkan penetapan peran dari menu drop-down yang dihasilkan.

    A screenshot showing how to assign a role.

  5. Gunakan kotak pencarian untuk memfilter hasil ke peran yang diinginkan. Untuk contoh ini, cari Kontributor Data Blob Penyimpanan dan pilih hasil yang cocok, lalu pilih Berikutnya.

  6. Di bagian Tetapkan akses ke, pilih Pengguna, grup, atau perwakilan layanan, lalu pilih + Pilih anggota.

  7. Dalam dialog, cari nama pengguna Microsoft Entra Anda (biasanya alamat email user@domain Anda) lalu pilih Pilih di bagian bawah dialog.

  8. Pilih Tinjau + tetapkan untuk masuk ke halaman akhir, lalu Tinjau + tetapkan lagi untuk menyelesaikan proses.

Melakukan proses masuk dan menyambungkan kode aplikasi Anda ke Azure menggunakan DefaultAzureCredential

Anda dapat mengotorisasi akses ke data di akun penyimpanan Anda menggunakan langkah-langkah berikut:

  1. Pastikan Anda diautentikasi dengan akun Microsoft Entra yang sama dengan yang Anda tetapkan perannya di akun penyimpanan Anda. Contoh berikut menunjukkan cara mengautentikasi melalui Azure CLI:

    az login
    
  2. Untuk digunakan DefaultAzureCredential dalam aplikasi Go, instal modul azidentity menggunakan perintah berikut::

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

Autentikasi Azure CLI tidak disarankan untuk aplikasi yang sedang berjalan di Azure. Saat disebarkan ke Azure, Anda dapat menggunakan kode yang sama untuk mengotorisasi permintaan ke Azure Storage dari aplikasi yang berjalan di Azure. Namun, Anda perlu mengaktifkan identitas terkelola pada aplikasi Anda di Azure dan mengonfigurasi akun penyimpanan Anda untuk memungkinkan identitas terkelola tersebut tersambung. Untuk petunjuk detail tentang mengonfigurasi koneksi ini antara layanan Azure, lihat tutorial Auth dari aplikasi yang dihosting Azure.

Untuk mempelajari selengkapnya tentang metode autentikasi yang berbeda, lihat autentikasi Azure dengan Azure SDK untuk Go.

Jalankan sampel

Contoh kode melakukan tindakan berikut:

  • Membuat objek klien yang diotorisasi untuk akses data melalui DefaultAzureCredential
  • Membuat kontainer di akun penyimpanan
  • Mengunggah blob ke kontainer
  • Mencantumkan blob dalam kontainer
  • Mengunduh data blob ke dalam buffer
  • Menghapus sumber daya blob dan kontainer yang dibuat oleh aplikasi

Sebelum Anda menjalankan sampel, buka file storage-quickstart.go . Ganti <storage-account-name> dengan nama akun penyimpanan Azure Anda.

Kemudian jalankan aplikasi menggunakan perintah berikut:

go run storage-quickstart.go

Output aplikasi mirip dengan contoh berikut:

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

Saat Anda menekan tombol enter pada perintah, program sampel akan menghapus sumber daya blob dan kontainer yang dibuat oleh aplikasi.

Tip

Anda juga dapat menggunakan alat seperti Azure Storage Explorer untuk melihat file di penyimpanan Blob. Penjelajah Penyimpanan Azure adalah alat lintas platform gratis yang memungkinkan Anda mengakses informasi akun penyimpanan Anda.

Memahami kode sampel

Selanjutnya, kita menelusuri kode sampel untuk memahami cara kerjanya.

Mengotorisasi akses dan membuat objek klien

Bekerja dengan sumber daya Azure apa pun menggunakan SDK dimulai dengan membuat objek klien. Untuk membuat objek klien, sampel kode memanggil azblob. NewClient dengan nilai berikut:

  • serviceURL - URL akun penyimpanan
  • cred - kredensial Microsoft Entra yang diperoleh melalui azidentity modul
  • opsi - opsi klien; teruskan nihil untuk menerima nilai default

Contoh kode berikut membuat objek klien untuk berinteraksi dengan sumber daya kontainer dan blob di akun penyimpanan:

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

Membuat kontainer

Sampel kode membuat sumber daya kontainer baru di akun penyimpanan. Jika kontainer dengan nama yang sama sudah ada, akan ResourceExistsError dinaikkan.

Penting

Nama kontainer harus menggunakan huruf kecil. Untuk mempelajari selengkapnya tentang persyaratan penamaan untuk kontainer dan blob, lihat Penamaan dan Referensi Kontainer, Blob, dan Metadata.

Contoh kode berikut membuat kontainer baru yang disebut quickstart-sample-container di akun penyimpanan:

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

Unggah blob ke kontainer

Sampel kode membuat array byte dengan beberapa data, dan mengunggah data sebagai buffer ke sumber daya blob baru dalam kontainer yang ditentukan.

Contoh kode berikut mengunggah data blob ke kontainer yang ditentukan menggunakan metode 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)

Cantumkan blob di kontainer

Sampel kode mencantumkan blob dalam kontainer yang ditentukan. Contoh ini menggunakan NewListBlobsFlatPager, yang mengembalikan pager untuk blob mulai dari Penanda yang ditentukan. Di sini, kita menggunakan Penanda kosong untuk memulai enumerasi dari awal, dan melanjutkan penomoran sampai tidak ada hasil lagi. Metode ini mengembalikan nama blob dalam urutan leksikografis.

Contoh kode berikut mencantumkan blob dalam kontainer yang ditentukan:

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

Unduh blob

Sampel kode mengunduh blob menggunakan metode DownloadStream , dan membuat pembaca coba lagi untuk membaca data. Jika koneksi gagal saat membaca, pembaca coba lagi membuat permintaan lain untuk membuat ulang koneksi dan melanjutkan membaca. Anda dapat menentukan opsi pembaca coba lagi menggunakan struct RetryReaderOptions .

Contoh kode berikut mengunduh blob dan menulis konten ke konsol:

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

Membersihkan sumber daya

Jika Anda tidak lagi memerlukan blob yang diunggah dalam mulai cepat ini, Anda dapat menghapus blob individual menggunakan metode DeleteBlob , atau seluruh kontainer dan kontennya menggunakan metode 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)

Langkah berikutnya

Dalam mulai cepat ini, Anda mempelajari cara mengunggah, mengunduh, dan mencantumkan blob menggunakan Go.

Untuk melihat aplikasi sampel penyimpanan Blob, lanjutkan ke: