Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Computación en nube , Desarrollo y DevOps Última actualización: 24 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

Hablemos de algunas de las mejores prácticas que deben seguirse al utilizar Terraform

Terraform es una herramienta IaC (infraestructura como código) de código abierto muy popular 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 más desarrolladores están aprendiendo Terraform para desplegar infraestructura en su organización

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

un novato, consulte este artículo de Terra

formulario

para principiantes

Estructurar

Cuando esté trabajando en un gran proyecto de infraestructura de producción utilizando Terraform, debe seguir una estructura de directorios adecuada para hacerse cargo de las complejidades que puedan surgir en el proyecto. Lo mejor sería que tuviera directorios separados para diferentes propósitos

Por ejemplo, si está utilizando Terraform en entornos de desarrollo, puesta en escena y producción, tenga directorios separados para cada uno de ellos

geekflare@geekflare:~$ 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

directorios, 13 archivos

Incluso las configuraciones de terraformación deben estar separadas porque, al cabo de un tiempo, 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 propio archivo main. tf, pero tener códigos terraform separados para las variables y las salidas lo hace más legible y fácil de entender

Convención de nomenclatura

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

Por ejemplo, digamos que usted quiere hacer 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, prod. A partir del propio nombre, queda bastante claro que hay tres espacios de trabajo diferentes para cada entorno

También se deben seguir convenciones similares para los 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

Utilizar módulos compartidos

Se recomienda encarecidamente utilizar los módulos Terraform oficiales disponibles. No es necesario reinventar un módulo que ya existe. Ahorra mucho tiempo y dolor. El registro de Terra form tiene un montón de módulos fácilmente disponibles. Realice cambios en los módulos existentes según las necesidades

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

Por ejemplo, si desea utilizar AWS VPC en su código terraform, puede utilizar - VPC simple

module "vpc_example_simple-vpc" {
source

=

"terraform-aws-modules/vpc/aws//examples/simple-vpc"
version = "2.48.0"

}

Última versión

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

Si se salta varias versiones principales, la actualización será muy compleja

Ejecutar el comando terraform -v para comprobar si hay una nueva actualización

geekflare@geekflare:~$ terraform -v
Terraform v0.11.14
¡Su versión de Terraform está desactualizada! La última versión
es 0.12.0. Puede actualizarla descargándola de www.terraform.io/downloads.html

Copia de seguridad del estado del sistema

Haga siempre copias de seguridad de los archivos de estado de Terraform

Estos archivos mantienen un registro de los metadatos y 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 será capaz de averiguar qué recursos están desplegados en la infraestructura. Por lo tanto, es esencial tener una copia de seguridad del archivo de estado. Por defecto, un archivo con un nombre terraform.tfstate. se creará una copia de seguridad para mantener una copia de seguridad del archivo de estado

geekflare@geekflare:~$ tree terraform_demo/
terraform_demo/
├── awsec2.tf
├── terraform.tfstate
└── terraform.tfstate.backup

0

directorios, 3 archivos

Si desea almacenar un archivo de estado de copia de seguridad en alguna otra ubicación, utilice la bandera -backup en el comando terraforme y proporcione la ruta de ubicación

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

El siguiente ejemplo realizará 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 múltiples escenarios en los que más de un desarrollador intente ejecutar la configuración terraform al mismo tiempo. Esto puede provocar la corrupción del archivo de estado de terraformación o incluso la pérdida de datos. El mecanismo de bloqueo ayuda a prevenir tales escenarios. Se asegura de que, en un momento dado, sólo una persona esté ejecutando las configuraciones de terraformación y no haya ningún conflicto

He aquí un ejemplo de bloqueo del archivo de estado, que se encuentra en una ubicación remota utilizando DynamoDB

recurso "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 intenten acceder al archivo de estado, el nombre de la base de datos DynamoDB y la clave primaria se utilizarán para el bloqueo del estado y el mantenimiento de la coherencia

Nota: no todos los backend soportan el bloqueo

Utilice la variable self

la variable self es un tipo especial de variable que se utiliza cuando no se conoce el valor de la variable antes de desplegar una infraestructura

Supongamos que desea utilizar la dirección IP de una instancia que sólo se desplegará tras aplicar el comando terraform, por lo que no conocerá la dirección IP hasta que esté en funcionamiento

En estos casos, se utilizan variables self, y la sintaxis para utilizarla es self.ATTRIBUTE. Así, en este caso, utilizará self.ipv4_address como variable self para obtener la dirección IP de la instancia. Estas variables sólo están permitidas en los bloques connection y provisioner 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 Blast

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

Por ejemplo, si está desplegando algunas configuraciones de terraformación en la infraestructura y la configuración no se aplica correctamente, ¿cuál será la cantidad de daños que sufrirá la infraestructura?

Así que, para minimizar el radio de explosión, siempre se sugiere impulsar unas pocas configuraciones en la infraestructura a la vez. Así, si algo sale mal, el daño a la infraestructura será mínimo y podrá corregirse rápidamente. Desplegar muchas configuraciones a la vez es muy arriesgado

Utilice el archivo var

En terraform, puede crear un archivo con extensión <em>.</em>tfvars y pasar este archivo al comando terraformar aplicar utilizando la bandera -var-file. Esto le ayuda a pasar aquellas variables que no desea poner en el código de configuración de terraform

Siempre se sugiere pasar las variables de una contraseña, clave secreta, etc. localmente a través de -var-file 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 utilizando terraform, puede pasar la clave de acceso y la clave secreta utilizando -var-file

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

geekflare@geekflare:~$ gedit terraform.tfvars

access_key = "AKIATYWSDFYU5DUDJI5F"
secret_key = "W9VCCs6I838NdRQQsAeclkejYSJA4YtaZ 2TtG2H"

Ahora, utilice este archivo var en el comando terraform

geekflare@geekflare:~$ terraform apply -var-file=/home/geekflare/terraform.tfvars

Usuario Docker

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

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

Conclusión

Espero que estas mejores prácticas le ayuden en la escritura de mejores configuraciones Terraform. Vaya por delante y empiece a aplicar estos en sus proyectos Terraform para obtener mejores resultados.

  • Avi
    Autor
    Avi es un entusiasta de la tecnología con experiencia en tecnologías de tendencia como DevOps, Cloud Computing, Big Data y muchas más. Le apasiona aprender tecnologías de vanguardia y compartir sus conocimientos con los demás a través de... Seguir leyendo
Gracias a nuestros patrocinadores
Más lecturas sobre computación en nube
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder