Si trabajas con Terraform y manejas recursos preexistentes en la nube, tarde o temprano vas a toparte con la duda: ¿uso el bloque Data o el bloque Import? Aunque parecen hacer lo mismo, su comportamiento dentro del estado y tu capacidad de manipular recursos cambian por completo.
¿Qué hace el bloque Data en Terraform?
El bloque Data funciona como una lectura. Tú apuntas a un recurso que ya existe y Terraform solo trae sus propiedades para que las consultes desde tu script.
Cuando revisas el estado después de ejecutar un Data source, vas a ver únicamente una referencia con la información leída del recurso. No aparece como un componente que tú controles, sino como un dato disponible para usar dentro de otros bloques. Por eso, si nombras tu recurso como grupo_importado cuando en realidad lo estás leyendo, el nombre te va a confundir más adelante. Algo como grupo_leido describe mejor lo que hiciste.
¿Qué es un Data source en Terraform? Es un bloque que lee las propiedades de un recurso existente sin tomar control sobre él. Solo te permite consultar información, no modificar ni destruir el recurso.
¿Qué hace el bloque Import y en qué se diferencia de Data?
El bloque Import hace algo más profundo: trae el recurso completo a tu configuración de Terraform. A partir de ese momento, ese recurso vive dentro de tu script y puedes modificarlo, actualizarlo o incluso eliminarlo desde ahí.
En la práctica, cuando importas un storage account de Azure, ese componente queda asignado a un bloque que tú declaras. Ya no es un recurso externo al que solo le echas un vistazo, sino parte activa de tu infraestructura como código.
¿Cómo se registra cada uno en el estado?
Ambos bloques tocan el archivo de estado, pero de formas distintas:
- Data registra únicamente los datos legibles del recurso, como una referencia implícita.
- Import registra el recurso completo, con todas sus propiedades manipulables.
- Ambos quedan visibles al inspeccionar el estado, pero solo Import te da control real.
Esta diferencia explica por qué con Data puedes referenciar valores en otros bloques sin riesgo, mientras que con Import tu script asume responsabilidad total sobre el recurso.
¿Cuándo conviene usar Data y cuándo Import?
La decisión depende de qué tan lejos quieras llegar con el recurso preexistente. Si solo necesitas un dato (un ID, un nombre, una región), Data te sobra. Si necesitas adueñarte del recurso para gestionarlo desde Terraform, vas con Import.
¿Puedo destruir un recurso importado con Terraform? Sí. Una vez importado, ese recurso forma parte de tu script y un terraform destroy lo elimina junto con el resto de tu infraestructura.
¿Data borra recursos cuando ejecuto destroy? No. Como solo lee propiedades, Data no afecta al recurso original. Tu destroy respeta los componentes externos.
¿Cuál es el riesgo de usar Import sin cuidado?
Aquí está la parte sensible. Cuando importas un recurso, ese componente queda atado a tu ciclo de vida en Terraform. Si ejecutas un destroy sin pensarlo, no solo eliminas lo que tú creaste, también puedes borrar un recurso que pertenecía a otro equipo o que ya existía antes de tu proyecto.
Con Data tienes más margen: puedes destruir tu infraestructura sin tocar recursos de terceros, porque nunca tomaste control sobre ellos. Esa flexibilidad es justo lo que muchos equipos buscan cuando integran Terraform con infraestructura legada.
¿Cómo elegir el bloque correcto según tu escenario?
Piensa en la intención antes que en la sintaxis:
- Si tu meta es leer y referenciar propiedades, usa Data.
- Si tu meta es gestionar y manipular el recurso desde Terraform, usa Import.
- Si quieres eliminar el recurso junto con el resto del stack, Import es el camino.
- Si quieres proteger recursos externos de cualquier cambio accidental, Data es tu mejor aliado.
Entender esta distinción cambia la forma en que diseñas tus módulos. Muchos usamos ambos bloques de manera indistinta al principio, sin notar que uno solo observa y el otro toma posesión. Cuéntame en los comentarios: ¿en qué escenario de tu proyecto vas a aplicar Data y en cuál Import?