LocalStack is a solid AWS-only local cloud. The moment your roadmap adds GCP or Azure, though, you're either standing up separate emulators per cloud or reaching for a runtime that does all three. If you pick the latter, the migration is smaller than you'd expect.
The one-line move
Both LocalStack and Vyomi are endpoint-based: your SDK targets a local URL instead of real AWS. Migrating is mostly repointing that URL.
# before (LocalStack)
endpoint_url="http://localhost:4566"
# after (Vyomi)
endpoint_url="http://localhost:9000"
The same swap covers the aws CLI (--endpoint-url), aws-sdk-java/go, and
the Terraform AWS provider.
What carries over
- Your code — boto3 and the AWS SDKs are unchanged; only the endpoint differs.
- Your AWS resources — S3, DynamoDB, SQS and friends behave the same, now on real backends (MinIO, DynamoDB Local, ElasticMQ) rather than in-process mocks.
- Your test wiring — if you ran LocalStack as a CI service container, swap the image and keep the pattern. See testing cloud apps offline.
What's different (on purpose)
- Three clouds, not one — the same appliance now answers GCP and Azure too, so cross-cloud tests run in a single environment.
- Real backends — fewer "passed locally, failed in prod" surprises; see why mocks lie.
- Terraform export — promote the running stack to real cloud with one click.
A pragmatic path
You don't have to switch everything at once. Point one service's tests at Vyomi, confirm they pass, then widen. Keep LocalStack for any AWS edge case Vyomi doesn't cover yet — they're not mutually exclusive. The full side-by-side is on Vyomi vs LocalStack.