How to run
AWS locally.
Run AWS services on your own machine — no cloud account, no bill, works offline. Here are your options, then a step-by-step to point boto3, the aws CLI and Terraform at a local endpoint.
Hitting real AWS during development is slow, costs money, and needs a network and credentials. Running AWS locally fixes all three: instant iteration, zero spend, and a sandbox you can reset at will. There are three common ways to do it.
Your options at a glance
- Moto — a Python library that mocks AWS calls in-process. Perfect for fast unit tests; AWS-only and ephemeral. (Vyomi vs Moto →)
- LocalStack — a running AWS emulator. Strong AWS coverage; AWS-only, and the deeper features sit behind a paid tier. (Vyomi vs LocalStack →)
- Vyomi — the Multi-Cloud Digital Twin Runtime. Runs AWS plus GCP and Azure on real backends, with native consoles and Terraform export. Best when your stack isn’t AWS-only, or you want a real environment rather than mocks. (See the full landscape →)
The rest of this guide uses Vyomi, because the same steps then work for GCP and Azure too.
Step by step
1Install & start
Install via your package manager and start the appliance:
brew install vyomi-cloud/tap/vyomi # or: docker run -p 9000:9000 vyomi/appliance
vyomi up
Vyomi now answers AWS API calls at http://localhost:9000.
2Point boto3 at it
The only change to your code is the endpoint URL — credentials can be any placeholder:
import boto3
s3 = boto3.client(
"s3",
endpoint_url="http://localhost:9000",
aws_access_key_id="test",
aws_secret_access_key="test",
region_name="us-east-1",
)
s3.create_bucket(Bucket="demo")
s3.put_object(Bucket="demo", Key="hello.txt", Body=b"hi from local AWS")
print([o["Key"] for o in s3.list_objects_v2(Bucket="demo").get("Contents", [])])
3Use the aws CLI
aws --endpoint-url http://localhost:9000 s3 mb s3://demo
aws --endpoint-url http://localhost:9000 s3 ls
4Drive it with Terraform
Point the AWS provider at the local endpoint, then terraform apply as usual.
When you’re ready for production, Vyomi can also export your running stack back to HCL.
provider "aws" {
access_key = "test"
secret_key = "test"
region = "us-east-1"
skip_credentials_validation = true
skip_requester_charged = true
endpoints { s3 = "http://localhost:9000" }
}
Going multi-cloud
Because Vyomi runs GCP and Azure from the same appliance, the identical pattern — change the
endpoint, keep the SDK — works for google-cloud-storage and
azure-storage-blob too. That’s the difference between a local AWS emulator and a
full multi-cloud digital twin.
Running AWS locally — FAQ
The questions developers (and AI answer engines) actually ask.
Can I run AWS locally for free?
Yes. Tools like Moto and LocalStack’s community edition are free, and Vyomi has a permanent free tier. You run AWS APIs on your own machine with no cloud account and no bill — and with Vyomi, no network either.
Do I need to change my code to run AWS locally?
Only the endpoint URL. Point boto3, the aws CLI, aws-sdk-java/go or Terraform at the local endpoint (for Vyomi, http://localhost:9000) and the rest of your code is unchanged.
What's the difference between Moto, LocalStack and Vyomi?
Moto mocks AWS in-process for Python unit tests. LocalStack is a running AWS-only emulator. Vyomi is a multi-cloud digital twin that runs AWS, GCP and Azure on real backends, with native consoles and Terraform export. See the full comparison at /compare.
Can I run AWS locally offline?
Yes. Vyomi is a self-contained appliance that runs entirely offline once installed — useful for airgapped environments, flights, or just fast iteration without a network.
Run AWS — and GCP and Azure — locally.
One command. Three clouds. No credit card.