Linters cannot prove that a stack deploys: a service quota, a region without an instance type or a name clash only shows up in a real account. TaskCat 1,204 (github.com/aws-ia/taskcat (https://github.com/aws-ia/taskcat 1,204 ), Apache 2.0, 0.9.58 of 28 Jan 2026) deploys each test's template to every listed region in parallel, writes an HTML report with a pass or fail per region under taskcat_outputs/, and deletes the stacks. It needs real AWS 24 credentials, so it is not run here; this configuration, .taskcat.yml in the repository root, would test the catalog in two regions after pip 21,050 install taskcat:
project:
name: booknest
regions: [us-east-1, eu-west-1]
tests:
catalog:
template: infra/booknest-data.yaml
parameters: {Stage: dev, TableSuffix: "$[taskcat_random-string]"}taskcat test run launches both stacks; placeholders such as $[taskcat_random-string] and $[taskcat_genaz_2] give unique names and valid zones. Such tests cost money and minutes: run them nightly.
Rain 952 (github.com/aws-cloudformation/rain (https://github.com/aws-cloudformation/rain 952 ), Apache 2.0) was AWS's friendlier CloudFormation CLI 338 . Its repository is archived: AWS points to the AWS CLI 24 , the CDK 24 , cfn-lint 2,641 and cfn-guard 1,388 instead. Its last release, 1.24.4, still runs:
cd ~/v5-ch7/booknest/infra
~/v5-ch7/tools/rain-v1.24.4_linux-amd64/rain --version
~/v5-ch7/tools/rain-v1.24.4_linux-amd64/rain fmt wishlist.yaml | tail -n 4Rain v1.24.4 linux/amd64
AttributeType: S
KeySchema:
- AttributeName: userId
KeyType: HASHrain fmt rewrote the flow-style lists as blocks. Against LocalStack 63,725 , rain deploy failed on its artifact-bucket check with a 500 error, and no fixes will come.
| Tool | Checks | Needs AWS | Status in 2026 |
|---|---|---|---|
| cfn-lint | Schemas, functions, best practices | No | Maintained, MIT-0 |
| cfn-guard | Your policies as rules | No | Maintained, Apache 2.0 |
| TaskCat | Real deploys in many regions | Yes | Maintained, Apache 2.0 |
| rain | Formatting, deploys | For deploys | Archived |