Major Changes
This release introduces three major changes
* A Debian-based multi-platform Docker image of LocalStack, with full support for amd64 and experimental support for aarch64 (see 4921 for known limitations and progress)
* Upgrade to Python 3.8
* Lazy-loading of services as the default behavior
Debian-based multi-platform (amd64, arm64) docker image
4754 introduced a multi-platform docker build to support both amd64 and arm64. Alpine and musl made things unnecessarily difficult, so we switched to a Debian buster base image. Post-init (e.g., in `/docker-entrypoint-initaws.d`) scripts that expect an Alpine environment (e.g., use `apk` commands to install things into the LocalStack container) will stop working.
Lazy-loading of services
As part of an ongoing effort to improve startup performance, we have introduced a new code loading and service startup mechanism to allow lazy-loading of services. After LocalStack starts, services used to be in the state `running`, indicating that they are loaded and ready to serve requests. To allow more fine-grained state handling for services with lazy loading, we have introduced a new type of state called `available`.
When starting LocalStack, services are by default in the state `available`, which means that clients can start making requests to the services, and at the first time the service is hit, all the necessary code is loaded and the backend service is started, at which point the service after which the service will be in the `running` state. The environment variable `EAGER_SERVICE_LOADING` controls this behavior.
Scripts that depend on the output of `/health` being `running` will require setting setting `EAGER_SERVICE_LOADING=1`, which will start all services eagerly. This works together with the `SERVICES` variable to create the behavior from localstack <= 0.13.0.
(An alternative solution is to update your startup logic to accept either `running` or `available` as the healthy service state - e.g., see details in [this issue](https://github.com/localstack/localstack/issues/4904)).
Change log
1. New Features
* make lazy service loading the default behavior
* debian-based multi-platform support
- multi-platform support in localstack codebase
- finalize multi-platform build
- initial version of multi-platform-build
* support multiple concurrent elasticsearch clusters:
- implement one cluster per domain-support for elasticsearch
- implement custom endpoint routing for elasticsearch clusters
* add simple UI for deploying CloudFormation stacks from public template URLs
* add delete support for AWS::SSM::Parameter CloudFormation resources
* add initial support for Firehose processors to transform records written to targets
* add ability to short circuit wait/retries
2. Enhancements
* use serving.Server abstraction for ElasticMQ server to resolve startup issues
* add Werkzeug>=2.0 as requirement
* use werkzeug Request object in asf
* use werkzeug Response object in asf
* invalidate pro test cache for changes in both
* bump moto version to 2.2.5
* minor: correct typos in README
* add support for {"exists": false} in SNS message filtering
* add support for CFN resource AWS::Logs::LogStream
* minor: adjust API GW logic and tests for latest upstream moto changes
* convert boolean strings to lowercase in IAM responses for JS SDK compatibility
* add LEGACY_DOCKER_CLIENT and EAGER_SERVICE_LOADING to CONFIG_ENV_VARS
* minor: add property to API GW resource context class to extract identity information
* refactor logic for pulling specific Docker image tags, add more tests
* implement generic approach for routing internal REST resources
* extend logic and add more tests for escapeJavaScript(..) velocity template function
* remove custom parameter by label filtering, leverag logic from upstream
* upgrade moto-ext dependency to latest version
* Format JSON stack template for better readability in UI
* minor: remove print(..) statement
* support ranges of host ports to be mapped to a container port
* add missing attributes in Firehose records sent to destinations
3. Bug Fixes
* minor fix to deal with missing Tags attribute in EC2::RouteTable
* fix filtering by tags when fetching state of EC2::RouteTable CloudFormation resources
* fix URL encoding to properly handle '(none)' base paths in API Gateway
* fix arn parsing in aws_stack
* minor: fix API GW test assertion after recent moto upstream changes (part 2)
* minor: fix API GW test assertion after recent moto upstream changes
* minor fixes in Lambda and API Gateway logging / error handling
* fix extracting attributes from Firehose records
* revert moto to version 2.2.4 to fix builds temporarily