Sdílet prostřednictvím


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

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               

Viz také