parlel/ebs

A zero-dependency, in-process fake of AWS EBS (Elastic Block Store — the volume & snapshot subset of the EC2 API). Speaks the AWS Query (XML) wire protocol, so the real @aws-sdk/client-ec2 works against it unchanged.

Port4701
ProtocolAWS Query / XML (API version 2016-11-15, part of the EC2 API)
HealthGET /_parlel/health
ResetPOST /_parlel/reset

Default connection

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

Any SigV4 credentials are accepted (auth is not verified). EBS is technically part of the EC2 API; this is a standalone emulator scoped to volumes and snapshots so it can run on its own port.

Supported operations

CategoryOperations
VolumesCreateVolume, DescribeVolumes, DeleteVolume, AttachVolume, DetachVolume
SnapshotsCreateSnapshot, DescribeSnapshots, DeleteSnapshot

Generated ids: vol-…, snap-….

SDK usage example

import { EC2Client, CreateVolumeCommand, CreateSnapshotCommand } from "@aws-sdk/client-ec2";

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

const vol = await ec2.send(new CreateVolumeCommand({ AvailabilityZone: "us-east-1a", Size: 20 }));
const snap = await ec2.send(new CreateSnapshotCommand({ VolumeId: vol.VolumeId, Description: "nightly" }));
console.log(snap.State); // "completed"

Access via MCP / preview URL

When running inside a Daytona sandbox, this HTTP service is exposed at an automatically-provisioned preview URL. Point the SDK endpoint at that URL and add the x-daytona-preview-token header on requests.

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
StateSnapshots complete instantly (100%); no pending/creating interim state.
AttachmentsA volume holds at most one attachment; multi-attach is not modeled.
Cross-serviceInstance ids in AttachVolume are not validated against the EC2 emulator.
FiltersDescribe* Filters are not applied — id selection only.
AuthSigV4 is accepted but never validated.
PersistenceIn-memory; lost on restart/reset.
<!-- 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:4701
<!-- parlel:testenv:end -->