LocalStack 4.13.1 63,725 uses its newer CloudFormation 24 engine, built around change sets, and its coverage is uneven. Every feature below was tried on it while this chapter was written; the table decides how each section treats it:
| Feature | LocalStack 4.13.1, as tested | Treatment |
|---|---|---|
| Create, update, delete, change sets | Work; resources created one at a time | Run (7.6, Change Sets and Policies) |
| Intrinsic functions, Fn::ForEach | Work, except Fn::Cidr and a few forms | Run (Intrinsic Functions) |
| Nested stacks, exports and imports | Work | Run (Cross-Stack and Nested) |
| StackSets | Instances deploy; describe calls fail | Run in part (StackSets) |
| Rollback | None; failed stacks keep resources | AWS 24 docs (Rollback) |
| Parameter constraints, Rules | Not checked | cfn-lint 2,641 (Template Anatomy) |
| Stack policies | InternalFailure, not supported | Not run here (Stack Policies) |
| Termination protection, export in use | Recorded, deletion not blocked | Both shown (7.7.4, The Export Deletion Trap) |
| DeletionPolicy: Retain | Ignored; resource deleted | Both shown (Deletion Policies) |
| Drift detection, resource import | Not supported | Not run here (Drift and Import) |
| Fn::GetStackOutput | Left unresolved, as text | Not run here (Cross-Stack and Nested) |
| IAM policies | Stored, not enforced | Both shown (IAM for CloudFormation) |
Three rules follow. Where LocalStack behaves like AWS, the chapter runs the example and prints real output. Where it differs, the chapter shows what LocalStack did and states AWS's documented behavior beside it, because a test environment that silently disagrees with production is exactly what you need to recognize. Where it cannot run a feature at all, the example comes from AWS's documentation, labeled "not run here", with no output. Lint every template with cfn-lint before deploying, since it enforces much of what LocalStack skips.