#!/usr/bin/env python3 import boto3 from typing import List import csv def get_regions(): client = boto3.client('ec2') return [item['RegionName'] for item in client.describe_regions()['Regions']] def get_vpc_endpoints(client) -> List: paginator = client.get_paginator('describe_vpc_endpoints') page_iterator = paginator.paginate() return [item for sublist in page_iterator for item in sublist['VpcEndpoints']] def get_interface_vpc_endpoints(vpc_endpoints) -> List: return [ item for sublist in vpc_endpoints for item in sublist if item['VpcEndpointType'] == 'Interface' ] def get_rows(vpc_endpoints_interface) -> List: rows: List = [] for item in vpc_endpoints_interface: name_tag = [tag for tag in item['Tags'] if tag['Key'] == 'Name'][0] for entry in item['DnsEntries']: rows.append([ name_tag['Value'], item['VpcEndpointId'], item['VpcId'], item['ServiceName'], entry['DnsName'], entry['HostedZoneId'], ]) return rows def get_profiles() -> List: return [ 'gdb-artistapp-dev', 'gdb-artistapp-prod', 'gdb-apollo-dev', 'gdb-apollo-prod', 'gdb-delphi-dev', 'gdb-delphi-prod', 'gdb-databricks-dev', 'gdb-databricks-prod', 'gdb-datasci-dev', 'gdb-mct-dev', 'gdb-mct-prod', 'gdb-infra-dev', 'gdb-infra-prod', ] def main(): profiles = get_profiles() regions = get_regions() sessions = [] for profile in profiles: for region in regions: sessions.append(boto3.session.Session( profile_name=profile, region_name=region )) clients = [] for session in sessions: clients.append(session.client('ec2')) vpc_endpoints = [] for client in clients: vpc_endpoints.append(get_vpc_endpoints(client)) vpc_endpoints_interface = get_interface_vpc_endpoints(vpc_endpoints) with open('vpc-endpoints.csv', 'w', newline='') as csvfile: writter = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) writter.writerow(['Name', 'VpcEndpointId', 'VpcId', 'ServiceName', 'DnsName', 'HostedZoneId']) for row in get_rows(vpc_endpoints_interface): writter.writerow(row) if __name__ == '__main__': main()