AWS cloud emulator

simfra

A single-container AWS simulator. All services on one port, real cross-service interactions, optional persistence to SQLite.

No AWS account required.

88services
5,029operations

Origin

The AWS emulator I relied on started moving features behind a paywall, and even then it didn't offer the depth of simulation I needed for another project. Developing against real AWS wasn't an option.

What started as a weekend experiment quickly got out of hand. A few services turned into 88, and here we are.

How it works

Simfra isn't a collection of mocks. Services maintain real state, enforce real policies, and interact with each other the same way they do in AWS.

01

Cross-service delivery

SNS delivers to SQS. EventBridge routes to Lambda. CloudWatch alarms trigger SNS notifications. Services call each other the same way they do in AWS.

02

IAM policy enforcement

Identity policies, resource policies, permission boundaries, SCPs, and session policies are evaluated on every API call. iam:PassRole is checked. Service-linked roles are auto-created.

03

Real cryptography

KMS generates AES-256, RSA, ECDSA, and HMAC keys. Envelope encryption with data key caching. SQS, SNS, S3, DynamoDB, Kinesis, and CloudWatch Logs use it for server-side encryption.

04

Docker-backed compute

Lambda functions run in containers. EC2 instances backed by Docker. RDS runs real MySQL/PostgreSQL. EKS uses kind for real Kubernetes clusters. ElastiCache runs actual Redis.

05

Terraform-native

Set AWS_ENDPOINT_URL=http://localhost:4599 and run terraform apply. No skip flags, no special provider configuration, no endpoint blocks.

06

Web console

Built-in management console for browsing and managing resources. Multi-account, multi-region. Open localhost:4599 in a browser.

Get running in seconds

Infrastructure as code testing

API-only mode. Validate Terraform plans and test infrastructure modules without provisioning real resources.

terminal
$ docker run -p 4599:4599 ghcr.io/simfra-dev/simfra:latest
$ export AWS_ENDPOINT_URL=http://localhost:4599
$ export AWS_S3_USE_PATH_STYLE=true
$ terraform init && terraform apply

Application development

Docker-backed services with persistence. Lambda runs your code, RDS runs real databases, EKS creates real Kubernetes clusters.

terminal
$ docker run -p 4599:4599 \
-e SIMFRA_DOCKER=true \
-e SIMFRA_DATA_DIR=/data \
-v /var/run/docker.sock:/var/run/docker.sock \
-v simfra-data:/data \
ghcr.io/simfra-dev/simfra:latest

Cross-service integrations

These execute at runtime. When SNS delivers a message to SQS, the message actually appears in the queue.

All 88 services
SNSSQS, HTTP, Lambda
EventBridgeSQS, SNS, Lambda, Logs
CloudWatch AlarmsSNS
CloudTrailS3, CloudWatch Logs
Secrets ManagerLambda rotation
Step FunctionsLambda, SQS, DynamoDB
SchedulerLambda, SQS, SNS, ECS
Pipes9 targets from SQS/Kinesis/DDB
FirehoseS3, Lambda transform
Lambda ESMSQS, Kinesis, DDB Streams
CodePipelineCodeBuild, CodeDeploy
SES v2SNS, EventBridge, Firehose

Get in touch

Questions or feedback?

Whether you're evaluating Simfra for your team or want to report an issue, we'd love to hear from you.