π Highlights
This release adds two brand-new services β CloudFront and AWS Config β completes Neptune with a real Gremlin Docker backend, and lights up real SNS HTTP/HTTPS endpoint delivery. SQS, Lambda, and API Gateway v2 all see substantial conformance work, including FIFO dedup scoping, a proper Lambda port-allocator pool, and ALB-routed HTTP APIs. Welcome to the 9 first-time contributors β the largest cohort yet.
βοΈ New: CloudFront
Floci now emulates AWS CloudFront β distributions, origins, behaviors, and the management API. Edge-caching workflows and IaC that provisions CDN infrastructure can now be exercised locally.
π New: AWS Config
The AWS Config service is now supported, enabling local testing of configuration recording, compliance rules, and resource tracking workflows.
πΈοΈ Neptune is now real
The Neptune service introduced in 1.5.17 graduates from control-plane scaffolding to a working graph engine: a Gremlin Docker backend, full control plane, and SDK plumbing. Graph workloads run end-to-end.
π‘ SNS HTTP/HTTPS endpoint delivery
http:// and https:// subscriptions are now delivered for real β subscription confirmation handshakes, message POSTs, and signature headers all work. This closes a long-standing gap for webhook-style fan-out testing.
π¦ Lambda port allocator: checkout/release pool
The Lambda runtime port allocator is now a proper checkout/release pool rather than a counter, with an actionable error message when the concurrency pool is exhausted. Expect fewer mystery "address already in use" failures under concurrent invocations.
β¨ New Features
- feat(cloudfront): implement CloudFront service emulation by @hectorvent in #969
- feat(config): add AWS Config service emulation by @Croway in #934
- feat(neptune): Neptune control plane, Gremlin Docker backend, and SDK integration by @initeshjain in #958
- feat(sns): implement HTTP/HTTPS endpoint delivery (#841) by @xTryHard in #865
- feat(sqs): implement
StartMessageMoveTask/List/Cancelwith async drain + rate limiting by @slang25 in #910 - feat(sqs): persist and return
AWSTraceHeadersystem attribute by @slang25 in #909 - feat(kms): implement
GenerateMacandVerifyMacby @nblomquist in #927 - feat(elasticache): Memcached
CreateCacheCluster/DescribeCacheClustersby @lucascosta95 in #930 - feat(ecs): register ECS service containers as ELBv2 targets by @marvikomo in #929
- feat(apigateway): handle requests to custom domains by @sdsanders in #922
- feat(apigatewayv2): forward HTTP API requests through ALB listener by @marvikomo in #941
π Bug Fixes
SQS / SNS
- fix(sqs): scope FIFO dedup per
MessageGroupIdwhenDeduplicationScope=messageGroupby @slang25 in #908 - fix(sqs): skip JSON null tag/attribute values instead of storing literal
"null"by @slang25 in #905 - fix(sqs): reject
SendMessageBatchwhen combined payload exceedsMaximumMessageSizeby @slang25 in #907 - fix(sns): emit canonical error codes for
Publishsize violations by @slang25 in #906 - fix(sns): preserve per-entry
MessageAttributesinPublishBatchby @ram-sarf in #891
S3
- fix(s3): honor
response-*query parameters onGetObjectandHeadObjectby @ahmd-soliman in #923 - fix(s3):
ListObjectsv1 marker pagination by @mmangino in #939 - fix(s3): omit body-description headers and user metadata from
PutObjectresponse by @darrelldraney in #948 - fix(s3): return
ObjectLockConfigurationNotFoundErrorfor non-lock buckets by @hectorvent in #971
Lambda
- fix(lambda): await
HttpServer.closeinRuntimeApiServer.stop()by @steve-hb in #926 - fix(lambda): make
PortAllocatora checkout/release pool by @steve-hb in #936 - fix(lambda): log actionable hint when concurrency pool is exhausted by @steve-hb in #935
API Gateway / API Gateway v2
- fix(apigateway): accept any
Content-TypeonPutRestApi/ImportRestApiby @ahmd-soliman in #925 - fix(apigatewayv2): include
connectionTypeandenableSimpleResponseson Integration/Authorizer responses by @yoshiyukiohta in #931 - fix(apigatewayv2): include
corsConfigurationon Api management responses by @yoshiyukiohta in #933 - fix(apigatewayv2): raise Vert.x WebSocket frame size limit to 256 KB by @dixitrathod16 in #938
DynamoDB / Secrets Manager / Cognito / EC2 / RDS / CBOR
- fix: DynamoDB
DeleteTablestatus, PartiQL scan, plus Secrets ManagerRestoreSecretby @Croway in #915 - fix(cognito): correct
USER_SRP_AUTHPASSWORD_VERIFIERsignature by @ricardomedina98 in #912 - fix(ec2): add missing instance response fields to fix Terraform nil pointer dereference (#871) by @hectorvent in #883
- fix(rds): persist metadata across storage-backed restarts by @albert-einshutoin in #945
- fix(cbor): lowercase
smithy-protocolresponse header casing by @hectorvent in #968 - fix: crash when request
Content-Typeheader is empty string by @mmangino in #940
π Documentation
- docs(readme): update by @cristiandlahoz in #885
π New Contributors
A warm welcome to everyone making their first contribution to Floci:
- @xTryHard in #865
- @lucascosta95 in #930
- @steve-hb in #926
- @sdsanders in #922
- @ram-sarf in #891
- @mmangino in #940
- @nblomquist in #927
- @albert-einshutoin in #945
- @darrelldraney in #948
Full Changelog: 1.5.17...1.5.18