def get_all_network_interfaces()

in Back-End/lambdas/receive_sqs_message.py [0:0]


def get_all_network_interfaces(account_number, region, cross_account_role):

    # Init
    var_list = []

    # Use boto3 on source account
    client_ec2 = create_boto_client(
        account_number, region, 'ec2', cross_account_role)

    retrieved_subnets = {}
    def get_subnet(subnet_id):
        try:
            if subnet_id and subnet_id not in retrieved_subnets:
                retrieved_subnets[subnet_id] = client_ec2.describe_subnets(SubnetIds=[subnet_id])['Subnets'][0]
            return retrieved_subnets[subnet_id]
        except:
            print(f"Unable to call describe_subnets for {subnet_id}")
        return {}

    # Page all vpc's
    paginator = client_ec2.get_paginator('describe_network_interfaces')

    for page in paginator.paginate():
        for i in page['NetworkInterfaces']:
            subnet = get_subnet(i.get('SubnetId'))

            for ip in i.get('PrivateIpAddresses', []):
                var_list.append({
                    'EntryType': 'network-interfaces',
                    'Id': f"{i.get('NetworkInterfaceId')}-{ip['PrivateIpAddress']}",
                    'NetworkInterfaceId': str(i.get('NetworkInterfaceId')),
                    'AccountNumber': str(account_number),
                    'Region': str(region),
                    'PrivateIpAddress': ip.get('PrivateIpAddress', ' '),
                    'PublicIp': ip.get('Association', {}).get('PublicIp', ' '),
                    'Primary': str(ip.get('Primary', ' ')),
                    'Status': str(i.get('Status', ' ')),
                    'Link': str(f"https://{region}.console.aws.amazon.com/ec2/v2/home?region={region}#NIC:sort=networkInterfaceId"),
                    'AttStatus': str(i.get('Attachment', {}).get('Status', ' ')),
                    'InterfaceType': str(i.get('InterfaceType', ' ')),
                    'SubnetId': str(i.get('SubnetId', ' ')),
                    'VpcId': str(i.get('VpcId', ' ')),
                    'CidrBlock': str(subnet.get('CidrBlock', ' ')),
                    'Tags': str(i.get('TagSet', 'No Tags Exist')),
                    'Description': str(i.get('Description', ' '))
                })

    return var_list