Správa kontejnerů objektů blob pomocí PowerShellu
Azure Blob Storage umožňuje ukládat velké objemy nestrukturovaných dat objektů. Úložiště objektů blob můžete použít ke shromažďování nebo zveřejnění médií, obsahu nebo dat aplikací pro uživatele. Protože všechna data objektů blob jsou uložená v kontejnerech, musíte vytvořit kontejner úložiště, abyste mohli začít nahrávat data. Další informace o úložišti objektů blob najdete v tématu Úvod do služby Azure Blob Storage.
Tento článek s postupy vysvětluje, jak pracovat s jednotlivými i několika objekty kontejneru úložiště.
Předpoklady
Předplatné Azure. Viz Získání bezplatné zkušební verze Azure.
Modul Azure PowerShell Az, což je doporučený modul PowerShellu pro interakci s Azure. Pokud chcete začít s modulem Az PowerShell, projděte si téma věnované instalaci Azure PowerShellu.
Abyste mohli použít příklady v tomto článku, budete muset získat autorizaci k předplatnému Azure. K autorizaci může dojít ověřením pomocí účtu Microsoft Entra nebo pomocí sdíleného klíče. Příklady v tomto článku používají ověřování Microsoft Entra ve spojení s kontextovými objekty. Kontextové objekty zapouzdřují vaše přihlašovací údaje Microsoft Entra a předávají je následným operacím s daty a eliminují nutnost opětovného ověření.
Pokud se chcete přihlásit ke svému účtu Azure pomocí účtu Microsoft Entra, otevřete PowerShell a zavolejte rutinu Připojení-AzAccount.
# Connect to your Azure subscription
Connect-AzAccount
Po vytvoření připojení vytvořte kontext účtu úložiště voláním rutiny New-AzStorageContext
. -UseConnectedAccount
Zahrňte parametr, aby se datové operace prováděly pomocí vašich přihlašovacích údajů Microsoft Entra.
# Create a context object using Azure AD credentials
$ctx = New-AzStorageContext -StorageAccountName <storage account name> -UseConnectedAccount
Nezapomeňte nahradit zástupné hodnoty v hranatých závorkách vlastními hodnotami. Další informace o přihlašování k Azure pomocí PowerShellu najdete v tématu Přihlášení pomocí Azure PowerShellu.
Vytvoření kontejneru
Pokud chcete vytvořit kontejnery pomocí PowerShellu, zavolejte rutinu New-AzStorageContainer . Počet objektů blob nebo kontejnerů, které je možné vytvořit v rámci účtu úložiště, nejsou nijak omezené. Kontejnery nelze vnořit do jiných kontejnerů.
Následující příklad znázorňuje tři možnosti vytvoření kontejnerů objektů blob pomocí rutiny New-AzStorageContainer
. První přístup vytvoří jeden kontejner, zatímco zbývající dva přístupy využívají operace PowerShellu k automatizaci vytváření kontejnerů.
Pokud chcete tento příklad použít, zadejte hodnoty proměnných a ujistěte se, že jste vytvořili připojení k vašemu předplatnému Azure. Nezapomeňte nahradit zástupné hodnoty v hranatých závorkách vlastními hodnotami.
# 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
Výsledkem je název účtu úložiště a potvrdí se vytvoření nového kontejneru.
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
Výpis kontejnerů
Použijte rutinu Get-AzStorageContainer
k načtení kontejnerů úložiště. Pokud chcete načíst jeden kontejner, zahrňte parametr -Name
. Pokud chcete vrátit seznam kontejnerů, které začínají daným řetězcem znaků, zadejte hodnotu parametru -Prefix.
Následující příklad načte jednotlivé kontejnery i seznam prostředků kontejneru.
# 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
Výsledkem je identifikátor URI koncového bodu objektu blob a seznam kontejnerů načtených podle názvu a předpony.
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
Čtení vlastností kontejneru a metadat
Kontejner zveřejňuje systémové vlastnosti i uživatelsky definovaná metadata. Systémové vlastnosti existují pro každý prostředek úložiště objektů blob. Některé vlastnosti jsou jen pro čtení, zatímco jiné můžou být jen pro čtení nebo nastavení. Pod popisky se některé systémové vlastnosti mapují na určité standardní hlavičky HTTP.
Uživatelsky definovaná metadata se skládají z jednoho nebo více dvojic název-hodnota, které zadáte pro prostředek úložiště objektů blob. Metadata můžete použít k uložení dalších hodnot s prostředkem. Hodnoty metadat jsou určené jenom pro vaše vlastní účely a nemají vliv na chování prostředku.
Vlastnosti kontejneru
Následující příklad načte všechny kontejnery s předponou demo a iteruje je a zobrazí jejich vlastnosti.
# 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
}
Výsledky zobrazí všechny kontejnery se smyčkou předpony a zobrazí jejich vlastnosti.
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
Čtení a zápis metadat kontejneru
Uživatelé, kteří mají v účtu úložiště mnoho tisíc objektů, můžou rychle vyhledat konkrétní kontejnery na základě jejich metadat. K přístupu k metadatům použijete BlobContainerClient
objekt. Tento objekt umožňuje přístup ke kontejnerům a jejich objektům blob a manipulaci s nimi. Pokud chcete aktualizovat metadata, budete muset metodu SetMetadata()
volat. Metoda přijímá pouze páry klíč-hodnota uložené v obecném IDictionary
objektu. Další informace najdete ve třídě BlobContainerClient.
Následující příklad nejprve aktualizuje metadata kontejneru a potom načte metadata kontejneru. Příklad vyprázdní ukázkový kontejner z paměti a znovu ho načte, aby se zajistilo, že metadata nejsou načtena z objektu v paměti.
# 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
Ve výsledcích se zobrazí úplná metadata kontejneru.
individual-container metadata:
[CustomerName, Anthony Bennedetto] [CustomerDOB, 08/03/1926] [CustomerBirthplace, Long Island City]
Získání sdíleného přístupového podpisu pro kontejner
Sdílený přístupový podpis (SAS) poskytuje delegovaný přístup k prostředkům Azure. Sas poskytuje podrobnou kontrolu nad tím, jak může klient přistupovat k vašim datům. Můžete například určit, které prostředky mají klient k dispozici. Můžete také omezit typy operací, které může klient provádět, a určit dobu, po kterou lze provést akce.
Sdílený přístupový podpis se běžně používá k poskytování dočasného a zabezpečeného přístupu k klientovi, který by normálně neměl oprávnění. Příkladem tohoto scénáře by byla služba, která uživatelům umožňuje číst a zapisovat vlastní data do vašeho účtu úložiště.
Azure Storage podporuje tři typy sdílených přístupových podpisů: delegování uživatele, službu a SAS účtu. Další informace o sdílených přístupových podpisech najdete v článku Vytvoření SAS služby pro kontejner nebo objekt blob .
Upozornění
Každý klient, který má platný SAS, má přístup k datům ve vašem účtu úložiště, jak to povoluje tento SAS. Je důležité chránit SAS před škodlivým nebo nezamýšleným použitím. Při distribuci sdíleného přístupového podpisu použijte vlastní uvážení a vytvořte plán pro odvolání ohroženého sdíleného přístupového podpisu.
Následující příklad ukazuje proces konfigurace SAS služby pro konkrétní kontejner pomocí rutiny New-AzStorageContainerSASToken
. Příklad nakonfiguruje SAS s časy spuštění a vypršení platnosti a protokolem. Pomocí parametru také určí oprávnění ke čtení, zápisu a výpisu -Permission
v SAS. Můžete odkazovat na úplnou tabulku oprávnění v článku Vytvoření SAS služby.
# 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
Poznámka:
Token SAS vrácený službou Blob Storage neobsahuje znak oddělovače (?) řetězce dotazu adresy URL. Pokud k adrese URL prostředku připojujete token SAS, nezapomeňte také připojit znak oddělovače.
Odstraňování kontejnerů
V závislosti na vašem případu použití můžete pomocí rutiny Remove-AzStorageContainer
odstranit kontejner nebo seznam kontejnerů. Při odstraňování seznamu kontejnerů můžete využít podmíněné operace, smyčky nebo kanál PowerShellu, jak je znázorněno v následujících příkladech.
# 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
V některých případech je možné načíst odstraněné kontejnery. Pokud je povolená možnost obnovitelného odstranění dat vašeho účtu úložiště, -IncludeDeleted
vrátí parametr kontejnery odstraněné během přidružené doby uchovávání. Parametr -IncludeDeleted
lze použít pouze ve spojení s parametrem -Prefix
při vrácení seznamu kontejnerů. Další informace o obnovitelném odstranění najdete v článku Obnovitelné odstranění kontejnerů .
Pomocí následujícího příkladu načtěte seznam kontejnerů odstraněných v přidružené době uchovávání účtu úložiště.
# Retrieve a list of containers including those recently deleted
Get-AzStorageContainer -Prefix $prefixName -Context $ctx -IncludeDeleted
Obnovení obnovitelně odstraněného kontejneru
Jak je uvedeno v části Seznam kontejnerů , můžete u svého účtu úložiště nakonfigurovat možnost ochrany dat obnovitelného odstranění. Pokud je tato možnost povolená, je možné obnovit kontejnery odstraněné během přidružené doby uchovávání informací.
Následující příklad vysvětluje, jak obnovit obnovitelně odstraněný kontejner pomocí rutiny Restore-AzStorageContainer
. Než budete moct postupovat podle tohoto příkladu, budete muset povolit obnovitelné odstranění a nakonfigurovat ho alespoň na jednom z vašich účtů úložiště.
Další informace o možnosti obnovitelného odstranění dat najdete v článku Obnovitelné odstranění kontejnerů .
# 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
Výsledky zobrazují všechny kontejnery s ukázkou předpony, která byla obnovena.
Storage Account Name: demostorageaccount
Name PublicAccess LastModified IsDeleted VersionId
---- ------------ ------------ --------- ---------
loop-container3
loop-container4