Cómo utilizar el almacenamiento de blobs a través del almacenamiento de archivos de Azure

Puede que en algún momento necesites una solución económica pero eficiente para almacenar tus archivos, pero ¿dónde encontrar esa solución? ¡Consulta el almacenamiento de Objeto Binario Grande (blob) de Microsoft Azure! El almacenamiento de blobs es uno de los servicios de almacenamiento de Azure y te permite almacenar grandes cantidades de archivos de datos de texto y binarios, contenido en streaming o incluso contenido estático para su distribución.

En este tutorial, aprenderás a trabajar con el almacenamiento de blobs en Azure a través de algunos ejemplos comunes.

Sigue leyendo para sumergirte en ello.

Prerrequisitos

Este tutorial será una demostración práctica. Si quieres seguirlo, asegúrate de tener lo siguiente instalado y disponible.

Construcción de un entorno Azure

Antes de utilizar el almacenamiento de blobs para almacenar tus archivos, primero deberás importar los módulos de PowerShell Core, conectarte con tu suscripción de Azure y construir un entorno Azure.

1. Inicia PowerShell 7 y ejecuta el siguiente comando para importar los módulos que usarás para almacenar archivos en el almacenamiento de blobs.

Importing the necessary modules
# Az.Accounts - Proporciona cmdlets para la gestión de credenciales
# Az.Resources - Proporciona cmdlets para trabajar con los proveedores de recursos de Azure de nivel superior, 
               # como las suscripciones
# Az.Storage - Proporciona los cmdlets que te ayudarán a trabajar con 
             # diferentes recursos de almacenamiento, como blobs
Import-Module Az.Accounts, Az.Resources, Az.Storage

2. A continuación, inicia sesión en tu inquilino de Azure Active Directory (AD), luego ejecuta el siguiente comando para completar una autenticación interactiva en tu navegador web, como se muestra a continuación.

Aunque más allá del alcance de este tutorial, existen otros métodos de autenticación, como un Service Principal o el uso de un token de acceso.

Connect-AzAccount
Azure Portal interactive login.

Asegúrate siempre de que el inquilino y la suscripción mostrados después de iniciar sesión sean los que pretendes usar. Si es necesario, puedes cambiar tu contexto.

3. Ahora ejecuta el siguiente comando para crear un nuevo grupo de recursos llamado demo, y añádele cinco números aleatorios (Get-Random -Maximum 99999). Los grupos de recursos están jerárquicamente por debajo de las suscripciones y contienen recursos que permiten una gestión más granular.

Observa que la -Ubicación del grupo de recursos se establece en Central US para este ejemplo. Cuando el comando se complete, almacenará el resultado en la variable $resourceGroup.

$resourceGroup = New-AzResourceGroup "demo$(Get-Random -Maximum 99999)" -Location 'Central US'
Creating a new resource group

4. Ejecute el comando a continuación para realizar las siguientes tareas y crear una nueva cuenta de almacenamiento de Azure. Para este ejemplo, la cuenta de almacenamiento se llama almacenamiento y se le agregan cinco números aleatorios (Get-Random -Maximum 99999). La variable $storageAccount contendrá el objeto devuelto después de que el comando se complete.

# Pase el -ResourceGroupName con la propiedad ResourceGroupName 
# de la variable $resourceGroup que creó en el paso tres.
# Agregue números aleatorios a la cuenta de almacenamiento -Name 
# similar al grupo de recursos.
# Establezca el mismo -Location que la propiedad Location de la variable $resourceGroup.
# Colocar recursos en la misma región que el grupo de recursos principal es una buena práctica. 
# Especifique el nombre de la cuenta de almacenamiento -SkuName con
# almacenamiento redundante local (LRS) o un nombre global único dentro de Azure.

$storageAccount = New-AzStorageAccount `
 -ResourceGroupName $resourceGroup.ResourceGroupName `
 -Name storage$(Get-Random -Maximum 99999) `
 -Location $resourceGroup.Location `
 -SkuName Standard_LRS
Creating a new storage account

5. Ejecute el siguiente comando para ejecutar un par de tareas para la asignación de Rol de Azure AD:

  • El valor de -SignInName utiliza la cuenta con la que has iniciado sesión actualmente a través de la propiedad UserID devuelta por el cmdlet Get-AzAccessToken.
  • El valor de -RoleDefinitionName es el rol integrado Storage Blob Data Contributor que estás asignando.
  • El valor de -Scope establece el ámbito de la asignación de roles para la cuenta de almacenamiento que creaste (se muestra como storage10029) a través de la propiedad Id de la variable $storageAccount.

