# CloudFormationCreateUpdateStackAction

CodePipeline action to deploy a stack.

Creates the stack if the specified stack doesn't exist. If the stack exists,
AWS CloudFormation updates the stack. Use this action to update existing
stacks.

AWS CodePipeline won't replace the stack, and will fail deployment if the
stack is in a failed state. Use `ReplaceOnFailure` for an action that
will delete and recreate the stack to try and recover from failed states.

Use this action to automatically replace failed stacks without recovering or
troubleshooting them. You would typically choose this mode for testing.

Extends: Action › Action › CloudFormationCreateUpdateStackAction
Implements: IAction

- Source: [`aws-codepipeline-actions/lib/cloudformation/pipeline-actions.ts`](https://github.com/aws/aws-cdk/blob/v2.275.0/packages/aws-cdk-lib/aws-codepipeline-actions/lib/cloudformation/pipeline-actions.ts#L448)

## Example

```ts
import { PhysicalName } from 'aws-cdk-lib';

// in stack for account 123456789012...
declare const otherAccountStack: Stack;
const actionRole = new iam.Role(otherAccountStack, 'ActionRole', {
  assumedBy: new iam.AccountPrincipal('123456789012'),
  // the role has to have a physical name set
  roleName: PhysicalName.GENERATE_IF_NEEDED,
});

// in the pipeline stack...
const sourceOutput = new codepipeline.Artifact();
new codepipeline_actions.CloudFormationCreateUpdateStackAction({
  actionName: 'CloudFormationCreateUpdate',
  stackName: 'MyStackName',
  adminPermissions: true,
  templatePath: sourceOutput.atPath('template.yaml'),
  role: actionRole, // this action will be cross-account as well
});
```

## Initializer

```ts
new CloudFormationCreateUpdateStackAction(props: CloudFormationCreateUpdateStackActionProps)
```

## Properties

- `actionProperties`: [ActionProperties](/cdk/api/v2/docs/aws-cdk-lib.aws_codepipeline.ActionProperties.html) — The simple properties of the Action, like its Owner, name, etc.

  Note that this accessor will be called before the `bind` callback.

- `deploymentRole`: [IRole](/cdk/api/v2/docs/aws-cdk-lib.aws_iam.IRole.html)

## Methods

- `addToDeploymentRolePolicy(statement: PolicyStatement): boolean` — Add statement to the service role assumed by CloudFormation while executing this action.

- `bind(scope: Construct, stage: IStage, options: ActionBindOptions): ActionConfig` — The callback invoked when this Action is added to a Pipeline.

- `onStateChange(name: string, target?: IRuleTarget, options?: RuleProps): Rule` — Creates an Event that will be triggered whenever the state of this Action changes.
