# LocalStack Change Log

(Please also refer to https://github.com/localstack/localstack/releases for a more human-readable version of the change log.)

* v0.14.0:
  - !!Breaking Change!!: ElasticSearch does not use port 4571 anymore, but selects a port from the external service port range (when using endpoint strategy "port"). External service ports have been broadened (4510-4559).
  - Changes: fix CloudFormation deployment of SNS::TopicPolicy;add initial support for SNS PublishBatch API;minor fix in SNS tests to resolve stale PR merge;add test case for SQS DLQ chaining;fix handling of empty prefix for Firehose S3 uploads to properly trigger event notification;fix external host setting for sqs;minor refactoring in SNS get_message_attributes() method;update versions of terraform, aws provider, and API gateway module;add config for host path to fix mounting of libs_dir;add utilities for migrating services to ASF;fix acronym handling in camel_to_snake_case;minor refactoring in selecting handler in edge.py for better extensibility;add check for supported protocols on SNS subscription;add support for email-json protocol in SNS subscriptions;fix API Gateway to match the most specific path in the presence of "{proxy+}" placeholders;fix asf scaffold to generate TypedDict declarations correctly;adjust routing to enable using anonymous boto3 client to fetch S3 object;refactor Lambda executors to allow modification of container settings using hooks;temporarily pin version of moto until upstream changes are fixed;apply fixes in EC2 route tables and service backend initializations for recent upstream moto changes;add support for AWS OpenSearch;minor adjustments in @patch decorator for bound methods of class instances;hardcode default tmp and data paths;Add handling for DynamoDB stream iterator expiration, bump kinesis-mock to 0.2.2;minor: remove obsolete moto imports in CloudFormation resource classes;Support multi arch for local-kms provider;fix sqs port extraction from headers and other related issues;minor fix in printing result for local node.js Lambda executor;remove obsolete patch for CloudWatch metrics filtering;cleanup CloudFormation logic and remove old/obsolete code;ASF rest-json parser fixes;fix ASF SQS provider to allow direct calls to queue URLs;add utility to manage / reserve ports for external services;fix DynamoDB local/localhost region for NoSQL Workbench;minor fix in request parsing to match path parameters with slashes;invalidate builder stage in dockerfile on package version changes;use base_url instead of url for determining SQS queue URL;fix ASF SQS xml response encoding;add cachetools to CLI dependencies;set MessageGroupId and MessageDeduplicationId on SQS message from SNS subscription;Introduce lazily-created localstack-internal-awssdk utility lambda function;add test for sync:2 nested statemachine invoke;capture X-AMAZON-APIGATEWAY-ANY-METHOD for cases where route key is  for integrations;provide better log info when CloudFormation resources cannot be found;clean up old/unused CloudFormation logic;refactor SQS queue-url generation;fix request parser to enable X-Amz-Target strings with multiple dots;extend SNS publish batch support for FIFO topics ;remove monkey patching and circular dependency;fix expectations around Kinesis record encoding, always re-encode records for shard subscribers;fix CloudFormation deployer to recursively resolve string placeholders;refactor sqs queue resolving and url rendering;fix ASF REST operation lookup with conflicting path params;minor refactoring of CFN logging code to dump resources as JSON string;clean up aws_stack utils, remove obsolete global cached boto3 resources;replace get_data() with response.content to fix logic in SNS HTTP subscriptions;fix DomainValidationOptions property in ACM Certificate CFN deployment;add missing CloudFormation parameters for Firehose delivery streams;Extend cloudformation deploy test fixture;migrate firehose to ASF;stop setting environment variable if cognito_identity if empty;Kinesis refactor server abstraction 5265;Allow container client to connect/disconnect containers to/from a network;fix access to listener in logic for restarting Kinesis;handle SSE for sqs;fix issue rendering VTL templates for API Gateway by flattening the input;fix accessing external SQS port for intra-service communication;refactor config and rip out global port/url variables;bump moto-ext to latest version;minor fix for gzip handling in SSL proxy;fix positional args in CloudFormation find_change_set(..) method;add connection parameters and credentials to EventBridge API destinations;minor: replace function calls with literal syntax and remove unnecessary comprehensions;fix SNS PublishBatch logic for optional Subject atttribute;Enable invocation of local API URLs via stepfunctions;fix Kinesis installation via LPM, add Docker check for StepFunctions installation;Fix docker client ctx manager and json decode issues on windows;broaden the external service port range, adjust docker-compose;update Docker base image (python:3.8.12-slim-buster) digest to 3544d06;add util function for deletion of None-values from dicts;combine OpenSearch and Elasticsearch backends;Fixing integration tests against pro;fix passing Conditions on stack updates, refactor/simplify CFN function arguments;update exposed ports and docker-compose
* v0.13.3: Add initial ASF (AWS Service Framework) SQS provider implementation; add support for gzipped responses in SSL proxy via Accept-Encoding headers; fix API gateway proxy resources; add automatic docker network detection for lambda containers; fix passing of request parameters to API Gateway HTTP integrations; lowercase 'accept' headers in API Gateway for parity with AWS; add negative test for SNS FIFO topic validation, migrate SNS tests from unittest to pytest; add support for dynamic SSM/SecretsManager references in CloudFormation templates; add ability to customize default IAM/STS user via TEST_IAM_USER_ID/TEST_IAM_USER_NAME; add integration test that passes binary data via APIGateway to Lambda; fix Firehose-ElasticSearch integration, allow S3Backup AllDocuments with ElasticSearchDestination; refactor StepFunctions multi-region support to use upstream changes; add proper validations for SNS/SQS integration with fifo queues; allow provider overrides to be passed to the started localstack container; fix multiple service container creation; ensure SequenceNumber is present in Lambda events from DynamoDB Streams; support updating of API Gateway resources via PATCH operations; refactor logging code to replace string interpolation with passing arguments to log methods; fix extraction of filter values for describing EC2 prefix lists; refactor code to remove unnecessary list comprehensions; refactor code to remove mutable default arguments; pull out subtypes instance manager into separate util class for reusability; fix single-space env default in docker-compose; update and clean up outdated documentation; replace dict and list function calls to literal syntax; remove uname command in system check for windows compatibility; add version info to internal health HTTP endpoint; fix RenovateBot config to only enable patch updates
* v0.13.2: Add initial support for region-based in-place partition rewriting; add "--offline" pytest flag, skip "online-only" tests, fix some tests; bump version of java utils to 0.2.18 to fix log4j vulnerability CVE-2021-44228; refactor README.md to make it crisp and readable; refactor Lambda logic to remove local executor Callable from model entities; automatically pull non-cached Docker images on image inspection; fix misc. tests failing for non-default region; replace dict calls with comprehensions; small fixes to allow running localstack with podman; fix Terraform test issue related to SQS changes in the AWS provider; minor refactoring to use negative index -1 to get the last element of sequence; minor refactoring of Lambda API for better extensibility; reduce log level of edge port configuration hook; fix association of VPCs in Route53 HostedZone responses; fix CloudFormation updates for EC2::Instance with empty SecurityGroups property; fix listing of KMS signing keys for asymmetric key pairs;add proper error response message to reject empty SNS messages; correctly wait for stay-open port to be available, fix fallback to exec mode; compatibility checks for S3 copy object with metadata; fix updating of HTTP method in message handler chain to avoid None methods; add SKIP_SSL_CERT_DOWNLOAD option to allow skipping download of SSL cert
* v0.13.1:
  - !Upcoming breaking change!: This version introduces the `LEGACY_PERSISTENCE` config, which determines whether the legacy persistence mechanism (based on API calls record&replay) should be used. Currently defaults to `LEGACY_PERSISTENCE=1`, but the logic will be disabled by default and may get removed entirely in the future.
  - Changes: Support stay-open mode for docker-reuse Lambda executor; add functionality for custom Elasticsearch backends; add LocalStack Package Manager (lpm) CLI; add plugin-based hooks for bootstrapping and infra startup; add cli command to show current config; add Directories config object and introduce directory structure; publish logs per metric and remove faulty metric filter behavior in CloudWatch API; refactor handler chain and add MessageModifyingProxyListener to enable modification of requests/responses; add Docker tags for minor and patch versions; exclude Elasticsearch >=7.14.0 client versions for OpenSearch compatibility; fix returning formatted date string for requestTime in Lambda API GW events; add SIGINT signal handler for CLI to enable clean shutdown across different operating systems; add initial integration of Route53Resolver API; clean up obsolete patches for event_rules in EventBridge API; slightly refactor StepFunctions install logic for better extensibility; add flag to check port availability in start_proxy_server(..) to fix test flakes; minor refactoring of EventBridge utils, fix location of EVENTS_TMP_DIR; use unittest.mock.patch.object for overriding config params; fix edge routing for API Gateway invocation URLs when Signature= query param is passed; increase timeout when waiting for edge port to become available; fix SNS pagination to support large CloudFormation stacks with very large number of topics; allow redirection of var libs to static libs inside the container / move dependencies to correct folders; update startup hook that initializes and restores persistence; download test-jar for Lambda integration tests with `make init-testlibs`; filter warnings about "tail unrecognized file system" from Lambda logs; add basic Architectures support to Lambda API; get hostname by using gethostname() instead of reading /etc/hostname; fix lpm to return non-zero exit code if package installation fails; fix using custom Docker images for nodejs14.x/python3.9 only if no custom registry is provided; add patch utility; add .localstack config directory and config profiles; add initial support for KMS Sign API; skip time expiration validation for presigned S3 URL when S3_SKIP_SIGNATURE_VALIDATION=True; minor: improve parameter checks and error responses for SES SendEmail; upgrade pyopenssl version to fix OpenSSL issue, refactor SSL cert generation; minor fix checking for dict/CaseInsensitiveDict in merge_recursive(..) util function; remove dead event logging code; move machine id cache to new cache directory; add missing attributes for Lambda::Function CloudFormation resources; add "is running" check before restarting Kinesis and StepFunctions services; fix MD5 check on S3 requests with "chunk-signature="; add module init file for localstack.runtime; fix "localhost" region in requests headers for compatibility with NoSQL Workbench; add support for SNS delivery logs stored to CloudWatch Logs; explicitly handle S3 OPTIONS request with "Access-Control-Request-Method" header; fix Docker flags parsing in configure_container; add psutil as CLI requirement; strip extra xmlns attributes in PutBucketNotification responses for AWS Rust SDK compatibility; update Makefile to use new cli detach flag for smoke test; patch CFN stack outputs for API Gateway; fix tests and remove obsolete patch for CloudWatch metrics filtering; fix setting HMAC/non-HMAC credentials when injecting internal Authorization headers in requests; add multi-region support for StepFunctions state machines; fix OldImage/NewImage in DynamoDB->Kinesis event payloads on updating/deletion of items; make can_use_sudo use non-interactive mode; migrate several tests from unittest->pytest; fix creation of multi route table associations in CFN EC2::SubnetRouteTableAssociation resources; re-arrange Dockerfile commands to decrease image size and increase number of cache hits; fix deleting objects from non-existing S3 buckets; pin Docker base images, enable DependaBot/RenovateBot to update once a week; fix text/xml content-type header in STS responses; fix install_go_lambda_runtime for multi-arch build; apply boolean lowercase conversion in IAM responses for all clients (not only Node.js SDK); enable Docker buildkit cache inlining, use remote Docker layer cache; fix forwarding of unprintable chars to SQS DLQ; patch LogStream.filter_log_events to use get_pattern_matcher
* v0.13.0:
  - !!Breaking Change!!: Changed Docker image from Alpine distribution to Debian Buster; lazy-loading of services is now the default behavior, and services are by default in a new state "available"
  - Changes: skip flaky test_sqs_batch_lambda_forward test; upgrade localstack-ext to 0.13.0; use serving.Server abstraction for ElasticMQ server to resolve startup issues; multi-platform support in localstack codebase; finalize multi-platform build; initial version of multi-platform-build; update authors and temporarily pin version in preparation for 0.13.0 release; revert moto to version 2.2.4 to fix builds temporarily; invalidate pro test cache for changes in both; bump moto version to 2.2.5; add Werkzeug>=2.0 as requirement; use werkzeug Request object in asf; use werkzeug Response object in asf; minor: correct typos in README; add support for {"exists": false} in SNS message filtering; minor fix to deal with missing Tags attribute in EC2::RouteTable; fix filtering by tags when fetching state of EC2::RouteTable CloudFormation 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; fix URL encoding to properly handle '(none)' base paths in API Gateway; fix arn parsing in aws_stack; refactor logic for pulling specific Docker image tags, add more tests; implement generic approach for routing internal REST resources; 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: 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; minor fixes in Lambda and API Gateway logging / error handling; add support for CFN resource AWS::Logs::LogStream; make lazy service loading the default behavior; fix extracting attributes from Firehose records; Format JSON stack template for better readability in UI; implement one cluster per domain-support for elasticsearch; 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; add delete support for AWS::SSM::Parameter CloudFormation resources; add simple UI for deploying CloudFormation stacks from public template URLs; add initial support for Firehose processors to transform records written to targets; add ability to short circuit wait/retries; implement custom endpoint routing for elasticsearch clusters
* v0.12.20: Major: implement lazy-loading of services; introduce ApiInvocationContext class to encapsulate API Gateway request context information; add AWS Service Framework parsers, serializers, and tests; add AWS Service Framework API and scaffolding CLI; add initial lifecycle hook abstraction for services; add object-oriented moto server abstraction; add `OUTBOUND_HTTP_PROXY` option for proxies when downloading external resources; update moto patch to fix CDATA wrapper for SQS message attribute values; add support for more Elasticsearch versions; add option to set permissions for save_file(..), save local config file with 0o600 permissions; upgrade Terraform version to; refactor API GW logic for easier extraction of resource/method details from invocation context; upgrade version of Terraform in base image to fix recent CI build issues; fix docker_utils import in localstack status cli command; fix AWS::SecretsManager::Secret CloudFormation ARN handling and tests; fix restarting of DynamoDB process; fix local execution of Java Lambdas if handler method is implementing `RequestHandler` interface; fix issues in AWS service framework dispatching; add test-invoke-method to test API Gateway endpoints; add requestId attribute to Lambda event from API Gateway integration; minor: use existing util function to extract region from ARN; add more SQS tests to prepare for new SQS implementation; refactor dynamodb to use serving.Server; update Elasticsearch default version in es_api.py; support version qualifiers for managing Lambda policy statements; fix error response when attempting to delete non-existing Lambda; correctly format Lambda function inline code on CloudFormation update; refactor serving.Server to fix ElasticsearchCluster; add headers from S3 object and correct codes to S3 website responses; fix scaffolding for remaining AWS services; add defaults for SSM parameter name in CloudFormation model; extend create_zip_file(..) to support 'append' mode and specifying root directory; fix elasticsearch plugin download when building docker base image; update default/cached elasticsearch version to 7.10; extract correct region from target ARN for S3 notifications; fix check for None values in response multi_value_headers ;update troubleshooting guide to not set DOCKER_HOST when using Lambda remote mode in CI; add ability to skip content gzipping for individual services responses; make boto client creation in aws_stack.connect_to_service thread safe; fix overwrite behavior for PUT requests to the health endpoint; minor: add generate_default_name_without_stack utility method; add temporary support for python3.9 runtimes via mlupin/docker-lambda images; add SSM->EventBridge integration to send notifications about parameter changes; add concurrency control for multiserver startup; add multi-region support for EventSourceListenerSQS; add setup.cfg and update build configuration; pin version of "pip" to fix setup step in CI; add support for "::" to specify a custom Java Lambda handler method in local executor mode; fix health endpoint to support feature states; refactor extract_region_from_headers to make it more reusable; add generic fallback health check for local APIs; fix updates for AWS::IAM::Role in CloudFormation; adjust exposed ports in docker-compose.yml; add logic and tests to gracefully handle zipping of empty directories; fix state checking for active service provider; use python time for do_run cache time comparison; add support for routing events to log groups, fix event pattern matching/mapping for prefix filter; fix statement/policy handling for Events::EventBusPolicy CFN resource; prefix Lambda container names with MAIN_CONTAINER_NAME to support multiple instances in parallel; allow partial SSE specification and auto-create managed KMS keys for DynamoDB tables
* v0.12.19: Move attribute defaults from template_deployer to service models; cache single instance of request context to enable mutability; refactor Lambda API delete_function logic for better extensibility; pass ENABLE_CONFIG_UPDATES environment variable to Docker container from CLI; support case-sensitive response headers, add ETag to CORS exposed headers for S3 JS SDK compatibility; add pagination to get_lambda_log_events(..) util function to fix Lambda tests; fix potential race condition in Docker container start/wait logic; fix CFN SecretsManager::Secret to properly return secret ARN as Ref; log emails sent via SES send_raw_email into local log file; add ability to pass invocation handler to test HTTP server for API GW integration tests; add missing event attributes and increase timeout in Java Lambda tests; minor fix to avoid running multiple edge proxies on the same port; rename docker->docker_utils to avoid import/aliasing issues; fix issue with single quotes in payload for Node.js Lambda in local execution mode; minor refactoring of inter-service message forwarding for better extensibility; add initial support for KMS asymmetric keys; add support for and/or/condition CFN intrinsic functions, fix resource type lookup; add simple util classes ObjectIdHashComparator and ArbitraryAccessObj; add support for states:::events:putEvents to publish events from StepFunction; add helper function to mock a request context with a particular region; refactor and remove fix_resource_props_for_sdk_deployment(..) in CFN deployer; move delete patches in template deployer to CFN service models; refactor error handling and add MOCK_UNIMPLEMENTED config to gracefully handle unimplemented APIs; add ability to pass --workdir to launched containers in Docker client; allow Lambda plugins to return invocation results directly, create plugin to handle LAMBDA_FORWARD_URL; add wildcard support for `EXTRA_CORS_ALLOWED_ORIGINS` configuration; fix deploying Lambdas with colliding names due to common prefixes; increase Elasticsearch cluster startup timeout; skip forwarding Lambda invocation result if on_successful_invocation is None; fix deployment of DynamoDB table with SSE disabled in Terraform definition; add support for s3:ObjectCreated:Copy event in the presence of X-Amz-Copy-Source headers; add missing edge routing logic for AWS SDK v2; add initial support for grant operations in KMS; add Docker client methods to inspect networks; wait until port is closed on DynamoDB shutdown/restart; pass CORS configuration options and Thundra Node.js/Python agent config from CLI to the container; fix selection of sub-elements in SQS listener XML responses; fix Lambda SNS event source attribute as `aws:sns` instead of `localstack:sns`; add util function to restart StepFunctions service process; minor: check for empty files in download_and_extract(..) util function; implement PluginDisabled exception to handle disabled plugins; refactor DDBStreams/ES/Firehose APIs to use RegionBackend classes
* v0.12.18: Add generic LocalStack plugin framework; implement CLI using click, rich, and stevedore; add Node.js/Python/java8.al2 runtime support for Thundra plugin; add support for LS_LOG=trace-internal log level; fix logic and add test for edge invocations from AWS Go SDK v2; remove references to PORT_WEB_UI in docs; add attributes to SQS messages from Lambda event source mapping; add extensible class abstraction for Lambda event source listeners; add support for local execution of Go Lambda functions; fix CFN list_stack_resources() for stacks with deleted resources; make some integration tests more lenient to environment changes; add check if DNS_ADDRESS is zero before starting the dns server; consider function alias when resolving Lambda function or layer ARN; refactor Lambda executor methods to use InvocationContext as input param; move pre- and post-create CFN actions from template_deployer to resource models; extend util function for creating simple SSL proxy servers; add plugin_spec to signatures of PluginLifecycleListener; move api imports in infra.py to respective start methods; fix ApiKeyRequired in API Gateway CloudFormation resources; add missing SSEDescription and TableId entries in DynamoDB DescribeTable calls; fix code updates of Lambda functions for Docker executor; add ability to specify --network via DOCKER_FLAGS config; add util function to manually configure region for current request context; enable sync/async SFN invocations in API Gateway integration; minor fix in regex to parse Docker volume flags; add test for deletion of SQS messages with changed visibility; add support for generated secrets in CFN SecretsManager::Secret; fix EC2/Logs tests after upstream changes; add initial version of Config Service API; remove obsolete patches for Logs metric_filters; parse volume mount flag with regex to allow windows paths and additional arguments; support `<apiId>.execute-api.*` hostnames for API Gateway invocation URLs; distinguish polling and reactive mode in EventSourceListener; introduce Lambda executor plugin mechanism to hook in custom extensions at runtime; fix raw message delivery attribute for SNS/SQS subscriptions; add CloudFormation support for AWS::Events::EventBusPolicy; create SQS queue policy for AWS::SQS::QueuePolicy CFN resource; minor: add util function to extract access_key_id from auth header, add type hints to utils; correctly document and use TMPDIR and HOST_TMP_FOLDER in docker-compose; fix getting IP addresses of Docker containers with non-default networks; add support for DefinitionSubstitutions in CFN StateMachine resources; add support for ApiGateway::DomainName and ::BasePathMapping CFN resources; add get_physical_resource_id() for ApiGateway::Deployment; add ability to specify SelfManagedEventSource for CFN Lambda::EventSourceMapping; update kinesis-mock to 0.2.0, adding built-in multi-region support; add startup logic to install prebuilt SSL cert if available; update setup.py with additional information; allow space in passed JSON event to custom runtime; run Golang local test only if executed in Alpine; run LocalStack tests against LocalStack Pro in Github Action; rework some integration tests to make them more robust; restructure Python requirements, Dockerfile and Makefile; add `LAMBDA_CODE_EXTRACT_TIME` to configure max Lambda code extract wait time; fix template deployer and tests to retrieve updated PhysicalResourceId for EC2::Instance; add default name for IAM::ManagedPolicy CFN resource; aggregate valid regions accross all available partitions, to support regions like `us-gov-*`; fix AWS::ApiGateway::Account regression; disable cli banner when running infra in docker; move code in RESOURCE_TO_FUNCTION into service models, split into separate files; add exception handling to EventBridge notifications if targets are unaccessible; inject AWS_ENDPOINT_URL into Lambda container environment; add plug points for code/config initializations in LambdaExecutorPlugin; refactor `testutil.py` to deploy large Lambda zip files via S3; add separate section with service provider configurations to README; disable shell mode in run(..) util if cmd is passed as a list; pass Cognito Identity info through HTTP headers, return `InvocationResult` with content instead of wrapping as Flask response for LAMBDA_FORWARD_URL; add util functions get_edge_port_http() and is_provided_runtime(..); add localstack infra cli command for backwards compatibility; fix adding tags to SQS queues when value is an empty string; expose private Docker client methods as static methods in Docker Util class; fix argument error in exception handling in lambda_api.py; add test assertion to verify value of maxReceiveCount in SQS RedrivePolicy; extend logic to apply request/response templates in API GW messages; add support for synchronous invocations of StepFunctions via API GW; support `--add-host` argument in `LAMBDA_DOCKER_FLAGS`; add simple integration tests for Support API; add utility function to parse properties/INI config files; add restart method for Kinesis and DynamoDB processes; add util function to inject specific region into AWS Authorization header; inject missing Lambda environment variables in local Lambda executor; add resource id to auto-generated Lambda name in CFN stacks; fix missing request parameters in CFN ApiGateway integration; fix responding to S3 website requests with proper object content-type; add warning message for LAMBDA_EXECUTOR=docker* if Docker is not accessible; consolidate .coveragerc and .flake8 config int pyproject.toml; restructure and clean up README.md
* v0.12.17: Security fixes: replace Docker CLI commands with Docker Python SDK client; add ability to specify custom IDs for API GW REST APIs via tags; add support for multi-region request handling; add CloudFormation support for Events::Connection; fix logic and tests for decimals formatting; fix removing X-amz-content-sha256 header after stripping off chunk signatures; update README and coverage docs with latest available services; canonicalize boolean strings in SNS FIFO topic creation via CloudFormation; canonicalize HTTP header names in API GW Lambda events to lower-case; add basic interface for StateSerializer to be used in persistence mechanism; add support for Route53 GetHealthCheck; minor refactoring of imports to fix CLI dependency issues; deploy extended attributes for IAM::User CloudFormation resources; fix/revert lookup of OS user inside Docker container; add EDGE_FORWARD_URL option to forward all edge requests; add ability to run privileged ports 53/443 in local dev mode; minor fix for handling symlink targets in cp_r(..); return S3 bucket hostname for "DomainName" CF attribute; restructure Thundra plugin code and fetch latest Java agent version from metatata xml in repository; add support for IAM::User CloudFormation resources; add missing CloudFormation properties for SNS::Topic; update download URL for patched DynamoDB in base Docker image; add fallback for boolean type conversion in CloudFormation deployments; update analytics event logging system; add Thundra config variables to `config.CONFIG_ENV_VARS` to pass them to Docker instance; refactor logic across the codebase to make use of the Docker client utils; fix patches in Logs API to accommodate recent upstream changes; extend merge_recursive(..) util function; fix KMS listener initialization; introduce KMS_PROVIDER env variable and switch to moto as default KMS provider; minor fixes to enable deployment of arc.codes sample app; add cleanup of docker-reuse Lambda containers if code/configuration is updated; minor fix: consider Flask&Requests responses in aws_responses utils; fix extracting event bus name as Ref attribute from CF Events::EventBus resources; fix Kinesis CBOR response encoding for Java SDK compatibility, extend tests
* v0.12.16: Support resolving SSM parameter values in CloudFormation templates; add integration for Thundra tracing via `THUNDRA_APIKEY`; add support for DeleteAlias and TracingConfig in Lambda API; support sequential Lambda execution for Kinesis streams, using ParallelizationFactor; add support for local execution of Node.js lambdas; update README with instructions to build the Docker image; fix regex to extract API ID in hostname from API GW endpoint URL; add integration test for EC2 route table association; adjust updated download URL for patched DynamoDBLocal.zip; update kinesis-mock version to fix missing Logger classes; store SES templated email messages to DATA_DIR or tmp folder for easier debugging; refactor and extend AWS response parsing utils; remove Web dashboard process from supervisord.conf; fix logic in inject_test_credentials_into_env(..) to set custom env parameters for Lambda functions; fix DynamoDB to Kinesis stream event format - add "tableName", remove "StreamViewType"; add possibility for services to subscribe to runtime config changes; extend test utils to pass in an auth_creator_func(..) for creating API GW authorizers; minor: remove deprecated web UI documentation; add option to disable boto3 retries/timeouts, add `TEST_TARGET=AWS_CLOUD` option to run tests against real AWS; remove EventBus proxy listener patches for Tags operations handled upstream; integrate and use the util function to remove Docker env files; print version string if Terraform version check fails in integration tests; fix Docker detection on hosts with cgroup v2 (unified hierachy); replace `unparse` with custom XML serializer for AWS responses; support CloudFormation string placeholders with triples like `"${resource.attr.subattr}"`; improve kinesis startup routine and add KINESIS_MOCK_FORCE_JAVA config option; replace botostubs with boto3-stubs in test fixtures; fix timestamp format of Lambda event source mappings for TF compatibility; add retry logic for downloading Elasticsearch plugins to fix temporary network issues; extend ACM ARN integration test when importing certificates; improve infra graph code, extend tests, add new fixtures; add tests for Lambda invocation destinations; add unit tests for common and config; add JSON safe parsing when processing API GW event in local Javascript Lambda; patch moto to include region header for GET and HEAD requests; update CI workflow to aggregate coverage report; use JAVA_TOOL_OPTIONS to apply LAMBDA_JAVA_OPTS in Java Lambdas; cleanup and refactor CI configurations; add default account_id for API GW Lambda invocation events; minor: fix file path in "config validate" CLI command; fix returning error response when requesting ACL for non-existing S3 bucket; add ability to define UDP Docker ports in PortMappings class; fix edge routing to match rules if request host contains a dot "."; strip off warning messages when extracting Docker container ID from stdout; add exception response when calling DeletePolicy on non-existent IAM policy; refactor Lambda executor to use unified container API and break apart container/Lambda logic; pin version of "requests" library to fix import errors in Lambda tests; fix EXTRA_CORS_ALLOWED_ORIGINS environment variable to match docs; add feature that saves LocalStack version info into data dir; add pre-commit hook that runs linting and formatting; add support for CloudFormation Fn::GetAtt WebsiteURL for S3 buckets; refactor JSONPatch implementation for API GW to handle edge cases more reliably; add make targets for linting and formatting only modified files; add proper headers when triggering API destination target, fix ARN structure for EventBridge resources; fix extraction of EventBridge API destination name using new ARN format; fix S3 host-based routing detection; add CORS headers required for AWS SDK v3; fix accessing missing "body" from Lambda response in API GW; fix JSON Patch for API GW method settings; fix some data types for API GW patch operations; fix "application/xml" content-type header for S3 responses; refactor Firehose and properly return "ExtendedS3DestinationDescription" with extended attributes; add support for API Gateway documentation parts (tf-compat); fix running multiple API Gateway JSON Patch operations in sequence (tf-compat)
* v0.12.15: Security fixes: bind edge service to 127.0.0.1 by default (instead of 0.0.0.0); remove dead/unused CloudFormation code; refactor common.py and add tests; restructure Elasticsearch process management; fix processing of empty values in EventBridge event filters; fix JSON Patch operations for API Gateway usage plans; make for-loop in Makefile /bin/sh compatible; add flake8 rule F401 (unused imports); run pre-release smoke tests for Pro features in CI builds; remove quiet parameter from service starting; update code style badge in README.md; format the codebase with black and isort; add additional allowed CORS origins to fix Cognito issues; minor formatting in bug-report issue template; add CF support for CertificateManager::Certificate; refactor tests to fix/invert order of arguments in test assertions; add support for Kinesis CBOR error messages; refactor test_integration.py to use randomly generated resource names; add unit test for moto parsing of complex params from querystring; fix detection of resource status to allow re-deployment of CF stack after deletion; update bug-report issue template to assign correct label; fix minor formatting issues in http/proxy server; update .dockerignore to exclude files generated in CI build; fix installation of debugpy via pip module instead of calling pip CLI; add workaround for kinesis-mock persistence startup failure; reduce log verbosity for CORS/origin checks
* v0.12.14: Security fixes: fix CORS setup to prevent CSRF, add `DISABLE_*_CORS_*` configs; add KINESIS_INITIALIZE_STREAMS configuration to initialize Kinesis streams on startup; migrate from nose to pytests; add support for EventBridge API destinations; minor refactoring - add dynamodb_table_exists() to common utils; update badges in README; refactor test_error_injection.py into a unittest.TestCase class; minor: fix KeyError for missing EventSourceArn in Lambda API lookup; refactor tests and invert/fix order of assertion arguments; update coveralls config for new test setup with pytests; improve version check in check_terraform_version; pin serverless version in TestServerless to 2.48.0; add coverage install to Dockerfile.base to enable coverage C extensions; fix prefix filtering of events in EventBridge API in case of exact match; fix deprecation warnings surfaced when introducing pytest; minor: make "enabled" flag to add_job(..) optional; add support for V4 S3 presigned URLs with custom headers; add support for isBase64Encoded flag with Lambda integrations in API Gateway; fix extract build report step in docker-build CI phase; fix passing environment variables to container creation for LAMBDA_EXECUTOR=docker-reuse; add CloudFormation support for CloudWatch::Alarm resources; minor fix in file regex for plugin lookup to accommodate Windows path separators; fix request params for CF deployment of ApiGateway::Stage; parallelize builds and improve CircleCI workflow; minor fix to avoid exception on missing CloudFormation exports; add support for API GW MOCK integration and response parameters; fix linter exclusions in install.py; minor fixes in S3 API; fall back to using JAR for kinesis-mock installation for ARM systems (e.g., Macbook M1); add config option TF_COMPAT_MODE to enable TF compatibility mode (for TF integration tests); minor: add parse_json_or_yaml() util function; add threading event to indicate infrastructure has started; fix time duration unit for profiler log_duration output; remove superfluous coveralls config, now managed via CI env
* v0.12.13: Introduce kinesis-mock as default provider for Kinesis (replacing kinesalite); add support for API Gateway client certificates; fix minor formatting issue in profiler log; fix S3 bucket notification FilterRule name validation; minor refactoring around Kinesis handler and x-amzn-errortype response header; fix deprecation warnings in unit tests; fix timezone issues in timestamp calculation and datetime comparisons; add support for API Gateway - S3 integration for GET requests; use the new MOTO_S3_DEFAULT_KEY_BUFFER_SIZE variable for S3 in-memory buffer sizes; minor: update Helm repo URL in README from HTTP to HTTPS; minor fix in extraction of Lambda results from log output lines; add CF support for ResourceGroups::Group; refactor shutdown procedure; ignore trailing slashes for some routes in Lambda API; fix response for Lambda configuration update API; fix passing payload via stdin for large Lambda events using docker-reuse; fix duplicate Content-Type header in Lambda invocation responses; add BUCKET_MARKER_LOCAL option to customize S3 bucket name (`__local__`) for local Lambda code mounting; add support for API Gateway VPC Links; fix API GW JSONPatch operations and error responses; add support for x-id query param for S3 delete object requests; add tagging support for IAM policies and instance profiles; add support for Kinesis EnableEnhancedMonitoring; minor fix for Kinesis max stream retention period; add support for EC2 create_vpc_endpoint_service_configuration; fix start_edge to gracefully fail when stdin for sudo is not available; minor fix when extracting URI for API GW integrations; minor CF fix to extract PhysicalResourceId via get_physical_resource_id(); make parsing of IAM::Role properties more resilient; fix continuation sequence number in event returned by SubscribeToShard Kinesis API; use --env-file to pass env vars to Lambda containers to prevent cmd line arguments from becoming too long; fix symlink to aws CLI executable in Dockerfile; fix datetime format for Lambda put-function-event-invoke-config response; minor refactoring of Dockerfile and API Gateway tests; add support for requestParameters in Api Gateway method integrations; fix skipping S3 signature validation if S3_SKIP_SIGNATURE_VALIDATION is enabled; fix stripping off qualifier suffix when constructing ARN for Lambda lookup; update PYTHONPATH in image to accommodate both python v3.8 and v3.7; refactor API GW impl. for better compatibility with Terraform; parallelize SNS message delivery for improved performance; fix returning error response for attempting to delete non-existing S3 bucket
* v0.12.12: Add XRay trace headers in notifications from S3 to SQS; add initial support for Resource Groups API; minor enhancements in base image to optimize disk space; add support for managing request payers on S3 buckets; minor refactoring of docker-reuse Lambda executor for better extensibility; save SES email contents to disk in machine-readable format; add support for KinesisStreamSpecification parameter for AWS::DynamoDB::Table CF resource; fix missing SQS message attributes for notifications via SNS; add support for LAMBDA_DOCKER_FLAGS to support custom Lambda Docker run flags; add DEVELOP configuration for debugpy integration; add support for servicediscovery endpoints in API GW invocations; minor refactoring for EC2::VPCGatewayAttachment CF model; add patch for stepfunctions-local to enable cross-region Lambda access; minor: add simple items_equivalent() util function; use configured edge port in S3 presign URL calculation; add test for creating bucket with existsting bucket name; add support for session_token in S3 presign URLs; enhance validation of presigned URLs to support different port numbers in S3 URLs; add Lambda Ruby 2.7 image support and update tests; fix EC2::Route CF model to properly lookup deployment state if DestinationIpv6CidrBlock not set; fix fetching CF resource state for EC2::Route and Logs::LogGroup; remove obsolete DynamoDBLocal fix for Alpine; add EventsBackend to manage state of Events API resources; fix broken SNS test related to UnsubscribeURL returned on subscription attributes; fix edge route mapping for SES requests using /email route; add UnsubscribeURL in payload sent to HTTP SQS endpoints; minor refactoring in API Gateway implementation; fix syntax in aws_stack.py for compatibility with python 2.x; fix incorrect suffixes in SecretManager ARNs for secret lookups; temporarily set S3_SKIP_SIGNATURE_VALIDATION=1 by default (until all issues with S3 presign URLs are resolved); add docs for Kafka and Elasticsearch external services integration; minor fix in ACM to avoid returning duplicate DomainValidationOptions; add CF support for ApiGateway::RequestValidator, Logs::SubscriptionFilter; add region backend for DynamoDB state; add support for DynamoDB table replicas; minor: allow passing keyword args to async_utils.run_sync(..); add support for arn:aws-us-gov:iam:... managed IAM policies; fix Python sys path for module resolution when using local Lambda executor; update version in sample docker-compose.yml; minor: initialize Properties for CF resource instances; support ElasticsearchClusterConfig parameter for creation of ES clusters; add CloudFormation model for Redshift::Cluster; add test case for generating S3 presign URL from Node.js Lambda; fix integration test assertions to accommodate recent CloudWatch metrics changes; fix idempotence for SNS CreatePlatformEndpoint API calls; fix correct error code for getting attributes of non-existing SNS subscription; fix correct Authn header for internal call when replaying non HMAC request; fix filtering of CloudWatch metrics and dimensions; add simple TCP proxy server util; add "running" property to FuncThread; fix URL escaping when calculating presigned URLs to accommodate recent Quart server update; fix double response headers in CORS preflight API Gateway requests; refactor logic for sending SQS messages to DLQ; fix resetting ETags when copying S3 object from multipart upload; cache target API in edge requests for improved performance; skip gzip encoding for S3 responses to fix content-length issue with Go SDK; fix accessing raw response when returning gzip encoded content from Lambdas via API GW; rename currentThread to current_thread for deprecation in Python 3.10; minor: add utility function to clean up Docker containers; fix copying missing events file into container for Java Lambdas with docker-reuse; fix Kinesis response payload encoding for use with Java SDK; add S3_SKIP_SIGNATURE_VALIDATION config to skip S3 presign URL signature validation; add support for Route53 reusable-delegation-set APIs; add missing endpoints for StepFunctions startup command
* v0.12.11: Add support for ResourceGroupsTaggingAPI; add support for Kinesis targets in EventBridge; add HOSTNAME_FROM_LAMBDA configuration to enable connectivity in compose stacks with dynamic container names; fix missing PATCH method in API GW CORS configuration; add dynamic DNS check to fix issues with resolving s3.localhost.localstack.cloud; fix Event::Rule CF model to properly deploy rule with custom event bus; minor: refactor Lambda impl. for better extensibility; fix fetching Lambda details using ARN as well as partial ARN; refactor CF model and fix deletion method for Lambda::Function; fix bug in handler for DynamoDB BatchWriteItem API; add missing $context variable for VLT templates; add requestTemplates attr for ApiGateway::Method; minor fix for accessing non-existing attribute in ACM models; fix S3 presigned URLs with response header overrides; fix object tagging for S3 multipart uploads; minor refactoring in tests and AWS response utils; add domainName and apiId to Lambda events for API Gateway invocations; add filtering in EventBus using event patterns: prefix,numeric,anything-but; remove default cache-control header in S3 responses; add throttling support for DynamoDB BatchWriteItem requests; fix API Gateway invocation paths in Lambda events; handle x-id query parameter for S3 DeleteObjects requests; fix returning Arn attribute for Logs::LogGroup CF resource; add PERSISTENCE_SINGLE_FILE configuration variable; remove obsolete USE_HTTP2_SERVER and HOSTNAME configuration variables; add missing resourcePath to API GW Lambda events to fix Chalice invocations; strip quotes off StreamARNs when creating Kinesis stream consumers; fix idempotency for creation of SNS topics with tags; enhance CloudFormation support for API GW Model resources; fix DynamoDB to return empty response on no unprocessed items
* v0.12.10: Add initial support for CloudFormation stack sets and stack instances; replace AWS CLI commands with boto3 calls for /graph endpoint; initial support for AWS Support API; add support for iterator types on Kinesis SubscribeToShard requests; fix API Gateway integration to allow binary payload data; fix reprocessing of SQS messages in case multiple Lambda event source mappings are defined; remove obsolete code for S3 bucket encryptions; fix API GW integrations with no uri/integrationUri attribute (for mock integrations); add fix for StreamViewType in DynamoDB Streams event records; add CloudFormation support for EC2::NatGateway, KMS::Key, KMS::Alias, SecretsManager resources; fix stack status filter in CloudFormation API; support Kinesis streaming destinations for DynamoDB; return PhysicalResourceId for S3::BucketPolicy CloudFormation model; fix CF dependency resolution to avoid unresolved/nil resource refs; add edge mapping for EC2 requests with missing Auth headers; remove deprecated USE_MOTO_CF config switch; resolve refs in ExportName of CF stacks; fix Events API logic for recent upstream changes; add missing attributes in Kinesis SubscribeToShard response; fix API Gateway when applying JSON patch with empty patch value; fix passing region when constructing resource graph; fix CloudFormation GetAtt intrinsic function for attr string refs; fix proper stream view type of DynamoDB stream records; initial support for put_metric_filter for CloudWatch log events; minor refactoring and adding missing path in Dockerfile; cache cfn-response module in local infra folder instead of re-downloading each time; support JSON message structure with raw delivery in SNS; fix error logs on subscribe_to_shard for deleted Kinesis streams; add CloudFormation support for additional EC2 resources; refactor logic for CF stack set instances; add support for getting SSM parameters by path and filtering by labels; remove "content-encoding: identity" header in S3 responses to fix compatibility with PHP/Guzzle 6; fix build script to detect git:// repo URLs; add support for HttpEndpoint destinations in Firehose API; add SNS XRay propagation to SQS using ElasticMQ; fix compatibility of S3 API with Cyberduck; add Circle-CI project setup and build badge; move CI build commands into Makefile for easier migration; minor fix for missing Lambda attributes on legacy persistence states; refactor utils for resource tagging; minor fix in util function for parsing URL-encoded request payloads; minor fix for is_port_open(..) util function to parse port parameters; refactor logic for proxy listener, fix edge forward headers; fix local URLs for nested CFN stacks; fix Kinesis DescribeStreamConsumer to return consumer correctly; add health check status for init scripts; fix content-type for requests forwarded to Lambda fallback URL; update S3 regex to support HOSTNAME_EXTERNAL in bucket hostnames; fix returning None value on TransactWrite DynamoDB operation; add missing context attributes for Python Lambdas with local executor; add missing aws_request_id attribute in LambdaContext for local Lambda executor; add support for SES GetIdentityVerificationAttributes; add LS_LOG=trace option to print detailed request/response messages; minor refactorings for "config validate" command; add status of persistence initialization to health endpoint; add CloudFormation support for EC2::VPC, EC2::RouteTable, EC2::Route; add Location response header on S3 bucket creation; minor fix for extracting region from auth headers; fix incorrect URL modification when sending S3 requests to backend; fix encoding and timestamp format for Kinesis SubscribeToShard from Java SDK; fix returning code 200 for S3 HEAD range requests; fix S3 notifications for URLs with "x-id" query parameters
* v0.12.9: Major: add support for virtual host based addressing in S3 requests; enable and fix asynchronous CF stack deployments; minor fix for API GW patch operations on non-existing attributes; fix missing parameters in download utils function; add small util function to list local Docker images; fixed slash prefixes for path in S3 static website hosting; configure KMS to use $DATA_DIR as persistence folder; support PutRecord Kinesis endpoint in API Gateway integrations; fix addressing style by setting "auto" in default S3 clients; minor refactoring in download util functions; fix incorrect date format for policy expiration date on S3 signing; minor fix for accessing IAM role attributes; fix S3 Location Constraint for access with Node.js AWS SDK; fix key name with special char and multipart upload in S3 presigned URL; fix ARN format for IAM service roles; fix encoding and strip off quotes for kinesis bytes input; add support for IAM service linked roles; add small util function to create Lambda API Gateway integration; fix S3 bucket location constraint value for us-east-1 region; fix error response for S3 get-bucket-cors in case no CORS config exists; add ability to import REST APIs for APIGateway; fix EC2 responses for compatibility with Terraform VPC module; remove duplicated CFN integration test; add test to validate export names for CFN deployment; fix using regexes to match and extract RSA private keys; fix determining ID for deletion of ApiGateway::RestApi resources; fix failing tests for S3 presign URLs using incorrect bucket host; add LastUpdatedTimestamp for CF resources; minor refactoring in configs and S3 presign URL tests; fix lookup of CF resource ID for IAM::InstanceProfile model; minor fix: make Lambda handler file executable in test utils; add support for signature authentication for S3 host addressing based presign URLs; fix determining state for EC2::SecurityGroup CF resources; add missing get_physical_resource_id for IAM::InstanceProfile CF model; minor fix for SNS topic deletion in CF; fix Serverless tests and run CF deployments asynchronously; fix presigned GET requests with querystring auth parameters
* v0.12.8: add auto_restart option to ShellCommandThread to restart DynamoDB process on error; fix extraction of SQS QueueArn in CloudFormation models; run CF deployments asynchronously in the background; add CF support for EC2::Subnet, EC2::VPC, Events::EventBus, ApiGateway::Model; extract auth details from query parameters in edge service; fix mechanism to determine whether LocalStack is running inside Docker for Github Actions compatibility; fix extracting list of changes in CloudFormation change sets; minor fix in API GW request routing; fix result processing of external Lambda invocations via LAMBDA_FORWARD_URL; add test for Java Lambda archive built from Gradle; add support for v4 signature calculations in S3 presigned URLs; check existence of KinesisConsumer and add missing Header to binary Kinesis messages; fix edge route mapping logic to identify EventBridge API calls; fix incorrect region parameter in EventBridge tests; fix SQS redrive policy tests failing after recent upgrade; add small util function to get or create S3 bucket; add support for nodejs14.x Lambda runtimes; fix tests for new SNS subscription attributes; automatically confirm SNS subscriptions to fix TF deployments; minor fix for SES response parsing; extend TF tests with EC2 resources; fix missing 'detail' field when putting EventBridge events with empty details; fix resource path in event sent to Lambda from API Gateway; add logs with build info when process starts up; add support for deletion of SES templates; refactor tests and logic for EventBridge targets; fix log output for "localstack config" CLI commands
* v0.12.7: Add support for deleting S3 bucket lifecycle configurations; add CLI command for validating configurations defined in docker-compose files; fix evaluating conditions to skip resource deployment in CloudFormation; merge stack outputs on CloudFormation UpdateStack; avoid sending MessageGroupId to SQS when using ElasticMQ; add CloudFormation support for Lambda::EventInvokeConfig; add support and tests for StepFunctions intrinsic functions; fix Lambda handler in Serverless tests for local executor; add test for Kinesis stream consumer Lambda event mapping; fix adjusting CloudFormation stack status when running ExecuteChangeSet; add a TLDR-style docker run command in the README; fix disabling of rules in EventBus API; add AWS_REGION to environment when launching Lambda functions; initial support for Kinesis consumers and SubscribeToShard via HTTP2 push events; fix API Gateway response for base path mapping with empty path; fix setting of default region from environment variables; fix tests to accommodate min length of API GW API keys; add support for base path mappings in API Gateway; fix Kinesis GetRecords output with bytearray data for consumption with AWS Java SDK v2; add "events" target for EventBus to forward messages between different event bus instances; add support for LAMBDA_FORWARD_URL to forward Lambda invocations; update S3 event version from 2.0 to 2.1; skip returning groupName in IP permissions for non-default VPCs; enhance support for ACM domain validation; fix API Key validation for API Gateway for multiple keys configured; add support for accounts management in API Gateway; add support for API Gateway validators; add CloudFormation support for Route53::RecordSet; fix response for ACM certificate verification status; support Route53 matching for domain names ending with a dot; add initial support for SWF API; pin version of cryptography<3.4 to avoid issue with new Rust dependency; add missing endpoint/domain for ES call from Firehose; add .NET client library info to README; minor fixes for tagging CloudWatch alarms; fix extraction of tags from URL-encoded request payload; fix list_hosted_zones_by_vpc API for Route53; add API to list Elasticsearch versions; fix update of HOSTNAME_EXTERNAL in SQS via backdoor config API; handle empty marker in S3 list objects; add CloudFormation support for deletion of SNS subscriptions; make unzip(..) util function more resilient to errors inside Alpine/Docker; fix startup of Elasticsearch process on ES domain creation; minor refactoring of CloudFormation model base class; fix error response for non-existent keys in S3 range requests; add SES email delivery for SNS notifications; refactor IAM to incorporate upstream changes; minor refactoring of API GW stage variables; fix tests for ACM certificates created via Terraform; add module jdk.zipfs to custom JDK to fix JAR loading issues; add missing attributes for ACM certificates to avoid Terraform crashes; add support for Route53 ListHostedZonesByVPC; fall back to Python unzipping if native "unzip" command fails; add support for Route53 AssociateVPCWithHostedZone; support attribute TreatMissingData in CloudWatch metrics; minor fix in SecretsManager to accept secret ARN as SecretId; add test cases for CloudWatch Logs subscriptions; remove persistence for SNS APIs that cause issues with generated IDs; add support for Lambda event source mapping with self-managed kafka cluster as event source; ensure case-insensitive dict for headers to fix gzip encoding issue with TF; add LS_LOG option to customize the default log level
* v0.12.6: Convert Content-Length headers to upper-case as required by some S3 libs; fix logic for restoring DEEP_ARCHIVE objects in S3 API; fix incorrect response tags for Redshift ClusterSubnetGroups; add backdoor API to receive raw CloudWatch metrics; minor: add util function to kill process trees for cleanup/shutdown; minor refactoring of startup log messages; fix Java Lambda containers to listen on debug_port if specified in LAMBDA_JAVA_OPTS; fix millisecond conversion of ApproximateArrivalTimestamp in Kinesis GetRecords; support Lambda/Kinesis/Firehose targets for CloudWatch Log subscription filters; fix test credentials in DynamoDB request headers; fix region lookup for API Gateway REST API invocations; enhance CFN support for EC2::SecurityGroup, IAM::InstanceProfile, and KMS:Key; fix patching of API GW REST API attributes; minor fix for local Lambda mounts; fix CF attribute lookup for LambdaPermission; enhance CloudFormation support for API Gateway resources; fix Kinesis proxy listener to skip base64 decoding for byte message contents; minor CloudFormation fixes for S3 buckets; enhance CloudFormation logic for managed and inline IAM policies; add tagging support for CloudWatch metrics; fixed gzip encoding of payload on Lambda trigger from log subscription event; minor refactoring of Lambda API for better extensibility; fix DynamoDB listener to properly look up throttling configuration; add SES listener to add missing xmlns for error responses; fix edge path routing for S3 PutObject with nested key name when using Java SDK; fix string format of SecretsManager secret value when referencing from SSM; modify timestamp format of CloudWatch GetMetricData entries; minor: add util method to initialize REGIONS for RegionBackend; support EC2:Instance resources in CloudFormation; fix LastModified value for Lambda API to support Terraform 0.13 and 0.14; perform deletion of DynamoDB streams only if table exists; fix date format in SES for AWS Java SDK v2 compatibility; fix deployment of CloudFormation templates with IAM::InstanceProfile; add support for tags in CloudFormation stacks; minor fixes for CloudFormation and handling AWS auth headers; fix logic and integration test for Lambda destinations; add support for Fn:GetAZs intrinsic function in CloudFormation; include change set params when resolving stack parameters; refactor Lambda API to use RegionBackend base class; add messageGroupId parameter for SQS targets in events rules; fix JSON encoding of payload from Lambda fallback invocation; fix error response on Firehose PutRecord for non-existing stream; minor refactoring of API Gateway invocation logic for better extensibility
* v0.12.5: Major change: Rewrite CloudFormation to use an independent deployment mechanism; refactor CloudFormation implementation to use resource model classes; fix date format in SSM & SecretsManager for Java SDK compatibility; add missing CF resource props for DDB/SQS resources; add util functions to determine disk usage of files/folders; add proper signal handling in supervisord to support kubernetes deployment; fix removal of deleted resources from CF stack template; add SET_TERM_HANDLER config for Docker entrypoint; minor fixes for CF resource updates for IAM roles and SFN state machines; add default config for StepFunctions port to avoid clash with PORT env variable; fix infinite recursion when loading stack exports that reference other imports; fix response format for CloudFormation ListExports; add support for Lambda destinations to forward results to SQS; add persistence for secrets manager; add missing edge route mapping for SNS ConfirmSubscription; add message group id for events in SNS->SQS integration; add integration test for StepFunction try/catch functionality; add small util function to determine whether a local port can be bound; enhance DynamoDB performance by skipping item lookups if no streams enabled; fix returning log output on Lambda errors; minor refactoring of region backend base class; fix yaml to JSON parsing of CF templates; recursively return all outputs for nested CloudFormation stacks; support S3 key names containing hashes; minor fix in date format parsing for S3 policy expiration dates; add support for CF functions select/split/base64; minor CF fixes for use with CDK; add gzip decoding to edge service to support zipped request payloads; add missing CF APIs: GetTemplate, GetTemplateSummary, ListImports; add method to configure CF deploy templates in resource class; refactor CloudFormation to use model classes; fix SNS message format for .NET SDK by removing null values; add ability to get an AppSync DataSource's physical id in CF; fix returning LogResult from synchronous Lambda invocations; fix assertions for machine creation/deletion in StepFunction tests; fix fetching Arn attribute on SFN state machine updates via CF; fix broken tests related to util function change; extend create_zip_file util function to allow specifying target zip file; pass environment variables to Lambdas with "provided" runtime; fix escaping of policy JSON in ApiGateway resources using Terraform; run Lambda set_function_code in background to avoid network timeouts; sort S3 object versions by creation date; fix whitespaces in SQS redrive policy JSON; minor fix when cloning CF stack template metadata
* v0.12.4: Use locking to run Lambdas with docker-reuse executor in sequence; use locking to fix concurrency during persistence restoration; skip MD5 checks on S3 multipart uploads; log content of outgoing emails in SES; fix absolute path for DATA_DIR when starting up DynamoDB process; extract Ref attribute for CloudFormation Sub attributes with "${resource}" syntax; minor fix in CloudFormation related to missing set_exports method in `moto-ext`; hardcode local hostname instead of using $HOSTNAME from the environment; make `TEST_*_URL` endpoints configurable in the environment; fix broken S3 test related to date format of Expires header; fix parsing of host name to determine path based addressing in S3 requests; fix processing of EventBridge events on multiple targets and inputPath; use `.Config.Entrypoint` for more robust Docker entrypoint lookup; add gzip encoding of response payloads to edge service; refactor and enhance CF resolution of placeholders in Sub expressions; minor: add util function to run async coroutine in given event loop; fix logic to update Lambda function version based on content hash; fix CF issue updating state machine with FN ref in definition string; minor: add util function to construct XML response messages; fix resolving name refs when querying CF resource deployment state; minor refactoring in edge routing and CF FN::ImportValue resolution; add backdoor API to restart all processes inside the main container; remove encryptionType:NONE attribute in Kinesis records to avoid breaking .NET lambdas; minor fix in startup command for `provided` Lambda runtimes; add SNS target type for EventBridge API; fix stdin I/O issues when passing events to provided Lambda runtimes (e.g., for Rust); fix CF export name uniqueness checks prior to stack deployment; fix issue when updating CF template with StateMachine; add integration for StepFunctions state machine executions in API Gateway; fix default account ID in SecretsManager ARN responses; migrate Helm charts into separate repo
* v0.12.3: Add support for API Gateway update-rest-api via JSON patch operations; add content based filtering in Events API; add support for Lambda code signing APIs; fix /etc/hosts and Quart dependency for Centos 8; add Vagrant configuration for reproducible CentOS dev environments; add support for Lambda concurrency API; minor: reduce log verbosity for chunk-based file downloads; enhance CloudFormation logic to load state of existing resources; add required workdir to supervisord configuration; enhance SSM / SecretsManager integration to get secret parameters; fix edge route mapping for EventBridge requests from Go SDK; fix response structure for API GW Integration/Response; disable moto instance tracking to avoid memory leak; add support for Route53 get-change; handle IAM::Policy resource in CloudFormation; add integration test to deploy CF template generated by CDK; refactor and stabilize CloudFormation dependency resolution mechanism; fix passing of stack parameters/resources to CloudFormation changesets; fix default account ID in SecretsManager ARN responses; add edge forwarding rule for AWS AssumeRoleWithSAML action; release initial version of Helm chart; fix issue with resolving FN::Sub references in CF templates; ensure using correct test credentials for generating S3 presigned URLs; add missing Access-Control-Allow-Credentials CORS header to S3 responses; fix recreation of SNS topic with same name and different tags; improve Terraform tests; add PackageType property for Lambda functions; fix missing attributes in Lambda update-function-config; add test cases for Lambda code signing config; minor refactoring in DynamoDB test utils; minor refactoring of AWS test credentials; enhance support for FN::ImportValue and FN::Sub in CloudFormation templates; support KCL 2.x timestamps and ARN replacements in Kinesis CBOR payloads; consider $REQUESTS_CA_BUNDLE for SSL verification in download utils; fixed timeoutInMillis attribute missing from API Gateway integrations; fix edge route mapping for STS AssumeRoleWithWebIdentity; fix SSM & SecretsManager integration for secrets names with slashes; fix URL host name and credentials when generating presigned URL; add missing CachingClusterStatus in API GW to fix Terraform crash issue; add Thai segmentation support to JRE as required by Elasticsearch 7+; create custom, compressed JRE via jlink in base image; fix non-zero content length for gzipped 204 status
* v0.12.2: Add proper CORS headers to S3 responses; expose SecretsManager secrets via SSM parameter references; fix parsing of Content-Disposition header in S3 multipart uploads; add carriage return to SQS message payload validation regex; add support for SQS queue names containing slashes; add support for resource policies in SecretsManager; add test for S3 precondition check; add test for Terraform API Gateway resources; use distinct values for missing CloudFormation resource props; handle non-zero ReceiveMessageWaitTimeSeconds for SQS; refactor CF tests; add support for custom CI build commands via $CUSTOM_CMD; add README instructions for test credentials required for presigned URLs; fix Content-Length mismatch issue for HTTP server responses; add util function to create API GW Lambda event request context; fix hypercorn response body on 412 status code; upgrade base image and local Lambda executor to Java 11; allow adding multiple permission statements to Lambda function policy; minor: fix logic for missing authorizerId in API GW authorizers
* v0.12.1: Fix missing module import for Windows; set correct Id attribute in S3 notification messages; enable setting custom authorizers on API GW resource methods; add log output listener for shell command thread; fix DynamoDB streams sequence number mismatch on GetRecords; add docs about using AWS CLI v2 from Docker image; updates in developer documentation and README (e.g., docker-compose version); support filtering of events by pattern using eventPattern; add CloudFormation support for Lambda::Permission; fix date format in CloudWatch responses; fix service name and NS URLs for XML service responses; add Terraform test for several resources (Lambdas, S3 bucket CORS integration); fixed gzip encoding for empty response content; refactor StepFunctions integration tests; pass $EDGE_PORT to Lambdas; add test for creating SFN State Machine with Choice operator; add test for creating SQS queue with attributes via CloudFormation
* v0.12.0: Single edge port now stable for all APIs; publish SNS messages asynchronously; fix edge route mapping for S3 HEAD requests; fix invalid account ID in CloudWatch logs listener ARNs; minor fix of XML root tag for S3 error responses; fix issue with blocking sockets in HTTP2 server; minor refactoring of /graph endpoint; fix numeric timestamp format in Kinesis records required by Go SDK; add CloudWatch as a static dependency for Lambda API; disable custom Java Lambda executor and replace with default lambci mechanism; add CBOR encoding support for Kinesis API; raise error when attempting to update CF stack with unmodified template; create env INIT_SCRIPTS_PATH to specify path for init files in Docker; add more fine-grained DynamoDB error injection with read/write error probabilities; extract InputPath expression for notification messages to EventBus targets; fix missing attributes when adding IAM permission to Lambda function; fix case sensitivity for bucket names in S3 bucket notifications; add simple integration test for Terraform resources; fix debug port parser for Java Lambda executor to support different formats; add signature and expiry validation for S3 presigned URLs
* v0.11.6: !!Breaking Change!! Starting with this release, all services are now exposed via the edge service (port `4566`) only; fix boolean values in IAM responses; fix PutEvents API call with no source specified; add download URLs for Elasticsearch 7.7; minor refactoring in SFN test code; fix endless loop when S3 error document is missing; add integration test to verify MAP tasks in SFN state machines; refactor CF logic for API GW resources and empty/Null values; fix Python path when running Lambdas using local executor; refactor API Gateway utils and test code; refactor Lambda context handling; add LAMBDA_DOCKER_DNS config to utilise custom DNS server for Lambda containers; fix "TypeName" as optional param for Elasticsearch v7; refactor startup logs to print correct ports in output; extend Serverless tests with SQS and API Gateway resources; use S3 path addressing when host starts with localhost IP or hostname; add test to assert event deletion for SQS Lambda event source; fix error response for requests to non-activated APIs; add localhost.localstack.cloud as alias to SSL cert; fix network_mode:bridge in docker-compose.yml; add Serverless integration tests to cover DynamoDB and Kinesis resources; add switch to disable Lambda handler validation; add Lambda request body length check; use edge as single entry point; performance improvements in plugin loading; forward requests in-memory instead of opening port per service
* v0.11.5:
  - !!Breaking Change!!: Starting with releases *after* v0.11.5 (i.e., `latest` and all future release tags), all services are now exposed via the edge service (port `4566`) only! Please update your client configurations to use this new endpoint.
  - Changes: Add support for importing REST APIs from Swagger docs in API Gateway; add config variable to customize the main Docker container name; add missing attributes in Lambda events triggered from Kinesis; fix Lambda event to match SNS message ID; refactor util functions for AWS responses; update Lambda environment variables on CF stack update; fix default region in edge service to avoid region mismatches; concatenate Firehose batch records and combine them into single S3 objects; allow setting MAX_POOL_CONNECTIONS via environment variable; use paginator for DynamoDB list tables; fix EC2 creationTimestamp format; refactor logic to forward requests to S3_BACKEND; fix edge route for /graph endpoint; read name of main Docker container dynamically based on hostname; fix URL encoding of S3 object key names in SQS notification messages; fix edge route for S3 bucket HEAD requests; support gzipped S3 responses when requested via Accept-Encoding header; refactor CloudFormation deployments for API Gateway; add several retries to make integration tests more resilient; add DynamoDB error handling for query type ALL_ATTRIBUTES and projection type != ALL; fix posting to SQS on queue URL with trailing slash; use random available port for Lambda container server in Docker "host" network mode; fix CF/Serverless deployment for ApiGw APIs with missing root resource; add adaptive, unbounded thread pool to avoid deadlocks on concurrent requests; fix JSON serialization of event details on eventBridge put_events; return 304 if If-None-Match header is specified and S3 object ETag has not changed; adjust timestamp format for JSON-safe object conversion; cut out None from Delimiter tag in S3 responses; fix edge mapping for S3 PutObject requests; use a mock client to prevent moto Lambda objects from talking to Docker; fix CF deploy for API GW RestApi resource; add default values for DDB ProvisionedThroughput in CF; add test to trigger Java Lambda from SNS event source; fix Lambda event from API Gateway to send HTTP method it was called with; fix mismatch of crc32 hashes for patched SQS responses; fix S3 compression for non-bytes string response body; add test for DynamoDB stream triggering Lambda event source; add test to assert exception for DDB query on non-existing table; fix CF deployment of API Gateway integration and integration URI with empty path
* v0.11.4: Add initial support for ACM API; build and push localstack-full image in CI, make light image the default; support client context passed to Node.js Lambda handler; increase max threads in thread pool to improve concurrency; support custom Lambda integration in API GW; fix HOSTNAME_EXTERNAL extraction to determine path-style addressing in S3; support "sms" as SNS subscriber protocol; support platform endpoints in SNS; fix RedrivePolicy for new SQS backend; fix triple logs in debug mode; fix format of Kinesis stream ARNs in CF; enhance implementation and tests for API GW HTTP/HTTP_PROXY support; support CF deletion of Lambda functions and IAM roles with inline policies; fix DynamoDB TransactWriteItems with ConditionCheck; add retries to fix intermittent SSL cert generation errors; fix DynamoDB stream MODIFY/INSERT event on UpdateItem for new item; fix DynamoDbStreams get-shardId-iterator with AT_SEQUENCE_NUMBER; fix proxy CORS headers; properly convert between Kinesis stream names and ARNs; fix generation of random password in SSM; add dummy AWS credentials to Lambda Docker containers; add test for VPN Gateway attachment.vpc-id filter; fix API key checks for API GW paths with path params; fix content-type in presigned S3 URLs; add support for pathPrefix in IAM list_users; fix SSL context creation error for multiple threads; enhance command line ports parsing; enhance CF support for ApiGateway::RestApi; add option to use default Lambda endpoint for StepFunctions; add tests to tag/untag SQS queues; add basic string functions in VLT templates; add tests for SQS FIFO queue with group/deduplication ID on multiple messages; fix invocation of destination Lambda for Logs subscription filters; add config option for DynamoDB Java heap size; add test for SQS DLQ when maxReceiveCount is reached; add missing region to EC2 getAccepterVpcInfo response; return raw response in edge proxy to fix gzip encoded S3 content; add test to trigger multiple SNS subscriptions in the presence of handler errors; fix adding multiple permissions to single Lambda function; return table name for DynamoDB table Ref in CF; make DDB stream creation asynchronous; replace ${filename} variable references in S3 presigned responses; fix HTML escaping of SQS message attributes; increase Quart server max content length; add SQS as target in EventBridge; fix shardId format for DDB Streams; add support for DynamoDB Global Tables; fix S3 Content-MD5 base64 checks; extend Java Lambda classpath; fix Docker port mapping for PORT_WEB_UI
* v0.11.3: Switch to Quart Server for initial version of HTTP/2 support for API endpoints; move /health check endpoint to edge port; use moto instead of ElasticMQ as default backend for SQS; add thread synchronization to Lambda config initialization; point Lambda LOCALSTACK_HOSTNAME to main container directly; add CORS headers to all OPTIONS responses by default; upgrade DynamoDB to latest backend version; fix CF deploy issue with SNS resources, IAM role policy document; fix direct access to queue URLs with new SQS backend; encode account ID in SQS queue URLs; add handling of query parameters in SNS requests; use JSON safe dumping of bytes in API Gateway; determine proper external port in SQS URLs; fix handling of S3 LocationConstraint on bucket creation; add missing Record values to Kinesis stream listener response; fix DynamoDB DeleteEventSourceMappings in case tableARN is None; fix format of S3 InvalidRange error response; support CF condition based on AccountId; fix error responses for S3 Content-MD5 header; fix S3 bucket creation date for Java SDK v2; delete event source mappings on deletion of DynamoDB table; return proper response details on Lambda invocation error; store SSL certs to random tmp files in case of permission issues; enhance path matching for API Gateway invocations; fix edge mapping for CloudWatch, S3 HEAD requests, SQS requests; fix DynamoDB shard IDs; fix lower case for SQS->Lambda message attributes; pass HTTP_PROXY to Lambda if configured; skip Lambda invocation if event source mapping is in state Disabled; fix S3 CORS policy with single origin; fix S3 storage class on multipart upload; fix passed parameters on API Gateway proxy resource method call; cleanup asyncio thread pool on shutdown; fix S3 timestamp format; support expiry in S3 multipart POST; support Elasticsearch snapshot repo; fix binary MessageAttribute for SNS->SQS; make sync/async Lambda event sources configurable; Fix chunked encoding in S3 responses; add Firehose support for EventBridge targets; pass multivalue headers from API GW to Lambda; add persistence support for SNS; add API Key validation in API GW; fix handling of S3 multipart form upload via edge port; fix API GW response on DELETE Lambda integration; support StepFunctions targets in scheduled event rules; filter out Lambdas by region in ListFunctions; fix Terraform deletion of EC2 NAT Gateways; add support for IAM SimulatePrincipalPolicy; remove Python 2 tests in CI; add EventBridge schedule expression for HTTP subscribers; fix Windows host path for Lambda volume mounting; add UnsubscribeURL to SNS notification message
* v0.11.2: Use dynamic instead of hardcoded backend service ports; use random port for multiserver; add API Gateway integration with DynamoDB; add Lambda support for the dotnetcore3.1 runtime; handle kms_key_arn/vpc_config in Lambda models; add bucket existence checks for S3 operations; refactor CLI and infra startup; fix mapping of CloudFormation account IDs; add persistence support to SQS API; remove obsolete subprocess32 dependency; optimize travis build for light image; add name for non-existent Lambda in calls to LAMBDA_FALLBACK_URL; add tests for CW getMetricData, API GW CreateModels, S3 listing 1000+ objects; add tests for EC2 create_vpc_endpoint, S3 put/get bucket versioning; add integration test for CloudWatch put_metric data; add test case for SQS queue RedrivePolicy attribute; fix health check for HTTPS endpoints with self-signed certs; mock simple response for EC2 reserved instance APIs; fix error handling on SQS sending of empty message batch
* v0.11.1: Add support for Lambdas triggered by scheduled event rules; lazily install and allow selection of specific Elasticsearch versions; add ability to return multi valued headers from Lambda - API GW integration; fix CF deployment for EventPattern attribute in Events::Rule; add CF support to update instances of IAM::Role; implement Events put_events with SQS and Lambda targets; delete notification configurations on S3 bucket deletion; fix default RoleName in CF dependent IAM roles; support S3 expiry for pre-signed URLs and objects; add metadata headers in S3 GET responses; fix edge request forwarding for public S3 URLs; add missing S3 response headers for bytes ranges and request IDs; add util class to fix account IDs in STS listener; support "exists" operator for SNS filter policy; fix IAM detach_role_policy and add missing managed policies; fix tagging support for ES domains; print version number when starting up; fix response content for IAM error messages; update startup log messages with new edge port; fix requesting SSM params with leading slashes; fix resolving CloudFormation refs when updating resource IDs; add support for tags on IAM CreateUser calls; fix data type conversions in SNS->SQS message attributes; fix API Gateway put_integration to avoid responseTemplates containing null values; add test cases for STS get_federation_token; fix Docker port mapping conflicts by avoiding overlaps; add CF test for empty event rules names; delete SFN state machines via CF; consider None data when stripping chunk signatures in S3 requests; fix DynamoDB behavior for ReturnValues on PutItem; support custom Lambda endpoint for StepFunctions; add simple integration test for Serverless deployment; check BatchSize in Lambda event source mappings; add CFN support for Events::Rule, S3::BucketPolicy, Logs::LogGroup, and ElasticSearch/SecretsManager/KinesisFirehose resources; fix case sensitivity for Connection keep-alive header; put util jars at end of classpath for local Java Lambdas; add persistence for SSM and SecretsManager, introduce PersistingProxyListener; skip persistence replay if an API is disabled; optimize image size; create stripped-down light version of Docker image with lazy loading of ES libs; add documentation for USE_LIGHT_IMAGE; add checks for HOST_TMP_FOLDER when running in Docker
* v0.11.0: Add Edge service as central API entry point; fix content-type header for CloudWatch logs responses; add test to assert EntityAlreadyExistsException when recreating IAM role; add tests for deletion/re-creation of CloudFormation resources; add missing API Gateway template util functions; add test to assert DelaySeconds for Lambda SQS event source; add tests for S3 uploads with special content and large file sizes; enhance integration tests Secrets Manager API; add debug logs for publishing SNS messages; add support for Lambda FunctionEventInvokeConfig; fix Lambda deployment for mountCode=true; fix Lambda SQS event source for SendMessageBatch; implement tagging for DynamoDB tables; fix message attributes in SQS-Lambda integration; allow setting static debug port in LAMBDA_JAVA_OPTS; add LastUpdateStatus to Lambda response to fix terraform deployment
* v0.10.9: Update Elasticsearch to 7.1; add support for SNS redrive policy for Lambda/SQS/HTTP events; add message polling mechanism for Lambda-SQS integration; add test for S3 list_object_versions with EncodingType parameter; fix error around ChangeSet deployment in CloudFormation; add CloudFormation support for SSM::Parameter, API Gateway MethodResponses; support passing of parameters to nested CF stacks; fix CF dependency resolution for stack update; fix downloading of CF template from S3 with custom hostname; change timestamp formatting (millis instead of micros); fix returning ETag for S3 GetObject calls with range parameter; handle empty Subject in SNS publish calls; fix send_raw_email for sending raw emails in SES; clear out sys.modules to resolve name clashes for multiple local python lambda functions; add SQS list-dead-letter-source-queues API; fix SecretsManager list-secrets to return same ARNs for secrets; suppress supervisor warning when running in docker as root; generate default Lambda FunctionName in CloudFormation; integrate S3 starter into multiserver to improve performance; Fix empty response for PutTargets in CloudWatch Events; fix forwarding of Lambda output to CloudWatch Logs; fix region in CF stack ARNs
* v0.10.8: Make Lambda batch size configurable for Kinesis event source mappings; move Java sources into separate project; refactor CF dependency resolution loop; fix deployment of EC2 subnets with CidrIpv6; fix creation of SQS tags via CloudFormation; optimize plugin loading to speed up boot time; fix notifications for S3 uploads made with presigned POST requests; fix objectsize in S3 notification events; fix SNS subscription confirmation message to include signature details; configure Node.js Lambdas to skip SSL verification; add CF support for S3::BucketPolicy; fix returned attributes on ReturnValues=ALL_OLD for DynamoDB PutItem; fix CreationTime for CF stacks; apply LAMBDA_REMOVE_CONTAINERS config for docker-reuse Lambda executor; fix handler lookup for "provided" Lambda runtime; update exports on CF stack update; allow deleting a specific version of an object in S3; return SQS `maxReceiveCount` as integer; add basic `/health` check endpoint; return ConsumedCapacity for DynamoDB Query action; fix CloudWatch log streams lambda timestamp format; support static refs in CloudFormation Fn::Sub strings; fix RawMessageDelivery subscription values for SNS - SQS integration; support ExtendedS3DestinationConfiguration in Firehose streams; expose Java options for local Lambda executors; fix setting of empty SQS queue attribute values; add API to confirm SNS subscriptions; add persistence for Elasticsearch Service API calls; mark non-Docker Java `LocalstackExtension` as deprecated; prefix CloudWatch event file names with timestamps; remove None strings from SNS results; refactor resolution of CF resource name placeholders; fix CloudFormation support for IAM::Role; add ExportName to CloudFormation stack outputs; fix SNS tag listing to remove duplicate tags; fix regex for replacement of S3 ETag hashes; update ElasticMQ version, fix SQS tags API; refactor logic and use single file for persistence; resolve CloudFormation attributes starting with lower case; fix region for SQS queue ARNs in Lambda event source mappings; fix `nextToken` for CW Logs API; add support for Java11 Lambda runtime; adjust urllib3 pool size to allow more parallel HTTP requests; fix CreationDate format for S3 ListBuckets; fix forward URL prototol for S3 proxy; add test for S3 range header; make Lambdas triggered by SQS run asynchronously; fix S3 uploads with underscores in metadata; include latest Lambda regions from boto3; add ignoreDockerRunErrors JUnit Docker attribute; pull non-existing Docker image from JUnit runner; fix detection of absolute URLs in proxy paths
* v0.10.7: Support dead letter queues for Lambdas and SQS queues; add support for nested CloudFormation stacks; allow "True" as value for SNS RawMessageDelivery; add mechanism to delete CF resources of deleted stacks; changed local-kms binary location to official upstream repository; fix S3 path layout for Firehose streams; add tagging support for CW events; skip unnecessary extraction of Java lambda archives; add test for SQS change_message_visibility; return CF stack events for deleted stacks; fix URL encoding when reading key name for S3 Range fix; fix content-type for S3 Range requests; increase Java docker timeout for image pulls; fix routes for DynamoDB shell; add Java test for S3 presigned object upload; fix S3 paginated requests; fix S3 delete-objects for non-existing keys; properly map different JSON data types in Lambda responses; fix CF Arn attribute for CloudWatch LogGroups and S3 buckets; fix tags on SNS topic creation; add content-length header in S3 success_action_status response; allow nested invocations of SFN state machines; fix deletion of S3 object tags; fix S3 results for max-keys=0; improve performance on Alpine/TravisCI; lazily start up Elasticsearch instance on ES domain creation; add DOCKER_LAMBDA_API_PORT config
* v0.10.6: Fix MD5 hash of message attributes on SQS->Lambda integration; add `LAMBDA_REMOVE_CONTAINERS` config; bump moto to latest version; fix LocationConstraint markup in S3 responses; fix success_action_status for S3 POST Object; add UUIDs to CW events; update SSL certificate to new requirements in MacOS Catalina; fix Docker port mapping for JUnit test runner; add test for CW logs multi-byte message; fix S3 bucket name validation, auto-convert uppercase characters in bucket names; fix CF deployment of step functions; fix DOCKER_HOST_FROM_CONTAINER config for local exec; fix object ACLs for multipart uploads; add initial support for Kinesis stream consumers; enhance proxy to transparently accept both HTTP/HTTPS on the same port; support TemplateURL for CF ValidateTemplate; support Marker for S3 ListObjects; fix passing of metadata on S3 presigned URL put; allow trailing slashes in Elasticsearch API; refactor Java libs, make Docker the default JUnit executor; update ElasticMQ version; add initial support for KMS via `local-kms`; fix Terraform deployment for Lambdas; fix stack name in CloudFormation resource names; fix S3 bucket name checks for domain based addressing; add locking for SSL cert creation; support JARs in lib/ folder for Java lambdas; disable SSL verification for CF template URLs; add S3 website ErrorDocument emulation; fix return type of Lambda GetPolicy; fix API Gateway authorizer implementation; fix permission issue for cert files; fix non-JSON content types for API Gateway; fix DynamoDB error for Put on non-existing table; fix notification triggers on S3 presigned URL upload; add CloudFormation support for deployment of SAM resources; fix SNS FilterPolicy configuration; add kinesis/ListStreams API Gateway integration
* v0.10.5: Various CloudFormation fixes: deployment of API GW method integrations, properly skip resource updates, Lambda SQS event source mapping, avoid duplicate resource creation, support for ApiGateway::GatewayResponse and Events::Rule, log groups for Lambdas; support adding Lambda policies; customize Docker registry for Lambda images; support multiple configurations in S3 notifications; fix encoding of non-ASCII results from API Gateway; allow docker-reuse to use mounted volumes; support presigned S3 URL upload notifications; fix lookup of Python Lambda handler in sub directories; upgrade kinesalite; fix duplicate CORS headers; fix mapping of Lambda versions and ARNs; fix SNS x-amz-sns-message-type header; send SNS confirmation message for HTTP(S) subscriptions; fix DynamoDB local libs for Docker Alpine; add CF support for SNS subscriptions; fix RecordId for firehose put-record-batch; fix SQS messages with multi-byte characters; avoid creating multiple SNS subscriptions; add .bat script and support running under Windows; fix S3 location constraint for CF
* v0.10.4: Add checks for open UDP ports; fix S3 chunked encoding uploads; fix LatestStreamLabel; fix CORS headers for SQS/SNS; set Java lambda debug port only when needed; expose default region in a util function; fix MacOS tmp folder; clear tmp supervisord logs at container startup; fix signed header requests for S3; expose Web UI via HTTPS; add Timestamp to SNS messages; fix attributes for SQS queues addressed via URL
* v0.10.3: Allow specifying data types for CF attributes; add API for service status and starting services at runtime; support NextShardIterator in DDB streams; add mock responses for S3 encryption and replication; fix rendering of resources in web UI; custom SQS queue attributes; fix Lambda docker command and imports; fix SQS queue physical ID in CF; allow proxy listener to define custom backend per request; support Lambda event body over stdin; exclude `ingest-geoip` ES module to optimize image size; skip checking MD5 on S3 copy; fix DynamoDB table ARN for CF; fix CF deployment of StepFunction activities; fix uploading of Java Lambda as JAR in ZIP; fix installing libs for plugins; added `LAMBDA_JAVA_OPTS` for Java Lambda debugging; bump Maven dependency versions; refactor Lambda API; fix boolean strings in CF templates; allow overriding AWS account id with `TEST_AWS_ACCOUNT_ID`; fix incorrect region for API GW resources created via CF; fix permissions for cache files in `/tmp`
* v0.10.2: Fix logging issue with async Lambdas; fix kinesis records processing; add basic support for `Ref` in CloudFormation; fix ddb streams uuid generation; upgrade travis CI setup; fix DynamoDB error messages; cache server processes
* v0.10.0: Lazy loading of libraries; fix handling of regions; add API multiserver; improve CPU profiling; fix ES xpack installation; add basic EventBridge support; refactor Lambda API and executor; add MessageAttributes on SNS payloads; tagging for SNS; ability to customize docker command
* v0.9.6: Add API Gateway SQS proxy; fix command to push Docker image; fix Docker bridge IP configuration; fix SSL issue in dashboard infra; updates to README
* v0.9.5: Reduce Docker image size by squashing; fix response body for presigned URL S3 PUT requests; fix CreateDate returned by IAM; fix account IDs for CF and SNS; fix topic checks for SMS using SNS; improve documentation around `@LocalstackDockerProperties`; add basic EC2 support; upgrade to ElasticSearch 6.7; set Last-Modified header in S3; preserve logic with uppercase event keys in Java; add support for nodejs 10.x Lambdas
* v0.9.4: Fix ARNs in CloudFormation deployments; write stderr to file in supervisord; fix Lambda invocation times; fix canonicalization of service names when running in Docker; add support for `@Nested` in Junit5; add support for batch/transaction in DynamoDB; fix output buffering for subprocesses; assign unique ports under docker-reuse; check if topic ARN exists before publish
* v0.9.3: Fix output buffering of child processes; new release of Java libs; add imageTag attribute for Java annotation
* v0.9.2: Update to Python 3 in Dockerfile; preserve attributes when SNS Subscribe; fix event source mapping in Lambda; fix CORS ExposeHeaders; set Lambda timeout in secs; add tags support for Lambda/Firehose; add message attributes for SQS/Lambda; fix shard count support for Kinesis; fix port mappings for CloudFormation
* v0.9.1: Define dependent and composite services in config; forward Lambda logs to CloudWatch Logs; add SQS event deserializing for Lambda; fix AWS_PROXY for JSON list payload; add START_WEB config parameter; return correct location for S3 multipart uploads; add support for Lambda custom runtime; fix account ID for IAM responses; fix using correct SSL cert; limit memory usage for Java processes; fix unicode encoding for SNS messages; allow using `LOCALSTACK_` prefix in Docker environment variables; enable request forwarding for non-existing Lambdas; fix large downloads for S3; add API endpoint for dynamically updating config variables; fix CloudFormation stack update
* v0.9.0: Enhance integration with Serverless; refactor CloudFormation implementation; add support for Step Functions, IAM, STS; fix CloudFormation integration; support mounting Lambda code locally; add `docker-entrypoint-initaws.d` dir for initializing resources; add S3Event Parser for Lambda; fix S3 chunk encoding; fix S3 multipart upload notification; add dotnetcore2.1 and ruby2.5 Lambda runtimes; fix issues with JDK 9; install ES plugins available in AWS
* v0.8.10: Add kclpy to pip package; fix badges in README
* v0.8.9: Replace moto-ext with upstream moto; fix SNS message attributes; fix swagger; make external SQS port configurable; support for SNS DeleteTopic; S3 notifications for multipart uploads; support requestContext in AWS_PROXY integration; update docs for SSL usage
* v0.8.8: Support Docker network config for Lambda containers; support queryStringParameters for Lambda AWS_PROXY apigateway; add AWS SecretsManager service; add SQS/Lambda integration; add support for Firehose Kinesis source; add GetAlias to Lambda API; add function properties to LambdaContext for invocations; fix extraction of Java Lambda archives; check region headers for SNS; fix Lambda output buffering; fix S3 download of gzip; bump ElasticMQ to 0.14.5; fix Lambda response codes; fix syntax issues for Python 3.7
* v0.8.7: Support .Net Core 2.0 and nodejs8.10 Lambdas; refactor Java libs and integrate with JUnit 5; support tags for ES domains; add CloudFormation support for SNS topics; fix kinesis error injection; fix override of `ES_JAVA_OPTS`; fix SQS CORS preflight response; fix S3 content md5 checks and Host header; fix ES startup issue; Bump elasticmq to 0.13.10; bump kinesalite version
* v0.8.6: Fixes for Windows installation; bump ES to 6.2.0; support filter policy for SNS; upgrade kinesalite; refactor JUnit runner; support Lambda PutFunctionConcurrency and GetEventSourceMapping; fixes for Terraform; add golang support to Lambda; fix file permission issue in Java Lambda tests; fix S3 bucket notification config
* v0.8.5: Fix DDB streams event type; implement CF Fn::GetAZs; async lambda for DDB events; fix S3 content-type; fix CF deployer for SQS; fix S3 ExposePorts; fix message subject in SNS; support for Firehose -> ES; pass external env vars to containers from Java; add mock for list-queue-tags; enhance docker test runner; fix Windows installation issues; new version of Java libs
* v0.8.4: Fix `pipenv` dependency issue; Docker JUnit test runner; POJO type for Java Lambda RequestHandler; Java Lambda DynamoDB event; reuse Docker containers for Lambda invocations; API Gateway wildcard path segments; fix SNS RawMessageDelivery
* v0.8.3: Fix DDB stream events for UPDATE operations; fix DDB streams sequence numbers; fix transfer-encoding for DDB; fix requests with missing content-length header; support non-ascii content in DynamoDB items; map external port for SQS queue URLs; default to LAMBDA_REMOTE_DOCKER=true if running in Docker; S3 lifecycle support; reduce Docker image size
* v0.8.2: Fix S3 bucket notification configuration; CORS headers for API Gateway; fix >128k S3 multipart uploads; return valid ShardIDs in DynamoDB Streams; fix hardcoded "ddblocal" DynamoDB TableARN; import default service ports from localstack-client; fix S3 bucket policy response; Execute lambdas asynchronously if the source is a topic
* v0.8.1: Improvements in Lambda API: publish-version, list-version, function aliases; use single map with Lambda function details; workaround for SQS .fifo queues; add test for S3 upload; initial support for SSM; fix regex to replace SQS queue URL hostnames; update linter (single quotes); use `docker.for.mac.localhost` to connect to LocalStack from Docker on Mac; fix b64 encoding for Java Lambdas; fix path of moto_server command
* v0.8.0: Fix request data in `GenericProxyHandler`; add `$PORT_WEB_UI` and `$HOSTNAME_EXTERNAL` configs; API Gateway path parameters; enable flake8 linting; add config for service backend URLs; use ElasticMQ instead of moto for SQS; expose `$LOCALSTACK_HOSTNAME`; custom environment variable support for Lambda; improve error logging and installation for Java/JUnit; add support for S3 REST Object POST
* v0.7.5: Fix issue with incomplete parallel downloads; bypass http_proxy for internal requests; use native Python code to unzip archives; download KCL client libs only for testing and not on pip install
* v0.7.4: Refactor CLI and enable plugins; support unicode names for S3; fix SQS names containing a dot character; execute Java Lambda functions in Docker containers; fix DynamoDB error handling; update docs
* v0.7.3: Extract proxy listeners into (sub-)classes; put java libs into a single "fat" jar; fix issue with non-daemonized threads; refactor code to start flask services
* v0.7.2: Fix DATA_DIR config when running in Docker; fix Maven dependencies; return 'ConsumedCapacity' from DynamoDB get-item; use Queue ARN instead of URL for S3 bucket notifications
* v0.7.1: Fix S3 API to GET bucket notifications; release Java artifacts to Maven Central; fix S3 file access from Spark; create DDB stream on UpdateTable; remove AUI dependency, optimize size of Docker image
* v0.7.0: Support for Kinesis in CloudFormation; extend and integrate Java tests in CI; publish Docker image under new name; update READMEs and license agreements
* v0.6.2: Major refactoring of installation process, lazy loading of dependencies
* v0.6.1: Add CORS headers; platform compatibility fixes (remove shell commands and sh module); add CloudFormation validate-template; fix Lambda execution in Docker; basic domain handling in ES API; API Gateway authorizers
* v0.6.0: Load services as plugins; fix service default ports; fix SQS->SNS and MD5 of message attributes; fix Host header for S3
* v0.5.5: Enable SSL encryption for all service endpoints (`USE_SSL` config); create Docker base image; fix issue with DATA_DIR
* v0.5.4: Remove hardcoded /tmp/ for Windows-compat.; update CLI and docs; fix S3/SNS notifications; disable Elasticsearch compression
* v0.5.3: Add CloudFormation support for serverless / API Gateway deployments; fix installation via pypi; minor fix for Java (passing of environment variables)
* v0.5.0: Extend DynamoDB Streams API; fix keep-alive connection for S3; fix deadlock in nested Lambda executions; add integration SNS->Lambda; CloudFormation serverless example; replace dynalite with DynamoDBLocal; support Lambda execution in remote Docker container; fix CloudWatch metrics for Lambda invocation errors
* v0.4.3: Initial support for CloudWatch metrics (for Lambda functions); HTTP forwards for API Gateway; fix S3 message body signatures; download Lambda archive from S3 bucket; fix/extend ES tests
* v0.4.2: Initial support for Java Lambda functions; CloudFormation deployments; API Gateway tests
* v0.4.1: Python 3 compatibility; data persistence; add seq. numbers in Kinesis events; limit Elasticsearch memory
* v0.4.0: Execute Lambda functions in Docker containers; CORS headers for S3
* v0.3.11: Add Route53, SES, CloudFormation; DynamoDB fault injection; UI tweaks; refactor config
* v0.3.10: Add initial support for S3 bucket notifications; fix subprocess32 installation
* v0.3.9: Make services/ports configurable via $SERVICES; add tests for Firehose+S3
* v0.3.8: Fix Elasticsearch via local bind and proxy; refactoring; improve error logging
* v0.3.5: Fix lambda handler name; fix host name for S3 API; install web libs on pip install
* v0.3.4: Fix file permissions in build; fix and add UI to Docker image; add stub of ES API
* v0.3.3: Add version tags to Docker images
* v0.3.2: Add support for Redshift API; code refactoring
* v0.3.1: Add Dockerfile and push image to Docker Hub
* v0.3.0: Add simple integration for JUnit; improve process signal handling
* v0.2.11: Refactored the AWS assume role function
* v0.2.10: Added AWS assume role functionality.
* v0.2.9: Kinesis error response formatting
* v0.2.7: Throw Kinesis errors randomly
* v0.2.6: Decouple SNS/SQS: intercept SNS calls and forward to subscribed SQS queues
* v0.2.5: Return error response from Kinesis if flag is set
* v0.2.4: Allow Lambdas to use __file__ (import from file instead of exec'ing)
* v0.2.3: Improve Kinesis/KCL auto-checkpointing (leases in DDB)
* v0.2.0: Speed up installation time by lazy loading libraries
* v0.1.19: Pass shard_id in records sent from KCL process
* v0.1.16: Minor restructuring and refactoring (create separate kinesis_util.py)
* v0.1.14: Fix AWS tokens when creating Elasticsearch client
* v0.1.11: Add startup/initialization notification for KCL process
* v0.1.10: Bump version of amazon_kclpy to 1.4.1
* v0.1.9: Add initial support for SQS/SNS
* v0.1.8: Fix installation of JARs in amazon_kclpy if localstack is installed transitively
* v0.1.7: Bump version of amazon_kclpy to 1.4.0
* v0.1.6: Add travis-ci and coveralls configuration
* v0.1.5: Refactor Elasticsearch utils; fix bug in method to delete all ES indexes
* v0.1.4: Enhance logging; extend java KCL credentials provider (support STS assumed roles)
* v0.1.2: Add configurable KCL log output
* v0.1.0: Initial release
