StackSet
The StackSet resource lets you manage AWS CloudFormation StackSets for deploying stacks across multiple accounts and regions.
Minimal Example
Section titled “Minimal Example”Create a basic StackSet with required properties and a description:
import AWS from "alchemy/aws/control";
const stackSet = await AWS.CloudFormation.StackSet("myStackSet", { StackSetName: "MyStackSet", Description: "This StackSet deploys a sample resource stack to multiple accounts.", PermissionModel: "SERVICE_MANAGED", TemplateBody: JSON.stringify({ Resources: { MyS3Bucket: { Type: "AWS::S3::Bucket", Properties: { BucketName: "my-sample-bucket" } } } })});
Advanced Configuration
Section titled “Advanced Configuration”Configure a StackSet with parameters, tags, and auto-deployment settings for better management:
const advancedStackSet = await AWS.CloudFormation.StackSet("advancedStackSet", { StackSetName: "AdvancedStackSet", Description: "This StackSet includes parameters and auto-deployment features.", PermissionModel: "SERVICE_MANAGED", TemplateBody: JSON.stringify({ Resources: { MyDynamoDBTable: { Type: "AWS::DynamoDB::Table", Properties: { TableName: "MySampleTable", AttributeDefinitions: [ { AttributeName: "Id", AttributeType: "S" } ], KeySchema: [ { AttributeName: "Id", KeyType: "HASH" } ], ProvisionedThroughput: { ReadCapacityUnits: 5, WriteCapacityUnits: 5 } } } } }), Parameters: [ { ParameterKey: "Environment", ParameterValue: "Production" } ], AutoDeployment: { Enabled: true, RetainStacksOnAccountRemoval: false }, Tags: [ { Key: "Owner", Value: "DevTeam" }, { Key: "Environment", Value: "Production" } ]});
Deploying to Multiple Accounts
Section titled “Deploying to Multiple Accounts”Set up a StackSet that deploys a simple EC2 instance stack across multiple accounts with a specified instance type:
const multiAccountStackSet = await AWS.CloudFormation.StackSet("multiAccountStackSet", { StackSetName: "MultiAccountStackSet", Description: "Deploys EC2 instances across multiple accounts.", PermissionModel: "SERVICE_MANAGED", TemplateBody: JSON.stringify({ Resources: { MyEC2Instance: { Type: "AWS::EC2::Instance", Properties: { InstanceType: "t2.micro", ImageId: "ami-0abcdef1234567890", // Replace with a valid AMI ID in your region KeyName: "my-key-pair" // Replace with your key pair name } } } }), StackInstancesGroup: [ { AccountId: "123456789012", Region: "us-east-1" }, { AccountId: "098765432109", Region: "us-west-2" } ]});