Wie man ein Terraform-Modul erstellt

In diesem Artikel sehen wir, wie wiederverwendbare Module in Terraform erstellt werden können. Mit Modulen können wir Code-Duplizierung vermeiden. Das bedeutet, dass derselbe Code verwendet werden kann, um Ressourcen desselben Typs zu erstellen. Durch die Verwendung von Modulen brauchen Sie Ihren Code nicht durch Kopieren und Einfügen zu kopieren, um mehrere Ressourcen desselben Typs zu erstellen.

Beispielsweise können Sie den Code in ein Terraform-Modul einfügen und dieses Modul in der Staging- und Produktionsumgebung wiederverwenden. Auf diese Weise können wir in beiden Umgebungen den gleichen Code desselben Moduls wiederverwenden, anstatt den Code mehrfach zu schreiben.

In diesem Artikel werden wir als Beispiel ein Modul zur Erstellung eines S3-Buckets schreiben.

Voraussetzungen

  1. Grundlegendes Verständnis von Terraform.
  2. Terraform auf Ihrem System installiert.
  3. AWS-Konto (Erstellen Sie, falls Sie keins haben).
  4. ‚access_key‘ & ’secret_key‘ eines AWS IAM-Benutzers. (Klicken Sie hier, um zu erfahren, wie man einen IAM-Benutzer mit ‚access_key‘ & ’secret_key‘ auf AWS erstellt, )

Was wir tun werden

  1. Schreiben Sie unser eigenes Modul
  2. Erstellen Sie einen S3-Behälter mit dem Terraform-Modul.
  3. Löschen Sie die erstellte Ressource mit dem Terraform-Modul.

Schreiben Sie unser eigenes Terraform-Modul

Erstellen Sie ein spezielles Verzeichnis, in dem Sie Ihre terraform „main.tf“-Datei und ein Modul haben können.

Verwenden Sie den folgenden Befehl, um ein Verzeichnis zu erstellen

mkdir -p Module/aws-s3

 

Schreiben eines Terraform-Moduls

Erstellen Sie eine Datei main.tf unter modules/aws-s3 und kopieren Sie den folgenden Code-Block, der als Modul zur Erstellung eines S3-Eimer verwendet wird.

vim-Module/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-Modul-Code

Deklarieren Sie die erforderliche Variable in „modules/aws-s3/variables.tf“. Wenn Sie möchten, können Sie die Standardwerte für die Variablen angeben. Kopieren Sie den folgenden Codeblock, um die Datei zu erstellen.

vim-module/aws-s3/variablen.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-Variablen

Erstellen Sie nun die Datei „main.tf“, die das Modul aufruft, das wir im obigen Schritt definiert haben. Ein Modul aufzurufen bedeutet, den Inhalt dieses Moduls mit spezifischen Werten für seine Variable in die Konfiguration aufzunehmen. Module werden aus anderen Modulen mit Hilfe von Blöcken aufgerufen:

vim haupt.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-Hauptdatei

Alle Module benötigen ein Quellargument. Sein Wert ist entweder der Pfad zu einem lokalen Verzeichnis der Konfigurationsdateien des Moduls oder eine entfernte Modulquelle, die Terraform herunterladen und verwenden soll.

Dieselbe Quelladresse kann in mehreren Modulblöcken angegeben werden, um mehrere Kopien der darin definierten Ressourcen zu erstellen, möglicherweise mit unterschiedlichen Variablenwerten.

Erstellen Sie „variables.tf“, die die Definition der Variablen enthalten wird. Diese wird die Standardwerte enthalten, die zusammen mit AWS „access_key“ und „secret_key“ an das Modul übergeben werden müssen.

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

Erweitern Sie die Datei variables.tf

Erstellen Sie nun „terraform.tfvars“, die die AWS User Credentials enthalten wird. Die folgenden Schlüssel müssen mit den Schlüsseln Ihres IAM-Benutzers geändert werden. Bevor Sie diese Schlüssel angeben, müssen Sie sie von der AWS-Konsole aus erstellen und dürfen diese Schlüssel mit niemandem teilen.

vim terraform.tfvars

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

Erstellen Sie einen S3-Behälter mit dem Terraform-Modul

Bevor Sie die folgenden Befehle ausführen, stellen Sie sicher, dass Sie den gültigen access_key und secret_key konfiguriert haben.

Der erste zu verwendende Befehl ist ‚terraform init‘. Mit diesem Befehl werden Plugins für die in der Konfiguration verwendeten Provider heruntergeladen und installiert. In unserem Fall ist es AWS.

terraform init

Der zweite zu verwendende Befehl ist der „Terraform-Plan“. Dieser Befehl wird verwendet, um die Änderungen zu sehen, die an der Infrastruktur vorgenommen werden.

terraform plan

Der Befehl ‚terraform apply‘ erstellt die Ressourcen auf der AWS, die in der Datei main.tf erwähnt werden. Sie werden aufgefordert, Ihre Eingaben zur Erstellung der Ressourcen zu machen.

terraform anwenden

Wenn Sie den obigen Befehl ausführen, können Sie nach erfolgreichem Abschluss sehen, dass 1 neue Ressource hinzugefügt und 0 zerstört wurde.

Sie können zur AWS S3-Konsole gehen, um zu überprüfen, ob der S3-Behälter erstellt wurde oder nicht.

Löschen Sie den erstellten S3-Behälter mit Terraform

Falls Sie eine Ressource, die Sie mit der in der Datei main.tf erwähnten Konfiguration erstellt haben, nicht mehr benötigen, können Sie den Befehl „terraform destroy“ verwenden, um all diese Ressourcen zu löschen. Dabei wird der S3-Behälter bei Ausführung des folgenden Befehls gelöscht.

terraform destroy

Schlussfolgerung

In diesem Artikel sahen wir die Schritte, um unser eigenes Modul zu schreiben und einen S3-Bucket damit zu erstellen. Nun kann dasselbe Modul zur Erstellung mehrerer S3-Buckets verwendet werden, dazu müssen wir nur die Werte von Variablen ändern und dasselbe Modul wiederverwenden.

Das könnte Dich auch interessieren …