DocsAWS 101BlogServices

Known limitations

MiniStack aims for AWS compatibility, but some integrations and infrastructure concepts don't translate to a single local process. This page is the honest, cross-service gap list.

If a gap blocks you, open an issue. We actively closes parity gaps — several items on this list are first-class work items, not permanent compromises. Dated against MiniStack 1.4.21.

Stored but not dispatched

These integrations accept configuration and return correct shapes, but the side-effect is not performed. Tests that assert on the stored config pass; tests that assert on downstream side-effects will not.

SurfaceWhat's missing
CloudWatch Alarm → Lambda / other targetsSNS alarm actions fire on state transition; Lambda and other action targets are stored but not invoked.
CloudWatch Metrics for LambdaNo Invocations, Errors, Duration, Throttles, ConcurrentExecutions emitted.
CloudWatch Metrics for SQSApproximateNumberOfMessagesVisible, ApproximateAgeOfOldestMessage not tracked.
EventBridge → API Destination HTTPConnections + ApiDestinations accepted; no outbound HTTP call made.
EventBridge PipesDynamoDB Streams → SNS pipes deliver (background poller); other source/target combinations are stored but not piped.
ECS → CloudWatch Logs (awslogs driver)Log driver config parsed; stdout/stderr not written to log groups.
API Gateway access logsAccessLogSettings stored; no log events written.
Step Functions loggingloggingConfiguration stored; not written to CloudWatch Logs. No ExecutionsStarted/Failed/Duration metrics.
CodeBuild logsLog group created on project creation; build output never written to it.
WAFv2 rule evaluationWebACLs, rules, IP sets all stored. Rules are not enforced against incoming requests.
AutoScaling policy triggersScaling policies + lifecycle hooks stored; never fired by CloudWatch alarms.
CloudFormation Stack PolicyStored / retrievable via API; not enforced during UpdateStack.
Cognito Lambda triggersPreTokenGeneration, the federated PreSignUp, and the CUSTOM_AUTH triggers are invoked; PostConfirmation, CustomMessage, and Pre/PostAuthentication are stored but not invoked.
SES identity verificationVerifyEmailIdentity / VerifyDomainIdentity jump straight to Success — no pending state, no confirmation email.
Route53 health checksChecks stored; status never updated; no CloudWatch bridge.
RDS event subscriptionsSubscriptions stored; not wired to SNS.
S3 SSE-KMSEncryption key stored per object; encrypt/decrypt is a silent no-op.
ECS task state → EventBridgeSubmitTaskStateChange exists; event is not put on the default bus.

Metadata-only services

These services accept and return realistic shapes so IaC tools plan and apply, but no real infrastructure is created:

  • EC2 — instances, VPCs, subnets, SGs exist as data. No real VMs, no ENI networking, no IAM permission evaluation.
  • CloudFront — distributions stored and returned; no edge caching or content delivery.
  • Transfer Family — a real SFTP listener is bound (default port 2222, requires asyncssh); FTPS/FTP are not implemented.
  • EFS — file systems, mount targets, access points stored; no POSIX filesystem or NFS mount.
  • AppSync — GraphQL APIs, data sources, resolvers defined; no query execution.
  • EMR / Glue (jobs) — job metadata tracked; no Spark/Hadoop execution.
  • ACM — certificates auto-ISSUED; no DNS/HTTP validation occurs.
  • Athena without DuckDB — with ATHENA_ENGINE=mock, query results are empty. auto/duckdb gives real SQL on S3 data.
  • Firehose non-S3 destinations — Redshift, OpenSearch, Splunk, Snowflake all stored; no delivery performed.

Impossible locally

These are structural — a single-process emulator cannot simulate them.

  • Real IAM enforcement. Policy evaluation is a full language with global state; not in scope.
  • Real VPC networking. Subnets, route tables, and NAT all exist as metadata; packet routing is not simulated.
  • Cross-AZ / cross-region replication primitives. S3 cross-region replication, DDB global tables, KMS multi-region keys require real regional endpoints.
  • Real DNS propagation. Route53 changes are visible inside MiniStack only; they don't affect your host's resolver.
  • SMTP delivery without a real MTA. Unless SMTP_HOST points at one (e.g. MailHog), SES emails stay in memory.
  • Real Kubernetes control plane. EKS runs k3s as a sidecar — powerful, but not byte-identical to EKS.

By-design differences

  • No SigV4 signature validation. Any access key/secret works.
  • Default account 000000000000 (some paths use 123456789012 interchangeably).
  • Epoch floats vs ISO timestamps. Some responses emit epoch floats for Go/Terraform SDK compatibility where AWS emits ISO 8601. This is intentional.
  • State shared across regions within an account for services not yet region-isolated: S3, IAM/STS, CloudFront, Route 53, and Organizations — use unique resource names there if your tests exercise two regions. Since 1.4.0, AppConfig, Bedrock (all four services), CloudWatch, CloudWatch Logs, DynamoDB, Lambda, MSK, RDS, S3 Tables, Secrets Manager, SQS, SSM, and Step Functions are fully region-isolated; 1.4.1 adds EventBridge Pipes; 1.4.2 adds SNS, Kinesis, KMS, and ElastiCache; 1.4.3 adds EventBridge, ECS, and Firehose; 1.4.4 adds EventBridge Scheduler, CodeBuild, and Resource Groups; 1.4.5 adds Batch and SES; 1.4.6 adds Athena, Auto Scaling, Cloud Map, EFS, EMR, Inspector2, Amazon MQ, AppSync, and S3 Files; 1.4.7 adds Bedrock AgentCore, MWAA, EKS, and Transfer Family; 1.4.8 adds IoT and AppSync Events; 1.4.9 adds EC2, CloudTrail, ECR, Glue, OpenSearch, WAFv2, Backup, ACM, Elastic Load Balancing (ALB/NLB), MediaConnect, and RDS Data; and 1.4.10 adds Cognito and CloudFormation; and 1.4.11 adds API Gateway v1; and 1.4.12 adds API Gateway v2.
  • Lenient validation. Required fields are checked; optional fields are accepted more permissively than AWS.
  • CloudFront response latency — near-zero (no real CDN). Tests that depend on eventual-consistency windows won't see them unless you add a sleep.
Per-service detail: each entry on the Services index page links to a service page with its own "Known limitations" section, calling out the gaps that matter for that specific API surface.