Modificando main.tf para enlazar módulos IAM en Terraform

Clase 14 de 30Curso de Ciberseguridad para Desarrollo Web

Resumen

Aprende a crear infraestructura como código con Terraform en AWS de forma clara y segura. Desde la inicialización hasta la verificación en IAM, aquí verás cómo conectar modules, pasar ARNs entre policies y roles, y aplicar cambios con confianza. Ideal para sentar la base de tus funciones Lambda.

¿Cómo iniciar Terraform y preparar el entorno?

Para empezar, se navega a la carpeta de infraestructura y se inicializa Terraform. La primera ejecución con backend deshabilitado no aplica, así que se repite sin esa opción. Además, se formatea el código para mantener un estándar.

¿Qué comandos ejecutar para inicializar y formatear?

  • Entrar a la carpeta infra y ejecutar: terraform init -backend=false.
  • Repetir la inicialización sin bandera: terraform init.
  • Formatear todo el repositorio: terraform fmt -recursive.
# Inicialización (intento con backend deshabilitado)
terraform init -backend=false

# Inicialización válida
terraform init

# Formateo recursivo
terraform fmt -recursive

¿Para qué sirve terraform plan?

  • Muestra qué se va a crear, cambiar o borrar.
  • No ejecuta cambios, solo los anuncia.
  • Útil para validar módulos y referencias antes de aplicar.
terraform plan

Nota: la inicialización prepara la metadata y el state (mencionado como terraform.tf.state) necesaria para operar.

¿Cómo conectar módulos IAM con main.tf?

El plan no mostraba cambios porque el archivo principal no referenciaba nada. Se crea main.tf y se conectan los modules de policies y roles, pasando los ARNs exportados del primero al segundo. Luego, se expone un output con el role creado.

¿Cómo referenciar policies y roles con ARNs?

  • Crear main.tf en la carpeta de infra.
  • Inicializar el module policies con su source local.
  • Inicializar el module roles y pasarle las ARNs exportadas por policies.
  • Exponer un output con el repoCollectorRoleArn.
module "policies" {
  source = "./policies"
}

module "roles" {
  source            = "./roles"
  RDSPolicyArn      = module.policies.canAccessRDSArn
  LogPolicyArn      = module.policies.canLogArn
}

output "repoCollectorRoleArn" {
  value = module.roles.repoCollectorRoleArn
}

¿Qué hacer si el plan no detecta cambios?

  • Verifica que main.tf exista y referencie los modules.
  • Ejecuta terraform init nuevamente para reconocer los nuevos modules.
  • Repite terraform plan y valida la creación de dos policies y un role.
terraform init
terraform plan

¿Cómo aplicar cambios y verificar en AWS IAM?

Con el plan listo, se ejecuta terraform apply y se confirma con yes. Al finalizar, verás “Apply complete” y el resumen de recursos creados. Después, se valida en la consola de AWS IAM que existan el role y las policies vinculadas.

¿Qué recursos se crean y cómo se ven?

  • Una policy de logs y una policy de RDS.
  • Un role (ejemplo visto: RepoCollectorPlatzi) con las policies adjuntas: canAccessRDS y canLog.
  • Definiciones en formato JSON, igual que las generadas con el policy generator.
terraform apply
# Confirmar
yes

¿Qué habilidades y conceptos clave se practican?

  • Infraestructura como código con Terraform.
  • Uso de comandos: init, fmt, plan, apply.
  • Módulos reutilizables: policies y roles con source local.
  • Exportación de valores entre módulos mediante outputs y ARNs.
  • AWS IAM: creación y vinculación de policies y roles.
  • Validación en consola de AWS y lectura de JSON de policy.

Ya quedó la base para las funciones Lambda: roles y policies listos. Enseguida, se compilarán los artefactos y se subirán a C3 para su despliegue con Terraform. ¿Qué parte te gustaría profundizar: módulos, outputs, o verificación en IAM? Cuéntalo en comentarios.