How to Create Snapshots of Droplets

Snapshots are on-demand disk images of DigitalOcean Droplets and volumes saved to your account. Use them to create new Droplets and volumes with the same contents.


You can create snapshots from an existing Droplet to save all of the current contents from the Droplet’s disk.

Depending on the services running on the Droplet, you may want to power off the Droplet before taking a snapshot to ensure all applications have written out their data to disk. For example, many databases don’t guarantee data consistency on disk unless the database service is stopped or the entire Droplet is powered off first.

Creating a snapshot while a Droplet is on may result in performance degradation and compromise data consistency.

You can power off a Droplet through the control panel or with the command line using poweroff or shutdown. We recommend using the command line because it makes sure all services are stopped before the Droplet is powered off:

sudo shutdown -h now

However, if you want to power off a Droplet through the control panel, click the Droplet’s name to go to its detail page. Click the ON switch in the upper-right corner, then click Turn off from the pop-up warning window.

Snapshot a Droplet using Automation

Once the Droplet is powered off, you can snapshot a Droplet using the following doctl command, or by sending a request to the Droplet actions endpoint and setting the type field to snapshot.

How to snapshot a Droplet using the DigitalOcean CLI

To snapshot a Droplet via the command-line, follow these steps:

  1. Install doctl, the DigitalOcean command-line tool.

  2. Create a personal access token, and save it for use with doctl.

  3. Use the token to grant doctl access to your DigitalOcean account.

                  doctl auth init
                
  4. Finally, snapshot a Droplet with doctl compute droplet-action snapshot. The basic usage looks like this, but you'll want to read the usage docs for more details:

                  doctl compute droplet-action snapshot <droplet-id> [flags]
                
How to snapshot a Droplet using the DigitalOcean API

