Skip to main content

atmos aws cloudformation fmt

Format a template file with consistent YAML indentation while preserving comments and key order. Use --check to check formatting without modifying the template.

Experimental
CloudFormation Configuration

Configure templates, parameters, and delivery targets for your component.

atmos aws cloudformation fmt --help
 

Usage​

atmos aws cloudformation fmt <component> --stack <stack> [options]

Examples​

atmos aws cloudformation fmt vpc -s plat-ue2-dev

Check whether the template is formatted without writing changes (for CI):

atmos aws cloudformation fmt vpc -s plat-ue2-dev --check

Format all or affected components' templates in dependency order:

atmos aws cloudformation fmt --all -s plat-ue2-dev
atmos aws cloudformation fmt --affected --base origin/main --check

Arguments​

component (required unless selecting multiple components)
CloudFormation component name in the Atmos stack.

Flags​

--stack, -s (required for a single component)
Atmos stack. With bulk selection flags, limits the selected components to this stack.
--check (optional)
Report whether the template is formatted without writing changes. Exits non-zero if the template is not formatted — use this in CI instead of the default write-in-place behavior.
--all (optional)
Process all aws/cloudformation components. Deployment runs dependencies first; deletion runs consumers first.
--affected (optional)
Process affected aws/cloudformation components and their dependencies. Compares the working tree against a base: see --base and the Git flags below.
--include-dependents (optional)
With --affected, include dependent aws/cloudformation components.
--base (optional)
Git base ref or SHA to compare against for affected detection: --base=origin/main. A value that looks like a commit SHA is treated as --sha, anything else as --ref. Used with --affected.
--tags (optional)
Filter by tags (comma-separated, matches any): --tags=production,tier-1. Composes with --all/--affected to narrow the selected set further; cannot be combined with a single component argument.
--labels (optional)
Filter by labels (repeatable and/or comma-separated key=value or key:value pairs, matches all): --labels=cost-center=platform,compliance=sox. Composes with --all/--affected/--tags; cannot be combined with a single component argument.
--ci (optional)
Enable CI integration for supported operations when ci.enabled is configured. Summary and output-variable publishing use their respective CI settings. Also enabled by CI and ATMOS_CI.
--ref (optional)
Git ref to compare against for affected detection. Used with --affected.
--sha (optional)
Git SHA to compare against for affected detection. Used with --affected.
--repo-path (optional)
Path to an already cloned target repository to use as the affected baseline. Used with --affected.
--clone-target-ref (optional)
Clone the target ref instead of checking it out in the current repository for affected detection. Used with --affected.
--ssh-key (optional)
Path to the SSH private key used to clone the target ref for affected detection. Used with --clone-target-ref.
--ssh-key-password (optional)
Password for the SSH private key used to clone the target ref for affected detection. Used with --clone-target-ref.

This command does not fire lifecycle hooks.

Check mode​

With --check, fmt reports each template and never writes:

  • A template that is already formatted prints already formatted.
  • An unformatted template prints not formatted; a single-component run then exits non-zero.
  • With --all, --affected, --tags, or --labels, fmt --check checks every selected template and prints a line for each one, then exits non-zero once at the end, with an error that lists every unformatted template. It does not stop at the first one.

Components that point at the same template file share one check, identified by the file's resolved path, so a shared template is reported once per run rather than once per component.

Source Downloads​

Formatting does not call CloudFormation. If the template comes from an uncached remote source, Atmos downloads it first. Private sources may require authentication.

Try it out​

Copy the example into a new directory and make it your own:

atmos init examples/cloudformation
cd cloudformation

Configure the short alias, format the local template, then check that it is formatted. No emulator or cloud credentials are needed.

atmos config set aliases.cft "aws cloudformation"
atmos cft fmt demo -s local
atmos cft fmt demo -s local --check