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.