Microsoft Azure Files: recursos compartidos para VMs (IaaS & PaaS)

Dentro del apartado de Preview feaures, podemos activar este nuevo servicio:

Azure Files

En el momento que solicité acceso a la preview, tan sólo tardé unos minutos en recibir la activación vía email. A partir de este momento, tendremos una nueva URL para el servicio Azure Files, la cual podremos consultar en el DASHBOARD del Storage:

Azure Files enabled Dashboard

Antes de empezar a utilizar Azure Storage como recurso compartido, es necesario crear un directorio para que sea posible el mapeo. Podemos hacerlo a través de .NET o de PowerShell.

.NET

Haciendo uso del paquete WindowsAzure.Storage de Nuget, podemos crear los espacios compartidos a través del siguiente código:

using Microsoft.WindowsAzure.Storage;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace AzureFiles
{
    class Program
    {
        const string connectionString = "DefaultEndpointsProtocol=https;AccountName=[YOUR_ACCOUNT_NAME];AccountKey=[YOUR_ACCOUNT_KEY]";
        const string shareFolder = "azurefilesfolder";
        static void Main(string[] args)
        {
            var account = CloudStorageAccount.Parse(connectionString);
            var client = account.CreateCloudFileClient();
            var share = client.GetShareReference(shareFolder);
            share.CreateIfNotExists();
            Console.WriteLine("{0} folder created", shareFolder);
            var folders = client.ListShares();
            foreach (var folder in folders)
            {
                Console.WriteLine("folder: {0}", folder.Name);
            }
            Console.ReadLine();
        }
    }
}

Powershell

Para realizar esta tarea desde PowerShell es necesario importar el módulo que podemos descargar desde el siguiente enlace.

Import-Module .AzureStorageFile.psd1
$context = New-AzureStorageContext YOUR_ACCOUNT YOUR_KEY
New-AzureStorageShare azurefilesfolder -Context $context

Usando el recurso compartido

Cuando queremos acceder desde PaaS, podemos recuperar los recursos compartidos a través de GetShareReference, como veíamos en el código anterior, y trabajar de forma muy similar a como lo haríamos con los blobs.

            foreach (var folder in folders)
            {
                Console.WriteLine("folder: {0}", folder.Name);
                var dir = folder.GetRootDirectoryReference();
                foreach (var item in dir.ListFilesAndDirectories())
                {
                    var file = dir.GetFileReference(item.Uri.AbsolutePath);
                    Console.WriteLine("File {0}", file.Name);
                }
            }

En el caso de IaaS es necesario montar la unidad en una o varias máquinas virtuales. La forma más sencilla de hacerlo es través del comando net use:

net use h: \\YOUR_ACCOUNT.file.core.windows.net\azurefilesfolder /u:YOUR_ACCOUNT STORAGE_KEY

AzureFiles mounted

Si quisiéramos subir archivos, con el fin de compartirlos entre las máquinas que tengan el recurso compartido, podemos hacer uso de AzCopy de la misma forma que lo haríamos en este post con los blobs.

AzCopy C:\videos https://azurefilesdemogis.file.core.windows.net/azurefilesfolder /destKey:YOUR_KEY /S

A día de hoy no está soportado el traspaso de archivos desde los blobs del Storage a Azure Files.

Coping data from one file to another is not supported by the Azure File service

Para llevar a cabo esta acción, sería necesario descargarse los archivos y subirlos a la ubicación compartida (es posible que esta acción sea más rápida si hacemos la operación desde una máquina virtual ya en Azure).

AzCopy https://html5stuff.file.core.windows.net/videos/  C:\videos /sourceKey:YOUR_KEY /S
AzCopy C:\videos https://azurefilesdemogis.file.core.windows.net/azurefilesfolder  /destKey:YOUR_KEY /S

Espero que sea de utilidad.

¡Saludos!