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 produzione, in questo modo potremo riutilizzare entrambi gli ambienti allo stesso modo codice dallo stesso modulo invece di scrivere il codice più volte.
In questo articolo, scriveremo un modulo per creare un bucket S3 come esempio.
Prerequisiti
- Comprensione di base di Terraform.
- Terraform installato sul tuo sistema.
- Account AWS (crea se non ne hai uno).
- 'access_key' e 'secret_key' di un utente AWS IAM. (Fai clic qui per imparare a creare un utente IAM con 'access_key' &'secret_key' su AWS, )
Cosa faremo
- Scrivi il nostro modulo
- Crea un bucket S3 utilizzando il modulo Terraform.
- 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.
Usa il seguente comando per creare una directory
mkdir -p moduli/aws-s3
Crea un file main.tf in moduli/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 incolla il seguente blocco di codice per creare il file.
moduli 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 = {} }
Ora, crea il file "main.tf" che chiamerà il modulo che abbiamo definito nel passaggio precedente. Chiamare un modulo significa includere il contenuto di quel modulo nella configurazione con valori specifici per la sua variabile. I moduli vengono chiamati dall'interno di altri moduli utilizzando module
blocchi:
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 sorgente. Il suo valore è il percorso di una directory locale dei file di configurazione del modulo o un'origine del modulo remoto che Terraform dovrebbe scaricare e utilizzare.
Lo stesso indirizzo di origine può essere specificato in più blocchi modulo per creare più copie delle risorse definite all'interno, possibilmente con diversi valori di variabile.
Crea "variables.tf" che conterrà la definizione delle variabili. Questo manterrà i valori predefiniti che devono essere passati al modulo insieme a "access_key" e "secret_key" di AWS.
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 del tuo 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 Terraform Module
Prima di eseguire i seguenti comandi, assicurati di aver configurato la chiave di accesso e la chiave segreta valide.
Il primo comando da utilizzare è 'terraform init'. Questo comando scarica e installa i plug-in per i provider utilizzati nella configurazione. Nel nostro caso è AWS.
terraforma init
Il secondo comando da usare è 'terraform plan'. Questo comando viene utilizzato per vedere le modifiche che avverranno sull'infrastruttura.
piano terraforma
Il comando 'terraform apply' creerà le risorse su AWS menzionate nel file main.tf. Ti verrà chiesto di fornire il tuo input per creare le risorse.
applicare terraform
Quando esegui il comando precedente, al completamento con successo, puoi vedere che 1 nuova risorsa è stata aggiunta e 0 è stata distrutta.
Puoi accedere alla console AWS S3 per verificare se il bucket S3 è stato creato o meno.
Elimina il bucket S3 creato usando 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 dopo l'esecuzione del comando seguente.
terraform distruggi
Conclusione
In questo articolo, abbiamo visto i passaggi per scrivere il nostro modulo e creare un bucket S3 utilizzandolo. Ora lo stesso modulo può essere utilizzato per creare più Bucket S3, per farlo è sufficiente modificare i valori delle variabili e riutilizzare lo stesso modulo.