web-dev-qa-db-fra.com

Quelle est la meilleure façon de sauvegarder le contenu de stockage Azure Blob Storage?

Je sais que les entités Azure Storage (blobs, tables et files d'attente) ont une résilience intégrée, ce qui signifie qu'elles sont répliquées sur 3 serveurs différents dans le même centre de données. En plus de cela, ils peuvent également être répliqués sur un autre centre de données situé physiquement dans une région géographique différente. La chance de perdre vos données dans ce cas est proche de zéro à toutes fins utiles.

Toutefois, que se passe-t-il si un développeur bâclé (ou celui sous l'influence de l'alcool :) supprime accidentellement le compte de stockage via le portail Azure ou l'outil Azure Storage Explorer? Pire encore, si un pirate informatique s'empare de votre compte et efface le stockage? Existe-t-il un moyen de récupérer les gigaoctets de blobs supprimés ou est-ce le cas? D'une manière ou d'une autre, je pense qu'il faut une solution élégante fournie par l'infrastructure Azure ici, mais je ne trouve aucune documentation.

La seule solution à laquelle je puisse penser est d'écrire mon propre processus (rôle de travail) qui sauvegarde périodiquement tout mon stockage sur un autre abonnement/compte, doublant ainsi essentiellement le coût du stockage et des transactions.

Cordialement,

Archil

37
Archil Kublashvili

Selon l'endroit où vous souhaitez sauvegarder vos données, deux options sont disponibles:

  1. Sauvegarde de données localement - Si vous souhaitez sauvegarder vos données localement dans votre infrastructure, vous pouvez: A. Écrivez votre propre application à l'aide de la bibliothèque client de stockage ou de l'utilisation de l'API REST ou B. Utilisez des outils tiers, tels que Tablettes de commande de gestion Cerebrata Azure (Divulgation: je travaille pour Cerebrata). 

  2. Sauvegarde des données dans le cloud - Récemment, l'équipe de stockage Windows Azure a annoncé une fonctionnalité de copie de blob asynchrone qui vous permettra essentiellement de copier des données d'un compte de stockage vers un autre compte de stockage sans télécharger les données localement. Le problème ici est que votre compte de stockage cible doit être créé après le 7 juin 2012. Pour en savoir plus sur cette fonctionnalité sur le blog Windows Azure: http://blogs.msdn.com/b/windowsazurestorage/archive/2012/06 /12/introducing-asynchronous-cross-crount-copy-blob.aspx .

J'espère que cela t'aides.

24
Gaurav Mantri

La réponse acceptée convient, mais il m'a fallu quelques heures pour tout déchiffrer.

J'ai mis en place une solution que j'utilise maintenant en production. J'expose les méthodes Backup() à Web Api qui sont ensuite appelées par un Azure WebJob tous les jours (à minuit).

Notez que j'ai pris le code source d'origine et que je l'ai modifié:

  • il n'a pas été mis à jour alors j'ai changé quelques noms de méthode
  • ajout d'une nouvelle sauvegarde de l'opération de copie (échec après 4 tentatives pour le même blob)
  • ajouté un peu de journalisation - vous devriez échanger avec le vôtre.
  • effectue la sauvegarde entre deux comptes de stockage (réplication des conteneurs et des blobs)
  • ajout de la purge - il supprime les vieux conteneurs inutiles (conserve 16 jours de données). vous pouvez toujours le désactiver, car l’espace est bon marché.

le source peut être trouvé à partir de: https://github.com/ChrisEelmaa/StackOverflow/blob/master/AzureStorageAccountBackup.cs

et voici comment je l'utilise dans le contrôleur (notez que votre contrôleur ne doit être appelé que par le webjob Azure - vous pouvez vérifier les informations d'identification dans les en-têtes):

[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!"));
    }
}

note: Je voulais ajouter ce code dans le post, mais j'ai perdu 6 minutes à essayer de l'inclure dans ce post, mais j'ai échoué. le formatage ne fonctionnait pas du tout et il était complètement cassé.

4
Erti-Chris Eelmaa

Sans faire référence à des solutions tierces, vous pouvez réaliser cela en utilisant les fonctionnalités intégrées d'Azure. Les étapes ci-dessous peuvent aider à sécuriser votre objet blob.

  1. Suppression logicielle pour les Blobs Azure Storage La meilleure chose à faire est de commencer par activer la suppression logicielle actuellement dans GA: https://Azure.Microsoft.com/en-us/blog/soft -delete-for-Azure-storage-blobs-ga

  2. Stockage géo-redondant à accès en lecture La deuxième approche consiste à activer la réplication géographique pour RA-RGA. Ainsi, si le premier centre de données est en panne, vous pouvez toujours lire à partir d'un réplica secondaire situé dans une autre région. Plus d'informations ici: https://docs.Microsoft.com/en-us/Azure/storage/common/storage-redundancy-grs

1
Anass Kartit

Vous pouvez créer un instantané d'un conteneur de blog, puis le télécharger pour une sauvegarde ponctuelle.

https://docs.Microsoft.com/en-us/Azure/storage/storage-blob-snapshots

Un instantané est une version en lecture seule d'un blob pris à un moment donné de temps. Les instantanés sont utiles pour sauvegarder des blobs. Après avoir créé un fichier instantané, vous pouvez le lire, le copier ou le supprimer, mais vous ne pouvez pas le modifier. + Un instantané d'un blob est identique à son blob de base, sauf que le L'URI blob a une valeur DateTime ajoutée à l'URI blob pour indiquer le heure à laquelle l'instantané a été pris. Par exemple, s'il s'agit d'un URI de blob de page est http://storagesample.core.blob.windows.net/mydrives/myvhd , le fichier URI de capture instantanée est similaire à http://storagesample.core.blob.windows.net/mydrives/myvhd?snapshot=2011-03-09T01:42:34.9360000Z .

0
TWilly