in tools/workflow/clean_aws_resources.go [119:182]
func destroyECSAutoScaling() {
//Set up aws go sdk ec2 client
testSession, err := session.NewSession()
if err != nil {
log.Fatalf("Error creating session %v", err)
}
autoscalingclient := autoscaling.New(testSession)
// Get list of autoscaling group
//Autoscaling's tag filter
autoscalingTagFilter := autoscaling.Filter{Name: aws.String("tag:Component"), Values: []*string{aws.String("aoc")}}
//Allow to load all the auto scaling groups since the default respond is paginated auto scaling groups.
//Look into the documentations and read the starting-token for more details
//Documentation: https://docs.aws.amazon.com/cli/latest/reference/autoscaling/describe-auto-scaling-groups.html#options
var nextToken *string
for {
describeAutoScalingInputs := &autoscaling.DescribeAutoScalingGroupsInput{Filters: []*autoscaling.Filter{&autoscalingTagFilter}, NextToken: nextToken}
describeAutoScalingOutputs, err := autoscalingclient.DescribeAutoScalingGroups(describeAutoScalingInputs)
if err != nil {
log.Fatalf("Failed to get metadata from launch configuration because of %v", err)
}
for _, asg := range describeAutoScalingOutputs.AutoScalingGroups {
//Skipping asg that does not older than 5 days
if !time.Now().UTC().Add(pastDayDeleteCalculation).After(*asg.CreatedTime) {
continue
}
deleteAutoScalingGroupInput := &autoscaling.DeleteAutoScalingGroupInput{
AutoScalingGroupName: asg.AutoScalingGroupName,
ForceDelete: aws.Bool(true),
}
_, err = autoscalingclient.DeleteAutoScalingGroup(deleteAutoScalingGroupInput)
if err != nil {
log.Fatalf("Failed to delete asg %s because of %v", *asg.AutoScalingGroupName, err)
}
deleteLaunchConfigurationInput := &autoscaling.DeleteLaunchConfigurationInput{
LaunchConfigurationName: asg.LaunchConfigurationName,
}
_, err = autoscalingclient.DeleteLaunchConfiguration(deleteLaunchConfigurationInput)
if err != nil {
log.Fatalf("Failed to delete lc of asg %s because of %v", *asg.AutoScalingGroupName, err)
}
log.Printf("Delete asg %s successfully", *asg.AutoScalingGroupName)
}
if describeAutoScalingOutputs.NextToken == nil {
break
}
nextToken = describeAutoScalingOutputs.NextToken
}
}