page:migrate:cloudfront distribution:public image delivery

Migrate CloudFront distribution: Public image delivery

Move CDN delivery from CloudFront distribution 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:

Cutover:

Rollback:

Prerequisites:

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/public-media-library).
  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)

Success Checks:

Limitations:

Cost Estimate:

Evidence Summary:

Next Actions:

  1. Action ID: browse-catalog
    Label: Browse the catalog index
    Operation ID: catalog_index
    Method: GET
    Relative Path: /v1/catalog

  2. Action ID: search-recipes
    Label: Search published recipes by intent, stack and constraints
    Operation ID: search_recipes
    Method: POST
    Relative Path: /v1/catalog/search
    Parameters: {"body":{"limit":5,"query":"Migrate CloudFront distribution: Public image delivery"}}

  3. Action ID: plan:page:migrate:cloudfront-distribution:public-image-delivery
    Label: Prepare a side-effect-free deployment plan for an authorized project
    Operation ID: plan_deployment
    Method: POST
    Relative Path: /v1/catalog/plan
    Parameters: {"body":{"inputs":{},"projectId":"","recipeId":"page:migrate:cloudfront-distribution:public-image-delivery","recipeRevision":"r1"}}

  4. Action ID: auth-setup
    Label: Read the existing agent authentication setup
    Operation ID: existing_auth_setup
    Method: GET
    Relative Path: /mcp/setup

  5. Action ID: browse:migration:cloudfront-distribution
    Label: Browse CloudFront distribution
    Operation ID: browse_node
    Method: GET
    Relative Path: /v1/catalog/nodes/migration%3Acloudfront-distribution

  6. Action ID: browse:pattern:public-image-delivery
    Label: Browse Public image delivery
    Operation ID: browse_node
    Method: GET
    Relative Path: /v1/catalog/nodes/pattern%3Apublic-image-delivery

  7. Action ID: browse:intent:migrate-cdn
    Label: Browse Migrate CDN
    Operation ID: browse_node
    Method: GET
    Relative Path: /v1/catalog/nodes/intent%3Amigrate-cdn