page:migrate:digitalocean spaces bucket:generated downloads
Migrate DigitalOcean Spaces bucket: Generated downloads
Move object storage from DigitalOcean Spaces bucket to Ample, one component at a time. Destination verified on Ample: an export query rendered to a CSV artifact stored with metadata in a private bucket and returned only to an authorized caller (401 without token, export=ok rows=3).
Source procedure: Inventory the Space with rclone size or s3cmd du. Not migrated automatically: Spaces CDN settings, CORS rules, and per-object ACLs are not migrated; publish an Ample bucket for public delivery.
Cutover: Switch the app's S3_* environment to the Ample bucket with a redeploy, verify reads and writes, keep the Space read-only until confirmed.
Rollback: keep the source untouched until you confirm; nothing at the source is changed or deleted by this guide.
Prerequisites
- Authorized access to the DigitalOcean Spaces bucket source and its export tooling
- An inventory of every component in scope and out of scope
- A validated backup or copy before any cutover
- An Ample account token with servers:write, buckets:write
Workflow Steps
- Inventory the source
List what DigitalOcean Spaces bucket provides beyond the component you are moving. Out of scope here: Spaces CDN settings, CORS rules, and per-object ACLs are not migrated; publish an Ample bucket for public delivery. - Source step 1
Inventory the Space withrclone sizeors3cmd du - Source step 2
Copy objects withrclone syncfrom the Spaces endpoint to the Ample bucket endpoint using the issued credentials (path-style) - Source step 3
Verify a sample of objects by size and checksum after the copy - Create the destination bucket and copy
Create the bucket, copy with rclone or the S3 CLI in path-style mode using the issued credentials, then pass the credentials to the app as encrypted S3_* variables.ample bucket create --name <bucket-name> - Validate before cutover
Run the app's own checks and, for data, compare counts and checksums; the example checks are the pattern self-tests (/p/generated-downloads). - Cut over
Switch the app's S3_* environment to the Ample bucket with a redeploy, verify reads and writes, keep the Space read-only until confirmed. - Rollback
Point DNS or configuration back to the source. The source was never modified; deletion is a separate, user-executed step after validation.
Limitations
- Documentation only: nothing is executed automatically and no execution binding is offered.
- The source-side procedure is documented from DigitalOcean Spaces bucket's standard tooling and was not executed in this catalog's evidence; the destination side was verified with the pattern fixture.
- No full source-product parity is claimed: Spaces CDN settings, CORS rules, and per-object ACLs are not migrated; publish an Ample bucket for public delivery.
Cost Estimate
- Currency: USD
- Monthly Amount: 5.0
- Basis: size prices from pricing.toml (loaded by the API)
Success Checks
- Destination app responds on its public URL
- Kind: http_get
- Path: /
- Expect: ample canary express patterns
- Generated downloads check from the destination example
- Kind: http_get
- Path: /p/generated-downloads
- Expect: see the pattern fixture checks
- Data or object counts and checksums match the source
- Kind: manual
- Expect: operator comparison before cutover
Evidence Summary
- Kind: canary_run
- Summary: Destination side verified: the Express pattern fixture deployed on Ample (npm install, npm run build --if-present, npm run start on the node-22 template) and its checks passed.
- Last Verified At: 2026-09-21T02:34:39Z