Administración de contenedores de blobs mediante PowerShell
Azure Blob Storage permite almacenar grandes cantidades de datos de objetos sin estructura. Blob Storage se puede usar para recopilar o exponer datos multimedia, de contenido o de aplicaciones a los usuarios. Como todos los datos de blob se almacenan en contenedores, debe crear un contenedor de almacenamiento antes de empezar a cargar datos. Para más información sobre Blob Storage, lea la introducción a Azure Blob Storage.
Este artículo explica cómo trabajar con objetos de contenedor de almacenamiento tanto individuales como múltiples.
Prerrequisitos
Suscripción a Azure. Consulte Obtención de una versión de evaluación gratuita.
El módulo Az de Azure PowerShell, que es el módulo recomendado de PowerShell para interactuar con Azure. Para empezar a trabajar con el módulo Az de PowerShell, consulte Instalación de Azure PowerShell.
Para poder usar los ejemplos de este artículo, necesitará obtener autorización para una suscripción de Azure. La autorización puede producirse mediante la autenticación con una cuenta de Microsoft Entra o mediante una clave compartida. En los ejemplos de este artículo se usa la autenticación de Microsoft Entra junto con objetos de contexto. Los objetos de contexto encapsulan las credenciales de Microsoft Entra y las pasan en operaciones de datos posteriores, lo que elimina la necesidad de volver a autenticarse.
Para iniciar sesión en su cuenta Azure con una cuenta Microsoft Entra, abra PowerShell y llame al cmdlet Connect-AzAccount.
# Connect to your Azure subscription
Connect-AzAccount
Una vez establecida la conexión, cree el contexto de la cuenta de almacenamiento llamando al cmdlet New-AzStorageContext
. Incluya el parámetro -UseConnectedAccount
para que las operaciones de datos se realicen mediante sus credenciales de Microsoft Entra.
# Create a context object using Azure AD credentials
$ctx = New-AzStorageContext -StorageAccountName <storage account name> -UseConnectedAccount
No olvide reemplazar los valores del marcador de posición entre corchetes con sus propios valores. Para obtener más información sobre cómo iniciar sesión en Azure con PowerShell, consulte Inicio de sesión con Azure PowerShell.
Crear un contenedor
Para crear contenedores con PowerShell, llame al cmdlet New-AzStorageContainer. No hay límites en el número de blobs o contenedores que se pueden crear en una cuenta de almacenamiento. Los contenedores no se pueden anidar dentro de otros contenedores.
En el ejemplo siguiente se ilustran tres opciones para la creación de contenedores de blobs con el cmdlet New-AzStorageContainer
. El primer enfoque crea un único contenedor, mientras que los dos enfoques restantes aprovechan las operaciones de PowerShell para automatizar la creación de contenedores.
Para usar este ejemplo, especifique valores para las variables y asegúrese de que ha creado una conexión a su suscripción de Azure. No olvide reemplazar los valores del marcador de posición entre corchetes con sus propios 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
El resultado proporciona el nombre de la cuenta de almacenamiento y confirma la creación del nuevo contenedor.
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
Enumerar contenedores
Use el cmdlet Get-AzStorageContainer
para recuperar contenedores de almacenamiento. Para recuperar un único contenedor, incluya el parámetro -Name
. Para devolver una lista de contenedores que comience con una cadena de caracteres determinada, especifique un valor para el parámetro -Prefix.
En el ejemplo siguiente se recuperan no solo un contenedor individual, sino también una lista de recursos de contenedor.
# 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
El resultado proporciona el identificador URI del punto de conexión del blob y enumera los contenedores recuperados por nombre y prefijo.
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
Metadatos y propiedades del contenedor de lectura
Un contenedor expone tanto las propiedades del sistema como los metadatos definidos por el usuario. En cada recurso de almacenamiento de blobs existen propiedades del sistema. Algunas propiedades son de solo lectura, mientras que otras se pueden leer o establecer. En segundo plano, algunas propiedades del sistema se asignan a ciertos encabezados HTTP estándar.
Los metadatos definidos por el usuario se componen de uno o más pares nombre-valor que se especifican para un recurso de almacenamiento de blobs. Puede usar metadatos para almacenar valores adicionales con el recurso. Los valores de metadatos se proporcionan para uso personal y no afectan a cómo se comporta el recurso.
Propiedades del contenedor
En el ejemplo siguiente se recuperan todos los contenedores con el prefijo demo y se itera por ellos, enumerando sus propiedades.
# 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
}
Los resultados muestran todos los contenedores con el bucle del prefijo y muestran sus propiedades.
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
Metadatos de contenedor de lectura y escritura
Los usuarios que tienen muchos miles de objetos dentro de su cuenta de almacenamiento pueden localizar rápidamente contenedores específicos en función de sus metadatos. Para acceder a los metadatos, usará el objeto BlobContainerClient
. Este objeto le permite acceder y manipular contenedores y sus blobs. Para actualizar los metadatos, tendrá que llamar al método SetMetadata()
. El método solo acepta pares clave-valor almacenados en un objeto IDictionary
genérico. Para más información, vea la clase BlobContainerClient
El ejemplo siguiente actualiza primero los metadatos de un contenedor y, después, recupera los metadatos de un contenedor. El ejemplo vacía el contenedor de ejemplo de la memoria y lo recupera de nuevo para asegurarse de que no se leen metadatos desde el objeto en la memoria.
# 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
Los resultados muestran los metadatos completos de un contenedor.
individual-container metadata:
[CustomerName, Anthony Bennedetto] [CustomerDOB, 08/03/1926] [CustomerBirthplace, Long Island City]
Obtención de una firma de acceso compartido para un contenedor
Las firmas de acceso compartido (SAS) ofrecen acceso delegado a los recursos de Azure. Una SAS proporciona control granular sobre la forma en que un cliente puede acceder a los datos. Por ejemplo, puede especificar qué recursos están disponibles para el cliente. También puede limitar los tipos de operaciones que el cliente puede realizar y especificar la cantidad de tiempo durante la que se pueden realizar las acciones.
Una SAS se usa normalmente para proporcionar acceso temporal y seguro a un cliente que normalmente no tendría permisos. Un ejemplo de este escenario sería un servicio que permite a los usuarios leer y escribir sus propios datos en su cuenta de almacenamiento.
Azure Storage admite tres tipos de firmas de acceso compartido: delegación de usuarios, servicio y SAS de cuenta. Para más información sobre las firmas de acceso compartido, consulte el artículo Creación de una SAS de servicio para un contenedor o blob.
Precaución
Cualquier cliente que posea una SAS válida puede acceder a los datos de la cuenta de almacenamiento según lo permitido por esa SAS. Es importante proteger una SAS de uso malintencionado o no intencionado. Sea cauto al distribuir una SAS y tenga un plan para revocar una SAS en peligro.
En el ejemplo siguiente se ilustra el proceso de configuración de una SAS de servicio para un contenedor específico mediante el cmdlet New-AzStorageContainerSASToken
. El ejemplo configurará la SAS con las horas de inicio y expiración y un protocolo. También especificará los permisos de lectura, escritura y enumeración, mediante el parámetro -Permission
. Puede hacer referencia a la tabla de permisos completa en el artículo Creación de una SAS de servicio.
# 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:
El token de SAS que ha devuelto Blob Storage no incluye el carácter delimitador ("?") para la cadena de consulta de dirección URL. Si va a anexar el token de SAS a una dirección URL de recurso, recuerde también anexar el carácter delimitador.
Eliminación de contenedores
En función del caso de uso, puede eliminar un contenedor o una lista de contenedores con el cmdlet Remove-AzStorageContainer
. Al eliminar una lista de contenedores, puede aprovechar las operaciones condicionales, los bucles o la canalización de PowerShell, tal como se muestra en los ejemplos siguientes.
# 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
En algunos casos, es posible recuperar los blobs que se hayan eliminado. Si la opción de protección de datos de eliminación temporal de su cuenta de almacenamiento está habilitada, el parámetro -IncludeDeleted
devolverá los contenedores eliminados dentro del período de retención asociado. El parámetro -IncludeDeleted
solo se puede usar junto con el parámetro -Prefix
al devolver una lista de contenedores. Para más información sobre la eliminación temporal, consulte el artículo Eliminación temporal para contenedores.
Use el ejemplo siguiente para recuperar una lista de los contenedores eliminados dentro del período de retención asociado a la cuenta de almacenamiento.
# Retrieve a list of containers including those recently deleted
Get-AzStorageContainer -Prefix $prefixName -Context $ctx -IncludeDeleted
Restauración de un contenedor eliminado temporalmente
Tal como se mencionó en la sección Enumeración de contenedores, puede configurar la opción de protección de datos de eliminación temporal en su cuenta de almacenamiento. Cuando se habilita, se pueden restaurar los contenedores eliminados dentro del período de retención asociado.
En el ejemplo siguiente se explica cómo restaurar un contenedor eliminado temporalmente con el cmdlet Restore-AzStorageContainer
. Para poder seguir este ejemplo, deberá habilitar la eliminación temporal y configurarla al menos en una de sus cuentas de almacenamiento.
Para más información sobre la opción de protección de datos de eliminación temporal, consulte el artículo Eliminación temporal para contenedores.
# 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
Los resultados muestran todos los contenedores con el prefijo demo que se han restaurado.
Storage Account Name: demostorageaccount
Name PublicAccess LastModified IsDeleted VersionId
---- ------------ ------------ --------- ---------
loop-container3
loop-container4