agent: |
GYMShAaObdOUSmMhS6srFilter out EBS Volumes attached to stopped EC2 instances
Filter out EBS Volumes attached to stopped EC2 instances
There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.
This is a task focused on identifying Elastic Block Store (EBS) volumes that are connected to Amazon EC2 instances currently in a stopped state by examining the instance-state and corresponding volume mappings.
inputs
outputs
import boto3
creds = _get_creds(cred_label)['creds']
access_key = creds['username']
secret_key = creds['password']
def get_stopped_instance_volumes(ec2_client):
"""
Gets EBS volumes attached to stopped instances.
Args:
ec2_client (boto3.client): An EC2 client instance.
Returns:
dict: Dictionary with instance IDs as keys and associated volume IDs as values.
"""
instance_volume_map = {}
try:
instances = ec2_client.describe_instances(Filters=[{"Name": "instance-state-name", "Values": ["stopped"]}])
for reservation in instances["Reservations"]:
for instance in reservation["Instances"]:
instance_id = instance["InstanceId"]
volumes = instance.get("BlockDeviceMappings", [])
volume_ids = [volume["Ebs"]["VolumeId"] for volume in volumes]
instance_volume_map[instance_id] = volume_ids
return instance_volume_map
except Exception as e:
print(f"Error in getting instance volumes: {e}")
return {}
#regions = ["us-east-1"] # Add your desired regions here
for region in regions:
try:
# Create an EC2 client for the specified region
ec2_client = boto3.client("ec2", aws_access_key_id=access_key,aws_secret_access_key=secret_key,region_name=region)
# Get the dictionary of stopped instance volumes
instance_volume_map = get_stopped_instance_volumes(ec2_client)
if not instance_volume_map:
#print(f"No stopped instances with attached volumes found in region {region}")
p=1 # Dummy line to end conditional block correctly
else:
print(f"Stopped instance volumes in region {region}:\n{instance_volume_map}")
except Exception as e:
print(f"Error in region {region}: {e}")
context.skip_sub_tasks=True
copied
- 1ZN1jsWHIgLRDLexfM06TDetach and Delete AWS EBS Volumes
1
Detach and Delete AWS EBS Volumes
There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.This task involves the removal of Elastic Block Store (EBS) volumes from their associated instances followed by the deletion of these volumes. In this particular task detachment and deletion of EBS volumes is related to stopped EC2 instances. It is executed to free up storage resources, enhance resource allocation efficiency, and optimize costs within the AWS infrastructure.
inputsoutputsimport boto3 import time creds = _get_creds(cred_label)['creds'] access_key = creds['username'] secret_key = creds['password'] def detach_and_delete_ebs_volumes(ec2_client, instance_volume_map): """ Detaches and deletes EBS volumes attached to instances. Args: ec2_client (boto3.client): An EC2 client instance. instance_volume_map (dict): Dictionary with instance IDs as keys and associated volume IDs as values. """ try: for instance_id, volume_ids in instance_volume_map.items(): for volume_id in volume_ids: ec2_client.detach_volume(InstanceId=instance_id, VolumeId=volume_id, Force=True) print(f"Detached EBS volume {volume_id} from instance {instance_id}") time.sleep(5) # Wait for a few seconds to ensure detachment is complete otherwise there is a VolumeInUse error try: ec2_client.delete_volume(VolumeId=volume_id) print(f"Deleted EBS volume {volume_id}") except Exception as e: print(f"Error in deleting EBS volume {volume_id}: {e}") except Exception as e: print(f"Error in detaching and deleting EBS volumes: {e}") #regions = ["us-east-1"] # Add your desired regions here for region in regions: # Create an EC2 client instance for the region ec2_client = boto3.client("ec2", aws_access_key_id=access_key,aws_secret_access_key=secret_key,region_name=region) if not instance_volume_map: print(f"No volumes attached to stopped instances found in region {region}") else: # Detach and delete the identified EBS volumes detach_and_delete_ebs_volumes(ec2_client, instance_volume_map)copied1