Compartir a través de


Windows Azure Drive

Windows Azure Drive permite a las aplicaciones desplegadas en Windows Azure montar unidades de disco NTFS, facilitando enormemente la migración de aplicaciones a Azure que tengan dependencias de una unidad de disco.

Las aplicaciones que se ejecutan en la nube puede hacer uso de las API existentes NTFS para acceder a un almacenamiento persistente. Es importante recordar que un rol de Windows Azure dispone de un sistema de almacenamiento, pero que éste no es persistente ni es posible que sea compartido entre diferentes roles.

Con Windows Azure Drives es posible disponer de un sistema persistente y que puede ser compartido, accesible a través de las APIs de NTFS, es decir, como si se accediera a una unidad de disco.

Esta "unidad de red" realmente es un Page Blob de Windows Azure Storage  que contiene un fichero en formato VHD.

Esta característica puede ayudar en la migración de aplicaciones a la nube, permitiendo a los clientes una experiencia de migración más uniforme y al mismo tiempo reducir la cantidad de tiempo que se necesita para mover sus aplicaciones desde el propio entorno de Windows a un entorno Windows Azure.

El SDK de Windows Azure Drive ofrece diversos métodos para realizar tareas como crear una unidad, montarla, copiarla e incluso hacer un snapshot.

A continuación se mostrará un ejemplo muy sencillo de cómo hacer uso del API de Windows Azure Drive.

El primer paso es obtener una cuenta de acceso al sistema de almacenamiento de Windows Azure. En el entorno de desarrollo puede emplearse el Development Storage. Una vez creada la cuenta será necesario inicializar una caché en la instancia dónde resida el rol.

CloudStorageAccount storageAccount = CloudStorageAccount.
DevelopmentStorageAccount;
LocalResource localCache = RoleEnvironment.GetLocalResource
("InstanceDriveCache");
CloudDrive.InitializeCache(localCache.RootPath,localCache.
MaximumSizeInMegabytes);

Una vez se dispone la cuenta es necesario obtener un objeto CloudBlobClient que permite tener acceso al contenedor del Page Block dónde se almacenará el fichero VHD.

Es importante tener en cuenta, que aunque una unidad de Drives se almacene como un Page Blob en Windows Azure Storage, en el Development Storage no funciona de la misma manera. Cuando se emplea el Development Storage una unidad de Drive se simula empleando una unidad de disco.

CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference("vhd");
var vhdBlob = container.GetBlobReference("MyDrive.vhd");

Para crear la unidad será necesario llamar al método CreateCloudDrive, indicándole la URI del blob que se utilizará como unidad.

CloudDrive myCloudDrive = storageAccount.CreateCloudDrive 
(blobClient .GetContainerReference("vhd").GetPageBlobReference
("MyDrive.vhd") .Uri.ToString() );

Y llamar al método Create, que creará la unidad con un tamaño de 64 Mb.

try
{
myCloudDrive.Create(64);
}
catch (CloudDriveException ex)
{
// handle exception here
// exception is also thrown if all is well but
//the drive already exists
}

Una vez creada la unidad será necesario "montarla", para disponer de una unidad, por ejemplo "X:\", a través de la cuál se puede acceder al contenido del fichero VHD.

string driveLetter = string.Empty;
try {
driveLetter = myCloudDrive.Mount(localCache.
MaximumSizeInMegabytes, DriveMountOptions.None);
}
catch (Exception)
{ }

Una vez montada la unidad, se puede acceder a la unidad empleando los sistemas habituales de acceso a disco. Si se escribe algo dentro de la unidad se está escribiendo dentro del fichero VHD, siendo este almacenamiento persistente entre varias ejecuciones de la aplicación.

 string[] files = System.IO.Directory.GetFiles(driveLetter, "*.*"); 

Y una vez se ha terminado el proceso, puede "desmontarse" la unidad.

 myCloudDrive.Unmount(); 

Aunque en el ejemplo que se acaba de mostrar se crea el fichero VHD durante la ejecución de la aplicación, un escenario más real sería partir de un fichero VHD previamente creado y con el contenido que necesite la aplicación.

En este caso la aplicación sólo debería montar la unidad y hacer uso de ella.