Usando boto em uma função AWS lambda em uma VPC

Usando boto em uma função AWS lambda em uma VPC

Eu tenho um lambda que acessa o EC2. Quero atribuí-lo a uma VPC para fins de segurança, mas quando faço isso, o boto simplesmente para de funcionar. Aqui está um exemplo 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)

A função do Lambda possui as permissões necessárias no ec2 e funciona bem fora do VPC. Quando coloco o lambda na VPC (em um grupo de segurança que permite todo o tráfego de saída), ele trava. O que eu preciso fazer?

Responder1

O problema era que eu precisava ter um NAT na sub-rede em que a função Lambda está sendo executada - um gateway de Internet não é suficiente!

Presumo que isso ocorre porque o Lambda é executado apenas de forma privada, e o Internet Gateway, permitindo tráfego bidirecional, não permitiria rotas de/para o Lambda.

Adicionar o Lambda a uma sub-rede privada com um NAT anexado corrigiu esse problema.

informação relacionada