Ricerca nel sito web

Come creare un modulo Terraform


In questo articolo vedremo come creare moduli riutilizzabili in Terraform. I moduli ci consentono di evitare la duplicazione del codice. Significa che lo stesso codice può essere utilizzato per creare risorse dello stesso tipo. Utilizzando i moduli non è necessario copiare e incollare il codice per creare più risorse dello stesso tipo.

Ad esempio, puoi inserire il codice all'interno di un modulo Terraform e riutilizzare quel modulo negli ambienti di staging e di produzione, in questo modo saremo in grado di riutilizzare entrambi gli ambienti lo stesso codice dallo stesso modulo invece di scrivere il codice più volte.

In questo articolo, scriveremo un modulo per la creazione di un bucket S3 come esempio.

Prerequisiti

  1. Comprensione di base di Terraform.
  2. Terraform installato sul tuo sistema.
  3. Account AWS (crealo se non ne hai uno).
  4. access_key e secret_key di un utente AWS IAM. (Fai clic qui per imparare a creare un utente IAM con access_key e secret_key su AWS, )

Cosa faremo

  1. Scrivi il nostro modulo
  2. Crea un bucket S3 utilizzando il modulo Terraform.
  3. Elimina la risorsa creata utilizzando Terraform Module.

Scrivi il nostro modulo Terraform

Crea una directory dedicata dove puoi avere il tuo file terraform \main.tf\ e un modulo.

Utilizzare il seguente comando per creare una directory

mkdir -p moduli/aws-s3

Crea un file main.tf in modules/aws-s3 e copia e incolla il seguente blocco di codice che verrà utilizzato come modulo per creare un bucket S3.

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


Dichiara la variabile richiesta in \modules/aws-s3/variables.tf\. Se lo desideri, puoi specificare i valori predefiniti per le variabili. Copia e incolla il seguente blocco di codice per creare il file.

vim modules/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 = {}
}

Ora, crea il file \main.tf\ che chiamerà il modulo che abbiamo definito nel passaggio precedente. Chiamare un modulo significa includere i contenuti di quel modulo nella configurazione con valori specifici per la sua variabile. I moduli vengono richiamati dall'interno di altri moduli utilizzando i blocchi module:

vim main.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"
  }
}

Tutti i moduli richiedono un argomento di origine. Il suo valore è il percorso di una directory locale dei file di configurazione dei moduli o un'origine del modulo remoto che Terraform deve scaricare e utilizzare.

Lo stesso indirizzo di origine può essere specificato in più blocchi moduli per creare più copie delle risorse definite all'interno, possibilmente con valori variabili diversi.

Crea \variables.tf\ che conterrà la definizione delle variabili. Questo manterrà i valori predefiniti che devono essere passati al modulo insieme a AWS \access_key\ e \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" }

Ora crea \terraform.tfvars\ che conterrà le credenziali utente AWS. Le seguenti chiavi devono essere modificate con le chiavi dell'utente IAM. Prima di specificare queste chiavi, devi crearle dalla console AWS e non condividerle con nessuno.

vim terraform.tfvars

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

Crea un bucket S3 utilizzando il modulo Terraform

Prima di eseguire i seguenti comandi assicurati di aver configurato access_key e secret_key validi.

Il primo comando da utilizzare è terraform init. Questo comando scarica e installa i plug-in per i provider utilizzati all'interno della configurazione. Nel nostro caso è AWS.

 terraform init

Il secondo comando da utilizzare è terraform plan. Questo comando viene utilizzato per vedere i cambiamenti che avverranno sull'infrastruttura.

 terraform plan

Il comando terraform apply creerà le risorse su AWS menzionate nel file main.tf. Ti verrà chiesto di fornire il tuo contributo per creare le risorse.

terraform apply

Quando esegui il comando precedente, dopo averlo completato con successo, puoi vedere che 1 nuova risorsa è stata aggiunta e 0 è stata distrutta.

Puoi andare alla console AWS S3 per verificare se il bucket S3 è stato creato o meno.

Elimina il bucket S3 creato utilizzando Terraform

Se non hai più bisogno di una risorsa che hai creato usando la configurazione menzionata nel file main.tf, puoi usare il comando \terraform destroy\ per eliminare tutte quelle risorse. Qui, il bucket S3 verrà eliminato all'esecuzione del seguente comando.

terraform destroy

Conclusione

In questo articolo, abbiamo visto i passaggi per scrivere il nostro modulo e creare un bucket S3 utilizzandolo. Adesso lo stesso modulo può essere utilizzato per creare più Bucket S3, per farlo basta modificare i valori delle variabili e riutilizzare lo stesso modulo.