agent: |
cm5Hso01gVw4aRSFajjPList All AWS NAT Gateways
List All AWS NAT Gateways
There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.
This task involves using the boto3 to programmatically iterate over all AWS regions, retrieve, and list details of all Network Address Translation (NAT) gateways present in an AWS account.
inputs
outputs
import boto3
from botocore.exceptions import (
BotoCoreError,
ClientError,
NoCredentialsError,
PartialCredentialsError,
EndpointConnectionError,
)
creds = _get_creds(cred_label)['creds']
access_key = creds['username']
secret_key = creds['password']
def list_nat_gateways_for_region(ec2_client, region_name):
nat_gateways_with_regions = []
try:
response = ec2_client.describe_nat_gateways()
if response and 'NatGateways' in response and len(response['NatGateways']) > 0:
for nat_gateway in response['NatGateways']:
nat_gateway_info = {
"NatGatewayId": nat_gateway['NatGatewayId'],
"Region": region_name,
"State": nat_gateway['State']
}
nat_gateways_with_regions.append(nat_gateway_info)
#print(nat_gateway_info)
else:
#print(f"No NAT Gateways found in region {region_name}.")
p=1 # Dummy line
except (NoCredentialsError, PartialCredentialsError, EndpointConnectionError,
ClientError, BotoCoreError, Exception) as e:
print(f"Error in region {region_name}: {str(e)}")
return nat_gateways_with_regions
def display_nat_gateways(data):
# Initialize table with the desired structure and headers
table = context.newtable()
table.title = "NAT Gateways Information"
table.num_cols = 3 # Number of columns according to headers
table.num_rows = 1 # Starts with one row for headers
table.has_header_row = True
# Define header names based on the new structure
headers = ["NAT Gateway ID", "Region", "State"]
# Set headers in the first row
for col_num, header in enumerate(headers):
table.setval(0, col_num, header)
# Sort the NAT gateway data by region for better organization
data.sort(key=lambda x: x["Region"])
# Populate the table with NAT gateway data
for row_num, entry in enumerate(data, start=1): # Starting from the second row
table.num_rows += 1 # Add a row for each NAT gateway entry
values = [entry["NatGatewayId"], entry["Region"], entry["State"]]
for col_num, value in enumerate(values):
table.setval(row_num, col_num, value)
#region = 'us-east-1' # You can set this to None to check all regions
region = None # Hardcoded for one time result
all_nat_gateways = []
if region:
ec2_client = boto3.client('ec2',aws_access_key_id=access_key,aws_secret_access_key=secret_key, region_name=region)
all_nat_gateways.extend(list_nat_gateways_for_region(ec2_client, region))
else:
for region_name in regions:
ec2_client = boto3.client('ec2',aws_access_key_id=access_key,aws_secret_access_key=secret_key, region_name=region_name)
all_nat_gateways.extend(list_nat_gateways_for_region(ec2_client, region_name))
display_nat_gateways(all_nat_gateways)
copied