Configurando VPC para AWS Lambda con Terraform

Clase 17 de 30Curso de Ciberseguridad para Desarrollo Web

Resumen

Optimiza la seguridad y el acceso de tus funciones AWS Lambda integrándolas en una VPC con Terraform. El flujo guía desde la creación de una policy IAM para manejar interfaces de red, hasta asignar security groups y subnets, corregir errores de sintaxis y validar con terraform plan/apply. Al final, las funciones quedan en la VPC default donde está RDS, listas para exponer endpoints locales en el siguiente paso.

¿Qué permisos necesita Lambda para manejar red en VPC?

Para que las funciones puedan unirse a una VPC, se otorgan permisos específicos a través de una política IAM que les permite gestionar su network interface en EC2.

¿Cómo crear la policy CanManageNetworkInterfaces?

  • Ir a IAM > Policies y crear el archivo: CanManageNetwork.tf.
  • Definir el recurso de política: CanManageNetworkInterfaces con acciones de EC2 para “atachar” una nueva network interface.
  • Exportar la policy desde el module de Policies para usar su policy ARN en otros módulos.

¿Cómo adjuntarla a roles y módulos?

  • En el main de IAM, pasar la policy a roles usando el output del módulo Policies (el policy arn exportado).
  • Crear variable en roles: CanManageNetworkPolicyArn de tipo string.
  • En RepoCollector, adjuntar la policy igual que CanAccessRDS y canLog (mismo patrón de “attach”).
  • Asociar la policy al repoName usando el arn recibido en CanManageNetworkPolicyArn.

¿Cómo unir las Lambdas a la VPC con security groups y subnets?

El objetivo es que las Lambdas queden dentro de la VPC y usen un security group que permita a RDS aceptarlas por inbound rules.

¿Dónde obtener el security group y las subnets?

  • En EC2 > Security groups, identificar el security group por defecto. Copiar su ID.
  • En VPC, ubicar y copiar los subnet IDs requeridos.

¿Cómo pasar IDs a los módulos de Terraform?

  • En el módulo Compute, enviar a las Lambdas un arreglo de security groups IDs. Acepta múltiples IDs.
  • En el main principal, pasar al módulo Compute un arreglo de subnet IDs con los valores copiados de VPC.
  • Definir en compute/vars: variable subnet IDs como list(string).
  • En el main de Compute, reenviar subnet IDs al módulo de Lambda.
  • En el módulo de Lambda/variables, declarar subnet IDs como list(string) y security groups IDs como list(string).

¿Cómo configurar la VPC en cada Lambda?

  • Dentro de cada recurso de Lambda, agregar VPC config.
  • Asignar: security groups IDs desde variables y subnets IDs desde variables.
  • Repetir la misma configuración para ambas Lambdas (por ejemplo, GetMetrics y la otra función con igual estructura).

¿Cómo validar y desplegar con Terraform sin errores?

La verificación incluye formato, sintaxis y nombres esperados por las plantillas de AWS.

¿Qué errores típicos corregir antes del plan?

  • Ejecutar el linter con terraform fmt -recursive para formatear.
  • Corregir faltantes como el “=” en roles/vars.
  • Cambiar “variables” por variable donde corresponda.
  • Arreglar typos: “ver” por var.
  • Verificar consistencia de nombres: aunque la variable se llame security groups IDs, en la configuración de Terraform (plantilla de AWS) el atributo esperado puede ser Security Group ID. Ajustar también en metrics el plural singular según se requiera.

¿Qué valida el plan y qué cambia el apply?

  • Correr terraform plan para confirmar que se añaden la nueva policy y las subnets, y que se modificarán dos Lambdas.
  • Ejecutar terraform apply, confirmar y esperar el despliegue.
  • Resultado esperado: “dos recursos añadidos” y “dos modificados”.

¿Cómo verificar en la consola de AWS?

  • En Lambda > Configuration > VPC, confirmar que ambas funciones quedaron en la VPC default.
  • Validar que coincide con la VPC de RDS. Todo queda en la misma red, de forma segura y lista para exponer endpoints locales en el siguiente paso.

¿Te gustaría compartir cómo estructuras tus modules y vars para VPC en Terraform, o qué convenciones usas para nombrar security groups y subnets?