Which AWS Checks Survive Local Emulation: Moto, LocalStack, and One Test Suite

Emulators validate contracts, not behavior. This video walks through one test corpus run against Moto, LocalStack, and a real AWS account as the control, and shows where the results diverge. Moto patches botocore inside your Python process, so no socket ever opens; LocalStack listens on a real HTTP endpoint, so any language can call it. That transport difference decides which checks survive: a presigned URL is generated either way, but only resolves where something is listening. A single client_factory fixture, selected by an environment variable, keeps the test body free of backend imports so every check runs unchanged across all three lanes. Still unproven locally: IAM policy enforcement at request time, quotas and throttling, consistency timing, and managed-service internals such as Object Lock, VPC endpoint policies and cross-account trust. The reported AWS Emulator is graded against both existing baselines because the source does not name its repository, service coverage, or license. Full harness, fixture design and the divergence report: https://hackyjs.com/posts/which-aws-checks-survive-local-emulation-aws-emulator-localstack-and-moto-under-one-test-suite

awslocalstackmototestingci-cd

Read the post →