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…
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); }