GNU/Linux >> Tutoriels Linux >  >> Linux

Comment créer un module Terraform

Dans cet article, nous verrons comment créer des modules réutilisables dans Terraform. Les modules nous permettent d'éviter la duplication de code. Cela signifie que le même code peut être utilisé pour créer des ressources du même type. En utilisant des modules, vous n'avez pas besoin de copier-coller votre code pour créer plusieurs ressources du même type.

Par exemple, vous pouvez placer le code dans un module Terraform et réutiliser ce module dans les environnements de préproduction et de production, de cette manière nous pourrons faire en sorte que les deux environnements réutilisent le même code du même module au lieu d'écrire le code plusieurs fois.

Dans cet article, nous allons écrire un module pour créer un compartiment S3 à titre d'exemple.

Prérequis

  1. Compréhension de base de Terraform
  2. Terraform installé sur votre système.
  3. Compte AWS (créez-le si vous n'en avez pas).
  4. 'access_key' &'secret_key' d'un utilisateur AWS IAM. (Cliquez ici pour apprendre à créer un utilisateur IAM avec 'access_key' &'secret_key' sur AWS, )

Ce que nous allons faire

  1. Écrire notre propre module
  2. Créez un compartiment S3 à l'aide du module Terraform.
  3. Supprimez la ressource créée à l'aide du module Terraform.

Écrire notre propre module Terraform

Créez un répertoire dédié où vous pouvez avoir votre fichier terraform "main.tf" et un module.

Utilisez la commande suivante pour créer un répertoire

mkdir -p modules/aws-s3

Créez un fichier main.tf sous modules/aws-s3 et copiez-collez le bloc de code suivant qui sera utilisé comme module pour créer un compartiment S3.

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


Déclarez la variable requise dans "modules/aws-s3/variables.tf". Si vous le souhaitez, vous pouvez spécifier les valeurs par défaut des variables. Copiez-collez le bloc de code suivant pour créer le fichier.

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 = {}
}

Maintenant, créez le fichier "main.tf" qui appellera le module que nous avons défini à l'étape ci-dessus. Appeler un module signifie inclure le contenu de ce module dans la configuration avec des valeurs spécifiques pour sa variable. Les modules sont appelés depuis d'autres modules à l'aide de module blocs :

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

Tous les modules nécessitent un argument source. Sa valeur est soit le chemin d'accès à un répertoire local des fichiers de configuration du module, soit une source de module distante que Terraform doit télécharger et utiliser.

La même adresse source peut être spécifiée dans plusieurs blocs de module pour créer plusieurs copies des ressources définies à l'intérieur, éventuellement avec différentes valeurs de variable.

Créer "variables.tf" qui contiendra la définition des variables. Cela contiendra les valeurs par défaut qui doivent être transmises au module avec AWS "access_key" et "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" }

Créez maintenant "terraform.tfvars" qui contiendra les informations d'identification de l'utilisateur AWS. Les clés suivantes doivent être modifiées avec les clés de votre utilisateur IAM. Avant de spécifier ces clés, vous devez les créer à partir de la console AWS et ne partager ces clés avec personne.

vim terraform.tfvars

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

Créer un compartiment S3 à l'aide du module Terraform

Avant d'exécuter les commandes suivantes, assurez-vous d'avoir configuré la clé d'accès et la clé secrète valides.

La première commande à utiliser est "terraform init". Cette commande télécharge et installe les plug-ins pour les fournisseurs utilisés dans la configuration. Dans notre cas, c'est AWS.

init terraform

La deuxième commande à utiliser est 'terraform plan'. Cette commande permet de voir les changements qui auront lieu sur l'infrastructure.

plan de terraform

La commande 'terraform apply' créera les ressources sur l'AWS mentionnées dans le fichier main.tf. Vous serez invité à fournir votre contribution pour créer les ressources.

appliquer terraform

Lorsque vous exécutez la commande ci-dessus, une fois l'exécution réussie, vous pouvez voir qu'une nouvelle ressource a été ajoutée et qu'aucune n'a été détruite.

Vous pouvez accéder à la console AWS S3 pour vérifier si le compartiment S3 est créé ou non.

Supprimer le compartiment S3 créé à l'aide de Terraform

Si vous n'avez plus besoin d'une ressource que vous avez créée à l'aide de la configuration mentionnée dans le fichier main.tf, vous pouvez utiliser la commande "terraform destroy" pour supprimer toutes ces ressources. Ici, le compartiment S3 sera supprimé lors de l'exécution de la commande suivante.

terraform détruit

Conclusion

Dans cet article, nous avons vu les étapes pour écrire notre propre module et créer un compartiment S3 en l'utilisant. Désormais, le même module peut être utilisé pour créer plusieurs compartiments S3. Pour ce faire, il nous suffit de modifier les valeurs des variables et de réutiliser le même module.


Linux
  1. Comment créer une instance RDS sur AWS à l'aide de Terraform

  2. Comment créer un rôle IAM dans AWS à l'aide de Terraform

  3. Comment créer des balises Git

  4. Comment créer un sous-domaine

  5. Comment créer un lien vers un répertoire

Comment créer un domaine complémentaire

Comment créer un sous-domaine dans cPanel

Comment créer des liens symboliques sous Linux

Comment créer des alias Bash

Comment créer un fichier sous Linux

Comment créer un fichier Tar Gz