een Terraform module maken

In dit artikel zullen we zien hoe je herbruikbare modules kunt maken in Terraform. Modules stellen ons in staat om code duplicatie te vermijden. Het betekent dat dezelfde code gebruikt kan worden om middelen van hetzelfde type te maken. Door modules te gebruiken hoef je je code niet te kopiëren-plakken om meerdere middelen van hetzelfde type te maken.

Je kunt bijvoorbeeld de code in een Terraform module zetten en die module hergebruiken in de staging en productie omgevingen, op deze manier kunnen we beide omgevingen dezelfde code uit dezelfde module laten hergebruiken in plaats van de code meerdere keren te schrijven.

In dit artikel zullen we als voorbeeld een module schrijven voor het maken van een S3 Bucket.

Vereisten

  1. Basiskennis van Terraform.
  2. Terraform geïnstalleerd op je systeem.
  3. AWS Account(aanmaken als je er geen hebt).
  4. ‘access_key’ & ‘secret_key’ van een AWS IAM Gebruiker. (Klik hier om te leren hoe je een IAM gebruiker met ‘access_key’ & ‘secret_key’ op AWS kunt aanmaken, )

Wat we zullen doen

  1. Onze eigen module schrijven
  2. Maak een S3 emmer met behulp van de Terraform Module.
  3. Verwijder de gemaakte resource met behulp van de Terraform Module.

Schrijf onze eigen Terraform module

Maak een eigen directory waar je terraform “main.tf” bestand en een module kunnen staan.

Gebruik het volgende commando om een directory aan te maken

mkdir -p modules/aws-s3

Schrijf een Terraform Module

Maak een main.tf bestand onder modules/aws-s3 en kopieer-plak het volgende blok code dat als module gebruikt zal worden om een S3 Bucket te maken.

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

Terraform Module Code

Declareer de vereiste variabele in “modules/aws-s3/variables.tf”. Als je wilt kun je de standaardwaarden aan de variabelen opgeven. Kopieer plak het volgende blok code om het bestand te maken.

vim modules/aws-s3/variabelen.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 = {}
}

Terraform variabelen

Maak nu het bestand “main.tf” dat de module zal aanroepen die we in de bovenstaande stap gedefinieerd hebben. Een module aanroepen betekent dat je de inhoud van die module in de configuratie opneemt met specifieke waarden voor zijn variabele. Modules worden vanuit andere modules aangeroepen met behulp vanmodule blokken:

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

Terraform hoofdbestand

Alle modules vereisen een bronargument. De waarde ervan is ofwel het pad naar een lokale directory met de configuratiebestanden van de module, ofwel een remote module bron die Terraform moet downloaden en gebruiken.

Hetzelfde bronadres kan in meerdere moduleblokken opgegeven worden om meerdere kopieën van de daarin gedefinieerde bronnen te maken, eventueel met verschillende variabele waarden.

Maak “variables.tf” dat de definitie van variabelen zal bevatten. Hierin staan de standaardwaarden die aan de module moeten worden doorgegeven, samen met AWS “access_key” en “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" }

Breid het bestand variabelen.tf uit

Maak nu “terraform.tfvars” dat de AWS gebruikerscredentials zal bevatten.De volgende sleutels moeten veranderd worden met de sleutels van je IAM gebruiker. Voordat je deze sleutels opgeeft, moet je ze aanmaken vanuit de AWS Console en deze sleutels met niemand delen.

vim terraform.tfvars

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

Maak een S3 emmer met de Terraform Module

Voordat je de volgende commando’s uitvoert, moet je zeker zijn dat je de geldige access_key en secret_key hebt geconfigureerd.

Het eerste commando dat je moet gebruiken is ’terraform init’. Dit commando downloadt en installeert plugins voor providers die binnen de configuratie gebruikt worden. In ons geval is dat AWS.

terraform init

Het tweede commando dat gebruikt moet worden is ’terraform plan’. Dit commando wordt gebruikt om de veranderingen te zien die op de infrastructuur zullen plaatsvinden.

terraform plan

’terraform apply’ commando zal de bronnen aanmaken op de AWS die in het main.tf bestand genoemd worden. Je wordt gevraagd je invoer te geven om de middelen te creëren.

terraform toepassen

Als je het bovenstaande commando uitvoert, zie je na succesvolle voltooiing dat 1 nieuwe resource is toegevoegd en 0 is vernietigd.

Je kunt naar de AWS S3 console gaan om te controleren of de S3 Bucket is aangemaakt of niet.

Verwijder de gemaakte S3 Bucket met Terraform

Als je een resource die je aanmaakte met de configuratie vermeld in het main.tf bestand niet meer nodig hebt, kun je het “terraform destroy” commando gebruiken om al die resources te verwijderen. Hier wordt de S3 emmer verwijderd bij het uitvoeren van het volgende commando.

terraform destroy

Conclusie

In dit artikel zagen we de stappen om een eigen module te schrijven en er een S3 emmer mee te maken. Nu kan dezelfde module gebruikt worden om meerdere S3 emmers te maken, daarvoor hoeven we alleen maar de waarden van variabelen te veranderen en dezelfde module te hergebruiken.