Si es necesario, siempre puedes proporcionar asignaciones de roles más detalladas a contenedores individuales.

New-AzRoleAssignment `
 -SignInName (Get-AzAccessToken).UserId`
 -RoleDefinitionName "Storage Blob Data Contributor"`
 -Scope $storageAccount.Id
Creating and verifying a new file

6. Por último, ejecuta la serie de comandos a continuación para crear un archivo llamado temp.dat en tu sistema local. Subirás y descargarás este archivo desde la cuenta de almacenamiento en las siguientes secciones para demostrar cómo funciona el almacenamiento de blobs.

# Cargar la Clase .NET FileStream
$file = New-Object System.IO.FileStream .\temp.dat,Create,ReadWrite
# Establecer el tamaño del archivo
$file.SetLength(10MB)
# Cerrar el identificador
$file.Close()
# Buscar el archivo para confirmar el tamaño
(Get-ChildItem $file.Name).Length
Creating and verifying a new file

Subida de archivos mediante PowerShell

Ahora que has construido un entorno de Azure y creado un archivo de ejemplo, comencemos a cargar el archivo en el almacenamiento de blobs. El almacenamiento de blobs funciona de manera diferente a los sistemas de archivos estándar. Cada archivo en el almacenamiento de blobs es un objeto y se mantiene dentro de contenedores.

La funcionalidad principal de los blobs es similar a otros sistemas de archivos, pero hay casos de uso donde uno u otro podría ser una solución mejor. Incluso los blobs pueden respaldar sistemas de archivos virtuales (por ejemplo, BlobFuse).

Microsoft ofrece varios métodos para cargar archivos en tus cuentas de almacenamiento mediante PowerShell, AzCopy y Azure Portal. Pero vamos a cargar el archivo de ejemplo (temp.dat) en el almacenamiento de blobs a través de PowerShell para empezar. PowerShell te proporciona una experiencia consistente para trabajar con tus cuentas de almacenamiento de Azure.

Las acciones requeridas para realizar esta demostración generarán costos. Monitorea tu consumo y elimina recursos cuando ya no los necesites.

Ejecuta los comandos a continuación para crear un nuevo contenedor y cargar el archivo temp.dat ($file) como un objeto. El contenedor se llama demo en este ejemplo, pero puedes darle un nombre diferente si lo prefieres.

# Crea un contenedor dentro de $storageAccount a través de la propiedad Context del almacenamiento
# El objeto devuelto se pasa luego a la variable $container
$container = New-AzStorageContainer -Name demo -Context $storageAccount.Context
# Sube el archivo temp.dat ($file) al contenedor de demostración ($container)
# El nombre del blob (-Blob) utilizará el mismo nombre del archivo que estás subiendo (Get-ChildItem $file.Name)
Set-AzStorageBlobContent -File $file.Name -Container $container.Name -Blob (Get-ChildItem $file.Name).Name -Context $storageAccount.Context
Uploading a file to Azure Storage Account

Cargar Archivos a través de AzCopy

Tal vez tengas casos de uso más complejos, como sincronizar contenido o copiar contenido entre cuentas diferentes a escala. Si es así, la herramienta de línea de comandos AzCopy es lo que necesitas.

Ejecuta los comandos a continuación para iniciar sesión en tu inquilino de Azure y copiar tu archivo local ($file) en el punto final de URL de tu contenedor. Inicias sesión en el inquilino de Azure ya que AzCopy no está al tanto de las credenciales que estás utilizando con PowerShell.

# Iniciar sesión en el inquilino de Azure
& .\azcopy.exe login
# Copiar el archivo local $file a la URI completa del destino $container
& .\azcopy.exe copy $file.Name $container.CloudBlobContainer.Uri.AbsoluteUri
Uploading to Azure Storage Account using AzCopy

En lugar de cargar, quizás desees descargar archivos a través de AzCopy. Si es así, ejecuta el siguiente comando para copiar los archivos especificados (temp.dat) desde tu contenedor al directorio local actual: & .\azopy.exe copy "$($container.CloudBlobContainer.Uri.AbsoluteUri)/temp.dat" .\temp.dat

Cargar archivos a través del Portal de Azure

Si prefieres un método de interfaz gráfica para cargar tus archivos, entonces Azure Storage Explorer es tu amigo. Azure Storage Explorer es uno de los mejores métodos gráficos para gestionar tu almacenamiento de blobs. Puedes acceder al explorador de almacenamiento desde tu cuenta de almacenamiento en el Portal de Azure.

1. Abre tu navegador web favorito y dirígete a tu Explorador de Almacenamiento en el Portal de Azure.

2. Haz clic en el contenedor demo bajo CONTENEDORES DE BLOB, como se muestra a continuación, luego haz clic en Cargar para acceder a la cuchilla Cargar blob (panel derecho).

3. Ahora haz clic en el icono de la carpeta en el panel Cargar blob para seleccionar qué archivos cargar (temp.dat).

4. Finalmente, haz clic en Subir (botón azul) para cargar tu archivo.

Using the Upload blob blade in Azure Storage Explorer

Una vez que la carga se complete, puedes cerrar la pestaña Cargar blob y ver tu blob cargado, como se muestra en la imagen a continuación.

Viewing contents of a blob container in Azure Storage Explorer

Descargar archivos a través del Portal de Azure

Similar a la carga de contenido en el almacenamiento de blobs, Azure admite la descarga de contenido de muchas maneras. Pero como acabas de cargar un archivo (temp.dat) a través del Portal de Azure, descarguemos el mismo archivo usando Azure Storage Explorer en el Portal de Azure.

Selecciona el archivo (temp.dat) para descargar y haz clic en el botón Descargar en Azure Storage Explorer, como se muestra a continuación. Al hacerlo, se abrirá un nuevo cuadro de diálogo para confirmar la descarga que verás en el siguiente paso.

Selecting Files to Download

Ahora haz clic en el botón Haz clic aquí para comenzar la descarga para descargar los archivos seleccionados.

Downloading Selected Files from the Blob Storage

Descargar archivos a través de PowerShell

Al igual que al cargar archivos, también tienes la opción de descargar archivos del almacenamiento de blobs ejecutando comandos en PowerShell. Con PowerShell, puedes listar los objetos dentro de un contenedor y luego descargarlos.

Ejecuta los siguientes comandos para listar todos los objetos en tu contenedor y descargar temp.dat en tu directorio local.

# Lista todos los objetos dentro del $contenedor para verificar que se haya creado el contenedor vacío
Get-AzStorageBlob -Container $container.Name -Context $storageAccount.Context
# Descarga el objeto temp.dat del $contenedor
Get-AzStorageBlobContent -Blob temp.dat -Container $container.Name -Context $storageAccount.Context
Downloading files from Azure Storage Account

Si prefieres utilizar enlaces únicos de corta duración para descargar archivos, puedes usar tokens de firma de acceso compartido (SAS) para crear un enlace de descarga preautorizado. Estos tokens son únicos y privados, y los puedes usar para verificar tu acceso.

Ejecuta los comandos a continuación para crear un nuevo enlace de descarga para el archivo (temp.dat) que deseas descargar. El enlace de descarga generado expira después de 10 segundos y descargará (Invoke-WebRequest $uri) el contenido utilizando ese enlace en la variable $temp.

# Genera un nuevo enlace de descarga válido por 10 minutos
$uri = New-AzStorageBlobSASToken -Context $storageAccount.Context -Container $container.Name -Blob temp.dat -Permission r -ExpiryTime (Get-Date).AddSeconds(10) -FullUri
# Utiliza el enlace para descargar el archivo en la variable $temp
$temp = Invoke-WebRequest $uri

# Alternativamente, escribe el archivo en el directorio actual
Invoke-WebRequest $uri -OutFile .\temp.dat
Download from Azure Storage Account using a SAS token

Alojar una página web en Internet público desde el almacenamiento de blobs

Hasta este punto, has visto casos de uso de descarga de archivos por parte de usuarios autenticados. ¿Pero sabías que el almacenamiento de blobs también puede proporcionar una excelente opción para contenido público? Un ejemplo es usar un blob para alojar el contenido de tu página web, lo cual lograrás en esta demostración.

Incluso si el contenido de tu página web está encriptado tanto en tránsito como en reposo, cualquiera puede acceder a ese contenido si se establece el acceso público.

Dado que estás configurando un caso de uso diferente, aprovecharás uno de los principales beneficios de la nube pública en escala y elasticidad. Puedes aprovisionar una nueva cuenta de almacenamiento para un caso de uso específico y limitar el riesgo de utilizar contenedores públicos.

1. Ejecuta el siguiente comando para crear una nueva cuenta de almacenamiento, como lo hiciste en el paso cuatro de la sección “Creación de un entorno Azure”. Pero esta vez, pasarás el objeto devuelto a la variable $publicStorageAccount.

$publicStorageAccount = New-AzStorageAccount -ResourceGroupName $resourceGroup.ResourceGroupName -Name storage$(Get-Random -Maximum 99999) -Location $resourceGroup.Location -SkuName Standard_LRS
Creating a storage account

Ahora tienes una cuenta de almacenamiento dedicada para tu contenido público y puedes configurarla para alojar contenido web estático con el siguiente comando.

2. A continuación, ejecuta el cmdlet Enable-AzStorageStaticWebsite para configurar la cuenta de almacenamiento ($publicStorageAccount) para tu nuevo caso de uso. El -IndexDocument establece la página web predeterminada que deseas presentar a los usuarios. El -Context será la nueva cuenta de almacenamiento que acabas de crear.

# Crea el contenedor $web y configura la cuenta de almacenamiento
Enable-AzStorageStaticWebsite -IndexDocument index.html -Context $publicStorageAccount.Context
Enable storage account for website hosting

3. Ejecuta los siguientes comandos para crear un nuevo documento HTML en tu directorio actual y carga ese documento en el contenedor específico para alojar contenido web. El tipo de contenido se establece en HTML (ContentType="text/html"), para que los navegadores web puedan interpretar correctamente el documento.

Acceder al documento en un navegador web imprime el mensaje Hello from <nombre de la cuenta de almacenamiento>.

# Crear un archivo HTML simple
"<body><h1>Hello from $($publicStorageAccount.StorageAccountName)!</h1></body>"|Out-File .\index.html
# Subir el archivo HTML al contenedor de alojamiento web estático y establecer el ContentType como text/html
Set-AzStorageBlobContent -File .\index.html -Container "`$web" -Properties @{ContentType="text/html"} -Context $publicStorageAccount.Context
Create and upload an HTML document

