Mengelola kontainer blob dengan menggunakan PowerShell
Penyimpanan blob Azure memungkinkan Anda untuk menyimpan data objek tidak terstruktur dalam jumlah besar. Anda dapat menggunakan penyimpanan blob untuk mengumpulkan atau mengekspos data media, konten, atau aplikasi kepada pengguna. Karena semua data blob disimpan dalam kontainer, maka Anda harus membuat kontainer penyimpanan sebelum mulai mengunggah data. Untuk mempelajari penyimpanan blob lebih lanjut, baca Pengantar penyimpanan Azure Blob.
Artikel panduan ini menjelaskan cara menggunakan beberapa objek kontainer penyimpanan individual dan individual.
Prasyarat
Langganan Azure. Lihat Mendapatkan uji coba gratis Azure.
Modul Az Azure PowerShell adalah modul PowerShell yang disarankan dalam berinteraksi dengan Azure. Untuk mulai menggunakan modul Az PowerShell, lihat Menginstal Azure PowerShell.
Anda harus mendapatkan otorisasi ke langganan Azure sebelum dapat menggunakan contoh-contoh dalam artikel ini. Otorisasi dapat terjadi dengan mengautentikasi dengan akun Microsoft Entra atau menggunakan kunci bersama. Contoh dalam artikel ini menggunakan autentikasi Microsoft Entra bersama dengan objek konteks. Objek konteks merangkum kredensial Microsoft Entra Anda dan meneruskannya pada operasi data berikutnya, menghilangkan kebutuhan untuk mengautentikasi ulang.
Untuk masuk ke akun Azure Anda dengan akun Microsoft Entra, buka PowerShell dan panggil cmdlet Koneksi-AzAccount.
# Connect to your Azure subscription
Connect-AzAccount
Setelah sambungan dibuat, buat konteks akun penyimpanan dengan menggunakan cmdlet New-AzStorageContext
. Sertakan -UseConnectedAccount
parameter sehingga operasi data akan dilakukan menggunakan kredensial Microsoft Entra Anda.
# Create a context object using Azure AD credentials
$ctx = New-AzStorageContext -StorageAccountName <storage account name> -UseConnectedAccount
Ingatlah untuk mengganti nilai tempat penampung dalam tanda kurung dengan nilai Anda sendiri. Untuk informasi selengkapnya tentang proses masuk ke Azure dengan PowerShell, lihat Masuk dengan Azure PowerShell.
Membuat kontainer
Untuk membuat kontainer dengan menggunakan PowerShell, gunakan cmdlet New-AzStorageContainer. Tidak ada batasan pada jumlah blob atau kontainer yang dapat dibuat dalam akun penyimpanan. Kontainer tidak bisa ditumpuk di dalam kontainer lainnya.
Contoh berikut menggambarkan tiga opsi pembuatan kontainer blob dengan menggunakan cmdlet New-AzStorageContainer
. Cara pertama membuat satu kontainer tunggal, sementara dua cara lain memanfaatkan operasi PowerShell untuk mengotomatisasi pembuatan kontainer.
Untuk menggunakan contoh ini, berikan nilai variabel dan pastikan bahwa Anda telah membuat sambungan ke langganan Azure Anda. Ingatlah untuk mengganti nilai tempat penampung dalam tanda kurung dengan nilai Anda sendiri.
# Create variables
$containerName = "individual-container"
$prefixName = "loop"
# Approach 1: Create a container
New-AzStorageContainer -Name $containerName -Context $ctx
# Approach 2: Create containers with a PowerShell loop
for ($i = 1; $i -le 3; $i++) {
New-AzStorageContainer -Name (-join($prefixName, $i)) -Context $ctx
}
# Approach 3: Create containers using the PowerShell Split method
"$($prefixName)4 $($prefixName)5 $($prefixName)6".split() | New-AzStorageContainer -Context $ctx
Hasilnya menyediakan nama akun penyimpanan dan mengonfirmasi pembuatan kontainer baru.
Storage Account Name: demostorageaccount
Name PublicAccess LastModified
---- ------------ ------------
individual-container Off 11/2/2021 4:09:05 AM +00:00
loop-container1 Off 11/2/2021 4:09:05 AM +00:00
loop-container2 Off 11/2/2021 4:09:05 AM +00:00
loop-container3 Off 11/2/2021 4:09:05 AM +00:00
loop-container4 Off 11/2/2021 4:09:05 AM +00:00
loop-container5 Off 11/2/2021 4:09:05 AM +00:00
loop-container6 Off 11/2/2021 4:09:05 AM +00:00
Mencantumkan kontainer
Gunakan cmdlet Get-AzStorageContainer
untuk mengambil kontainer penyimpanan. Untuk mengambil satu kontainer tunggal, sertakan parameter -Name
. Untuk menampilkan daftar kontainer yang dimulai dengan string karakter tertentu, tentukan nilai pada parameter -Prefix.
Contoh berikut ini mengambil baik kontainer individual dan daftar sumber daya kontainer.
# Create variables
$containerName = "individual-container"
$prefixName = "loop-"
# Approach 1: Retrieve an individual container
Get-AzStorageContainer -Name $containerName -Context $ctx
Write-Host
# Approach 2: Retrieve a list of containers
Get-AzStorageContainer -Prefix $prefixName -Context $ctx
Hasilnya menyediakan URI titik akhir blob dan mencantumkan kontainer yang diambil menurut nama dan awalan.
Storage Account Name: demostorageaccount
Name PublicAccess LastModified IsDeleted VersionId
---- ------------ ------------ --------- ---------
individual-container 11/2/2021 5:52:08 PM +00:00
loop-container1 11/2/2021 12:22:00 AM +00:00
loop-container2 11/2/2021 12:22:00 AM +00:00
loop-container1 11/2/2021 12:22:00 AM +00:00
loop-container2 11/2/2021 12:22:00 AM +00:00
loop-container3 11/2/2021 12:22:00 AM +00:00 True 01D7E7129FDBD7D4
loop-container4 11/2/2021 12:22:00 AM +00:00 True 01D7E8A5EF01C787
Membaca properti dan metadata kontainer
Kontainer memperlihatkan baik properti sistem dan metadata yang ditentukan pengguna. Terdapat properti sistem di setiap sumber daya penyimpanan blob. Beberapa properti bersifat baca-saja, sementara yang lain bisa dibaca atau diatur. Dibalik itu, beberapa properti sistem memetakan ke header HTTP standar tertentu.
Metadata yang ditentukan pengguna terdiri dari satu atau beberapa pasangan nama-nilai yang Anda tentukan untuk sumber daya penyimpanan blob. Anda dapat menggunakan metadata untuk menyimpan nilai tambahan dengan sumber daya. Nilai metadata hanya untuk tujuan Anda sendiri, dan tidak memengaruhi perilaku sumber daya.
Properti kontainer
Contoh berikut mengambil semua kontainer yang memiliki awalan demo dan mengulanginya sekaligus mencantumkan properti kontainer tersebut.
# Create variable
$prefix = "loop"
# Get containers
$containers = Get-AzStorageContainer -Prefix $prefix -Context $ctx
# Iterate containers, display properties
Foreach ($container in $containers)
{
$containerProperties = $container.BlobContainerClient.GetProperties()
Write-Host $container.Name "properties:"
$containerProperties.Value
}
Hasilnya menampilkan semua kontainer yang memiliki pengulangan awalan dan mencantumkan propertinya.
loop-container1 properties:
LastModified : 12/7/2021 7:47:17 PM +00:00
LeaseStatus : Unlocked
LeaseState : Available
LeaseDuration : Infinite
PublicAccess :
HasImmutabilityPolicy : False
HasLegalHold : False
DefaultEncryptionScope : $account-encryption-key
PreventEncryptionScopeOverride : False
DeletedOn :
RemainingRetentionDays :
ETag : 0x8D9B9BA602806DA
Metadata : {}
HasImmutableStorageWithVersioning : False
loop-container2 properties:
LastModified : 12/7/2021 7:47:18 PM +00:00
LeaseStatus : Unlocked
LeaseState : Available
LeaseDuration : Infinite
PublicAccess :
HasImmutabilityPolicy : False
HasLegalHold : False
DefaultEncryptionScope : $account-encryption-key
PreventEncryptionScopeOverride : False
DeletedOn :
RemainingRetentionDays :
ETag : 0x8D9B9BA605996AE
Metadata : {}
HasImmutableStorageWithVersioning : False
Metadata kontainer baca dan tulis
Pengguna yang memiliki ribuan objek dalam akun penyimpanan mereka dapat dengan cepat menemukan kontainer tertentu berdasarkan metadatanya. Untuk mengakses metadata, Anda akan menggunakan objek BlobContainerClient
. Objek ini memungkinkan Anda untuk mengakses dan memanipulasi kontainer beserta blobnya. Untuk memperbarui metadata, Anda harus menggunakan metode SetMetadata()
. Metode tersebut hanya menerima pasangan kunci-nilai yang disimpan dalam objek IDictionary
umum. Untuk informasi lebih lanjut, lihat kelas BlobContainerClient
Contoh di bawah ini terlebih dahulu memperbarui metadata kontainer dan setelah itu mengambil metadata kontainer. Contoh ini membersihkan kontainer sampel dari memori dan mengambilnya lagi untuk memastikan bahwa metadata tidak dibaca dari objek dalam memori.
# Create variable
$containerName = "individual-container"
# Retrieve container
$container = Get-AzStorageContainer -Name $containerName -Context $ctx
# Create IDictionary, add key-value metadata pairs to IDictionary
$metadata = New-Object System.Collections.Generic.Dictionary"[String,String]"
$metadata.Add("CustomerName","Anthony Bennedetto")
$metadata.Add("CustomerDOB","08/03/1926")
$metadata.Add("CustomerBirthplace","Long Island City")
# Update metadata
$container.BlobContainerClient.SetMetadata($metadata, $null)
# Flush container from memory, retrieve updated container
$container = $null
$container = Get-AzStorageContainer -Name $containerName -Context $ctx
# Display metadata
$properties = $container.BlobContainerClient.GetProperties()
Write-Host $container.Name "metadata:"
Write-Host $properties.Value.Metadata
Hasilnya menampilkan metadata lengkap sebuah kontainer.
individual-container metadata:
[CustomerName, Anthony Bennedetto] [CustomerDOB, 08/03/1926] [CustomerBirthplace, Long Island City]
Mendapatkan tanda tangan akses bersama untuk kontainer
Tanda tangan akses bersama (SAS) memberikan akses yang didelegasikan ke sumber daya Azure. SAS memberikan Anda kontrol terperinci mengenai bagaimana klien dapat mengakses data Anda. Misalnya, Anda dapat menentukan sumber daya mana yang akan tersedia untuk klien. Anda juga dapat membatasi jenis operasi yang dapat dilakukan oleh klien, dan menentukan durasi tindakan tersebut dapat dilakukan.
SAS umumnya digunakan untuk menyediakan akses sementara dan aman kepada klien yang biasanya tidak memiliki izin. Contoh skenario ini adalah layanan yang memungkinkan pengguna untuk membaca dan menulis data mereka sendiri ke akun penyimpanan Anda.
Azure Storage mendukung tiga jenis tanda tangan akses bersama: delegasi pengguna, layanan, dan SAS akun. Untuk informasi mengenai tanda tangan akses bersama lebih lanjut, lihat artikel Membuat SAS layanan untuk kontainer atau blob.
Perhatian
Setiap klien yang memiliki SAS yang valid dapat mengakses data di akun penyimpanan Anda sebagaimana diizinkan oleh SAS tersebut. Penting untuk melindungi SAS dari penggunaan berbahaya atau tidak diinginkan. Gunakan kebijaksanaan dalam mendistribusikan SAS, dan memiliki rencana untuk mencabut SAS yang disusupi.
Contoh berikut ini menggambarkan proses konfigurasi layanan SAS untuk kontainer tertentu dengan menggunakan cmdlet New-AzStorageContainerSASToken
. Contohnya akan mengonfigurasi SAS dengan waktu mulai dan berakhir serta sebuah protokol. Contoh ini juga akan menentukan izin baca, tulis, dan buat daftar di SAS dengan menggunakan parameter -Permission
. Anda dapat merujuk ke tabel lengkap izin dalam artikel Membuat SAS layanan.
# Create variables
$accountName = "<storage-account>"
$containerName = "individual-container"
$startTime = Get-Date
$expiryTime = $startTime.AddDays(7)
$permissions = "rwl"
$protocol = "HttpsOnly"
# Create a context object using Azure AD credentials, retrieve container
$ctx = New-AzStorageContext -StorageAccountName $accountName -UseConnectedAccount
# Approach 1: Generate SAS token for a specific container
$sas = New-AzStorageContainerSASToken `
-Context $ctx `
-Name $containerName `
-StartTime $startTime `
-ExpiryTime $expiryTime `
-Permission $permissions `
-Protocol $protocol
# Approach 2: Generate SAS tokens for a container list using pipeline
Get-AzStorageContainer -Container $filterName -Context $ctx | New-AzStorageContainerSASToken `
-Context $ctx `
-StartTime $startTime `
-ExpiryTime $expiryTime `
-Permission $permissions `
-Protocol $protocol | Write-Output
Catatan
Token SAS yang dikembalikan oleh Blob Storage tidak menyertakan karakter pemisah ('?') untuk string kueri URL. Jika Anda menambahkan token SAS ke URL sumber daya, ingatlah untuk juga menambahkan karakter pemisah.
Menghapus kontainer
Tergantung pada kasus penggunaan, Anda dapat menghapus kontainer atau daftar kontainer dengan menggunakan cmdlet Remove-AzStorageContainer
. Saat menghapus daftar kontainer, Anda dapat memanfaatkan operasi bersyarat, pengulangan, atau alur PowerShell seperti yang ditunjukkan dalam contoh di bawah ini.
# Create variables
$accountName = "<storage-account>"
$containerName = "individual-container"
$prefixName = "loop-"
# Delete a single named container
Remove-AzStorageContainer -Name $containerName -Context $ctx
# Iterate a loop, deleting containers
for ($i = 1; $i -le 2; $i++) {
Remove-AzStorageContainer -Name (-join($containerPrefix, $i)) -Context $ctx
}
# Retrieve container list, delete using a pipeline
Get-AzStorageContainer -Prefix $prefixName -Context $ctx | Remove-AzStorageContainer
Dalam beberapa kasus, pengambilan kontainer yang sudah dihapus dapat dilakukan. Jika opsi proteksi data penghapusan sementara akun penyimpanan Anda diaktifkan, maka parameter -IncludeDeleted
akan menampilkan kontainer yang telah dihapus dalam periode retensi terkait. Parameter -IncludeDeleted
hanya bisa digunakan jika berhubungan dengan parameter -Prefix
saat menampilkan daftar kontainer. Untuk mempelajari penghapusan sementara lebih lanjut, lihat artikel Penghapusan sementara kontainer.
Gunakan contoh berikut untuk mengambil daftar kontainer yang telah dihapus dalam periode retensi yang terkait dengan akun penyimpanan.
# Retrieve a list of containers including those recently deleted
Get-AzStorageContainer -Prefix $prefixName -Context $ctx -IncludeDeleted
Memulihkan kontainer yang dihapus sementara
Seperti yang telah disebutkan di Mencantumkan kontainer, Anda dapat mengonfigurasi opsi proteksi data penghapusan sementara pada akun penyimpanan Anda. Jika diaktifkan, kontainer yang telah dihapus dalam periode retensi terkait dapat dipulihkan.
Contoh berikut ini menjelaskan cara memulihkan kontainer yang telah dihapus sementara dengan menggunakan cmdlet Restore-AzStorageContainer
. Sebelum dapat mengikuti contoh ini, Anda perlu mengaktifkan penghapusan sementara dan mengonfigurasinya di setidaknya salah satu akun penyimpanan Anda.
Untuk mempelajari opsi proteksi data penghapusan sementara lebih lanjut, lihat artikel Penghapusan sementara kontainer.
# Create variables
$accountName = "<storage-account>"
$prefixName = "loop-"
# Create a context object using Azure AD credentials
$ctx = New-AzStorageContext -StorageAccountName $accountName -UseConnectedAccount
# Retrieve all containers, filter deleted containers, restore deleted containers
Get-AzStorageContainer -Prefix $prefixName -IncludeDeleted `
-Context $ctx | ? { $_.IsDeleted } | Restore-AzStorageContainer
Hasilnya menampilkan semua kontainer yang memiliki awalan demo yang telah dipulihkan.
Storage Account Name: demostorageaccount
Name PublicAccess LastModified IsDeleted VersionId
---- ------------ ------------ --------- ---------
loop-container3
loop-container4