github ministackorg/ministack v1.0.2

latest releases: v1.3.35, v1.3.34, v1.3.33...
one month ago

New service: API Gateway v2 (HTTP APIs)

  • Full control plane: CreateApi, GetApi, UpdateApi, DeleteApi, routes, integrations, stages,
    deployments, authorizers (JWT + Lambda), tags — 32 operations
  • Data plane: requests to {apiId}.execute-api.localhost:{port} are routed to Lambda (AWS_PROXY)
    or HTTP (HTTP_PROXY) backends
  • {param} and {proxy+} (greedy) path parameter matching
  • $default catch-all route
  • routeKey in Lambda proxy event reflects the matched route (not hardcoded "$default")
  • State included in persistence snapshot

SNS → Lambda fanout (was a no-op stub)

  • protocol == "lambda" subscriptions now invoke the function via _execute_function() with the
    standard Records[].Sns envelope

DynamoDB TTL enforcement

  • Background daemon thread (dynamodb-ttl-reaper) scans every 60s and deletes items whose TTL
    attribute value ≤ current epoch

Lambda Function URLs

  • Full CRUD: CreateFunctionUrlConfig, GetFunctionUrlConfig, UpdateFunctionUrlConfig,
    DeleteFunctionUrlConfig, ListFunctionUrlConfigs

Lambda warm workers

  • core/lambda_runtime.py: persistent subprocess per function; module-level state survives across
    invocations when called through API Gateway execute-api
  • Direct lam.invoke() still uses a fresh subprocess per call (no warm pool)

State persistence infrastructure

  • core/persistence.py: atomic JSON saves to STATE_DIR on shutdown, reload on startup
    (PERSIST_STATE=1)
  • API Gateway state persists across restarts
  • S3 has its own S3_PERSIST mechanism (unchanged)

Test idempotency — /_ministack/reset

  • POST /_ministack/reset wipes all in-memory state across all 21 services in one call
  • When PERSIST_STATE=1, also deletes STATE_DIR/*.json and S3_DATA_DIR contents so a restart loads
    clean
  • Session-scoped autouse fixture in conftest.py calls reset once before each test run — suite now
    passes on repeated runs against the same server without restarting
  • Works against Docker: set MINISTACK_ENDPOINT=http://localhost:4566

Expanded operations across all existing services

Every service received significant new operations. Highlights:

  • S3: versioning, encryption, lifecycle, CORS, ACL, website, logging, multipart upload, event
    notifications
  • DynamoDB: transactions (TransactWriteItems/TransactGetItems), TTL, PITR, GSI/LSI, UpdateTable
  • Lambda: aliases, versions, layers, event source mappings (SQS→Lambda polling), permissions,
    concurrency, function URL config
  • SQS: FIFO queues, dead-letter queues, visibility timeout, message attributes, batch operations
  • SNS: fanout to SQS and Lambda, filter policies, subscription attributes, PublishBatch
  • CloudWatch Logs: retention policies, subscription filters, metric filters, Insights queries,
    tags
  • CloudWatch: composite alarms, DescribeAlarmsForMetric, DescribeAlarmHistory
  • EventBridge: archives, permissions, API destinations, connections
  • Kinesis: shard split/merge/update, enhanced fan-out consumers
  • Step Functions: full state machine execution with Pass, Task, Choice, Wait, Parallel, Map; sync
    execution
  • ECS: capacity providers, ExecuteCommand, account settings, tags,
  • IAM/STS: users, roles, policies, groups, instance profiles, OIDC providers, inline policies,
    all tag operations
  • RDS: clusters, parameter groups, option groups, snapshots, start/stop
  • Glue: crawlers, jobs, triggers, workflows, partitions, connections
  • Athena: workgroups, named queries, prepared statements, data catalogs
  • SecretsManager: rotation stubs, resource policies, version stages
  • SSM: parameter history, label versions, tags
  • ElastiCache: replication groups, subnet groups, snapshots, users/user groups

Bugfix:

  • ECS DescribeTasks never transitions to STOPPED after Docker container exits

    Test coverage

    • 54 tests (v0.1.0) → 377 tests across all 21 services
    • All 377 pass on a fresh server; idempotent across repeated runs via reset fixture

Don't miss a new ministack release

NewReleases is sending notifications on new releases.