Cuál es la mejor manera de hacer una copia de seguridad del contenido de Azure Blob Storage


Sé que las entidades de almacenamiento de Azure (blobs, tablas y colas) tienen una resiliencia incorporada, lo que significa que se replican en 3 servidores diferentes en el mismo centro de datos. Además de eso, también se pueden replicar en un centro de datos diferente que se encuentra físicamente en una región geográfica diferente. La posibilidad de perder sus datos en este caso es cercana a cero para todos los propósitos prácticos.

Sin embargo, ¿qué sucede si un desarrollador descuidado (o el que está bajo el influencia del alcohol:)) elimina accidentalmente la cuenta de almacenamiento a través del Portal de Azure o la herramienta Azure Storage Explorer? Peor aún, ¿qué pasa si un hacker se apodera de su cuenta y borra el almacenamiento? ¿Hay alguna manera de recuperar los gigabytes de blobs eliminados o es eso? De alguna manera creo que tiene que haber una solución elegante que la infraestructura de Azure proporciona aquí, pero no puedo encontrar ninguna documentación.

La única solución que se me ocurre es escribir mi propio proceso (rol de trabajador) que periódicamente realiza copias de seguridad de todo mi almacenamiento en una suscripción/cuenta diferente, lo que duplica esencialmente el costo de almacenamiento y transacciones. ¿Alguna idea?

Saludos,

Archil

Author: Archil Kublashvili, 2012-07-19

3 answers

Dependiendo de dónde desea hacer una copia de seguridad de sus datos, hay dos opciones disponibles:

  1. Copia de seguridad de datos localmente : si desea realizar una copia de seguridad de sus datos localmente en su infraestructura, podría: a. Escriba su propia aplicación utilizando la Biblioteca Cliente de almacenamiento o consumiendo la API REST o b. Use herramientas de terceros como Cmdlets de administración de Azure Cerebrata (Divulgación: Trabajo para Cerebrata).

  2. Copia de seguridad de datos en la nube: Recientemente, Windows Azure Storage el equipo anunció la funcionalidad de Blob de copia asíncrona que esencialmente le permitirá copiar datos de una cuenta de almacenamiento a otra cuenta de almacenamiento sin descargar los datos localmente. El problema aquí es que su cuenta de almacenamiento objetivo debe crearse después del 7 de junio de 2012. Puede leer más sobre esta funcionalidad en Windows Azure Blog: http://blogs.msdn.com/b/windowsazurestorage/archive/2012/06/12/introducing-asynchronous-cross-account-copy-blob.aspx.

Espero que esto ayude.

 21
Author: Gaurav Mantri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-19 15:58:13

La respuesta aceptada está bien, pero me tomó unas horas descifrar todo.

He reunido la solución que uso ahora en producción. Expongo el método Backup() a través de Web Api que luego es llamado por un Azure WebJob todos los días (a medianoche).

Tenga en cuenta que he tomado el código fuente original y lo he modificado:

  • no estaba actualizado, así que cambié algunos nombres de métodos
  • se agregó la operación de copia de reintento safeguard (falla después de 4 intentos para la misma blob)
  • añadió un poco de registro, debe intercambiarlo con su propio.
  • hace la copia de seguridad entre dos cuentas de almacenamiento (replicando contenedores y blobs)
  • se agregó purga - se deshace de los contenedores antiguos que no son necesarios (mantiene 16 días de datos). siempre puede desactivar esto, ya que el espacio es barato.

La fuente se puede encontrar en: https://github.com/ChrisEelmaa/StackOverflow/blob/master/AzureStorageAccountBackup.cs

Y así es como lo uso en el controlador (tenga en cuenta que su controlador solo debe ser llamable por azure webjob - puede verificar las credenciales en los encabezados):

[Route("backup")]
[HttpPost]
public async Task<IHttpActionResult> Backup()
{
    try
    {
        await _blobService.Backup();
        return Ok();
    }
    catch (Exception e)
    {
        _loggerService.Error("Failed to backup blobs " + e);
        return InternalServerError(new Exception("Failed to back up blobs!"));
    }
}

Nota: Quería agregar este código como parte de la publicación, pero perdí 6 minutos tratando de obtener ese código en esta publicación, pero fallé. el formato no funcionó en absoluto, y se rompió por completo.

 4
Author: Erti-Chris Eelmaa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-21 07:19:00

Puede hacer una instantánea de un contenedor de blog y luego descargar la instantánea para una copia de seguridad de punto en el tiempo.

Https://docs.microsoft.com/en-us/azure/storage/storage-blob-snapshots

Una instantánea es una versión de solo lectura de un blob que se toma en un punto tiempo. Las instantáneas son útiles para hacer copias de seguridad de blobs. Después de crear un instantánea, puede leerla, copiarla o eliminarla, pero no puede modificarla.+ Una instantánea de un blob es idéntica a su blob base, excepto que el el URI de blob tiene un valor DateTime agregado al URI de blob para indicar hora en la que se tomó la instantánea. Por ejemplo, si un URI de blob de página is http://storagesample.core.blob.windows.net/mydrives/myvhd , el URI instantánea es similar a http://storagesample.core.blob.windows.net/mydrives/myvhd?snapshot=2011-03-09T01:42:34.9360000Z.

 0
Author: TWilly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-15 13:41:14