Las entrevistas de Terraform se centran en el estado, porque la mayoría de los problemas reales provienen del estado: quién lo posee, quién puede modificarlo al mismo tiempo y qué sucede cuando la realidad se aleja de él. Después vienen los módulos, los entornos, los cambios seguros y cómo gestionarías Terraform en un equipo.
A continuación tienes 25 preguntas con respuestas. HashiCorp cambió la licencia de Terraform en 2023 y existe el fork comunitario OpenTofu, así que menciona cuál usa el equipo si surge el tema. Las ideas y los comandos principales son los mismos para ambos.
Conceptos básicos
1. ¿Qué es Terraform y qué es la infraestructura como código?
Terraform es una herramienta para definir infraestructura en archivos de configuración y aplicarla a través de las API de los proveedores. Infraestructura como código significa que la configuración se escribe, se versiona, se revisa y es repetible, en lugar de armarse haciendo clics en una consola.
2. ¿Cuál es la diferencia entre declarativo e imperativo?
Terraform es declarativo: describes el estado final que quieres y Terraform calcula los pasos. Con un script imperativo, escribes los pasos tú mismo y ejecutarlo dos veces puede romper cosas.
3. ¿Cuáles son los comandos principales de Terraform?
| Comando | Qué hace |
|---|---|
| terraform init | Descarga proveedores y módulos, configura el backend |
| terraform validate | Verifica que la configuración sea válida |
| terraform fmt | Formatea los archivos |
| terraform plan | Muestra qué va a cambiar |
| terraform apply | Aplica los cambios |
| terraform destroy | Elimina los recursos gestionados |
| terraform import | Incorpora un recurso existente a la gestión |
| terraform state | Inspecciona y edita el estado |
4. ¿Qué son los proveedores, los recursos y las fuentes de datos?
Un proveedor es un plugin que se comunica con una API como AWS, Azure o Kubernetes. Un recurso es algo que Terraform crea y gestiona. Una fuente de datos lee información sobre algo que ya existe, como una VPC existente o la AMI más reciente.
5. ¿Qué son las variables, los outputs y los locals?
Las variables de entrada parametrizan una configuración. Los outputs exponen valores, para usarlos en la línea de comandos o por otros módulos. Los locals son expresiones con nombre dentro de un módulo, que se usan para no repetirte.
Estado
6. ¿Qué es el archivo de estado de Terraform y por qué es importante?
El estado asigna tu configuración a los recursos reales y almacena sus atributos. Terraform compara la configuración, el estado y el mundo real para planificar los cambios. Si pierdes el estado, Terraform puede intentar recrear cosas que ya existen. También puede contener secretos, así que trátalo como información sensible.
7. ¿Dónde debería almacenarse el estado?
En un backend remoto, no en el portátil de una persona, por ejemplo S3 con una tabla de DynamoDB o el bloqueo nativo más reciente de S3, Azure Storage, Google Cloud Storage o Terraform Cloud. Activa el versionado en el bucket, el cifrado y el acceso restringido.
8. ¿Qué es el bloqueo de estado?
Evita que dos personas o pipelines apliquen al mismo tiempo y corrompan el estado. La mayoría de los backends remotos lo admiten. Si una ejecución falla, puede que tengas que liberar un bloqueo obsoleto con terraform force-unlock, después de comprobar que nadie más está aplicando.
9. ¿Qué es el drift y cómo se gestiona?
El drift es cuando la infraestructura real difiere del estado, normalmente porque alguien la cambió a mano. terraform plan (o plan -refresh-only) lo muestra. Decide si revertir el cambio aplicando, o actualizar el código para que coincida.
10. ¿Cómo incorporas un recurso existente a Terraform?
Escribe el bloque del recurso y luego ejecuta terraform import <address> <id>, o usa un bloque import en versiones más recientes. Ejecuta plan después y ajusta el código hasta que no muestre cambios.
11. ¿Cómo divides el estado entre entornos o equipos?
Usa un estado separado por entorno y componente, por ejemplo uno para redes, uno por cada aplicación y uno por entorno. Esto limita el radio de impacto y acelera los planes. Comparte valores usando outputs y fuentes de datos o estado remoto.
Módulos y estructura
12. ¿Qué es un módulo y cuándo conviene escribir uno?
Un módulo es un grupo reutilizable de recursos con entradas y salidas. Escribe uno cuando repitas el mismo patrón, como una VPC o un servicio, y quieras una única versión revisada. Mantén los módulos pequeños y enfocados, con valores predeterminados razonables, y versiónalos.
13. ¿Cómo gestionas los entornos de desarrollo, staging y producción?
Las opciones habituales son directorios o repositorios separados con su propio estado y archivos de variables, o los workspaces. Muchos equipos prefieren un estado separado por entorno, ya que los workspaces comparten el mismo código y facilitan aplicar al entorno equivocado. Usa los mismos módulos con distintos valores de variables.
14. ¿Qué son los workspaces?
Estados con nombre dentro de un mismo backend y configuración. Son útiles para copias temporales de la misma configuración, como entornos de prueba por rama, pero no constituyen una separación sólida para producción.
15. ¿Cuál es la diferencia entre count y for_each?
count crea un número de copias indexadas por posición. for_each crea una por cada elemento de un map o set, con clave por nombre. Prefiere for_each, porque eliminar un elemento del medio de una lista de count desplaza los índices y puede destruir y recrear recursos.
16. ¿Qué hace depends_on?
Añade una dependencia explícita cuando Terraform no puede verla a partir de las referencias. Úsalo con moderación, ya que la mayoría de las dependencias provienen de referirse a los atributos de otro recurso.
Cambios y operaciones seguras
17. ¿Qué son las reglas de lifecycle?
create_before_destroy crea primero el reemplazo, prevent_destroy bloquea la eliminación, ignore_changes omite atributos modificados fuera de Terraform, y replace_triggered_by fuerza el reemplazo cuando cambia otro recurso.
18. ¿Cómo manejas los secretos en Terraform?
No los codifiques directamente. Usa un gestor de secretos o variables de entorno, marca las variables y salidas como sensitive, y recuerda que los valores pueden acabar igualmente en el estado, así que protege el estado. Evita pasar secretos mediante archivos de variables sin cifrar en el control de versiones.
19. ¿Cómo revisas y aplicas cambios de forma segura?
Ejecuta plan en una pull request, revisa la salida del plan, exige aprobación y aplica desde un pipeline usando el plan guardado, para que lo que se revisa sea lo que se ejecuta. Vigila las líneas de destroy o replace en el plan.
20. Un plan muestra que va a destruir y recrear una base de datos. ¿Qué haces?
Detente y averigua por qué. Las causas habituales son un atributo inmutable modificado, un recurso renombrado o un módulo movido. Usa bloques moved o terraform state mv para corregir cambios de dirección, usa ignore_changes o prevent_destroy si corresponde, y haz una copia de seguridad antes de cualquier apply arriesgado.
21. ¿Cómo renombras o mueves un recurso sin destruirlo?
Usa un bloque moved en el código, o terraform state mv para cambiar su dirección en el estado. Luego ejecuta plan y confirma que no hay ningún destroy.
22. ¿Cómo fijas las versiones?
Usa required_version para Terraform y required_providers con restricciones de versión, y haz commit del archivo .terraform.lock.hcl para que todos usen las mismas compilaciones de proveedores. Actualiza de forma deliberada y lee el changelog.
Preguntas prácticas y de escenario
23. ¿Qué son los provisioners y deberías usarlos?
Los provisioners ejecutan scripts en un recurso después de crearlo. Son un último recurso, porque no se rastrean en el estado y los fallos son difíciles de manejar. Prefiere cloud-init, imágenes construidas con una herramienta como Packer, o gestión de configuración.
24. ¿Cómo estructurarías Terraform para un equipo con varios entornos?
"Un repositorio para módulos compartidos con versiones publicadas, y un repositorio live con un directorio por entorno y componente. Cada uno tiene su propio estado remoto con bloqueo. Un pipeline ejecuta fmt, validate y plan en las pull requests, exige aprobación y aplica al hacer merge. El acceso es mediante credenciales de corta duración, y las comprobaciones de políticas detectan cambios arriesgados."
25. Alguien cambió un recurso en la consola y ahora Terraform quiere revertirlo. ¿Qué haces?
Averigua por qué lo cambió. Si fue una corrección urgente, actualiza el código para que coincida y aplica, para conservar el cambio. Si fue un error, aplica para revertirlo. Después añade controles, como restringir el acceso de escritura a la consola, para que no vuelva a ocurrir.
Cómo prepararte
Crea un proyecto pequeño con un backend remoto, un módulo y dos entornos. Practica un renombrado con un bloque moved, un import y una corrección de drift. Prepárate para explicar una ocasión en la que un plan te sorprendió y qué hiciste. Para temas relacionados con la nube, consulta nuestra guía de entrevista de AWS y guía de Kubernetes.
Di tus respuestas en voz alta, sobre todo las preguntas sobre el estado, donde las explicaciones se vuelven confusas. Una transcripción de entrevista simulada muestra dónde dudaste. Sigue las normas del empleador sobre herramientas de IA en cualquier entrevista en vivo.
Practica respuestas de entrevista sobre Terraform con YesToTheOffer
Realiza una entrevista técnica simulada, explica el estado y los módulos en voz alta, y revisa tu transcripción después. 30 minutos gratis, sin suscripción.



