# StackSetDeploymentModel

Determines how IAM roles are created and managed.

- Source: [`aws-codepipeline-actions/lib/cloudformation/stackset-types.ts`](https://github.com/aws/aws-cdk/blob/v2.275.0/packages/aws-cdk-lib/aws-codepipeline-actions/lib/cloudformation/stackset-types.ts#L313)
- Type last changed: v2.13.0 · 19 Feb 2022

## Example

```ts
declare const pipeline: codepipeline.Pipeline;
declare const sourceOutput: codepipeline.Artifact;

pipeline.addStage({
  stageName: 'DeployStackSets',
  actions: [
    // First, update the StackSet itself with the newest template
    new codepipeline_actions.CloudFormationDeployStackSetAction({
      actionName: 'UpdateStackSet',
      runOrder: 1,
      stackSetName: 'MyStackSet',
      template: codepipeline_actions.StackSetTemplate.fromArtifactPath(sourceOutput.atPath('template.yaml')),

      // Change this to 'StackSetDeploymentModel.organizations()' if you want to deploy to OUs
      deploymentModel: codepipeline_actions.StackSetDeploymentModel.selfManaged(),
      // This deploys to a set of accounts
      stackInstances: codepipeline_actions.StackInstances.inAccounts(['111111111111'], ['us-east-1', 'eu-west-1']),
    }),

    // Afterwards, update/create additional instances in other accounts
    new codepipeline_actions.CloudFormationDeployStackInstancesAction({
      actionName: 'AddMoreInstances',
      runOrder: 2,
      stackSetName: 'MyStackSet',
      stackInstances: codepipeline_actions.StackInstances.inAccounts(
        ['222222222222', '333333333333'],
        ['us-east-1', 'eu-west-1']
      ),
    }),
  ],
});
```

## Initializer

```ts
new StackSetDeploymentModel()
```

## Methods

- `organizations(props?: OrganizationsDeploymentProps): StackSetDeploymentModel // chainable` (static) — Deploy to AWS Organizations accounts.

  AWS CloudFormation StackSets automatically creates the IAM roles required
  to deploy to accounts managed by AWS Organizations. This requires an
  account to be a member of an Organization.

  Using this deployment model, you can specify either AWS Account Ids or
  Organization Unit Ids in the `stackInstances` parameter.

- `selfManaged(props?: SelfManagedDeploymentProps): StackSetDeploymentModel // chainable` (static) — Deploy to AWS Accounts not managed by AWS Organizations.

  You are responsible for creating Execution Roles in every account you will
  be deploying to in advance to create the actual stack instances. Unless you
  specify overrides, StackSets expects the execution roles you create to have
  the default name `AWSCloudFormationStackSetExecutionRole`. See the [Grant
  self-managed
  permissions](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html)
  section of the CloudFormation documentation.

  The CDK will automatically create the central Administration Role in the
  Pipeline account which will be used to assume the Execution Role in each of
  the target accounts.

  If you wish to use a pre-created Administration Role, use `Role.fromRoleName()`
  or `Role.fromRoleArn()` to import it, and pass it to this function:

  ```ts
  const existingAdminRole = iam.Role.fromRoleName(this, 'AdminRole', 'AWSCloudFormationStackSetAdministrationRole');

  const deploymentModel = codepipeline_actions.StackSetDeploymentModel.selfManaged({
    // Use an existing Role. Leave this out to create a new Role.
    administrationRole: existingAdminRole,
  });
  ```

  Using this deployment model, you can only specify AWS Account Ids in the
  `stackInstances` parameter.
