# Migrate CloudFront Distribution: Documentation Asset Delivery

Move CDN delivery from CloudFront distribution to Ample, one component at a time. Destination verified on Ample: HTML and CSS objects stored with their own content types and served from the CDN URL with those types intact. 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: Documentation asset delivery
- Where can I host Documentation asset delivery?
- I need a component-scoped export/import or reconfiguration procedure for Documentation asset delivery, with compatibility checks, verification and rollback.

## Migration Source
- CloudFront distribution

## Workload
- Documentation asset delivery

## Prerequisites
- Authorized access to the CloudFront distribution 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
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/documentation-asset-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: documentation asset delivery.  
  Source Reference: `tests/deploy-canaries/next-js-patterns`

## Success Checks
- **Destination app responds on its public URL**  
   `GET /`  
   Expect: ample canary next js patterns
- **Documentation-asset-delivery check from the destination example**  
   `GET /p/documentation-asset-delivery`  
   Expect: see the pattern fixture checks
- **Data or object counts and checksums match the source**  
   Manual check: operator comparison before cutover.

## Limitations
- Documentation only: nothing is executed automatically and no execution binding is offered.
- No full source-product parity is claimed: CloudFront cache behaviors, Lambda@Edge and CloudFront Functions, signed URLs and custom TTLs are not migrated; Ample verifies delivery of published bucket objects only.

## Cost Estimate
- **Currency**: USD  
- **Monthly Amount**: 5.0  
- **Note**: Destination always-on monthly price of the tested sizes; apps auto-pause when idle.

## Next Actions
1. **Action Label**: Browse the catalog index
   * `GET /v1/catalog`
2. **Action Label**: Search published recipes by intent, stack and constraints
   * `POST /v1/catalog/search`
   * Parameters: {"body":{"limit":5,"query":"Migrate CloudFront distribution: Documentation asset delivery"}}
3. **Action Label**: Prepare a side-effect-free deployment plan for an authorized project
   * `POST /v1/catalog/plan`
