latest release
v0.0.1-alpha.44 prerelease
Published
Docker images
Full image
docker pull ghcr.io/overcast-sh/overcast:0.0.1-alpha.44 Slim image
docker pull ghcr.io/overcast-sh/overcast-slim:0.0.1-alpha.44 Downloads
Changelog
Breaking changes
- Addedapigateway
enforce Lambda TOKEN/REQUEST authorizers (REST v1) and Lambda REQUEST authorizers (HTTP v2)
requests to a method or route with a Lambda authorizer were let through unchecked; they now reach the integration only when the authorizer allows them
AWS_IAM authorizers remain unenforced
Migration
make the authorizer function return an Allow policy (or
isAuthorized: true) for the requests your tests make, or remove the authorizer from the local deployment - Fixedapigateway
Lambda proxy integrations answer AWS’s 502 for a malformed response and base64-encode binary request bodies
a response with no
statusCode, orisBase64Encoded: truewith a body that is not base64, used to answer 200 with a guessed body
Migration
return a
statusCodefrom the handler, and base64-encode the body wheneverisBase64Encodedis true - Fixedappsync
CreateGraphqlApino longer auto-creates a default API key forauthenticationType=API_KEYAWS’s
CreateGraphqlApiresponse carries noapiKeyfield; the console’s “default key” is a separateCreateApiKeycall it makes, not something the API itself does
Migration
call
CreateApiKeyexplicitly afterCreateGraphqlApiif you relied on the implicit key - Fixedappsync
CreateGraphqlApi/UpdateGraphqlApivalidatelogConfigandadditionalAuthenticationProvidersshapefieldLogLevel and each provider’s authenticationType are checked against AWS’s documented enums; these passthrough fields previously accepted any shape
Migration
fix a
logConfigmissingfieldLogLevel, or a provider naming an unrecognizedauthenticationType, before deploying - Fixedcloudformation ses
AWS::SES::ConfigurationSetfails the resource with SES’s own 501 instead of reporting a success that created nothingSES configuration sets are not implemented, so the stub’s CREATE_COMPLETE left templates relying on a configuration set that did not exist
Migration
keep
AWS::SES::ConfigurationSetout of the template you deploy to Overcast, for example behind a condition, until SES implements configuration sets - Fixedglue
creating a database or table that exists is
AlreadyExistsException; a table’s database must exist (#2064)names are folded to lowercase as on AWS, and Glue client errors are HTTP 400 where EntityNotFoundException was 404.
Migration
change a definition with UpdateTable or UpdateDatabase instead of re-creating it; re-create mixed-case state.
- Fixedlambda
PublishVersionreturns the existing version instead of allocating a new one when nothing changed since itmatches AWS: code and configuration are compared against the highest existing version;
RevisionId/CodeSha256mismatches answerPreconditionFailedException/InvalidParameterValueExceptionPublishToreturns 501 before mutation, matchingCreateFunction’s gate
Migration
a script or test that publishes twice with nothing changed in between gets the same version back, as on AWS; change the code or configuration between publishes to get a new one
Added 11
- s3tables
Amazon S3 Tables: table buckets, namespaces and Iceberg tables, with all 49 modeled operations answering;
AWS::S3Tables::TableBucket,Namespace,Table,TableBucketPolicyandTablePolicyprovision through itEach table gets a real
--table-s3warehouse bucket in S3;CreateTablewith a schema writes the first Icebergmetadata.json.UpdateTableMetadataLocationis a compare-and-swap onversionToken; maintenance, expiration and replication are stored, never run.
- glue
partitions (create, get, update, delete, singly and in batches;
GetPartitionsfilters byExpression),UpdateTablewithVersionIdconcurrency and archived table versions,UpdateDatabaseandBatchDeleteTable;AWS::Glue::Partitionprovisions andAWS::Glue::Tablekeeps everyTableInputproperty (#2064)the expression subset is comparisons, AND/OR/NOT, IN, BETWEEN, LIKE and IS NULL; anything else is InvalidInputException.
a stale VersionId is ConcurrentModificationException; GetTableVersion(s), DeleteTableVersion and BatchDeleteTableVersion read and prune versions.
- eventbridge
event buses store Description, DeadLetterConfig and KmsKeyIdentifier; PutPermission/RemovePermission manage a bus policy
DescribeEventBusreports the policy PutPermission/RemovePermission build asPolicy; stored, not enforced.
- rds
CreateDBInstance/CreateDBClusteracceptManageMasterUserPassword, RDS’s own generated-and-managed master password.the generated password lands in a new Secrets Manager secret (
rds!db-<uuid>/rds!cluster-<uuid>), returned asMasterUserSecret.ModifyDBInstance/ModifyDBClusterturn it on or off; turning it off, or deleting the DB, deletes the secret, as on AWS.
- appsync
CreateGraphqlApiboundary tests coverqueryDepthLimit(0/75/76) andresolverCountLimit(0/10000/10001) - compat
every release ships
compat-report.json, the public compatibility reportEach result that does not pass carries a reason code and, where one exists, its tracking issue.
go run ./cmd/compat --publish-reportbuilds it; overcast.sh/compat renders it.
- web
pin and unpin services straight from the sidebar and the dashboard, not only from global search
sidebar rows show the star on hover; dashboard cards and list rows keep a filled star on pinned services
- web s3
the object inspector previews CSV, TSV, JSON Lines and Parquet in a virtualized data grid that scrolls the whole file, millions of rows included, with a toggle back to the raw text
3 details
a worker indexes text files as they stream and reads any block by HTTP Range; Parquet shows its schema and reads only the rows and columns in view (ZSTD and GZIP included)
the grid has a cell cursor,
⌘GGo to row,⌘Ccopy as TSV, a cell inspector, resizable and hideable columns, and Find over the loaded rowsIceberg
*.metadata.jsongets a summary above its JSON; Avro files say they are not previewed instead of showing nothing
- web s3
a full-page data viewer at
/s3/<bucket>/view?key=…&row=…opens a data file with the whole page to scroll it, deep-linked to a row - web stepfunctions
a Lambda Task’s state inspector shows each attempt’s invocation: its logs, REPORT metrics, log stream and error, and Step Functions errors show the function’s own error type, message and stack trace
Opens by default on a Lambda Task that failed, was caught or retried; matched by request id, the attempt’s error, or timing, and says which. Common Lambda failures get a hint.
“Replay in Lambda” saves the attempt’s event as a test event and opens the function’s Test tab.
- web
state machine, execution, IAM and log-stream ARNs link to their console pages, in the region the ARN names
Fixed 26
- cloudfront
CloudFront Functions fail as on AWS: one that throws or has no compilable
handleranswers 503, and one that returns something other than a request or response object (say, a forgottenreturn) answers 502they used to answer 500, or be skipped silently so the request went to the origin as if no function were attached.
a viewer-request function returning a
urinot beginning with/gets a 502, and the origin is not called.
- cloudfront
viewer-response functions run on a cache hit, once per viewer, instead of a hit replaying the headers set for the viewer that filled the cache; they no longer run when the origin answers 400 or above
- cloudfront
request paths keep the viewer’s encoding: a
%(/100%25) reaches the origin instead of answering 502, a//prefix keeps both slashes, and a function’sevent.request.uriis percent-encoded as sentthe origin receives the path byte-for-byte, for custom and emulated origins alike; a
urireturned with raw UTF-8 or spaces reaches the origin percent-encoded.the
//path used to lose a slash and share a cache entry with the single-slash path.
- cloudfront
cache behaviours match as on AWS: after decoding escaped unreserved characters (
/%7Eusermatches/~user/*,%40does not match@) and after resolving dot segments and collapsing repeated slashes/a/b/..matches/a*, not/a/b*, and/a//bmatches as/a/b. The origin still receives the path exactly as sent.a viewer-request function that rewrites the
urino longer changes the cache TTL: it comes from the behaviour the viewer’s path matched.
- cloudfront
the access log’s
cs-uri-stemis the viewer’s path, not Overcast’s internal/_overcast/cloudfront/distributions/{id}/...routefree-text fields use CloudFront’s log encoding, so an encoded
%20in the path is logged as%2520.
- apigateway
host-style invoke URLs keep
%2Finside a path segment, so/@scope%2fpkgmatches/{package}as on AWS.it used to be decoded into a separator and answer 403
Missing Authentication Token; path-style invoke was unaffected.
- elbv2 cloudfront lambda
load balancers, CloudFront and function URLs pass a
%2Fin the path on still encoded.ALB targets and CloudFront origins receive the path as the client sent it; a function URL’s
rawPathkeeps its encoding.
- autoscaling
an instance no longer shows
InServicewhile its launch activity still readsPreInService, andDescribeLaunchConfigurationsreturns theUserDataCreateLaunchConfigurationstoredthe launch activity is now marked
Successfulbefore the instance goesInService, soDescribeAutoScalingInstancesandDescribeScalingActivitiesalways agree.
- cloudformation
properties the backing service supports are forwarded instead of dropped: Tags on
AWS::Events::Rule,AWS::Events::EventBusandAWS::CloudFront::Distribution; CloudTrail, AppConfig, OpenSearch, ACM, Athena, Shield and Transfer properties;AWS::WAFv2::WebACLDescriptionandTags3 details
a tags-only update to an AppConfig, OpenSearch, ACM, Athena or Shield resource, including a stack-tag change, now reconciles the tags in place instead of replacing the resource, as on AWS
EventBus properties with no service member (Description, DeadLetterConfig, KmsKeyIdentifier, Policy) are reported as unconsumed instead of dropped silently.
a CloudFront distribution with Tags dispatches to CreateDistributionWithTags, so ListTagsForResource and the custom_id tag both work again;
Fn::GetAttArn/Idon a WebACL now resolves.
- cloudformation autoscaling
AWS::AutoScaling::AutoScalingGroupforwardsCooldown,HealthCheckType,HealthCheckGracePeriodandTerminationPolicies, andAWS::AutoScaling::LaunchConfigurationforwardsKeyName,IamInstanceProfileandUserDatathese were dropped on create and update.
- cloudformation rds
AWS::RDS::DBInstance/AWS::RDS::DBClusterforwardManageMasterUserPassword,MasterUserSecret.KmsKeyIdandTags.those were previously dropped entirely;
Fn::GetAtt MasterUserSecret.SecretArnnow resolves andTagsreconcile on update.
- cloudformation opensearch
AWS::OpenSearchService::Domain without a DomainName now generates one instead of failing CreateDomain
- cloudformation iam
AWS::IAM::ServiceLinkedRoleuses AWS’s documented per-service role names, and anAWS::IAM::Roleupdate no longer double-encodes a string-form AssumeRolePolicyDocument - dynamodb
accept Binary key attributes over Smithy RPC v2 CBOR
- glue
GetTablereturns the wholeTableInputit was given, andGetDatabasethe wholeDatabaseInput; deleting a database deletes its tables, partitions and versions, and deleting a table deletes its partitions (#2064)StorageDescriptor, PartitionKeys and Parameters were dropped on write; tables now carry CreateTime, UpdateTime and VersionId.
- kinesis
PutRecord/PutRecordsroute by the MD5 hash-key range AWS uses, honouringExplicitHashKeypreviously routed by a byte-sum modulo shard count, which disagreed with the
HashKeyRangevaluesListShards/DescribeStreamreport
- lambda
GetFunctionandGetFunctionConfigurationhonour theQualifierparameterresolves a version number, an alias (through its
FunctionVersion), or$LATESTby default, embedded in the name or given as a query parameteran unknown version or alias answers
ResourceNotFoundExceptioninstead of silently reporting$LATEST
- lambda
a timed-out invocation’s handler is stopped immediately, not left running past REPORT, and its REPORT Duration is the timeout
the container is killed at the deadline rather than after Release, so late output and side effects can no longer happen; the next invoke gets a fresh environment
Duration used to be the timeout plus up to 2 s of output wait.
- lambda
a synchronous Invoke now answers with the invocation’s request id in x-amzn-RequestId
It was absent, so SDK callers read an empty id and Step Functions’ lambda:invoke returned SdkResponseMetadata.RequestId "".
- rds
CreateDBInstancerejectsAdditionalStorageVolumesinstead of silently dropping it, andDBInstancemodels the restingStorageOperationStatusfieldsOracle/SQL Server only on AWS and neither engine is emulated, so it is now
InvalidParameterCombination.The two storage-operation fields stay correctly omitted since Overcast runs no storage operation.
- s3
DeleteObject/DeleteObjectshonourIf-Match; a mismatch is 412, a missing key 404, instead of succeeding (#2037) - secretsmanager
PutResourcePolicyanswersPublicPolicyExceptionfor a public statement, notMalformedPolicyDocumentException - web
Athena, Glue, Firehose, OpenSearch, ACM, AWS Backup, CloudTrail, Organizations, Route 53 and Transfer Family are no longer listed as not emulated in global search and on the dashboard
Bedrock now shows as a stub, not unsupported, and a stub’s page says which operations it answers instead of claiming all return 501.
- web map
the system map shows SQS queue nodes’ real message counts again (not 0), draws a dead-letter edge when
maxReceiveCountis a string as the AWS CLI writes it, and shows CloudFront distributions with edges to their S3 origins - web
accepting the connection dialog’s prefilled endpoint opens the console without a reload, and a
?region=in the URL is no longer overwritten at startup by the server’s default region -
Release: https://github.com/overcast-sh/overcast/releases/tag/v0.0.1-alpha.44