Usando boto en una función lambda de AWS en una VPC

Usando boto en una función lambda de AWS en una VPC

Tengo una lambda que accede a EC2. Quiero asignarlo a una VPC por motivos de seguridad, pero cuando lo hago, boto simplemente deja de funcionar. Aquí hay un ejemplo mínimo:

ec2 = boto3.resource('ec2', region_name='eu-west-2')
instances = ec2.instances.filter(Filters=[
  {
    'Name': 'vpc-id',
    'Values': [vpc_id]
  }
])
for instance in instances:
  # function hangs here
  print(instance)

La función de Lambda tiene los permisos necesarios en ec2 y funciona bien fuera de la VPC. Cuando coloco la lambda en la VPC (en un grupo de seguridad que permite todo el tráfico saliente), se bloquea. ¿Que necesito hacer?

Respuesta1

El problema era que necesitaba tener una NAT en la subred en la que se ejecuta la función Lambda: ¡una puerta de enlace de Internet no es suficiente!

Supongo que esto se debe a que Lambda se ejecuta solo de forma privada y la puerta de enlace de Internet, que permite el tráfico bidireccional, no permitiría rutas hacia/desde Lambda.

Agregar Lambda a una subred privada con una NAT adjunta solucionó este problema.

información relacionada