Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Descripción de los módulos de Terraform
En el ámbito de la infraestructura como código (IaC), un módulo es un bloque de código autónomo que se aísla y se empaqueta para su reutilización. El concepto de módulos es un aspecto ineludible del desarrollo de Terraform. Para obtener más información, consulte los módulos
La principal diferencia entre los módulos de Terraform CloudFormation es que CloudFormation los módulos se importan mediante un tipo de recurso especial ()AWS::CloudFormation::ModuleVersion
. En Terraform, cada configuración tiene al menos un módulo, conocido como módulo raíz
terraform { required_providers { helm = { source = "hashicorp/helm" version = "2.12.1" } } required_version = ">= 1.2.0" } module "eks" { source = "terraform-aws-modules/eks/aws" version = "20.2.1" vpc_id = var.vpc_id } provider "helm" { kubernetes { host = module.eks.cluster_endpoint cluster_ca_certificate = base64decode(module.eks.cluster_certificate_authority_data) } }
Es posible que haya observado que el archivo de configuración anterior no incluye al proveedor. AWS Esto se debe a que los módulos son autónomos y pueden incluir sus propios proveedores. Como los proveedores de Terraform son globales, los proveedores de un módulo secundario se pueden usar en el módulo raíz. Sin embargo, esto no es cierto para todos los valores de los módulos. De forma predeterminada, otros valores internos de un módulo se limitan únicamente a ese módulo y deben declararse como salidas para que se pueda acceder a ellos en el módulo raíz. Puede aprovechar los módulos de código abierto para simplificar la creación de recursos dentro de su pila. Por ejemplo, el módulo eks hace más que aprovisionar un clúster de EKS: aprovisiona un entorno de Kubernetes en pleno funcionamiento. Su uso puede ahorrarle tener que escribir docenas de líneas de código adicionales, siempre que la configuración del módulo eks se adapte a sus necesidades.
Módulos de llamadas
Dos de los principales comandos CLI de Terraform que se ejecutan durante la implementación de Terraform son terraform init y terraform applyterraform init
comando es localizar todos los módulos secundarios e importarlos como dependencias al directorio. .terraform/modules
Durante el desarrollo, siempre que añada un nuevo módulo de origen externo, debe volver a inicializarlo antes de utilizar el comando. apply
Cuando escuchas una referencia a un módulo de Terraform, se refiere a los paquetes de este directorio. Estrictamente hablando, el módulo que declaras en tu código es el módulo de llamada, por lo que, en la práctica, la palabra clave module llama al módulo real, que se almacena como una dependencia.
De esta manera, el módulo de llamada sirve como una representación más sucinta del módulo completo que se reemplazará cuando se lleve a cabo el despliegue. Puedes aprovechar esta idea creando tus propios módulos dentro de tus pilas para reforzar la separación lógica de los recursos utilizando los criterios que desees. Recuerda que el objetivo final de hacer esto debería ser reducir la complejidad de tus pilas. Dado que compartir datos entre módulos requiere generar esos datos desde dentro del módulo, a veces confiar demasiado en los módulos puede complicar demasiado las cosas.
El módulo raíz
Como cada configuración de Terraform tiene al menos un módulo, puede ser útil examinar las propiedades del módulo con el que más se va a tratar: el módulo raíz. Siempre que trabajes en un proyecto de Terraform, el módulo raíz se compone de todos los .tf
(o.tf.json
) archivos de tu directorio de nivel superior. Cuando ejecutas terraform apply
en ese directorio de nivel superior, Terraform intenta ejecutar todos los .tf
archivos que encuentra allí. Todos los archivos de los subdirectorios se ignoran a menos que se invoquen en uno de estos archivos de configuración de nivel superior.
Esto proporciona cierta flexibilidad a la hora de estructurar el código. También es la razón por la que es más preciso referirse a su implementación de Terraform como un módulo que como un archivo, ya que varios archivos podrían estar involucrados en un solo proceso. Existe una estructura de módulos estándar.tf
archivo en su directorio de nivel superior, se ejecutaría junto con el resto de los archivos. De hecho, todos los .tf
archivos de nivel superior de un módulo se despliegan cuando se ejecuta. terraform apply
Entonces, ¿qué archivo ejecuta Terraform primero? La respuesta a esa pregunta es muy importante.
Hay una serie de pasos que Terraform lleva a cabo después de la inicialización y antes del despliegue de la pila. En primer lugar, se analizan las configuraciones existentes y, a continuación, se crea un gráfico de dependenciasdepends_on
parámetro se gestionarán después de los recursos que especifiquen. Cuando sea posible, Terraform puede implementar el paralelismo y gestionar recursos no dependientes simultáneamente. Puede ver el gráfico de dependencias antes de implementarlo mediante el comando terraform graph.
Una vez creado el gráfico de dependencias, Terraform determina lo que hay que hacer durante la implementación. Compara el gráfico de dependencias con el archivo de estado más reciente. El resultado de este proceso se denomina plan y es muy parecido a un conjunto de CloudFormation cambios. Puede ver el plan actual mediante el comando terraform plan
Como práctica recomendada, se recomienda permanecer lo más cerca posible de la estructura de módulos estándar. En los casos en los que los archivos de configuración sean demasiado largos para gestionarlos de forma eficiente y las separaciones lógicas puedan simplificar la administración, puede distribuir el código en varios archivos. Ten en cuenta cómo funcionan el gráfico de dependencias y el proceso de planificación para que tus pilas funcionen de la forma más eficiente posible.