English English French French Spanish Spanish German German
Geekflare cuenta con el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliados comprando enlaces en este sitio.
Comparte en:

10 mejores prácticas de Terraform para un mejor aprovisionamiento de infraestructura

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 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 .

Structuring

Cuando está trabajando en un gran proyecto de infraestructura de producción utilizando Terraform, debe seguir una estructura de directorios adecuada para ocuparse de las complejidades que pueden 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.

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 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.

Naming Convention

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.

Use Shared Modules

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 un Instancia AWS EC2, configuración de 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"
}

Latest Version

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.

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

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

Backup System State

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.

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

Lock State File

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.

Nota:: no todos los backend admiten el bloqueo.

Use self Variable

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)
}

Minimize Blast Radius

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.

Use var-file

En terraform, puede crear un archivo con extensión <em>.</em>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.

geekflare@geekflare:~$ gedit terraform.tfvars

access_key = "AKIATYWSDFYU5DUDJI5F"
secret_key = "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"

Ahora, use este archivo var en el comando terraform.

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

User 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.

Gracias a nuestros patrocinadores
Más lecturas excelentes sobre computación en la nube
Impulse su negocio
Algunas de las herramientas y servicios para ayudar a que su negocio crezca.
  • Invicti utiliza Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en cuestión de horas.
    Prueba Invicti
  • Web scraping, proxy residencial, administrador de proxy, desbloqueador web, rastreador de motores de búsqueda y todo lo que necesita para recopilar datos web.
    Prueba Brightdata
  • Semrush es una solución de marketing digital todo en uno con más de 50 herramientas en SEO, redes sociales y marketing de contenido.
    Prueba Semrush
  • Intruder es un escáner de vulnerabilidades en línea que encuentra debilidades de ciberseguridad en su infraestructura, para evitar costosas filtraciones de datos.
    Trata Intruder