Terraform desde las Trincheras (Buena práctica ‘Uso de módulos’)

Continuando con las buenas prácticas de IaC con Terraform (que hemos podido utilizar en nuestros proyectos de Azure esperando que faciliten una curva de aprendizaje para aquellos que aún no las aplican y que también están referenciadas en Internet donde existe bastante información de calidad sobre ello) revisaremos la cuarta parte de esta serie de artículos:

  1. Terraform desde las Trincheras (Buena práctica ‘Agrupación de capas lógicas’).
  2. Terraform desde las Trincheras (Buena práctica ‘Definición de nomenclatura’).
  3. Terraform desde las Trincheras (Buena práctica ‘Uso de service principal’).

Uso de Módulos

Después del primer proyecto de implementación de IaC se enfrentarán con el caso que existirán secciones de código Terraform de proyectos anteriores que puedan reutilizar, donde copian ello y lo adaptan para el proyecto actual. Además, mientras participen en más proyectos dichas secciones de código podrían aumentar e involucrar a más de un recurso cloud, por ejemplo los recursos que forman la capa lógica de networking.

Cuando llegamos a ese contexto, es donde se puede refactorizar el código Terraform para crear un componente configurable y reutilizable que se pueda usar en cada proyecto o la mayoría de proyectos donde participemos. En Terraform dicho componente se conoce como módulos y si se requiere más información sobre ello se puede revisar el siguiente enlace: https://developer.hashicorp.com/terraform/language/modules

Para implementar módulos en Terraform requiere que tengamos un nivel de experiencia y conocimiento entre básico e intermedio, ya que existe algunos aspectos importantes a tomar en cuenta que son los que explicaremos a continuación.

¿Implementar desde cero o reutilizar módulos existentes?

Según se tenga identificado las políticas o restricciones dentro de la compañía donde uno trabajo o las que tenga el proyecto donde uno participa, relacionado a la implementación de IaC con Terraform podemos usar módulos existentes que están publicados en Internet, donde existe un conjunto publicado en la página de oficial de Terraform: https://registry.terraform.io/namespaces/aztfm y para Azure se tiene 6 módulos oficiales tal como se indica en la siguiente imagen:

Sin embargo, también podemos encontrar módulos en las páginas de desarrolladores que publican ello y que no están en la página oficial de Terraform.

El problema con seguir esa estrategia es que tenemos que tener cuidado en la revisión del código Terraform de los módulos implementados por terceros, ya que no sabemos si tienen errores o si son fáciles de modificar en el caso no se adapten al 100% con los escenarios donde los queremos usar. Por eso también existe otra estrategia que es la implementación desde cero de los módulos Terraform, aunque esto puede ser igual de complejo o aún más que la estrategia anterior.

¿Usar módulos públicos o privados?

Cuando ya tenemos los módulos de Terraform implementados podemos hacer que ellos sean privados donde se cargan de forma local o también podemos cargarlos apuntando a la ruta pública donde están expuestos. La diferencia de ambas estrategias se centra en el tema si es un problema o no que el código Terraform de los módulos este público, ya que si dichos módulos se implementaron desde cero o fueron modificados tomando en cuenta una versión existente, ese código será visto por terceros y si eso no se quiere, entonces se debería considerar la opción de módulos privados. En la siguiente imagen se muestra cómo se carga el módulo (resaltado de amarillo) y también como se configura sus parámetros (resaltado en un cuadro de borde rojo):

Documentación de cómo usar módulos

Otro aspecto importante es brindar ejemplos de los casos más comunes que se pueden configurar usando los módulos para que de esta forma sea menos complicado su uso en nuevos proyectos o por nuevos integrantes que no tienen mucha experiencia y conocimiento en módulos Terraform.

Para ello en la carpeta que tiene el código del módulo Terraform debe tener una carpeta de ejemplos y dentro tendrá una carpeta por cada ejemplo para que sirva de referencia en su uso. En la siguiente imagen para el módulo oficial de application gateway se muestra que la carpeta ejemplo (resaltado en el cuadro de borde rojo) tiene un solo caso de configuración (resaltado de amarillo) y dentro están los archivos con el código de ejemplo sobre el uso de dicho modulo:

Por otro lado, también es importante resaltar que el código Terraform del módulo o los módulos que se tengan implementados pueden seguir siendo actualizados para soportar mejoras o nuevos cambios que se identifiquen en cada nuevo proyecto donde se usen.

En el siguiente artículo explicaremos la buena práctica de IaC con Terraform llamada «Protección de valores que contienen información de seguridad».

slot gacorslot gacorMurah4dtotoslot88Horas88Slot PulsaSlot DanaSpboNowSkorWomen In The WorldSlot88rubiesandradishesorganicnewsroomvirante seocloud spectatorVainglory Forumamerican gathering of jewish holocaust survivorsRumah Pejuang Kanker Ambuoutside foundWetpaintcwhonorsSlot GacorJudi BolaDemo SlotDemo SlotSlot GacorSlot GacorJudi BolaJudi Bolaomo77omo77omo777omo777UnogoalSPBOATLASBET88CUANWIN138MACANASIA88https://direct.lc.chat/14614518/https://secure.livechatinc.com/licence/14614518/v2/open_chat.cgihttps://direct.lc.chat/15014550/https://secure.livechatinc.com/licence/15014550/v2/open_chat.cgihttps://direct.lc.chat/15314022/https://secure.livechatinc.com/licence/15314022/v2/open_chat.cgihttps://ibrapchs.net/https://atox.in/
https://slot77.amikmahaputra.ac.id/products/slot77/https://gacor4d.amikmahaputra.ac.id/products/gacor4d/https://infini88.amikmahaputra.ac.id/products/infini88/https://sv388.amikmahaputra.ac.id/products/sv388/https://pay4d.amikmahaputra.ac.id/products/pay4d/https://parlay-bola.amikmahaputra.ac.id/products/mix-parlay/https://idn-slot.amikmahaputra.ac.id/products/idn-slot/https://mpo-slot.amikmahaputra.ac.id/products/mpo-slot/https://nexus-slot.amikmahaputra.ac.id/products/nexus-slot/https://mahjong-ways.amikmahaputra.ac.id/products/slot-mahjong/https://akun-pro-jepang.amikmahaputra.ac.id/products/slot-jepang/https://akun-pro-kamboja.amikmahaputra.ac.id/products/slot-kamboja/https://akun-pro-malaysia.amikmahaputra.ac.id/products/slot-malaysia/https://akun-pro-myanmar.amikmahaputra.ac.id/products/slot-myanmar/https://akun-pro-rusia.amikmahaputra.ac.id/products/slot-rusia/https://akun-pro-singapore.amikmahaputra.ac.id/products/slot-singapore/https://akun-pro-taiwan.amikmahaputra.ac.id/products/slot-taiwan/https://akun-pro-thailand.amikmahaputra.ac.id/products/slot-thailand/https://akun-pro-thailand.amikmahaputra.ac.id/products/slot-thailand/https://akun-pro-vietnam.amikmahaputra.ac.id/products/slot-vietnam/
https://slot-bonus.amikmahaputra.ac.id/products/slot-bonus/https://slot-demo.amikmahaputra.ac.id/products/slot-demo/https://slot-dana.amikmahaputra.ac.id/products/slot-dana/https://slot-depo-10k.amikmahaputra.ac.id/products/slot-10k/https://slot-depo-25k.amikmahaputra.ac.id/products/slot-25k/https://slot-garansi-kekalahan.amikmahaputra.ac.id/products/slot-garansi-kekalahan/https://slot-habanero.amikmahaputra.ac.id/products/slot-habanero/https://slot-hoki.amikmahaputra.ac.id/products/slot-hoki/https://slot-jp.amikmahaputra.ac.id/products/slot-jp/https://slot-maxwin.amikmahaputra.ac.id/products/slot-maxwin/https://bocoran-admin-slot.amikmahaputra.ac.id/products/bocoran-admin-slot/https://casino-online.amikmahaputra.ac.id/products/casino-online/https://bet88.amikmahaputra.ac.id/products/bet88/https://bandarqq.amikmahaputra.ac.id/products/bandarqq/https://baccarat-online.amikmahaputra.ac.id/products/baccarat-online/https://asia88.amikmahaputra.ac.id/products/asia88/https://asia4d.amikmahaputra.ac.id/products/asia4d/https://anti-rungkad.amikmahaputra.ac.id/products/anti-rungkad/https://akun-vip.amikmahaputra.ac.id/products/akun-vip/https://akun-gacor.amikmahaputra.ac.id/products/akun-gacor/
https://slot-receh.journal.poltekanika.ac.id/products/slot-receh/https://slot-pulsa.journal.poltekanika.ac.id/products/slot-depo-pulsa/https://slot-maxwin.journal.poltekanika.ac.id/products/slot-maxwin/https://slot-hoki.journal.poltekanika.ac.id/products/slot-hoki/https://slot-garansi-kekalahan.journal.poltekanika.ac.id/products/slot-garansi-kekalahan/https://slot-depo-25k.journal.poltekanika.ac.id/products/slot-25k/https://slot-depo-10k.journal.poltekanika.ac.id/products/slot-10k/https://slot-demo.journal.poltekanika.ac.id/products/slot-demo/https://slot-dana.journal.poltekanika.ac.id/products/slot-depo-dana/https://slot-bonus.journal.poltekanika.ac.id/products/bonus-new-member/
https://www.angkolabarat.tapselkab.go.id/products/slot-zeus/https://www.angkolabarat.tapselkab.go.id/products/slot-10k/https://www.angkolabarat.tapselkab.go.id/products/slot-25k/https://www.angkolabarat.tapselkab.go.id/products/slot-garansi-kekalahan/https://www.angkolabarat.tapselkab.go.id/products/slot-hoki/https://www.angkolabarat.tapselkab.go.id/products/slot-maxwin/https://www.angkolabarat.tapselkab.go.id/products/slot-pulsa/https://www.angkolabarat.tapselkab.go.id/products/slot-receh/https://www.angkolabarat.tapselkab.go.id/products/slot-toto/https://www.angkolabarat.tapselkab.go.id/products/slot-demo/>
https://www.jurnal.poltekanika.ac.id/products/asia4d/https://www.jurnal.poltekanika.ac.id/products/bet88/https://www.jurnal.poltekanika.ac.id/products/idn-slot/https://www.jurnal.poltekanika.ac.id/products/mpo-slot/https://www.jurnal.poltekanika.ac.id/products/nexus-slot/https://www.jurnal.poltekanika.ac.id/products/pay4d/https://www.jurnal.poltekanika.ac.id/products/sbobet88/https://www.jurnal.poltekanika.ac.id/products/slot77/https://www.jurnal.poltekanika.ac.id/products/slot88/https://www.jurnal.poltekanika.ac.id/products/sv388/
https://slot-bonus.pn-subang.go.id/products/bonus-new-member/https://slot-dana.pn-subang.go.id/products/slot-dana/https://slot-demo.pn-subang.go.id/products/slot-demo/https://slot-garansi-kekalahan.pn-subang.go.id/products/slot-garansi-kekalahan/https://slot-hoki.pn-subang.go.id/products/slot-hoki/https://slot-maxwin.pn-subang.go.id/products/slot-maxwin/https://slot-pulsa.pn-subang.go.id/products/slot-pulsa/https://slot-receh.pn-subang.go.id/products/slot-receh/https://slot-toto.pn-subang.go.id/products/slot-toto/https://slot-zeus.pn-subang.go.id/products/slot-zeus/https://unogoal.pn-subang.go.id/products/unogoal/https://toto-togel.pn-subang.go.id/products/toto-togel/https://spbo.pn-subang.go.id/products/spbo/https://pkv-games.pn-subang.go.id/products/pkv-games/https://parlay-bola.pn-subang.go.id/products/parlay-bola/https://nowgoal.pn-subang.go.id/products/nowgoal/https://judi-bola.pn-subang.go.id/products/judi-bola/https://idn-poker.pn-subang.go.id/products/idn-poker/https://dominoqq.pn-subang.go.id/products/dominoqq/https://bet88.pn-subang.go.id/products/bet88/
https://ppid.dpubinmarcipka.jatengprov.go.id/dokumen/link-gacor/https://ppid.dpubinmarcipka.jatengprov.go.id/dokumen/link-demo/https://ppid.dpubinmarcipka.jatengprov.go.id/dokumen/situs-thailand/https://ppid.dpubinmarcipka.jatengprov.go.id/dokumen/situs-kamboja/https://ppid.dpubinmarcipka.jatengprov.go.id/dokumen/sbobet/https://sdi.babelprov.go.id/publikasi/link-demo/https://sdi.babelprov.go.id/publikasi/situs-thailand/https://sdi.babelprov.go.id/publikasi/situs-kamboja/https://sdi.babelprov.go.id/publikasi/sbobet88/https://akun-pro-hongkong.amikmahaputra.ac.id/products/slot-hongkong/