in functions/source/onboarding/onboarding.py [0:0]
def delete(event, context):
logger.info("Delete StackSet Instances")
deleteWaitTime = (int(context.get_remaining_time_in_millis()) - 100)/1000
deleteSleepTime = 30
try:
stackSetName = os.environ['stackSetName']
stackSetUrl = os.environ['stackSetUrl']
managementAccountId = context.invoked_function_arn.split(":")[4]
cloudFormationClient = session.client('cloudformation')
regionName = context.invoked_function_arn.split(":")[3]
cloudFormationClient.describe_stack_set(StackSetName=stackSetName)
logger.info('Stack set {} exist'.format(stackSetName))
paginator = cloudFormationClient.get_paginator('list_stack_instances')
pageIterator = paginator.paginate(StackSetName= stackSetName)
stackSetList = []
accountList = []
regionList = []
for page in pageIterator:
if 'Summaries' in page:
stackSetList.extend(page['Summaries'])
for instance in stackSetList:
accountList.append(instance['Account'])
regionList.append(instance['Region'])
regionList = list(set(regionList))
accountList = list(set(accountList))
logger.info("StackSet instances found in region(s): {}".format(regionList))
logger.info("StackSet instances found in account(s): {}".format(accountList))
try:
if len(accountList) > 0:
response = cloudFormationClient.delete_stack_instances(
StackSetName=stackSetName,
Accounts=accountList,
Regions=regionList,
RetainStacks=False)
logger.info(response)
status = cloudFormationClient.describe_stack_set_operation(
StackSetName=stackSetName,
OperationId=response['OperationId'])
while status['StackSetOperation']['Status'] == 'RUNNING' and deleteWaitTime>0:
time.sleep(deleteSleepTime)
deleteWaitTime=deleteWaitTime-deleteSleepTime
status = cloudFormationClient.describe_stack_set_operation(
StackSetName=stackSetName,
OperationId=response['OperationId'])
logger.info("StackSet instance delete status {}".format(status))
try:
response = cloudFormationClient.delete_stack_set(StackSetName=stackSetName)
logger.info("StackSet template delete status {}".format(response))
except Exception as stackSetException:
logger.warning("Problem occured while deleting, StackSet still exist : {}".format(stackSetException))
except Exception as describeException:
logger.error(describeException)
except Exception as describeException:
logger.error(describeException)
return None
return None #Generate random ID