# LocalStack Change Log

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

* 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
