C贸mo crear un m贸dulo de Terraform

Escribir un m贸dulo de Terraform

En este art铆culo veremos c贸mo crear m贸dulos reutilizables en Terraform. Los m贸dulos nos permiten evitar la duplicaci贸n de c贸digo. Significa que se puede usar el mismo c贸digo para crear recursos del mismo tipo. Al usar m贸dulos, no necesita copiar y pegar su c贸digo para crear m煤ltiples recursos del mismo tipo.

Por ejemplo, puede colocar el c贸digo dentro de un m贸dulo de Terraform y reutilizar ese m贸dulo en los entornos de ensayo y producci贸n, de esta manera podremos hacer que ambos entornos reutilicen el mismo c贸digo del mismo m贸dulo en lugar de escribir el c贸digo varias veces.

En este art铆culo, escribiremos un m贸dulo para crear un S3 Bucket como ejemplo.

requisitos previos

  1. Comprensi贸n b谩sica de Terraform.
  2. Terraform instalado en su sistema.
  3. Cuenta AWS (Crear si no tienes uno).
  4. ‘access_key’ y ‘secret_key’ de un usuario de AWS IAM. (Haga clic aqu铆 para obtener informaci贸n sobre c贸mo crear un usuario de IAM con ‘access_key’ y ‘secret_key’ en AWS)

Lo que haremos

  1. Escribir nuestro propio m贸dulo
  2. Cree un dep贸sito S3 con el m贸dulo Terraform.
  3. Elimine el recurso creado utilizando el m贸dulo Terraform.

Escribir nuestro propio m贸dulo Terraform

Cree un directorio dedicado donde pueda tener su archivo terraform 芦main.tf禄 y un m贸dulo.

Use el siguiente comando para crear un directorio

mkdir -p m贸dulos/aws-s3

Escribir un m贸dulo de Terraform

Cree un archivo main.tf en m贸dulos/aws-s3 y copie y pegue el siguiente bloque de c贸digo que se usar谩 como m贸dulo para crear un S3 Bucket.

m贸dulos vim/aws-s3/main.tf

resource "aws_s3_bucket" "s3_bucket" {
聽聽bucket = var.bucket_name
聽 acl聽 聽 = "public-read"
聽聽policy = <<EOF
{
聽聽聽聽"Version": "2012-10-17",
聽聽聽聽"Statement": [
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽"Sid": "PublicReadGetObject",
聽聽聽聽聽聽聽聽聽聽聽聽"Effect": "Allow",
聽聽聽聽聽聽聽聽聽聽聽聽"Principal": "*",
聽聽聽聽聽聽聽聽聽聽聽聽"Action": [
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽"s3:GetObject"
聽聽聽聽聽聽聽聽聽聽聽聽],
聽聽聽聽聽聽聽聽聽聽聽聽"Resource": [
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽"arn:aws:s3:::${var.bucket_name}/*"
聽聽聽聽聽聽聽聽聽聽聽聽]
聽聽聽聽聽聽聽聽}
聽聽聽聽]
}
EOF聽
聽聽website {
聽聽聽聽index_document = "index.html"
聽聽聽聽error_document = "error.html"
聽聽}
聽聽 tags = var.tags
}

C贸digo del m贸dulo Terraform

Declare la variable requerida en 芦modules/aws-s3/variables.tf禄. Si lo desea, puede especificar los valores predeterminados para las variables. Copie y pegue el siguiente bloque de c贸digo para crear el archivo.

m贸dulos vim/aws-s3/variables.tf

variable "bucket_name" {
  description = "Name of the s3 bucket. Must be unique."
  type = string
}

variable "tags" {
  description = "Tags to set on the bucket."
  type = map(string)
  default = {}
}

Variables de terraformaci贸n

Ahora, cree el archivo 芦main.tf禄 que llamar谩 al m贸dulo que definimos en el paso anterior. Llamar a un m贸dulo significa incluir el contenido de ese m贸dulo en la configuraci贸n con valores espec铆ficos para su variable. Los m贸dulos se llaman desde dentro de otros m贸dulos usando bloques de m贸dulos:

vim principal.tf

provider "aws" {
      region     = "${var.region}"
      access_key = "${var.access_key}"
      secret_key = "${var.secret_key}"
}


module "website_s3_bucket" {
  source = "./modules/aws-s3"

  bucket_name = "${var.bucket_name}"

  tags = {
    Terraform   = "true"
    Environment = "dev"
  }
}

Archivo principal de Terraform

Todos los m贸dulos requieren un argumento fuente. Su valor es la ruta a un directorio local de los archivos de configuraci贸n del m贸dulo o una fuente de m贸dulo remoto que Terraform debe descargar y usar.

La misma direcci贸n de origen se puede especificar en m煤ltiples bloques de m贸dulos para crear m煤ltiples copias de los recursos definidos dentro, posiblemente con diferentes valores de variables.

Cree 芦variables.tf禄 que contendr谩 la definici贸n de variables. Esto contendr谩 los valores predeterminados que deben pasarse al m贸dulo junto con AWS 芦access_key禄 y 芦secret_key禄.

vim聽variables.tf
variable "access_key" {
     description = "Access key to AWS console"
}
variable "secret_key" {
     description = "Secret key to AWS console"
}
variable "region" {
     description = "Region of AWS VPC"
}
variable "bucket_name" {
  description = "(Required) Creates a unique bucket name"
  type        = "string"
  default     = "test-bucket-rahul-delete"
}

Ampliar archivo variables.tf

Ahora cree 芦terraform.tfvars禄 que contendr谩 las credenciales de usuario de AWS. Las siguientes claves deben cambiarse con las claves de su usuario de IAM. Antes de especificar estas claves, debe crearlas desde la consola de AWS y no compartir estas claves con nadie.

vim terraform.tfvars

region = "eu-west-3"
access_key = "AKIAQ6GAIA5XX54GLLNG"
secret_key = "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"

Cree un dep贸sito S3 utilizando el m贸dulo Terraform

Antes de ejecutar los siguientes comandos, aseg煤rese de haber configurado access_key y secret_key v谩lidos.

El primer comando que se utilizar谩 es ‘terraform init’. Este comando descarga e instala complementos para proveedores utilizados dentro de la configuraci贸n. En nuestro caso es AWS.

terraform initPublicidad

El segundo comando que se utilizar谩 es ‘plan de terraformaci贸n’. Este comando se utiliza para ver los cambios que se producir谩n en la infraestructura.

plan de terraformaci贸n

El comando ‘terraform apply’ crear谩 los recursos en AWS mencionados en el archivo main.tf. Se le pedir谩 que proporcione su entrada para crear los recursos.

Aplicar terraformaci贸n

Cuando ejecuta el comando anterior, al completarlo con 茅xito, puede ver que se ha agregado 1 nuevo recurso y 0 se ha destruido.

Puede ir a la consola de AWS S3 para verificar si el S3 Bucket est谩 creado o no.

Elimine el S3 Bucket creado usando Terraform

Si ya no necesita un recurso que cre贸 usando la configuraci贸n mencionada en el archivo main.tf, puede usar el comando 芦terraform destroy禄 para eliminar todos esos recursos. Aqu铆, el dep贸sito S3 se eliminar谩 al ejecutar el siguiente comando.

terraformar destruir

Conclusi贸n

En este art铆culo, vimos los pasos para escribir nuestro propio m贸dulo y crear un dep贸sito S3 us谩ndolo. Ahora el mismo m贸dulo se puede usar para crear m煤ltiples S3 Buckets, para hacerlo solo necesitamos cambiar los valores de las variables y reutilizar el mismo m贸dulo.

Deja una respuesta

Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *