agent: |
GJN7ykLemPEm3Ipvuy2QDelete AWS ECS Clusters with low CPU Utilization
Delete AWS ECS Clusters with low CPU Utilization
There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.
This task removes specified ECS clusters, thereby helping organizations maintain a clean and efficient environment. This task is particularly useful for decommissioning clusters that are no longer needed, or that have been identified as underutilized, thereby contributing to cost savings and resource optimization. It ensures that all associated services and tasks within the clusters are properly terminated before removing the clusters themselves.
inputs
outputs
import boto3
from botocore.exceptions import ClientError
creds = _get_creds(cred_label)['creds']
access_key = creds['username']
secret_key = creds['password']
def delete_low_cpu_clusters(low_cpu_clusters):
"""
Deletes ECS clusters, their services, and tasks based on low CPU utilization.
Args:
low_cpu_clusters (list): List of dictionaries containing cluster and service/task details.
Returns:
None
"""
deleted_clusters = False # Flag to track if any clusters get deleted
# Loop through each entry in low_cpu_clusters
for entry in low_cpu_clusters:
try:
region = entry['Region']
cluster_name = entry['ClusterName']
service_name = entry.get('ServiceName', None)
task_name = entry.get('TaskName', None)
type_ = entry['Type']
# Initialize ECS client for the region
ecs = boto3.client('ecs', aws_access_key_id=access_key,aws_secret_access_key=secret_key,region_name=region)
# Delete service if it's a low CPU service
# A service can't be deleted if it has an active associated task but will be deleted if the cluster is then deleted
if type_ == 'Service':
ecs.update_service(
cluster=cluster_name,
service=service_name,
desiredCount=0 # Set desired task count to 0 before deleting
)
ecs.delete_service(
cluster=cluster_name,
service=service_name
)
print(f"Deleted service {service_name} in cluster {cluster_name}")
# Stop task if it's a low CPU task
if type_ == 'Task':
ecs.stop_task(
cluster=cluster_name,
task=task_name
)
print(f"Stopped task {task_name} in cluster {cluster_name}")
# Delete cluster
ecs.delete_cluster(cluster=cluster_name)
print(f"Deleted cluster {cluster_name}")
deleted_clusters = True
except ClientError as e:
print(f"A botocore exception occurred: {e.response['Error']['Message']}")
except Exception as e:
print(f"An unknown error occurred: {e}") # General exception handling
# If no clusters were deleted, print a message stating the region being checked
if not deleted_clusters:
print(f"No ECS clusters with low CPU utilization were deleted")
# Execute the function to delete low CPU utilization clusters, services, and tasks
delete_low_cpu_clusters(low_cpu_clusters=low_cpu_clusters_list)
copied