cloudfront — CloudFront CDN

A zero-dependency, in-process emulator for AWS CloudFront distributions, invalidations, and origin access controls.

PropertyValue
Port4712
ProtocolREST / XML
API Version2020-05-31
HealthGET /_parlel/health
ResetPOST /_parlel/reset

Default connection

AWS_ENDPOINT_URL=http://127.0.0.1:4712
AWS_REGION=us-east-1
AWS_ACCESS_KEY_ID=parlel
AWS_SECRET_ACCESS_KEY=parlel

Supported operations

OperationPath
CreateDistributionPOST /2020-05-31/distribution
ListDistributionsGET /2020-05-31/distribution
GetDistributionGET /2020-05-31/distribution/{id}
DeleteDistributionDELETE /2020-05-31/distribution/{id} (must be disabled)
CreateInvalidationPOST /2020-05-31/distribution/{id}/invalidation
ListInvalidationsGET /2020-05-31/distribution/{id}/invalidation
GetInvalidationGET /2020-05-31/distribution/{id}/invalidation/{invId}
CreateOriginAccessControlPOST /2020-05-31/origin-access-control
ListOriginAccessControlsGET /2020-05-31/origin-access-control

Distributions are reported Deployed immediately; invalidations complete instantly. Deleting an Enabled distribution returns DistributionNotDisabled.

SDK usage example

import {
  CloudFrontClient,
  CreateDistributionCommand,
} from "@aws-sdk/client-cloudfront";

const cf = new CloudFrontClient({
  endpoint: "http://127.0.0.1:4712",
  region: "us-east-1",
  credentials: { accessKeyId: "parlel", secretAccessKey: "parlel" },
});

await cf.send(
  new CreateDistributionCommand({
    DistributionConfig: {
      CallerReference: `${Date.now()}`,
      Comment: "test",
      Enabled: true,
      Origins: {
        Quantity: 1,
        Items: [{ Id: "o1", DomainName: "example.s3.amazonaws.com" }],
      },
      DefaultCacheBehavior: { TargetOriginId: "o1", ViewerProtocolPolicy: "allow-all" } as any,
    },
  }),
);

Access via MCP / preview URL

Point any AWS SDK or MCP tool at the allocated preview URL via AWS_ENDPOINT_URL.

Surface coverage

This emulator faithfully replicates the API surface most application code and agents exercise. Anything below the supported lines is either an intentional design choice for a fast, zero-cost local emulator (✓ By design) or a candidate for a future release (⟳ Roadmap) — never a silent inaccuracy.

Legend: ✅ fully supported · ◐ accepted (stored, not strictly enforced) · ✓ by design · ⟳ on the roadmap.

AreaLimitation
Caching / servingNo actual edge serving or caching
UpdateDistributionNot implemented (config is immutable after create)
Cache behaviorsStored loosely; not evaluated
ETag concurrencyETag returned but If-Match is not enforced
StateIn-memory only; lost on restart
<!-- parlel:testenv:start -->

Configuration — test.env

Copy these into your test.env (used by the bridge sidecar flow). Tokens are Parlel's seeded test credentials — any non-empty value is accepted by the emulator, so you rarely need to change them. Swap in real credentials only when pointing at the live service in prod.env.

AWS_ACCESS_KEY_ID=parlel
AWS_SECRET_ACCESS_KEY=parlel
AWS_REGION=us-east-1
AWS_ENDPOINT_URL=http://parlel-bridge:4712
<!-- parlel:testenv:end -->