By default, a Droplet snapshot is only available in the region where it was created. If you want to use a snapshot to create Droplets in other regions, you need to add the snapshot to those regions first. It doesn’t cost more to add a snapshot to more regions.
You cannot transfer volume snapshots to other regions. As an alternative, you can use you can use tools like SnapShooter, rsync or SFTP to transfer the data to a new volume created in the target region.
Add a Droplet Snapshot to Other Regions using Automation
How to Add an Image to a Region Using the DigitalOcean CLI
- Install
doctl
, the official DigitalOcean CLI.
- Create a personal access token and save it for use with
doctl
.
- Use the token to grant
doctl
access to your DigitalOcean account.
- Finally, run
doctl compute image-action transfer
. Basic usage looks like this, but you can read the usage docs for more details:
doctl compute image-action transfer <image-id> [flags]
The following example transfers an image with the ID 386734086 to the region with the slug nyc3:
doctl compute image-action transfer 386734086 --region nyc3
How to Add an Image to a Region Using the DigitalOcean API
- Create a personal access token and save it for use with the API.
- Send a POST request to
https://api.digitalocean.com/v2/images/{image_id}/actions
.
cURL
Using cURL:
# Transfer an Existing Image
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"transfer","region":"nyc2"}' \
"https://api.digitalocean.com/v2/images/7938269/actions"
# Convert an Image into a Snapshot
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
-d '{"type":"convert"}' \
"https://api.digitalocean.com/v2/images/7938291/actions"
Go
Using Godo, the official DigitalOcean API client for Go:
import (
"context"
"os"
"github.com/digitalocean/godo"
)
func main() {
token := os.Getenv("DIGITALOCEAN_TOKEN")
client := godo.NewFromToken(token)
ctx := context.TODO()
// Transfer an existing image
transferRequest := &godo.ActionRequest{
"type": "transfer",
"region": "nyc2",
}
# Transfer an Image
transfer, _, err := client.ImageActions.Transfer(ctx, 7938269, transferRequest)
# Convert an Image to a Snapshot
# client.image_actions.convert(image_id: 7938269)
}
Ruby
Using DropletKit, the official DigitalOcean API client for Ruby:
require 'droplet_kit'
token = ENV['DIGITALOCEAN_TOKEN']
client = DropletKit::Client.new(access_token: token)
# Transfer an Image
client.image_actions.transfer(image_id: 7938269, region: 'nyc2')
# Convert an Image to a Snapshot
# client.image_actions.convert(image_id: 7938269)
Python
Using PyDo, the official DigitalOcean API client for Python:
import os
from pydo import Client
client = Client(token=os.environ.get("DIGITALOCEAN_TOKEN"))
req = {
"type": "convert"
}
resp = client.image_actions.post(image_id=342341, body=req)
Add a Droplet Snapshot to Other Regions using the Control Panel
To add a Droplet snapshot to another region, click the source Droplet’s name. On the Droplet’s detail page, click Snapshots in the left menu. Open the snapshot’s More menu and click Add to region to open the Snapshot availability window.
Click each region you want to make the snapshot available in. A spinner displays as the snapshot image is added, which may take several minutes. When the snapshot becomes available in a region, the spinner stops and the region is no longer selectable.
Once the snapshot is added to the new region, you can use it to create new Droplets.