cloudemu

Introduction

Test against real cloud SDKs without a real cloud

Welcome to cloudemu

cloudemu lets you point real aws-sdk-go-v2, azure-sdk-for-go, and cloud.google.com/go clients at an in-memory backend. Your production code runs unchanged. No mocks. No Docker. No cloud accounts. ~10 ms per call.

The pitch

cloud := cloudemu.NewAWS()
ts := httptest.NewServer(awsserver.New(awsserver.Drivers{
    S3: cloud.S3, DynamoDB: cloud.DynamoDB, /* ... */
}))

// Real aws-sdk-go-v2 client — only the endpoint changes.
client := s3.NewFromConfig(cfg, func(o *s3.Options) {
    o.BaseEndpoint = aws.String(ts.URL)
})
client.PutObject(ctx, &s3.PutObjectInput{ /* your real production code */ })

The server speaks the actual cloud wire protocols (S3 REST, DynamoDB JSON-RPC, EC2 query, ARM JSON, GCP REST, Smithy CBOR). The SDK can't tell it apart from s3.amazonaws.com.

Why this is different

ApproachCostSpeedReal SDKs
Real cloud (AWS/Azure/GCP)$$$Seconds
LocalStack / emulators$100ms+✓ (with Docker)
Hand-rolled mocksFreeFast✗ — rewrite every call site
cloudemuFree~10ms✓ — no Docker, no rewrites

What's included

  • SDK-Compatible HTTP Server — 7 service domains × 3 providers (21 services live), shipping more in lockstep
  • 3 cloud providers — AWS, Azure, GCP, all in one binary
  • Realistic behaviors — state machines, auto-metrics, alarm evaluation, FIFO dedup, DLQs, TTL expiry
  • Chaos engineering — inject failures, latency spikes, throttling in time-bounded windows
  • Portable Go API — alternative path for direct in-process calls (covers all 16 service domains, including the 9 not yet SDK-compat)
  • Cross-cutting features — call recording, metrics, error injection, rate limiting, fake clock, latency simulation
  • Zero runtime dependencies

Get started

On this page