Snapshots de máquinas virtuales

Trabajando con virtualización una de las funcionalidades habituales que tenemos es la posibilidad de generar snapshots de nuestras máquinas virtuales, los cuáles nos permiten volver cuando queremos a tener la máquina en el estado en el que estaba cuando lo creamos.

Trabajando con Windows Azure no tenemos de forma directa esta funcionalidad, pero sí tenemos la posibilidad de generar snapshots de los ficheros VHDs sobre el que se monta la máquinas virtual, por lo que al menos tenemos una posible alternativa.

La primera opción que podemos usar es utilizar una herramienta que disponga ya de esta funcionalidad, como Cloud Storage Studio. Esta herramienta nos permite conectarnos a un storage de Windows Azure y ver los VHDs sobre los que montan las máquinas virtuales. Cerebrata también dispone de Cmdlets de powershell que ofrecen la misma funcionalidad.

Una vez seleccionado el blob podemos generar snaphots, ver los snapshots existentes, promocionar uno etc…

snapshopt1

snapshopt2

Otra opción, si no tenemos una herramienta que nos ofrezca la funcionalidad, es usar nosotros directamente el API de Windows Azure para hacernos nuestra propia aplicación que haga los snapshots.

A modo de ejemplo, aquí os dejo un código que se conecta a un almacenamiento de Windows Azure, genera un snapshot y luego lo restaura.

 

private CloudBlobClient blobClient;
private const string storageName = "<storagename>";
private const string privateKey = "<privatekey>";

[TestMethod]
public void TestBlobSnapshot()
{
    string connectionString = String.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", storageName,privateKey);
    CloudStorageAccount account = CloudStorageAccount.Parse(connectionString);
    blobClient = account.CreateCloudBlobClient();

    CloudBlobContainer testcontainer = new CloudBlobContainer("vhds",blobClient);

    // Upload a blob to the storage service, populate under the current container
    var blobRef = testcontainer.GetBlobReference("sourcetobackup.vhd");

    // Create a snapshot for the blob
    CloudBlob snapshotRef1 = blobRef.CreateSnapshot();

    // restore from snapshop
    var blobTargetRef = testcontainer.GetBlobReference("newserver.vhd");
    blobTargetRef.DeleteIfExists(new BlobRequestOptions()
    {
        // need to specify this option in order to delete blob with snapshots
        DeleteSnapshotsOption = DeleteSnapshotsOption.IncludeSnapshots
    });

    blobTargetRef.CopyFromBlob(snapshotRef1);

}

Ibon Landa

bon Landa lleva más de 15 años dedicado al desarrollo de software. Durante este tiempo ha trabajado en diferentes empresas en las cuáles ha podido trabajar en diferentes entornos y tecnologías. Actualmente está focalizado principalmente en tareas de desarrollo, arquitectura, en las herramientas del ciclo de vida y en todo lo relacionado con la plataforma de Cloud Computing Microsoft Azure, área en el que ha sido reconocido como MVP. Participa de forma activa en la comunidad, escribiendo su blog, manteniendo un portal sobre Microsoft Azure y colaborando con Microsoft y grupos de usuarios en eventos de formación, talleres y giras de producto.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *