LocalStack and AWS Parity Explained
localstack.cloud
localstack.cloud
I've been running a scraper against the output of the "aws --help" CLI commands for a few months, to try and get a better feel for how often AWS changes - I call this "help scraping". The answer is it changes a LOT - there are updates to their APIs every single day.
Here's the commit log of changes I've tracked so far: https://github.com/simonw/help-scraper/commits/main/aws
* https://github.com/z0ph/MAMIP#readme
* https://github.com/SummitRoute/aws_breaking_changes#readme
I thought there was a backing github repo for AwsApiChanges.info but I was unable to readily locate it
While I realize the most obvious difference being that serverless is also a deploy framework that "abstracts" the cloud, I think one of its primary benefits of adoption is that it also does a good job (in my experience, but I have not yet impelemented things deeply with it) emulates services very well where needed, for instance, DynamoDB[1]
If it was without that, I think it would be a lot less useful and way less easier to adopt, so I think its just as important to the story.
Why on earth AWS doesn't have their own first party emulators for everything I still don't understand to this day. I credit that for why Firebase & GCP are easier to use, because they have a good local development story for alot of their services (Firebase in particular has an emulator suite for nearly all their services)
I guess the main difference is that frameworks like Serverless provide a great experience if you fully buy into their way of doing things (i.e., implement your application assets in the Serverless YAML DSL, etc), whereas LocalStack is a generic platform that works on the API emulation level, hence easily integrates with most tooling out of the box.
Making the switch from Serverless to, say, AWS CDK, or AWS SAM, or Architect framwork may not be as seamless - however, for each of these frameworks you can always run the local emulation natively on LocalStack. This can help reduce the overall vendor lock-in effect that a lot of application development frameworks come with.
In fact, LocalStack also provides an integration with Serverless [0] - among many other tools [1].
Some background, with SST we connect your local environment to the services deployed to AWS and just run the Lambda functions locally: https://docs.sst.dev/live-lambda-development
I use it for stuff like SecretsManager and Cognito testing (as well as for S3). I don't use it for RDS emulation at all, and just stick a stock postgres container in that spot to achieve local development.
Under the hood, serverless uses DynamoDB Local which is the same AWS-provided DynamoDB emulator that LocalStack uses.
Because they want you to pay for local development, not only production.
Google offers an emulator because otherwise no one would and they need to catch up with AWS, which has, what, 4x their market share?
AWS offers local emulators for services they need to catch up, like Lambda and DynamoDB.
It's not a _lot_ of work, and making your dev/prod differences more explicit can make debugging much easier.
Besides, it's reinventing the wheel.
And it's certainly cheaper to run local dev/tests against the real AWS S3 infra than paying the time to mock it with your local filesystem...
Your assertion about "cheaper" is also only true if one remembers to tear down all those resources when finished testing against them
Here is the list: https://docs.localstack.cloud/aws/feature-coverage/
I always prefer tools that also work locally for development.
However, especially for software development there is more than just API parity. You'll end up with many unexpected behaviours when developing in a fully mocked environment. I doubt it will always behave like the real AWS