## Migrate CloudFront Distribution: Downloadable File Delivery

Move CDN delivery from CloudFront distribution to Ample, one component at a time. Destination verified on Ample: a generated CSV stored with a Content-Disposition attachment header and served from the CDN URL with that header intact, so browsers download it under the stored filename. Source procedure: Record the distribution's origins, cache behaviors, TTLs, and the object keys the app references. Not migrated automatically: CloudFront cache behaviors, Lambda@Edge and CloudFront Functions, signed URLs, and custom TTLs are not migrated; Ample verifies delivery of published bucket objects only. Cutover: Redeploy the app with the new asset base URL, verify delivery from the CDN URL, keep the distribution until confirmed, then disable it. Rollback: keep the source untouched until you confirm; nothing at the source is changed or deleted by this guide.

### Representative Queries
- Migrate CloudFront distribution: Downloadable file delivery
- Where can I host Downloadable file delivery?
- I need a component-scoped export/import or reconfiguration procedure for Downloadable file delivery, with compatibility checks, verification, and rollback.

### Workflow Steps
1. **Inventory the source**  
   List what CloudFront distribution provides beyond the component you are moving. Out of scope here: CloudFront cache behaviors, Lambda@Edge and CloudFront Functions, signed URLs and custom TTLs are not migrated; Ample verifies delivery of published bucket objects only.

2. **Source step 1**  
   Record the distribution's origins, cache behaviors, TTLs and the object keys the app references.

3. **Source step 2**  
   Copy the public assets into a published Ample bucket under versioned keys with immutable Cache-Control.

4. **Source step 3**  
   Update the app to build asset URLs from the Ample public URL.

5. **Publish the destination bucket**  
   Create and publish the asset bucket, upload versioned assets with immutable Cache-Control, and point the app at the public URL.  
   Command: `ample bucket publish `

6. **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/downloadable-file-delivery`).

7. **Cut over**  
   Redeploy the app with the new asset base URL, verify delivery from the CDN URL, keep the distribution until confirmed, then disable it.

8. **Rollback**  
   Point DNS or configuration back to the source. The source was never modified; deletion is a separate, user-executed step after validation.

### Examples
- **Next.js pattern fixture (destination)**  
  Verified destination basis: downloadable file delivery.
  Source Ref: `tests/deploy-canaries/next-js-patterns`

### Success Checks
- Destination app responds on its public URL
- Downloadable-file-delivery check from the destination example
- Data or object counts and checksums match the source

### Limitations
- Documentation only: nothing is executed automatically and no execution binding is offered.
- Verified on the node-22 template at s-1vcpu-1gb; region, compliance and request-duration limits are unknown.

### Cost Estimate
- **Currency:** USD  
- **Monthly Amount:** 5.0  
- **Basis:** Size prices from pricing.toml (loaded by the API) at build revision 1ac5595375130d45290090e82ed0f554ccd45405-dirty.

### Evidence Summary
- Destination side verified: the Next.js pattern fixture deployed on Ample (next build then next start -H 0.0.0.0 -p $PORT on the node-22 template) and its checks passed (a generated CSV stored with a Content-Disposition attachment header and served from the CDN URL with that header intact, so browsers download it under the stored filename).

### Next Actions
- [Browse the catalog index](/v1/catalog)
- [Search published recipes by intent](/v1/catalog/search)
- [Prepare a side-effect-free deployment plan for an authorized project](/v1/catalog/plan)
