Zarządzanie kontenerami obiektów blob przy użyciu programu PowerShell
Usługa Azure Blob Storage umożliwia przechowywanie dużych ilości danych obiektów bez struktury. Magazyn obiektów blob służy do zbierania lub uwidaczniania danych multimediów, zawartości lub aplikacji dla użytkowników. Ponieważ wszystkie dane obiektów blob są przechowywane w kontenerach, przed rozpoczęciem przekazywania danych należy utworzyć kontener magazynu. Aby dowiedzieć się więcej na temat magazynu obiektów blob, przeczytaj wprowadzenie do usługi Azure Blob Storage.
W tym artykule z instrukcjami wyjaśniono, jak pracować z pojedynczymi i wieloma obiektami kontenera magazynu.
Wymagania wstępne
Subskrypcja platformy Azure. Zobacz Uzyskiwanie bezpłatnej wersji próbnej platformy Azure.
Moduł Az programu Azure PowerShell, który jest zalecanym modułem programu PowerShell do interakcji z platformą Azure. Aby rozpocząć pracę z modułem Azure PowerShell, zobacz Instalowanie programu Azure PowerShell.
Przed użyciem przykładów w tym artykule musisz uzyskać autoryzację do subskrypcji platformy Azure. Autoryzacja może wystąpić, uwierzytelniając się przy użyciu konta Microsoft Entra lub używając klucza współużytkowanego. Przykłady w tym artykule używają uwierzytelniania Microsoft Entra w połączeniu z obiektami kontekstu. Obiekty kontekstowe hermetyzują poświadczenia firmy Microsoft Entra i przekazują je do kolejnych operacji danych, eliminując konieczność ponownego uwierzytelnienia.
Aby zalogować się do konta platformy Azure przy użyciu konta Microsoft Entra, otwórz program PowerShell i wywołaj polecenie cmdlet Połączenie-AzAccount.
# Connect to your Azure subscription
Connect-AzAccount
Po nawiązaniu połączenia utwórz kontekst konta magazynu, wywołując New-AzStorageContext
polecenie cmdlet . Dołącz parametr , -UseConnectedAccount
aby operacje na danych były wykonywane przy użyciu poświadczeń firmy Microsoft Entra.
# Create a context object using Azure AD credentials
$ctx = New-AzStorageContext -StorageAccountName <storage account name> -UseConnectedAccount
Pamiętaj, aby zastąpić wartości symboli zastępczych w nawiasach własnymi wartościami. Aby uzyskać więcej informacji na temat logowania się do platformy Azure przy użyciu programu PowerShell, zobacz Logowanie się przy użyciu programu Azure PowerShell.
Tworzenie kontenera
Aby utworzyć kontenery za pomocą programu PowerShell, wywołaj polecenie cmdlet New-AzStorageContainer . Nie ma żadnych ograniczeń liczby obiektów blob ani kontenerów, które można utworzyć na koncie magazynu. Kontenery nie mogą być zagnieżdżone w innych kontenerach.
Poniższy przykład ilustruje trzy opcje tworzenia kontenerów obiektów blob za New-AzStorageContainer
pomocą polecenia cmdlet . Pierwsze podejście tworzy pojedynczy kontener, podczas gdy pozostałe dwa podejścia wykorzystują operacje programu PowerShell do automatyzowania tworzenia kontenerów.
Aby użyć tego przykładu, podaj wartości zmiennych i upewnij się, że utworzono połączenie z subskrypcją platformy Azure. Pamiętaj, aby zastąpić wartości symboli zastępczych w nawiasach własnymi wartościami.
# 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
Wynik zawiera nazwę konta magazynu i potwierdza utworzenie nowego kontenera.
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
Wyświetlanie listy kontenerów
Użyj polecenia cmdlet , Get-AzStorageContainer
aby pobrać kontenery magazynu. Aby pobrać pojedynczy kontener, dołącz -Name
parametr . Aby zwrócić listę kontenerów rozpoczynających się od danego ciągu znaków, określ wartość parametru -Prefix.
Poniższy przykład pobiera zarówno pojedynczy kontener, jak i listę zasobów kontenera.
# 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
Wynik zawiera identyfikator URI punktu końcowego obiektu blob i wyświetla listę kontenerów pobranych według nazwy i prefiksu.
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
Odczytywanie właściwości i metadanych kontenera
Kontener uwidacznia zarówno właściwości systemu, jak i metadane zdefiniowane przez użytkownika. Właściwości systemu istnieją w każdym zasobie magazynu obiektów blob. Niektóre właściwości są tylko do odczytu, podczas gdy inne mogą być odczytywane lub ustawiane. Pod osłonami niektóre właściwości systemu są mapowanie na niektóre standardowe nagłówki HTTP.
Metadane zdefiniowane przez użytkownika składają się z co najmniej jednej pary nazwa-wartość określonej dla zasobu magazynu obiektów blob. Za pomocą metadanych można przechowywać dodatkowe wartości z zasobem. Wartości metadanych są przeznaczone tylko do własnych celów i nie mają wpływu na zachowanie zasobu.
Właściwości kontenera
Poniższy przykład pobiera wszystkie kontenery z prefiksem pokazu i wykonuje iterację po nich, wyświetlając ich właściwości.
# 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
}
Wyniki wyświetlają wszystkie kontenery z pętlą prefiksu i wyświetlają ich właściwości.
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
Odczytywanie i zapisywanie metadanych kontenera
Użytkownicy, którzy mają wiele tysięcy obiektów na koncie magazynu, mogą szybko zlokalizować określone kontenery na podstawie ich metadanych. Aby uzyskać dostęp do metadanych, użyjesz BlobContainerClient
obiektu . Ten obiekt umożliwia uzyskiwanie dostępu do kontenerów i ich obiektów blob oraz manipulowanie nimi. Aby zaktualizować metadane, należy wywołać metodę SetMetadata()
. Metoda akceptuje tylko pary klucz-wartość przechowywane w obiekcie ogólnym IDictionary
. Aby uzyskać więcej informacji, zobacz klasę BlobContainerClient
Poniższy przykład najpierw aktualizuje metadane kontenera, a następnie pobiera metadane kontenera. Przykład opróżnia przykładowy kontener z pamięci i pobiera go ponownie, aby upewnić się, że metadane nie są odczytywane z obiektu w pamięci.
# 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
Wyniki zawierają pełne metadane dla kontenera.
individual-container metadata:
[CustomerName, Anthony Bennedetto] [CustomerDOB, 08/03/1926] [CustomerBirthplace, Long Island City]
Uzyskiwanie sygnatury dostępu współdzielonego dla kontenera
Sygnatura dostępu współdzielonego (SAS) zapewnia delegowany dostęp do zasobów platformy Azure. Sygnatura dostępu współdzielonego zapewnia szczegółową kontrolę nad sposobem uzyskiwania dostępu do danych przez klienta. Można na przykład określić, które zasoby są dostępne dla klienta. Można również ograniczyć typy operacji, które klient może wykonać, i określić czas, dla którego można wykonać akcje.
Sygnatura dostępu współdzielonego jest często używana do zapewnienia tymczasowego i bezpiecznego dostępu do klienta, który normalnie nie ma uprawnień. Przykładem tego scenariusza jest usługa, która umożliwia użytkownikom odczytywanie i zapisywanie własnych danych na koncie magazynu.
Usługa Azure Storage obsługuje trzy typy sygnatur dostępu współdzielonego: delegowanie użytkownika, usługę i sygnaturę dostępu współdzielonego konta. Aby uzyskać więcej informacji na temat sygnatur dostępu współdzielonego, zobacz artykuł Tworzenie sygnatury dostępu współdzielonego usługi dla kontenera lub obiektu blob .
Uwaga
Każdy klient, który posiada prawidłową sygnaturę dostępu współdzielonego, może uzyskać dostęp do danych na koncie magazynu zgodnie z zezwoleniem na ten sygnaturę dostępu współdzielonego. Ważne jest, aby chronić sygnaturę dostępu współdzielonego przed złośliwym lub niezamierzonym użyciem. Użyj uznania w dystrybucji sygnatury dostępu współdzielonego i zaplanuj odwołanie naruszonej sygnatury dostępu współdzielonego.
Poniższy przykład ilustruje proces konfigurowania sygnatury dostępu współdzielonego usługi dla określonego kontenera New-AzStorageContainerSASToken
przy użyciu polecenia cmdlet . W przykładzie zostanie skonfigurowana sygnatura dostępu współdzielonego z czasem rozpoczęcia i wygaśnięcia oraz protokołem. Określi również uprawnienia do odczytu, zapisu i listy w sygnaturze dostępu współdzielonego przy użyciu parametru -Permission
. Pełną tabelę uprawnień można uzyskać w artykule Tworzenie sygnatury dostępu współdzielonego usługi .
# 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
Uwaga
Token SAS zwrócony przez usługę Blob Storage nie zawiera znaku ogranicznika ('?') dla ciągu zapytania adresu URL. Jeśli dołączasz token SAS do adresu URL zasobu, pamiętaj, aby również dołączyć znak ogranicznika.
Usuwanie kontenerów
W zależności od przypadku użycia można usunąć kontener lub listę kontenerów za Remove-AzStorageContainer
pomocą polecenia cmdlet . Podczas usuwania listy kontenerów można korzystać z operacji warunkowych, pętli lub potoku programu PowerShell, jak pokazano w poniższych przykładach.
# 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
W niektórych przypadkach można pobrać kontenery, które zostały usunięte. Jeśli opcja ochrony danych usuwania nietrwałego konta magazynu jest włączona, -IncludeDeleted
parametr zwróci kontenery usunięte w skojarzonym okresie przechowywania. Parametr -IncludeDeleted
można używać tylko w połączeniu z parametrem -Prefix
podczas zwracania listy kontenerów. Aby dowiedzieć się więcej na temat usuwania nietrwałego, zapoznaj się z artykułem Usuwanie nietrwałe dla kontenerów .
Skorzystaj z poniższego przykładu, aby pobrać listę kontenerów usuniętych w skojarzonym okresie przechowywania konta magazynu.
# Retrieve a list of containers including those recently deleted
Get-AzStorageContainer -Prefix $prefixName -Context $ctx -IncludeDeleted
Przywracanie kontenera usuniętego nietrwale
Jak wspomniano w sekcji Wyświetlanie kontenerów , możesz skonfigurować opcję ochrony danych usuwania nietrwałego na koncie magazynu. Po włączeniu można przywrócić kontenery usunięte w skojarzonym okresie przechowywania.
W poniższym przykładzie wyjaśniono, jak przywrócić kontener usunięty nietrwale za Restore-AzStorageContainer
pomocą polecenia cmdlet . Zanim będzie można skorzystać z tego przykładu, musisz włączyć usuwanie nietrwałe i skonfigurować je na co najmniej jednym z kont magazynu.
Aby dowiedzieć się więcej na temat opcji ochrony danych usuwania nietrwałego, zapoznaj się z artykułem Usuwanie nietrwałe dla kontenerów .
# 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
Wyniki zawierają wszystkie kontenery z pokazem prefiksu, który został przywrócony.
Storage Account Name: demostorageaccount
Name PublicAccess LastModified IsDeleted VersionId
---- ------------ ------------ --------- ---------
loop-container3
loop-container4