Azure blob storage soft delete is a currently a feature in preview. This feature, as the name suggests, allows Azure to soft delete your blobs when you delete your blobs.
Soft delete also extends to overwriting blobs. When soft delete is turned on, any existing blob that is overwritten, a snapshot of the blob before the it being overwritten is created automatically, the more you update the blob, more snapshots are created.
The feature is available for existing storage accounts as well as newly ones that are being created. The feature needs to be explicitly turned on new or existing storage account to reap its benefits.
The feature can be turned on by navigating to the "Blob Service" --> "Soft delete" section of your storage account. The maximum retention policy of these deleted blobs is currently limited to 1 year, the minimum being 1 day. You can configure any value between that. The setting can only be set at the storage account level and is applicable to all the containers within it.
You can also turn this on using the .Net Azure Storage client. The example below, sets the number of retention days to 2.
You can also turn this on using the .Net Azure Storage client. The example below, sets the number of retention days to 2.
CloudBlobClient client = GetStorageClient();
ServiceProperties prop =
new ServiceProperties(deleteRetentionPolicy:
new DeleteRetentionPolicy { Enabled = true, RetentionDays = 2 });
await client.SetServicePropertiesAsync(prop);
When a blob is deleted, the blob is marked as "soft deleted" and is not visible, unless you explicitly list soft deleted blobs .
foreach (var blob in container
.ListBlobs(blobListingDetails : BlobListingDetails.All))
{
Console.WriteLine(blob.Uri);
}
Soft delete also extends to overwriting blobs. When soft delete is turned on, any existing blob that is overwritten, a snapshot of the blob before the it being overwritten is created automatically, the more you update the blob, more snapshots are created.
The storage client, also exposes a new API "Undelete()" on the blob that would bring back the blob and all its snapshots alive.
await container
.GetBlockBlobReference("blob2")
.UndeleteAsync();
As of the time of writing the billing aspect of this feature is based on how snapshots are currently billed.
Comments
Post a Comment