Bundle: Periodic Backup

RavenDB comes with support of doing periodic backup of documents and attachments to Amazon AWS services.
When creating a database in the studio you will see that you can't change the selection of the 'Periodic Backup Bundle' it's selection depends on the license.
In order to periodic backup to work you must activate PeriodicBackup bundle, by activating this bundle globally and turning it on/off per database, or activating it per database only.

How it works

Periodic backup are leveraging the concept of incremental backups available in RavenDB and to take advantage of that, we are storing an information about last successful ETag of the documents and attachments that were send to backup destination.

Configuration

Activating bundle

To activate bundle globally just add PeriodicBackup to the Raven/ActiveBundles. More about setting up configuration can be found here.

If you wish to setup periodic backup per database, then add PeriodicBackup to the list of database active bundles or use the Studio.

Bundle can also be activated during database creation process.

store.DatabaseCommands.CreateDatabase(new DatabaseDocument
    {
        Id = "BackupedDB",
        Settings =
            {
                {"Raven/ActiveBundles", "PeriodicBackup"}
            }
    });

Configuring backup destination

Two steps need to be taken to setup backup destination properly.

First we need to add our AWS access and secret key to database settings. For example if we want to create new database with bundle already activated and keys setup, then we can execute following code:

store.DatabaseCommands.CreateDatabase(new DatabaseDocument
{
    Id = "BackupedDB",
    Settings =
            {
                {"Raven/ActiveBundles", "PeriodicBackup"},
                {"Raven/AWSAccessKey", "<key_here>"}
            },
    SecuredSettings =
                {
                    {"Raven/AWSSecretKey", "<key_here>"}
                }
});

In next step we need to create a backup setup document under Raven/Backup/Periodic/Setup where we will store our backup destination configuration. This document will be created automatically when you will use Studio to setup periodic backup, but it can be created almost as easily using the API.

store.DatabaseCommands.Put("Raven/Backup/Periodic/Setup",
                           null,
                           RavenJObject.FromObject(new PeriodicBackupSetup
                               {
                                   AwsRegionEndpoint = "eu-west-1", // if not specified default is 'us-east-1'
                                   GlacierVaultName = "your_glacier_vault_name",
                                   IntervalMilliseconds = 60 * 60 * 1000, // 60 minutes
                                   S3BucketName = "your_s3_bucket_name",
                               }),
                           new RavenJObject());

GlacierVaultName and S3BucketName values exclude each other in favor of the GlacierVaultName so if you will specify both, then RavenDB will only use GlacierVaultName.

Note

More information about Amazon Simple Storage Service (Amazon S3) can be found here and if you are interested in Amazon Glacier then visit this page.