Contenido del curso

Lambdas dentro de uma VPC com Terraform

Resumen

Configurar funções Lambda dentro de uma VPC é o passo que garante comunicação segura entre tus servicios serverless e bases de dados como RDS. Aqui você verá como fazer isso com Terraform, passo a passo, atribuindo políticas IAM, security groups e subnets corretas para que tudo funcione sem erros de sintaxe nem permissões em falta.

Por que adicionar uma Lambda a uma VPC?

Quando uma função Lambda precisa conversar com recursos privados, como uma instância RDS, ela tem que estar dentro da mesma VPC. Sem essa configuração, a Lambda fica isolada e não consegue acessar a base de dados, mesmo que tudo o resto esteja certo.

¿Qué es una VPC en AWS? Es una red privada virtual donde tus recursos (Lambdas, RDS, EC2) pueden comunicarse de forma aislada y segura del resto de internet.

Na consola da AWS, dentro de Lambda, no painel Configuration, você confirma se a função já está em alguma VPC. Se não estiver, é hora de mexer no Terraform.

Como criar a política IAM CanManageNetworkInterfaces?

Para que uma Lambda entre numa VPC, ela precisa de permissões para gerenciar suas próprias network interfaces. Isso significa criar uma política IAM dedicada.

Dentro do módulo IAM, em Policies, você cria um arquivo can-manage-network.tf com um recurso aws_iam_policy chamado CanManageNetworkInterfaces. Essa política autoriza ações EC2 como associar uma nova interface de rede.

Depois, no main.tf do módulo IAM, você anexa essa política ao role da Lambda, do mesmo jeito que fez com CanAccessRDS e CanLog. O fluxo é:

  • Declarar a policy no módulo Policies.
  • Exportar o ARN como output.
  • Receber o ARN no módulo Roles via variável can_manage_network_policy_arn do tipo string.
  • Anexar com aws_iam_role_policy_attachment ao role repo_collector.

¿Por qué la Lambda necesita permisos de red? Porque al unirse a una VPC, AWS crea una elastic network interface (ENI) en su nombre, y eso requiere permisos EC2 explícitos.

Como passar security groups e subnets ao módulo Compute?

Com a política pronta, faltam dois ingredientes: o security group e as subnets onde a Lambda vai viver.

Onde encontrar o security group e as subnets?

Na consola da AWS, vá em EC2 e role até Security Groups. Copie o ID do grupo padrão (default), que é o mesmo que sua RDS usa. Para as subnets, abra o painel da VPC e copie os IDs de cada uma.

Esses dois conjuntos de dados precisam atravessar várias camadas do seu Terraform até chegar na função Lambda.

Como definir as variáveis no Terraform?

A propagação acontece do main raiz até o módulo Lambda, passando pelo Compute. Em cada nível você declara a variável correspondente:

  • No main.tf raiz, define subnet_ids como array com os IDs copiados.
  • No módulo Compute, declara subnet_ids e security_groups_ids como list(string).
  • No módulo Lambda, repete a declaração para receber esses valores.
  • Encaminha de volta para cada aws_lambda_function dentro do bloco vpc_config.

O bloco vpc_config é sintaxe padrão do Terraform com AWS e fica assim, conceitualmente: recebe security_group_ids e subnet_ids, ambos vindos das variáveis do módulo.

Quais erros de sintaxe aparecem e como resolver?

Durante o terraform plan, é comum o linter apontar pequenos detalhes que quebram a configuração. Três erros típicos apareceram aqui:

  1. Falta de sinal de igual numa declaração de variável dentro das funções Lambda.
  2. Uso de variable em vez de var ao referenciar valores no main.
  3. Diferença entre o nome da variável (security_groups_ids, no plural) e o atributo esperado pela AWS (security_group_ids, no singular).

Esse último ponto é sutil mas importante: embora você possa nomear suas variáveis como quiser, o atributo do recurso aws_lambda_function segue o padrão da AWS. Se errar a chave dentro do vpc_config, o plan falha.

Rodar terraform fmt -recursive ajuda na formatação, mas é o terraform plan que valida a sintaxe real e revela esses descompassos.

Como verificar que a Lambda ficou na VPC correta?

Depois do terraform apply, a saída confirma: dois recursos adicionados (a política e o anexo ao role) e duas modificações (as duas Lambdas agora dentro da VPC).

Na consola da AWS, abra qualquer uma das funções Lambda, vá em Configuration e depois em VPC. Você deve ver:

  • A VPC padrão atribuída.
  • O security group default selecionado.
  • As subnets listadas, idênticas às que a RDS usa.

Com isso, todos os recursos do projeto, Lambdas e base de dados, vivem na mesma rede privada e podem se comunicar com segurança. O próximo passo é criar o gateway que vai expor essas Lambdas via endpoints acessíveis localmente.

Que parte da configuração você quer aprofundar primeiro: as políticas IAM ou o roteamento da VPC? Conta nos comentários.