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

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               

Baca juga