# atmos aws cloudformation apply

Create or update a CloudFormation stack. Atmos shows the proposed changes, asks
for confirmation, and streams deployment events. A successful deployment ends
with the stack outputs.

> ⚠️ Experimental

**CloudFormation Configuration**

Configure templates, parameters, and delivery targets for your component.
Configuration Reference[Read more](/stacks/components/aws-cloudformation)

## Usage

```shell
atmos aws cloudformation apply <component> --stack <stack> [options]
```

## Examples

```shell
atmos aws cloudformation apply vpc -s plat-ue2-dev
```

Skip the interactive confirmation prompt:

```shell
atmos aws cloudformation apply vpc -s plat-ue2-dev --auto-approve
```

Apply all or affected CloudFormation components in dependency order:

```shell
atmos aws cloudformation apply --all -s plat-ue2-dev
atmos aws cloudformation apply --affected --base origin/main
```

These commands select only CloudFormation components. If a selected component declares a Terraform
prerequisite in `dependencies.components`, deploy that prerequisite first with `atmos terraform apply`
or a separate workflow step.

Apply components selected by tags or labels:

```shell
atmos aws cloudformation apply --all --tags production,tier-1
atmos aws cloudformation apply --affected --labels cost-center=platform
```

## 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.
- **`--target` (optional)** — Provision target to deliver to. Defaults to `provision.default`, otherwise the implicit direct-deploy target.
- **`--auto-approve` (optional)** — Skip the interactive confirmation prompt. Without it, `apply` shows the predicted changes and then prompts for confirmation on a TTY before executing the changeset. Without a TTY, `apply` fails unless this flag is set.

:::note
[`atmos aws cloudformation deploy`](/cli/commands/aws/cloudformation/deploy) is an alias for `apply`
that defaults `--auto-approve` to `true`. Both fire the
`before.aws/cloudformation.apply`/`after.aws/cloudformation.apply` hook events.
:::

## How apply runs

For direct deployment, Atmos:

1. Creates a changeset and prints the proposed changes on stderr.
2. Asks for confirmation, unless `--auto-approve` is set.
3. Installs the configured stack policy before an update.
4. Executes the changeset and streams stack events until completion.
5. Applies post-deployment settings and displays stack outputs.

### No Changes

For an empty changeset, Atmos prints `No changes` and deletes the changeset.
It still applies the stack policy and configured termination protection, then
shows outputs. A new stack receives its policy after creation succeeds.

### Confirmation and Cleanup

In a non-interactive session, pass `--auto-approve`. Without it, the command
fails before creating a changeset.

Declining confirmation deletes the changeset and returns a user-aborted error.
If this invocation created an empty `REVIEW_IN_PROGRESS` stack, Atmos also
removes it when abandoning the changeset, provided it is still in that state.
Existing stacks are preserved.

### Failed Stack Creation

A stack in `ROLLBACK_COMPLETE` cannot be updated. Delete that failed stack with
[`delete`](/cli/commands/aws/cloudformation/delete), then apply again.
Atmos does not delete it automatically.

### Other provision targets

Publish-only targets do not prompt for a stack change:

- An S3 target uploads the template and reports its S3 URI and HTTPS URL.
  The run summary records `package_s3_uri` and `package_url`.
- A Git target reports the delivered file and destination.

Use the [`stackset` commands](/cli/commands/aws/cloudformation/stackset) for
StackSet targets. See [Delivery Targets](/stacks/components/aws-cloudformation#delivery-targets).

## Try it out

### cloudformation

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

```shell
atmos init examples/cloudformation
cd cloudformation
```

Requires Docker or Podman, Python 3, and network access for the emulator image. Run against the local AWS emulator; the final commands clean up. No AWS account is needed.

```shell
atmos config set aliases.cft "aws cloudformation"
atmos emulator up aws -s local
atmos cft apply demo -s local --auto-approve
atmos cft delete demo -s local --auto-approve
atmos emulator down aws -s local
```

- [Installation guide](/install)
- [Explore the example](/examples/cloudformation)
- [Initialization and repository settings](/cli/commands/init#examples-and-source-directories)