4. Ahora ejecuta el siguiente comando para obtener la URL donde los usuarios pueden acceder a tu contenido.

$publicStorageAccount.PrimaryEndpoints.Web
Get the URI of the endpoint

5. Finalmente, abre la URL en tu navegador. Verás algo similar a la siguiente captura de pantalla.

Accessing HTML Document from Blob Storage

Limpieza de Recursos

Ahora que has probado estos nuevos conceptos en el uso de almacenamiento de blobs, querrás limpiar tus recursos. ¿Por qué? Hacerlo te ayuda a mantener limpia tu suscripción. Más importante aún, dejarás de incurrir en cargos adicionales.

Dado que todos los recursos que utilizaste en este tutorial están en un solo grupo de recursos, puedes limpiar todos los recursos eliminando el grupo de recursos.

Los recursos no siempre estarán contenidos en un solo grupo de recursos, lo que ilustra por qué el uso liberal de la segmentación lógica puede ser beneficioso, especialmente al probar o iterar con frecuencia.

Ejecuta el cmdlet Remove-AzResourceGroup a continuación, especificando la propiedad ResourceGroupName de la variable $resourceGroup para eliminar el grupo de recursos y todos los recursos dentro.

Remove-AzResourceGroup -Name $resourceGroup.ResourceGroupName
Delete resource group and contents

Conclusión

En este tutorial, has explorado cómo subir y descargar archivos hacia y desde blobs en almacenamiento en la nube en diferentes plataformas. También has aprendido que es posible alojar una página web desde el almacenamiento de blobs a la que los usuarios pueden acceder públicamente.

Puede hacer mucho más con el almacenamiento de blobs y otros tipos de almacenamiento, ¿cómo construiría sobre estos conceptos? Tal vez trabajar con cuentas de almacenamiento de archivos, proporcionar sistemas de archivos sin servidor o usar blobs de página para discos duros virtuales con máquinas virtuales de Azure.

Source:
https://adamtheautomator.com/blob-storage/