agent: |
OeEH3WuG9zDK2uUwnhkiFilter Out Unused AWS NAT Gateways
Filter Out Unused AWS NAT Gateways
There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.
This task identifies AWS NAT gateways that have not transferred any data in the past week or threshold, deeming them as "unused", and filters them out for potential optimization or deletion.
inputs
outputs
import boto3
from datetime import datetime, timedelta
from botocore.exceptions import ClientError, BotoCoreError
creds = _get_creds(cred_label)['creds']
access_key = creds['username']
secret_key = creds['password']
unused_days = 7 # Hardcoded for One time Result
def check_unused_nat_gateways_for_region(nat_gateways_list):
unused_nat_gateways = []
# Check if the list is empty or not
if not nat_gateways_list:
print("No NAT gateways received for processing.")
return unused_nat_gateways
print(f"Received {len(nat_gateways_list)} NAT gateways for processing.")
for nat_gateway_info in nat_gateways_list:
region_name = nat_gateway_info['Region']
nat_gateway_id = nat_gateway_info['NatGatewayId']
ec2_client = boto3.client('ec2', aws_access_key_id=access_key,aws_secret_access_key=secret_key,region_name=region_name)
cloudwatch = boto3.client('cloudwatch', aws_access_key_id=access_key,aws_secret_access_key=secret_key,region_name=region_name)
try:
response = cloudwatch.get_metric_data(
MetricDataQueries=[
{
'Id': 'm1',
'MetricStat': {
'Metric': {
'Namespace': 'AWS/NATGateway',
'MetricName': 'BytesOutToDestination',
'Dimensions': [
{
'Name': 'NatGatewayId',
'Value': nat_gateway_info['NatGatewayId']
}
]
},
'Period': 86400 * unused_days,
'Stat': 'Sum'
},
'ReturnData': True
}
],
StartTime=datetime.now() - timedelta(days=unused_days),
EndTime=datetime.now()
)
if not response['MetricDataResults'][0]['Values']:
unused_nat_gateways.append(nat_gateway_info)
except (ClientError, BotoCoreError, Exception) as e:
print(f"Error in region {region_name} for NAT Gateway {nat_gateway_id}: {str(e)}")
# Print the total number of unused NAT gateways
print(f"Out of {len(nat_gateways_list)} NAT gateways, {len(unused_nat_gateways)} are unused.")
return unused_nat_gateways
'''
all_nat_gateways = [
{'NatGatewayId': 'nat-0bc09626aff12105a', 'Region': 'us-east-1', 'State': 'pending'},
{'NatGatewayId': 'nat-0cee3df0c034c58f8', 'Region': 'us-east-1', 'State': 'deleted'},
{'NatGatewayId': 'nat-0b5177c47df82bc51', 'Region': 'us-east-1', 'State': 'deleted'}
] # passed down from previous task
'''
unused_nat_gateways = check_unused_nat_gateways_for_region(all_nat_gateways)
context.skip_sub_tasks=True
copied
- 1nzNVxfke9GGgKv1Fg687Delete AWS NAT Gateways
1
There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.This task removes specified NAT gateways in an AWS environment. This cleanup optimizes network infrastructure, enhances security, and reduces costs by eliminating unused resources.
inputsoutputsimport boto3 from botocore.exceptions import (ClientError,BotoCoreError) creds = _get_creds(cred_label)['creds'] access_key = creds['username'] secret_key = creds['password'] def delete_nat_gateways(nat_gateway_list): for nat_gateway_info in nat_gateway_list: region_name = nat_gateway_info['Region'] nat_gateway_id = nat_gateway_info['NatGatewayId'] nat_gateway_state = nat_gateway_info['State'] ec2_client = boto3.client('ec2', aws_access_key_id=access_key,aws_secret_access_key=secret_key,region_name=region_name) if nat_gateway_state == 'available': try: ec2_client.delete_nat_gateway(NatGatewayId=nat_gateway_id) print(f"Deleted NAT Gateway ID: {nat_gateway_id} in region {region_name}") except (ClientError, BotoCoreError, Exception) as e: print(f"Error deleting NAT Gateway {nat_gateway_id} in region {region_name}: {str(e)}") elif nat_gateway_state == 'pending': print(f"NAT Gateway ID: {nat_gateway_id} in region {region_name} is still in 'pending' state and cannot be deleted.") else: print(f"NAT Gateway ID: {nat_gateway_id} in region {region_name} is in '{nat_gateway_state}' state and was not deleted.") ''' unused_nat_gateways = [{'NatGatewayId': 'nat-0bc09626aff12105a', 'Region': 'us-east-1', 'State': 'available'}, {'NatGatewayId': 'nat-0cee3df0c034c58f8', 'Region': 'us-east-1', 'State': 'deleted'}, {'NatGatewayId': 'nat-0b5177c47df82bc51', 'Region': 'us-east-1', 'State': 'deleted'}] # passed down from previous task ''' if not unused_nat_gateways: print("No NAT gateways received for deletion.") else: delete_nat_gateways(unused_nat_gateways)copied1