# atmos aws cloudformation delete

Delete a CloudFormation stack and stream its events until deletion finishes.
Deleting a protected stack requires `--disable-termination-protection`.

> ⚠️ 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 delete <component> --stack <stack> [options]
```

## Examples

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

Skip the interactive confirmation prompt:

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

Retry a `DELETE_FAILED` stack, retaining resources that could not be deleted:

```shell
atmos aws cloudformation delete vpc -s plat-ue2-dev --retain-resources=SecurityGroup,ManualDbSnapshot
```

Delete a stack protected by `termination_protection: true`:

```shell
atmos aws cloudformation delete vpc -s plat-ue2-dev --disable-termination-protection
```

Delete components selected by tags or labels:

```shell
atmos aws cloudformation delete --all --tags production,tier-1
atmos aws cloudformation delete --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.
- **`--auto-approve` (optional)**
  Skip the interactive confirmation prompt. Without it, 
  `delete`
   prompts for confirmation on a TTY before deleting the stack.
- **`--retain-resources` (optional)**
  Comma-separated logical IDs of resources to retain. Only valid when the stack is in 
  `DELETE_FAILED`
   status — CloudFormation rejects it otherwise.
- **`--disable-termination-protection` (optional)**

  Disable termination protection before deleting. If the component's
  `termination_protection` is `true`, `delete` fails with an actionable hint
  instead of silently disabling protection — pass this flag as an explicit
  escape hatch. Setting `termination_protection: false` in the stack
  configuration and re-applying does not disable protection: apply only
  ever turns protection on, never off.

:::note
`delete` fires the `before.aws/cloudformation.delete`/`after.aws/cloudformation.delete` hook events.
:::

## Behavior

- A stack that does not exist is not an error. `delete` prints `<stack> does not exist; nothing to delete` and exits 0, the same way with or without a terminal, and also with `--retain-resources` or `--disable-termination-protection`.
- A stack protected by termination protection is refused with a "termination protection enabled" error and a hint to pass `--disable-termination-protection`.
- `--retain-resources` on a stack that is not in `DELETE_FAILED` is refused with its own error before anything is deleted.
- A delete that ends in `DELETE_FAILED` fails with a hint that names the resources CloudFormation could not delete and shows the retry: `delete <component> -s <stack> --retain-resources=<ids>`.

## Try it out

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 deploy demo -s local
atmos cft delete demo -s local --auto-approve
atmos emulator down aws -s local
```
