in functions/source/lambda_function.py [0:0]
def update_vpc_rt(vpn_routes, vmx_id, rt_id):
region = os.environ['AWS_REGION']
ec2 = boto3.client('ec2', region_name=region)
uniq_vpn_routes = list(set(vpn_routes))
#Checking exsisting routes in the VPC table
raw_exsisting_vpc_rts = ec2.describe_route_tables(Filters = [{"Name": "route-table-id", "Values": [rt_id]}])['RouteTables'][0]['Routes']
exsisting_routes = []
for routes in raw_exsisting_vpc_rts:
if 'InstanceId' in routes and routes['InstanceId'] == vmx_id:
exsisting_routes.append(routes['DestinationCidrBlock'])
else:
logger.info('VPC RT: No matching routes found')
#Compare exsisting routes with new routes
update_routes = [x for x in exsisting_routes + uniq_vpn_routes if x not in exsisting_routes]
if update_routes:
logger.info('VPC RT: New routes for update {0}'.format(update_routes))
for routes in update_routes:
try:
ec2.create_route(
DestinationCidrBlock=routes,
InstanceId=vmx_id,
RouteTableId=rt_id
)
except botocore.exceptions.ClientError as error:
if error.response['Error']['Code'] == 'RouteAlreadyExists':
ec2.replace_route(
DestinationCidrBlock=routes,
InstanceId=vmx_id,
RouteTableId=rt_id
)
else:
logger.info('VPC RT: Boto exception, adding routes to vpc table failed due to {0}'.format(error.response['Error']['Code']))
else:
logger.info('VPC RT: No new routes for update')