To snapshot a Droplet using the DigitalOcean API, follow these steps:

  1. Create a personal access token, and save it for use with the API.

  2. Send a POST request to https://api.digitalocean.com/v2/droplets/{droplet_id}/actions

    cURL

              <p>To snapshot a Droplet with cURL, call:</p>
              
              <pre class="language-shell"><code>
                # Enable Backups
    

    curl -X POST
    -H "Content-Type: application/json"
    -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
    -d '{"type":"enable_backups"}'
    "https://api.digitalocean.com/v2/droplets/3164450/actions"

    Disable Backups

    curl -X POST
    -H "Content-Type: application/json"
    -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
    -d '{"type":"disable_backups"}'
    "https://api.digitalocean.com/v2/droplets/3164450/actions"

    Reboot a Droplet

    curl -X POST
    -H "Content-Type: application/json"
    -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
    -d '{"type":"reboot"}'
    "https://api.digitalocean.com/v2/droplets/3164450/actions"

    Power cycle a Droplet

    curl -X POST
    -H "Content-Type: application/json"
    -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
    -d '{"type":"power_cycle"}'
    "https://api.digitalocean.com/v2/droplets/3164450/actions"

    Shutdown and Droplet

    curl -X POST
    -H "Content-Type: application/json"
    -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
    -d '{"type":"shutdown"}'
    "https://api.digitalocean.com/v2/droplets/3067649/actions"

    Power off a Droplet

    curl -X POST
    -H "Content-Type: application/json"
    -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
    -d '{"type":"power_off"}'
    "https://api.digitalocean.com/v2/droplets/3164450/actions"

    Power on a Droplet

    curl -X POST
    -H "Content-Type: application/json"
    -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
    -d '{"type":"power_on"}'
    "https://api.digitalocean.com/v2/droplets/3164450/actions"

    Restore a Droplet

    curl -X POST
    -H "Content-Type: application/json"
    -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
    -d '{"type":"restore", "image": 12389723 }'
    "https://api.digitalocean.com/v2/droplets/3067649/actions"

    Password Reset a Droplet

    curl -X POST
    -H "Content-Type: application/json"
    -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
    -d '{"type":"password_reset"}'
    "https://api.digitalocean.com/v2/droplets/3164450/actions"

    Resize a Droplet

    curl -X POST
    -H "Content-Type: application/json"
    -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
    -d '{"type":"resize","size":"1gb"}'
    "https://api.digitalocean.com/v2/droplets/3164450/actions"

    Rebuild a Droplet

    curl -X POST
    -H "Content-Type: application/json"
    -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
    -d '{"type":"rebuild","image":"ubuntu-16-04-x64"}'
    "https://api.digitalocean.com/v2/droplets/3164450/actions"

    Rename a Droplet

    curl -X POST
    -H "Content-Type: application/json"
    -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
    -d '{"type":"rename","name":"nifty-new-name"}'
    "https://api.digitalocean.com/v2/droplets/3164450/actions"

    Change the Kernel

    curl -X POST
    -H "Content-Type: application/json"
    -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
    -d '{"type":"change_kernel","kernel":991}'
    "https://api.digitalocean.com/v2/droplets/3164450/actions"

    Enable IPv6

    curl -X POST
    -H "Content-Type: application/json"
    -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
    -d '{"type":"enable_ipv6"}'
    "https://api.digitalocean.com/v2/droplets/3164450/actions"

    Enable Private Networking

    curl -X POST
    -H "Content-Type: application/json"
    -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
    -d '{"type":"enable_private_networking"}'
    "https://api.digitalocean.com/v2/droplets/3164450/actions"

    Snapshot a Droplet

    curl -X POST
    -H "Content-Type: application/json"
    -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
    -d '{"type":"snapshot","name":"Nifty New Snapshot"}'
    "https://api.digitalocean.com/v2/droplets/3164450/actions"

    Acting on Tagged Droplets

    curl -X POST
    -H "Content-Type: application/json"
    -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
    -d '{"type":"enable_backups"}'
    "https://api.digitalocean.com/v2/droplets/actions?tag_name=awesome"

    Retrieve a Droplet Action

    curl -X GET
    -H "Content-Type: application/json"
    -H "Authorization: Bearer $DIGITALOCEAN_TOKEN"
    "https://api.digitalocean.com/v2/droplets/3164444/actions/36804807"

    Go

              <p>Go developers can use <a href="https://github.com/digitalocean/godo">Godo</a>,
                the official DigitalOcean V2 API client for Go. To snapshot a Droplet with Godo, use the
                following code:</p>
              
              <pre class="language-go"><code>
                import (
    &#34;context&#34;
    &#34;os&#34;
    
    &#34;github.com/digitalocean/godo&#34;
    

    )

    func main() { token := os.Getenv("DIGITALOCEAN_TOKEN")

    client := godo.NewFromToken(token)
    ctx := context.TODO()
    

    // Enable Backups action, _, err := client.DropletActions.EnableBackups(ctx, 3164450)

    // Disable Backups // action, _, err := client.DropletActions.DisableBackups(ctx, 3164450)

    // Reboot a Droplet // action, _, err := client.DropletActions.Reboot(ctx, 3164450)

    // Power Cycle a Droplet // action, _, err := client.DropletActions.PowerCycle(ctx, 3164450)

    // Shutdown a Droplet // action, _, err := client.DropletActions.Shutdown(ctx, 3067649)

    // Power Off a Droplet // action, _, err := client.DropletActions.PowerOff(ctx, 3164450)

    // Power On a Droplet // action, _, err := client.DropletActions.PowerOn(ctx, 3164450)

    // Restore a Droplet // action, _, err := client.DropletActions.Restore(ctx, 3164449, 12389723)

    // Password Reset a Droplet // action, _, err := client.DropletActions.PasswordReset(ctx, 3164450)

    // Resize a Droplet // action, _, err := client.DropletActions.Resize(ctx, 3164450, "1gb", true)

    // Rebuild a Droplet // action, _, err := client.DropletActions.RebuildByImageSlug(ctx, 3164450, "ubuntu-16-04-x64")

    // Rename a Droplet // action, _, err := client.DropletActions.Rename(ctx, 3164450, "nifty-new-name")

    // Change the Kernel // action, _, err := client.DropletActions.ChangeKernel(ctx, 3164450, 991)

    // Enable IPv6 // action, _, err := client.DropletActions.EnableIPv6(ctx, 3164450)

    // Enable Private Networking // action, _, err := client.DropletActions.EnablePrivateNetworking(ctx, 3164450)

    // Snapshot a Droplet // action, _, err := client.DropletActions.Snapshot(ctx, 3164450, "Nifty New Snapshot")

    // Retrieve a Droplet Action // action, _, err := client.DropletActions.Get(ctx, 3164450, 36804807)

    }

    Ruby

              <p>Ruby developers can use <a href="https://github.com/digitalocean/droplet_kit">DropletKit</a>,
                the official DigitalOcean V2 API client for Ruby. To snapshot a Droplet with DropletKit, use the
                following code:</p>
              
              <pre class="language-ruby"><code>
                require &#39;droplet_kit&#39;
    

    token = ENV['DIGITALOCEAN_TOKEN'] client = DropletKit::Client.new(access_token: token)

    Enable Backups

    client.droplet_actions.enable_backups(droplet_id: 3164450)

    Disable Backups

    client.droplet_actions.disable_backups(droplet_id: 3164450)

    Reboot a Droplet

    client.droplet_actions.reboot(droplet_id: 3164450)

    Power Cycle a Droplet

    client.droplet_actions.power_cycle(droplet_id: 3164450)

    Shutdown a Droplet

    client.droplet_actions.shutdown(droplet_id: 3067649)

    Power Off a Droplet

    client.droplet_actions.power_off(droplet_id: 3164450)

    Power On a Droplet

    client.droplet_actions.power_on(droplet_id: 3164450)

    Restore a Droplet

    client.droplet_actions.restore(droplet_id: 3067649, image: 12389723)

    Password Reset a Droplet

    client.droplet_actions.password_reset(droplet_id: 3164450)

    Resize a Droplet

    client.droplet_actions.resize(droplet_id: 3164450, size: '1gb')

    Rebuild a Droplet

    client.droplet_actions.rebuild(droplet_id: 3164450, image: 'ubuntu-16-04-x64')

    Rename a Droplet

    client.droplet_actions.rename(droplet_id: 3164450, name: 'nifty-new-name')

    Change the Kernel

    client.droplet_actions.change_kernel(droplet_id: 3164450, kernel: 991)

    Enable IPv6

    client.droplet_actions.enable_ipv6(droplet_id: 3164450)

    Enable Private Networking

    client.droplet_actions.enable_private_networking(droplet_id: 3164450)

    Snapshot a Droplet

    client.droplet_actions.snapshot(droplet_id: 3164450, name: 'Nifty New Snapshot')

              <h3>Python</h3>
              
              <pre class="language-python"><code>
                import os
    

    from pydo import Client

    client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))

    enable back ups example

    req = { "type": "enable_backups" }

    resp = client.droplet_actions.post(droplet_id=346652, body=req)

Snapshot a Droplet using the Control Panel

Once the Droplet is powered off, you can take a snapshot from the Droplet’s Snapshots menu, in the Take snapshot section.

Take snapshot button

You can take a live snapshot without powering off your Droplet from the Droplet’s Snapshots menu, in the Take snapshot section.

Take live snapshot button

The Enter snapshot name field prefills the Droplet’s name followed by the current Unix timestamp to help you identify the snapshot later, but you can customize the name now or after you take it. Click the Take Snapshot or Take Live Snapshot button to create a snapshot.

A progress bar shows the progress of snapshot creation. Once complete, the snapshot is listed along with any other previous snapshots. To power the Droplet back on, click the OFF switch.