ERROR REFERENCE
No changes to deploy (empty change set)
The stack already matches the template, so CloudFormation produced an empty change set — and the deploy command treated that as an error. In a pipeline this is usually a configuration choice, not a real failure.
WHAT IT MEANS
What this error means
Three phrasings of the same outcome, depending on the tool and code path:
No changes to deploy. Stack ... is up to date—sam deploy.The submitted information didn't contain changes— CloudFormation change-set validation.No updates are to be performed—aws cloudformation deployand directupdate-stackcalls.
Nothing is broken in AWS: the deployed stack and the submitted template are identical. The command exits non-zero because, by default, it assumes you expected a change. That default is the whole problem in CI, where re-runs and no-op merges are routine.
FIX
How to fix it
-
For automated pipelines: make an empty change set a
success instead of a failure:
sam deploy --no-fail-on-empty-changeset # or persist it: # samconfig.toml -> fail_on_empty_changeset = falseaws cloudformation deploysupports the same--no-fail-on-empty-changesetflag. - If this run was supposed to change the stack, the empty change set is telling you the artifacts never changed: confirm the build step actually ran and produced updated artifacts before the deploy step consumed them.
- Confirm the target — the intended stack name, region, and configuration environment. Deploying a real change to the wrong stack also looks like "no changes" on the one you meant.
AUTOMATE THE TRIAGE
Diagnose this automatically
SAM Doctor recognizes all three phrasings (high confidence) and separates this non-failure from real change-set errors in the same log. Runs locally; no AWS access, no log upload.
python -m pip install sam-doctor
sam-doctor diagnose deployment.log --format markdown
RELATED
Related errors
- Stack is in ROLLBACK_COMPLETE state and can not be updated — the other "the stack state, not the template, is the problem" failure.
- Rate exceeded (Throttling) — another CI-loop symptom that is not a template bug.