Sign in

Manage AWS EC2 ASGs using Launch Configurations

There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.

This runbook involves deleting/updating older, less flexible configurations that specify instance settings. As AWS has evolved, Launch Templates have become the preferred method due to their enhanced flexibility and features like versioning. Transitioning from Launch Configurations to Launch Templates typically includes a remediation step to delete or update old ASGs, thereby modernizing the infrastructure setup.

  1. 1

    List All AWS EC2 Auto Scaling Groups (ASGs)

    There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.

    This task involves retrieving information about all the ASGs within a specified AWS region or across multiple regions. It helps in monitoring and managing the scaling behaviors of instances automatically, ensuring that the number of instances adjusts according to the set criteria, such as changes in demand or defined schedules.

    import boto3 from botocore.exceptions import NoCredentialsError, PartialCredentialsError, BotoCoreError, ClientError creds = _get_creds(cred_label)['creds'] access_key = creds['username'] secret_key = creds['password'] def list_all_regions(): ec2 = boto3.client('ec2', aws_access_key_id=access_key, aws_secret_access_key=secret_key, region_name='us-east-1') return [region['RegionName'] for region in ec2.describe_regions()['Regions']] def list_auto_scaling_groups(region=None): regions = [region] if region else list_all_regions() asg_details = [] for region in regions: try: asg_client = boto3.client('autoscaling', aws_access_key_id=access_key, aws_secret_access_key=secret_key, region_name=region) except (NoCredentialsError, PartialCredentialsError, BotoCoreError, ClientError) as e: print(f"Failed for {region}: {e}") continue paginator = asg_client.get_paginator('describe_auto_scaling_groups') try: for page in paginator.paginate(): for asg in page['AutoScalingGroups']: asg['CreatedTime'] = asg['CreatedTime'].strftime('%Y-%m-%d %H:%M:%S') if 'CreatedTime' in asg else 'N/A' asg['Region'] = region # Ensuring the region is part of the details asg_details.append(asg) except ClientError as e: print(f"Failed for {region}: {e}") return asg_details def display_asg_details(data): if not data: print("No Auto Scaling Groups found.") return table = context.newtable() table.title = "Auto Scaling Group Details" table.num_cols = 6 # Add an additional column for 'CreatedTime' table.num_rows = len(data) + 1 # Rows for headers plus each ASG table.has_header_row = True # Define header names with the addition of 'CreatedTime' headers = ["AutoScalingGroupName", "Region", "MinSize", "MaxSize", "DesiredCapacity", "CreatedTime"] # Set headers in the first row for col_num, header in enumerate(headers): table.setval(0, col_num, header) # Assume setval sets value at (row, col) # Populate the table with ASG data for row_num, asg in enumerate(data, start=1): # Starting from the second row values = [ asg["AutoScalingGroupName"], asg["Region"], str(asg["MinSize"]), str(asg["MaxSize"]), str(asg["DesiredCapacity"]), asg["CreatedTime"] # Ensure CreatedTime is included and properly formatted ] for col_num, value in enumerate(values): table.setval(row_num, col_num, value) #region_name = None # Set to None to list ASGs for all available regions or specify a region asg_list = list_auto_scaling_groups(region_name) if asg_list: display_asg_details(asg_list) #print("\nComplete ASG List:") #print(asg_list) # Display the complete list of ASG objects for downstream tasks else: print("No Auto Scaling Groups found.")
    copied
    1
  2. 2

    Filter ASGs: Identify ASGs that are associated with a Launch Configuration

    There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.

    This task involves identifying which ASGs are configured to use launch configurations as their instance management template. This is crucial for assessing the deployment strategy, as launch configurations are immutable and often need to be replaced with updated configurations or migrated to the more flexible launch templates. This helps in managing instance configurations and scaling policies efficiently.

    import boto3 from botocore.exceptions import ClientError # Load AWS credentials from a secure source creds = _get_creds(cred_label)['creds'] access_key = creds['username'] secret_key = creds['password'] def filter_asgs_with_launch_configs(asg_list): """ Filter ASGs that are associated with a Launch Configuration. :param asg_list: List of ASGs fetched from an upstream task. :return: Filtered list of ASGs with Launch Configurations. """ asg_details = [] for asg in asg_list: if 'LaunchConfigurationName' in asg: asg_details.append({ 'AutoScalingGroupName': asg['AutoScalingGroupName'], 'LaunchConfigurationName': asg['LaunchConfigurationName'], 'Region': asg['Region'] }) return asg_details def display_asg_details(data): """ Display details of ASGs in a structured table format. :param data: List of filtered ASGs. """ if not data: print("No Auto Scaling Groups with Launch Configurations found.") return # Assuming 'context.newtable' creates a new table context in your environment table = context.newtable() table.title = "ASG with Launch Configurations" table.num_cols = 3 table.num_rows = 1 table.has_header_row = True # Define header names headers = ["AutoScalingGroupName", "LaunchConfigurationName", "Region"] for col_num, header in enumerate(headers): table.setval(0, col_num, header) # Populate the table with ASG data for row_num, asg in enumerate(data, start=1): table.num_rows += 1 values = [ asg["AutoScalingGroupName"], asg["LaunchConfigurationName"], asg["Region"] ] for col_num, value in enumerate(values): table.setval(row_num, col_num, value) # Filtering ASGs with Launch Configurations filtered_asgs = filter_asgs_with_launch_configs(asg_list) display_asg_details(filtered_asgs) context.skip_sub_tasks = True
    copied
    2
    1. 2.1

      Delete AWS EC2 Auto Scaling Groups (ASGs)

      There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.

      This task involves removing specified ASGs from the AWS environment. This operation is critical for cleaning up unused or unnecessary resources, managing costs, or decommissioning services.

      import boto3 from botocore.exceptions import ClientError creds = _get_creds(cred_label)['creds'] access_key = creds['username'] secret_key = creds['password'] def delete_auto_scaling_groups(filtered_asgs): """ Deletes a list of auto scaling groups provided in filtered_asgs. Each ASG dict must contain 'AutoScalingGroupName' and 'Region'. """ for asg in filtered_asgs: region = asg['Region'] asg_name = asg['AutoScalingGroupName'] try: # Initialize the boto3 client for AutoScaling in the specified region client = boto3.client('autoscaling', aws_access_key_id=access_key,aws_secret_access_key=secret_key,region_name=region) # Delete the Auto Scaling group client.delete_auto_scaling_group(AutoScalingGroupName=asg_name, ForceDelete=True) print(f"Successfully requested deletion of ASG: {asg_name} in {region}") except ClientError as e: print(f"Failed to delete ASG: {asg_name} in {region}. Error: {e}") # Example filtered_asgs list #filtered_asgs = [{"AutoScalingGroupName":"test1-asg","AutoScalingGroupARN":"arn:aws:autoscaling:us-east-1:188379622596:autoScalingGroup:4f564e69-b9f3-4d3f-8cfc-5ee7468f1396:autoScalingGroupName/test1-asg","MixedInstancesPolicy":{"LaunchTemplate":{"LaunchTemplateSpecification":{"LaunchTemplateId":"lt-0b4e1233a5006c59b","LaunchTemplateName":"test1-asg-template","Version":"$Default"},"Overrides":[{"InstanceType":"t3.micro"},{"InstanceType":"t3a.micro"}]},"InstancesDistribution":{"OnDemandAllocationStrategy":"prioritized","OnDemandBaseCapacity":0,"OnDemandPercentageAboveBaseCapacity":0,"SpotAllocationStrategy":"price-capacity-optimized"}},"MinSize":0,"MaxSize":0,"DesiredCapacity":0,"DefaultCooldown":300,"AvailabilityZones":["us-east-1a","us-east-1b","us-east-1c"],"LoadBalancerNames":[],"TargetGroupARNs":[],"HealthCheckType":"EC2","HealthCheckGracePeriod":300,"Instances":[],"CreatedTime":"2024-05-27 10:49:04","SuspendedProcesses":[],"VPCZoneIdentifier":"subnet-b8482599,subnet-26325179,subnet-836e58ce","EnabledMetrics":[],"Tags":[],"TerminationPolicies":["Default"],"NewInstancesProtectedFromScaleIn":false,"ServiceLinkedRoleARN":"arn:aws:iam::188379622596:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling","CapacityRebalance":true,"TrafficSources":[],"Region":"us-east-1"}] # Deleting ASGs delete_auto_scaling_groups(filtered_asgs)
      copied
      2.1