Aller au contenu

Cloudformation#

Stackset#

Stack instances with status SKIPPED_SUSPENDED_ACCOUNT#

Script to remove them
"""
Script to remove stack instances with status SKIPPED_SUSPENDED_ACCOUNT from a StackSet.
"""
import sys
import boto3

import pprint

def main(stackset_name):
    client = boto3.client("cloudformation")

    # List all stack instances for the given StackSet
    response = client.list_stack_instances(StackSetName=stackset_name)

    # pprint.pprint(response)
    # exit(0)

    # Filter stack instances with status SKIPPED_SUSPENDED_ACCOUNT
    skipped_suspended_accounts = []

    for instance in response["Summaries"]:
        if (
            instance["StackInstanceStatus"]["DetailedStatus"]
            == "SKIPPED_SUSPENDED_ACCOUNT"
        ):
            skipped_suspended_accounts.append((instance["Account"], instance["Region"]))

    if not skipped_suspended_accounts:
        print("No stack instances with status SKIPPED_SUSPENDED_ACCOUNT found.")
        return

    # Loop through each stack instance and delete it
    for account_id, region in skipped_suspended_accounts:
        print(f"Deleting stack instance in account {account_id} and region {region}")
        client.delete_stack_instances(
            StackSetName=stackset_name,
            Accounts=[account_id],
            Regions=[region],
            RetainStacks=True,
        )

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python remove_stacks.py <StackSetName>")
        sys.exit(1)

    stackset_name = sys.argv[1]
    main(stackset_name)