Gerenciar contêineres de blob usando o PowerShell
O armazenamento de blob do Azure permite armazenar grandes quantidades de dados de objetos não estruturados. Você pode usar o armazenamento de blob para coletar ou expor dados de mídia, conteúdo ou aplicativo aos usuários. Como todos os dados de blob são armazenados em contêineres, você deve criar um contêiner de armazenamento antes de começar a carregar dados. Para saber mais sobre o armazenamento de blobs, leia a Introdução ao armazenamento de Blob do Azure.
Este artigo explica como trabalhar com objetos de contêiner de armazenamento individuais e múltiplos.
Pré-requisitos
Uma subscrição do Azure. Veja Obter versão de avaliação gratuita do Azure.
Módulo Az, do Azure PowerShell, que é o módulo PowerShell recomendado para interagir com o Azure. Para começar a utilizar o módulo Azure PowerShell, veja Instalar o Azure PowerShell.
Você precisará obter autorização para uma assinatura do Azure antes de poder usar os exemplos neste artigo. A autorização pode ocorrer autenticando-se com uma conta do Microsoft Entra ou usando uma chave compartilhada. Os exemplos neste artigo usam a autenticação do Microsoft Entra em conjunto com objetos de contexto. Os objetos de contexto encapsulam suas credenciais do Microsoft Entra e as passam em operações de dados subsequentes, eliminando a necessidade de autenticar novamente.
Para entrar na sua conta do Azure com uma conta do Microsoft Entra, abra o PowerShell e chame o cmdlet Connect-AzAccount .
# Connect to your Azure subscription
Connect-AzAccount
Depois que a conexão for estabelecida, crie o contexto da conta de armazenamento chamando o New-AzStorageContext
cmdlet. Inclua o parâmetro para que as -UseConnectedAccount
operações de dados sejam executadas usando suas credenciais do Microsoft Entra.
# Create a context object using Azure AD credentials
$ctx = New-AzStorageContext -StorageAccountName <storage account name> -UseConnectedAccount
Lembre-se de substituir os valores de espaço reservado entre colchetes pelos seus próprios valores. Para obter mais informações sobre como entrar no Azure com o PowerShell, consulte Entrar com o Azure PowerShell.
Criar um contentor
Para criar contêineres com o PowerShell, chame o cmdlet New-AzStorageContainer . Não há limites para o número de blobs ou contêineres que podem ser criados em uma conta de armazenamento. Os contêineres não podem ser aninhados em outros contêineres.
O exemplo a seguir ilustra três opções para a criação de contêineres de blob com o New-AzStorageContainer
cmdlet. A primeira abordagem cria um único contêiner, enquanto as duas abordagens restantes aproveitam as operações do PowerShell para automatizar a criação de contêineres.
Para usar este exemplo, forneça valores para as variáveis e verifique se você criou uma conexão com sua assinatura do Azure. Lembre-se de substituir os valores de espaço reservado entre colchetes pelos seus próprios valores.
# 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
O resultado fornece o nome da conta de armazenamento e confirma a criação do novo contêiner.
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
Listar contentores
Use o Get-AzStorageContainer
cmdlet para recuperar contêineres de armazenamento. Para recuperar um único contêiner, inclua o -Name
parâmetro. Para retornar uma lista de contêineres que começa com uma determinada cadeia de caracteres, especifique um valor para o parâmetro -Prefix.
O exemplo a seguir recupera um contêiner individual e uma lista de recursos de contêiner.
# 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
O resultado fornece o URI do ponto de extremidade de blob e lista os contêineres recuperados por nome e prefixo.
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
Ler propriedades e metadados do contêiner
Um contêiner expõe as propriedades do sistema e os metadados definidos pelo usuário. As propriedades do sistema existem em cada recurso de armazenamento de blob. Algumas propriedades são somente leitura, enquanto outras podem ser lidas ou definidas. Sob as capas, algumas propriedades do sistema são mapeadas para determinados cabeçalhos HTTP padrão.
Os metadados definidos pelo usuário consistem em um ou mais pares nome-valor que você especifica para um recurso de armazenamento de blob. Você pode usar metadados para armazenar valores adicionais com o recurso. Os valores de metadados são apenas para seus próprios fins e não afetam como o recurso se comporta.
Propriedades do contentor
O exemplo a seguir recupera todos os contêineres com o prefixo demo e itera através deles, listando suas propriedades.
# 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
}
Os resultados exibem todos os contêineres com o loop de prefixo e listam suas propriedades.
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
Ler e gravar metadados de contêiner
Os usuários que têm muitos milhares de objetos em sua conta de armazenamento podem localizar rapidamente contêineres específicos com base em seus metadados. Para acessar os metadados, você usará o BlobContainerClient
objeto. Este objeto permite que você acesse e manipule contêineres e seus blobs. Para atualizar metadados, você precisará chamar o SetMetadata()
método. O método só aceita pares chave-valor armazenados em um objeto genérico IDictionary
. Para obter mais informações, consulte a classe BlobContainerClient
O exemplo abaixo primeiro atualiza os metadados de um contêiner e depois recupera os metadados de um contêiner. O exemplo libera o contêiner de amostra da memória e o recupera novamente para garantir que os metadados não estejam sendo lidos do objeto na memória.
# 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
Os resultados exibem os metadados completos de um contêiner.
individual-container metadata:
[CustomerName, Anthony Bennedetto] [CustomerDOB, 08/03/1926] [CustomerBirthplace, Long Island City]
Obter uma assinatura de acesso compartilhado para um contêiner
Uma assinatura de acesso compartilhado (SAS) fornece acesso delegado aos recursos do Azure. Uma SAS oferece controle granular sobre como um cliente pode acessar seus dados. Por exemplo, você pode especificar quais recursos estão disponíveis para o cliente. Você também pode limitar os tipos de operações que o cliente pode executar e especificar a quantidade de tempo para a qual as ações podem ser executadas.
Um SAS é comumente usado para fornecer acesso temporário e seguro a um cliente que normalmente não teria permissões. Um exemplo desse cenário seria um serviço que permite que os usuários leiam e gravem seus próprios dados em sua conta de armazenamento.
O Armazenamento do Azure dá suporte a três tipos de assinaturas de acesso compartilhado: delegação de usuário, serviço e SAS de conta. Para obter mais informações sobre assinaturas de acesso compartilhado, consulte o artigo Criar uma SAS de serviço para um contêiner ou blob .
Atenção
Qualquer cliente que possua uma SAS válida pode aceder aos dados na sua conta de armazenamento conforme permitido por essa SAS. É importante proteger um SAS contra uso mal-intencionado ou não intencional. Use discrição na distribuição de um SAS e tenha um plano para revogar um SAS comprometido.
O exemplo a seguir ilustra o processo de configuração de uma SAS de serviço para um contêiner específico usando o New-AzStorageContainerSASToken
cmdlet. O exemplo configurará o SAS com tempos de início e expiração e um protocolo. Ele também especificará as permissões de leitura, gravação e lista no SAS usando o -Permission
parâmetro. Você pode fazer referência à tabela completa de permissões no artigo Criar uma SAS de serviço.
# 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
Nota
O token SAS retornado pelo Armazenamento de Blob não inclui o caractere delimitador ('?') para a cadeia de caracteres de consulta de URL. Se você estiver anexando o token SAS a uma URL de recurso, lembre-se de acrescentar também o caractere delimitador.
Eliminar contentores
Dependendo do seu caso de uso, você pode excluir um contêiner ou uma lista de contêineres com o Remove-AzStorageContainer
cmdlet. Ao excluir uma lista de contêineres, você pode aproveitar operações condicionais, loops ou o pipeline do PowerShell, conforme mostrado nos exemplos abaixo.
# 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
Em alguns casos, é possível recuperar contêineres que foram excluídos. Se a opção de proteção de dados de exclusão suave da sua conta de armazenamento estiver ativada, o -IncludeDeleted
parâmetro retornará os contêineres excluídos dentro do período de retenção associado. O -IncludeDeleted
parâmetro só pode ser usado em conjunto com o -Prefix
parâmetro ao retornar uma lista de contêineres. Para saber mais sobre a exclusão suave, consulte o artigo Exclusão suave para contêineres .
Use o exemplo a seguir para recuperar uma lista de contêineres excluídos dentro do período de retenção associado da conta de armazenamento.
# Retrieve a list of containers including those recently deleted
Get-AzStorageContainer -Prefix $prefixName -Context $ctx -IncludeDeleted
Restaurar um contêiner excluído suavemente
Conforme mencionado na seção Listar contêineres , você pode configurar a opção de proteção de dados de exclusão suave em sua conta de armazenamento. Quando ativado, é possível restaurar contêineres excluídos dentro do período de retenção associado.
O exemplo a seguir explica como restaurar um contêiner excluído por software com o Restore-AzStorageContainer
cmdlet. Antes de seguir este exemplo, você precisará habilitar a exclusão virtual e configurá-la em pelo menos uma de suas contas de armazenamento.
Para saber mais sobre a opção de proteção de dados de exclusão suave, consulte o artigo Exclusão suave para contêineres .
# 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
Os resultados exibem todos os contêineres com o prefixo demo que foram restaurados.
Storage Account Name: demostorageaccount
Name PublicAccess LastModified IsDeleted VersionId
---- ------------ ------------ --------- ---------
loop-container3
loop-container4