You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Amazon Bedrock AgentCore — new service emulator — the agent-runtime control plane and data plane are now emulated. The bedrock-agentcore-control endpoint implements CreateAgentRuntime, GetAgentRuntime, ListAgentRuntimes, UpdateAgentRuntime, DeleteAgentRuntime, ListAgentRuntimeVersions, and the runtime-endpoint operations (CreateAgentRuntimeEndpoint, GetAgentRuntimeEndpoint, ListAgentRuntimeEndpoints, UpdateAgentRuntimeEndpoint, DeleteAgentRuntimeEndpoint); the bedrock-agentcore data-plane endpoint implements InvokeAgentRuntime, which returns the invocation payload echoed back. CreateAgentRuntime reports CREATING and UpdateAgentRuntime reports UPDATING before settling to READY, each update bumps agentRuntimeVersion, ARNs follow the real agent/{uuid}:{version} and agentEndpoint/{uuid} shapes, and all state is account+region scoped. Reported by @wolfgangmeyers.
SNS — ListPlatformApplications — the mobile-push action returned InvalidAction even though platform applications created with CreatePlatformApplication were already stored. It now lists the caller's platform applications with their attributes and NextToken pagination; results are account+region scoped, matching AWS's per-region platform applications. Reported by @ctalibard-sk.
Kinesis Data Firehose — AWS::KinesisFirehose::DeliveryStream CloudFormation support — stacks containing a delivery stream failed with Unsupported resource type even though the Firehose API already implemented CreateDeliveryStream. The resource now provisions through CloudFormation into the existing Firehose control plane (S3, Extended S3, Iceberg, and the other destination configs), Ref returns the delivery stream name, and Fn::GetAtt Arn returns its ARN. Contributed by @squirmy. Reported by @ryan-bennett.
Kinesis Data Firehose — Apache Iceberg (S3 Tables) delivery — a DirectPut delivery stream with an IcebergDestinationConfiguration now actually writes records into the target S3 Tables Iceberg table, not just provisions the stream. Each record routes to its destination table from the DestinationTableConfigurationList (or a transform Lambda's metadata.otfMetadata), and the row operation follows real Firehose Merge-on-Read semantics: insert by default, update/delete matched on the table's UniqueKeys (a record whose operation needs keys but has none is dropped to the error path, as on AWS). Rows are written through the S3 Tables Iceberg REST catalog using the bundled DuckDB engine and are immediately queryable. Reported by @ryan-bennett.
Region scoping — Amazon MWAA, Amazon EKS, and AWS Transfer Family — state is now isolated by account and region, so same-named resources in different regions no longer collide. Persisted state carries a versioned regional schema (on-disk format v3) that an older binary refuses rather than misreads. Contributed by @Areson.
S3 — GetObjectAttributes — GET /{bucket}/{key}?attributes returned the object body instead of the attributes document. It now returns a GetObjectAttributesResponse carrying only the fields named in the required x-amz-object-attributes header (ETag, Checksum, ObjectParts, StorageClass, ObjectSize): the ETag is emitted without the surrounding quotes the HTTP header carries, StorageClass is omitted for S3 Standard objects (as on AWS), Checksum reports the object's stored checksum with its ChecksumType, and ObjectParts lists the parts of a multipart-completed object. Honors versionId, and returns NoSuchKey/NoSuchBucket for missing objects. Reported by @JayJuch.
Fixed
SQS — QueueUrl used a hardcoded localhost host, breaking Docker-executed Lambdas — a Node.js Lambda running under LAMBDA_EXECUTOR=docker could not post to SQS without hardcoding the endpoint in its client: the AWS JS SDK v3 SQS client uses the returned QueueUrl as its request endpoint (useQueueUrlAsEndpoint), and every URL was rendered as http://localhost:4566/…, which inside the Lambda container resolves to the container itself rather than the host running MiniStack, so the request failed with connection refused. CreateQueue, GetQueueUrl, and ListQueues now render QueueUrl(s) using the caller's incoming Host header (how they actually reached MiniStack, e.g. host.docker.internal:4566), the same approach LocalStack takes; internal queue state stays keyed on canonical URLs and lookups remain host-agnostic. An explicitly configured MINISTACK_HOST pins the host and disables the rewrite. Contributed by @thejusdutt. Reported by @Millroy094.
DynamoDB — validation and read metering aligned with real AWS — a batch of parity fixes driven by the dynamodb-conformance suite. Numeric values with surrounding whitespace or underscores (" 5", "1_000") are now rejected; document nesting is capped at 32 levels; partition and sort key values are capped at 2048 and 1024 bytes and expression strings at 4096 bytes. CreateTable validates index Projection settings (INCLUDE requires NonKeyAttributes, KEYS_ONLY forbids them, unknown types are rejected) and rejects a StreamSpecification with StreamEnabled: false alongside a StreamViewType. UpdateTable merges AttributeDefinitions by name and prunes ones no longer referenced by the key schema or any index. PutItem, UpdateItem, and BatchWriteItem reject wrong-typed, non-scalar, or empty values written into a secondary-index key attribute. Query and Scan reject incompatible Select/ProjectionExpression combinations with the AWS messages, and a composite index excludes items missing its range key (sparse indexes). ConditionExpressionBETWEEN validates that the lower bound does not exceed the upper at parse time. PartiQL UPDATE/DELETE return {"Items": []} rather than an empty object. Eventually-consistent reads now meter 0.5 RCU (strongly-consistent reads 1.0). Empty binary set members are accepted; only empty string-set members are rejected.
S3 Tables — Iceberg REST catalog returned AWS-shaped errors instead of the spec envelope — the /iceberg endpoints returned {"__type": "NotFoundException", ...} on a missing namespace or table, but the Iceberg REST OpenAPI requires {"error": {"message", "type", "code"}}. Spec-compliant REST clients (DuckDB, Spark, Trino) treat a LoadTable 404 as "proceed to create", but only when it is a proper NoSuchTableException; the AWS shape made them abort, so writing to an S3 Tables Iceberg table over the REST catalog failed. Errors on the /iceberg surface now use the REST spec envelope (NoSuchTableException / NoSuchNamespaceException), leaving the S3 Tables control plane's AWS error shape unchanged.
Lambda (Docker executor) — Docker-in-Docker ZIP functions failed with invalid mount config for type "bind" — when MiniStack ran inside a container and LAMBDA_REMOTE_DOCKER_VOLUME_MOUNT was set (as the README previously advised), the runtime container was created with a bind mount whose source was the volume name rather than an absolute path, so Docker rejected it with mount path must be absolute and every ZIP invocation failed. In-container runs now always populate the sibling container's /var/task (and /var/runtime for provided.*) via docker cp over the host socket — no shared volume required. LAMBDA_REMOTE_DOCKER_VOLUME_MOUNT is deprecated and ignored. Reported by @smoores-dev.
Cognito — pools with UsernameAttributes used the raw email or phone number as Username instead of a generated UUID — in a user pool configured for email or phone sign-in (UsernameAttributes), AdminCreateUser stored and returned the submitted email/phone as the Username, but real Cognito treats that value as an alias and assigns an immutable system-generated UUID as the actual Username. The Username is now a UUID for UsernameAttributes pools, the alias resolution paths (invitation email, duplicate detection, Hosted UI login) key off it, and changing the email attribute afterwards no longer changes the Username. Contributed by @kjdev.