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
| Approach | Cost | Speed | Real SDKs |
|---|---|---|---|
| Real cloud (AWS/Azure/GCP) | $$$ | Seconds | ✓ |
| LocalStack / emulators | $ | 100ms+ | ✓ (with Docker) |
| Hand-rolled mocks | Free | Fast | ✗ — rewrite every call site |
| cloudemu | Free | ~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
- Prerequisites — Go 1.25+ and one cloud SDK of your choice
- Installation —
go get - Quick Start — drop cloudemu in front of the real SDK in 5 minutes
- SDK-Compat Server — full coverage tables and quick starts for all 3 providers