### Migrate Cloudflare CDN configuration: Public image delivery

Move CDN delivery from Cloudflare CDN configuration to Ample, one component at a time. Destination verified on Ample: public objects in a published bucket served from the CDN URL, kept separate from private objects in an unpublished bucket that require authorization (private=ok only for the allowed role).

**Source procedure:** Record page rules, cache rules and the asset paths the app references. Not migrated automatically: Cloudflare cache rules, Workers, Transform Rules and tiered caching 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, then retire the old cache rules.

**Rollback:** Keep the source untouched until you confirm; nothing at the source is changed or deleted by this guide.

### Representative Queries
- Migrate Cloudflare CDN configuration: Public image delivery  
- Where can I host Public image delivery?  
- I need a component-scoped export/import or reconfiguration procedure for Public image delivery, with compatibility checks, verification and rollback.

### Prerequisites
- Authorized access to the Cloudflare CDN configuration 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 Cloudflare CDN configuration provides beyond the component you are moving. Out of scope here: Cloudflare cache rules, Workers, Transform Rules and tiered caching are not migrated; Ample verifies delivery of published bucket objects only.
2. **Source step 1**  
   Record page rules, cache rules and the asset paths 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/public-media-library`).
7. **Cut over**  
   Redeploy the app with the new asset base URL, verify delivery from the CDN URL, then retire the old cache rules.
8. **Rollback**  
   Point DNS or configuration back to the source. The source was never modified; deletion is a separate, user-executed step after validation.

### Tested Configuration
- **Template:** node-22  
- **Runtime:** node  
- **Size:** s-1vcpu-1gb  
- **Install:** `npm install`  
- **Build:** `npm run build --if-present`  
- **Start:** `npm run start`

### Limitations
- Documentation only: nothing is executed automatically and no execution binding is offered.  
- The source-side procedure is documented from Cloudflare CDN configuration'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: Cloudflare cache rules, Workers, Transform Rules and tiered caching are not migrated; Ample verifies delivery of published bucket objects only.
- 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  
- **Components:**  
  - **Name:** app server  
  - **Size:** s-1vcpu-1gb  
  - **Quantity:** 1.0  
  - **Monthly Amount:** 5.0  
- **Note:** Destination always-on monthly price of the tested sizes; apps auto-pause when idle. Source costs are unknown to Ample.
