• ¡Obtenga la seguridad de la aplicación de la manera correcta! Detectar, proteger, monitorear, acelerar y más ...
  • Hablemos de algunas de las mejores prácticas que se deben seguir al usar Terraform.

    Terraform es un software de código abierto muy popular IaC (infraestructura como código) herramienta para definir y aprovisionar la infraestructura completa.

    Aunque Terraform se lanzó en 2014, la adopción de esta herramienta ha crecido a nivel mundial. Cada vez son más los desarrolladores aprendiendo Terraform para desplegar infraestructura en su organización.

    Si ha comenzado a utilizar Terraform, debe adoptar las mejores prácticas para un mejor aprovisionamiento de la infraestructura de producción.

    Si eres un novato, mira esto Terraform para principiantes artículo.

    Estructuración

    Cuando esté trabajando en un gran proyecto de infraestructura de producción utilizando Terraform, debe seguir una estructura de directorio adecuada para ocuparse de las complejidades que puedan ocurrir en el proyecto. Sería mejor si tuviera directorios separados para diferentes propósitos.

    Por ejemplo, si está utilizando terraform en entornos de desarrollo, preparación y producción, tenga directorios separados para cada uno de ellos.

    [email protected]:~$ tree terraform_project/
    terraform_project/
    ├── dev
    │ ├── main.tf
    │ ├── outputs.tf
    │ └── variables.tf
    ├── modules
    │ ├── ec2
    │ │ ├── ec2.tf
    │ │ └── main.tf
    │ └── vpc
    │ ├── main.tf
    │ └── vpc.tf
    ├── prod
    │ ├── main.tf
    │ ├── outputs.tf
    │ └── variables.tf
    └── stg
    ├── main.tf
    ├── outputs.tf
    └── variables.tf
    
    6 directories, 13 files

    Incluso las configuraciones de terraform deben estar separadas porque, después de un período, las configuraciones de una infraestructura en crecimiento se volverán complejas.

    Por ejemplo, puede escribir todos sus códigos terraform (módulos, recursos, variables, salidas) dentro del main.tf archivo en sí, pero tener códigos terraform separados para variables y salidas lo hace más legible y fácil de entender.

    Convenio de denominación

    Las convenciones de nomenclatura se utilizan en Terraform para hacer las cosas fácilmente comprensibles.

    Por ejemplo, supongamos que desea crear tres espacios de trabajo diferentes para diferentes entornos en un proyecto. Entonces, en lugar de nombrarlos como env1, en2, env3, debe llamarlos como dev, escenario, pinchar. A partir del nombre en sí, queda bastante claro que hay tres espacios de trabajo diferentes para cada entorno.

    También deben seguirse convenciones similares para recursos, variables, módulos, etc. El nombre del recurso en Terraform debe comenzar con un nombre de proveedor seguido de un guión bajo y otros detalles.

    Por ejemplo, el nombre del recurso para crear un objeto terraform para una tabla de rutas en AWS sería aws_route_table.

    Por lo tanto, si sigue correctamente las convenciones de nomenclatura, será más fácil comprender incluso los códigos complejos.

    Usar módulos compartidos

    Se recomienda encarecidamente utilizar los módulos oficiales de Terraform disponibles. No es necesario reinventar un módulo que ya existe. Ahorra mucho tiempo y dolor. Registro terraform tiene muchos módulos disponibles. Realice cambios en los módulos existentes según la necesidad.

    Además, cada módulo debe concentrarse en un solo aspecto de la infraestructura, como crear una instancia AWS EC2, configurar la base de datos MySQL, etc.

    Por ejemplo, si desea usar AWS VPC en su código terraform, puede usar: VPC simple

    module "vpc_example_simple-vpc" {
    source
    = "terraform-aws-modules/vpc/aws//examples/simple-vpc"
    version = "2.48.0"
    }

    Ultima versión

    La comunidad de desarrollo de Terraform es muy activa y el lanzamiento de nuevas funcionalidades ocurre con frecuencia. Se recomienda permanecer en la última versión de Terraform como cuando ocurre una nueva versión importante. Puede actualizar fácilmente a la última versión.

    Si omite varias versiones importantes, la actualización se volverá muy compleja.

    Corral terraform -v comando para comprobar si hay una nueva actualización.

    [email protected]:~$ terraform -v
    Terraform v0.11.14
    Your version of Terraform is out of date! The latest version
    is 0.12.0. You can update by downloading from www.terraform.io/downloads.html

    Estado del sistema de respaldo

    Siempre haga una copia de seguridad de los archivos de estado de Terraform.

    Estos archivos realizan un seguimiento de los metadatos y los recursos de la infraestructura. Por defecto, estos archivos llamados como terraform.tfstate se almacenan localmente dentro del directorio del espacio de trabajo.

    Sin estos archivos, Terraform no podrá determinar qué recursos se implementan en la infraestructura. Por lo tanto, es esencial tener una copia de seguridad del archivo de estado. De forma predeterminada, un archivo con un nombre terraform.tfstate.backup se creará para mantener una copia de seguridad del archivo de estado.

    [email protected]:~$ tree terraform_demo/
    terraform_demo/
    ├── awsec2.tf
    ├── terraform.tfstate
    └── terraform.tfstate.backup
    0 directories, 3 files

    Si desea almacenar un archivo de estado de respaldo en alguna otra ubicación, use -backup flag en el comando terraform y proporcione la ruta de ubicación.

    La mayoría de las veces, habrá varios desarrolladores trabajando en un proyecto. Por lo tanto, para darles acceso al archivo de estado, debe almacenarse en una ubicación remota utilizando un terraform_remote_state fuente de datos.

    El siguiente ejemplo tomará una copia de seguridad en S3.

    data "terraform_remote_state" "vpc" {
    backend = "s3"
    config = {
    bucket = “s3-terraform-bucket”
    key = “vpc/terraform.tfstate"
    region = “us-east-1”
       }
    }

    Bloquear archivo de estado

    Puede haber varios escenarios en los que más de un desarrollador intente ejecutar la configuración de terraform al mismo tiempo. Esto puede provocar la corrupción del archivo de estado de terraform o incluso la pérdida de datos. El mecanismo de bloqueo ayuda a prevenir tales escenarios. Se asegura de que a la vez, solo una persona esté ejecutando las configuraciones de terraform y no haya ningún conflicto.

    A continuación, se muestra un ejemplo de bloqueo del archivo de estado, que se encuentra en una ubicación remota mediante DynamoDB.

    resource “aws_dynamodb_table” “terraform_state_lock” {
    name = “terraform-locking”
    read_capacity = 3
    write_capacity = 3
    hash_key = “LockingID”
    
    attribute {
    name = “LockingID”
    type = “S”
       }
    
    }
    terraform {
    backend “s3” {
    bucket = “s3-terraform-bucket”
    key = “vpc/terraform.tfstate”
    region = “us-east-2”
    dynamodb_table = “terraform-locking”
       }
    }

    Cuando varios usuarios intentan acceder al archivo de estado, el nombre de la base de datos de DynamoDB y la clave principal se utilizarán para bloquear el estado y mantener la coherencia.

    <b>Nota</b>: no todos los backend admiten el bloqueo.

    Usar variable propia

    self variable es un tipo especial de variable que se usa cuando no se conoce el valor de la variable antes de implementar una infraestructura.

    Supongamos que desea usar la dirección IP de una instancia que se implementará solo después del comando terraform apply, por lo que no conoce la dirección IP hasta que esté en funcionamiento.

    En tales casos, usa auto variables, y la sintaxis para usarlo es self.ATTRIBUTE. Entonces, en este caso, usará self.ipv4_address como una variable propia para obtener la dirección IP de la instancia. Estas variables solo se permiten en bloques de conexión y aprovisionamiento de la configuración de terraform.

    connection {
    host = self.ipv4_address
    type = "ssh"
    user = var.users[2]
    private_key = file(var.private_key_path)
    }

    Minimizar el radio de explosión

    El radio de explosión no es más que la medida del daño que puede ocurrir si las cosas no salen según lo planeado.

    Por ejemplo, si está implementando algunas configuraciones de terraform en la infraestructura y la configuración no se aplica correctamente, cuál será la cantidad de daño a la infraestructura.

    Por lo tanto, para minimizar el radio de explosión, siempre se sugiere impulsar algunas configuraciones en la infraestructura a la vez. Por lo tanto, si algo salió mal, el daño a la infraestructura será mínimo y podrá corregirse rápidamente. Implementar muchas configuraciones a la vez es muy arriesgado.

    Utilice var-file

    En terraform, puede crear un archivo con extensión .tfvars y pase este archivo al comando terraform apply usando -var-file bandera. Esto le ayuda a pasar aquellas variables que no quiere poner en el código de configuración de terraform.

    Siempre se sugiere pasar variables para una contraseña, clave secreta, etc. localmente a través de -var-archivo en lugar de guardarlo dentro de las configuraciones de terraform o en un sistema de control de versiones de ubicación remota.

    Por ejemplo, si desea lanzar una instancia ec2 usando terraform, puede pasar la clave de acceso y la clave secreta usando -var-archivo

    Crear un archivo terraform.tfvars y ponga las claves en este archivo.

    [email protected]:~$ gedit terraform.tfvars
    
    access_key = "AKIATYWSDFYU5DUDJI5F"
    secret_key = "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"

    Ahora, use este archivo var en el comando terraform.

    [email protected]:~$ terraform apply -var-file=/home/geekflare/terraform.tfvars

    Usuario Docker

    Cuando está ejecutando un trabajo de compilación de canalización de CI / CD, se sugiere usar estibador contenedores. Terraform proporciona contenedores Docker oficiales que se pueden utilizar. En caso de que esté cambiando el CI / CD servidor, puede pasar fácilmente la infraestructura dentro de un contenedor.

    Antes de implementar la infraestructura en el entorno de producción, también puede probar la infraestructura en los contenedores Docker, que son muy fáciles de implementar. Al combinar Terraform y Docker, obtiene una infraestructura portátil, reutilizable y repetible.

    Conclusión

    Espero que estas mejores prácticas le ayuden a escribir mejores configuraciones de Terraform. Continúe y comience a implementarlos en sus proyectos de terraform para obtener mejores resultados.