Geekflare wird von unserem Publikum unterstützt. Wir können Affiliate-Provisionen durch den Kauf von Links auf dieser Website verdienen.
Teilen:

10 Best Practices für Terraform für eine bessere Infrastrukturbereitstellung

Invicti Web Application Security Scanner – die einzige Lösung, die eine automatische Verifizierung von Schwachstellen mit Proof-Based Scanning™ bietet.

Lassen Sie uns über einige der Best Practices sprechen, die bei der Verwendung von Terraform befolgt werden sollten.

Terraform ist ein sehr beliebtes Open Source IaC (Infrastruktur als Code) Tool zum Definieren und Bereitstellen der gesamten Infrastruktur.

Obwohl Terraform im Jahr 2014 eingeführt wurde, hat die Akzeptanz dieses Tools weltweit zugenommen. Immer mehr Entwickler sind Terraform lernen Infrastruktur in ihrer Organisation bereitzustellen.

Wenn Sie mit der Verwendung von Terraform begonnen haben, müssen Sie die Best Practices für eine bessere Bereitstellung der Produktionsinfrastruktur anwenden.

Wenn Sie ein Neuling sind, dann überprüfen Sie dies Terraform für Anfänger Artikel.

Structuring

Wenn Sie an einem großen Produktionsinfrastrukturprojekt arbeiten, verwenden Sie Terraform, müssen Sie einer ordnungsgemäßen Verzeichnisstruktur folgen, um sich um die Komplexität zu kümmern, die im Projekt auftreten kann. Am besten wäre es, wenn Sie getrennte Verzeichnisse für unterschiedliche Zwecke hätten.

Wenn Sie beispielsweise Terraform in Entwicklungs-, Staging- und Produktionsumgebungen verwenden, verfügen Sie für jedes über separate Verzeichnisse.

geekflare@geekflare:~$ tree terraform_project/
terraform_project/
├── dev
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
├── modules
│ ├── ec2
│ │ ├── ec2.tf
│ │ └── main.tf
│ └── vpc
│ ├── main.tf
│ └── vpc.tf
├── prod
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
└── stg
├── main.tf
├── outputs.tf
└── variables.tf

6 directories, 13 files

Sogar die Terraform-Konfigurationen sollten getrennt sein, da die Konfigurationen einer wachsenden Infrastruktur nach einer gewissen Zeit komplex werden.

Zum Beispiel können Sie alle Ihre Terraform-Codes (Module, Ressourcen, Variablen, Ausgaben) in das schreiben main.tf Datei selbst, aber separate Terraform-Codes für Variablen und Ausgaben machen sie lesbarer und verständlicher.

Naming Convention

In Terraform werden Namenskonventionen verwendet, um die Dinge leicht verständlich zu machen.

Angenommen, Sie möchten drei verschiedene Arbeitsbereiche für verschiedene Umgebungen in einem Projekt erstellen. Anstatt sie dann als env1, en2, env3 zu benennen, sollten Sie sie als a bezeichnen dev, Stufe, Stoß. Aus dem Namen selbst wird ziemlich deutlich, dass es für jede Umgebung drei verschiedene Arbeitsbereiche gibt.

Ähnliche Konventionen für Ressourcen, Variablen, Module usw. sollten ebenfalls befolgt werden. Der Ressourcenname in Terraform sollte mit einem Anbieternamen beginnen, gefolgt von einem Unterstrich und anderen Details.

Der Ressourcenname zum Erstellen eines Terraform-Objekts für eine Routentabelle in AWS lautet beispielsweise aws_route_table.

Wenn Sie also die Namenskonventionen richtig befolgen, ist es einfacher, auch komplexe Codes zu verstehen.

Use Shared Modules

Es wird dringend empfohlen, offizielle Terraform-Module zu verwenden. Sie müssen ein bereits vorhandenes Modul nicht neu erfinden. Das spart viel Zeit und Schmerz. Terraform-Registrierung hat viele Module zur Verfügung. Nehmen Sie je nach Bedarf Änderungen an den vorhandenen Modulen vor.

Außerdem sollte sich jedes Modul nur auf einen Aspekt der Infrastruktur konzentrieren, z. B. die Erstellung einer AWS EC2-Instanz, Einstellen der MySQL-Datenbank usw.

Wenn Sie beispielsweise AWS VPC in Ihrem Terraform-Code verwenden möchten, können Sie Folgendes verwenden: einfache VPC

module "vpc_example_simple-vpc" {
source
= "terraform-aws-modules/vpc/aws//examples/simple-vpc"
version = "2.48.0"
}

Latest Version

Die Terraform-Entwicklungsgemeinschaft ist sehr aktiv und die Freigabe neuer Funktionen erfolgt häufig. Es wird empfohlen, auf der neuesten Version von Terraform zu bleiben, wenn eine neue Hauptversion erscheint. Sie können problemlos auf die neueste Version aktualisieren.

Wenn Sie mehrere Hauptversionen überspringen, wird das Upgrade sehr komplex.

Run terraform -v Befehl zum Überprüfen eines neuen Updates.

geekflare@geekflare:~$ terraform -v
Terraform v0.11.14
Your version of Terraform is out of date! The latest version
is 0.12.0. You can update by downloading from www.terraform.io/downloads.html

Backup System State

Sichern Sie immer die Statusdateien von Terraform.

Diese Dateien verfolgen die Metadaten und Ressourcen der Infrastruktur. Standardmäßig werden diese Dateien als aufgerufen terraform.tfstate werden lokal im Arbeitsbereichsverzeichnis gespeichert.

Ohne diese Dateien kann Terraform nicht herausfinden, welche Ressourcen in der Infrastruktur bereitgestellt werden. Daher ist eine Sicherung der Statusdatei unbedingt erforderlich. Standardmäßig eine Datei mit einem Namen terraform.tfstate.backup wird erstellt, um eine Sicherungskopie der Statusdatei zu erstellen.

geekflare@geekflare:~$ tree terraform_demo/
terraform_demo/
├── awsec2.tf
├── terraform.tfstate
└── terraform.tfstate.backup
0 directories, 3 files

Wenn Sie eine Sicherungsstatusdatei an einem anderen Speicherort speichern möchten, verwenden Sie -backup Markieren Sie im Befehl terraform und geben Sie den Standortpfad an.

Meistens arbeiten mehrere Entwickler an einem Projekt. Um ihnen Zugriff auf die Statusdatei zu gewähren, sollte sie an einem Remotestandort mit a gespeichert werden terraform_remote_state Datenquelle.

Im folgenden Beispiel wird eine Sicherung in S3 erstellt.

data "terraform_remote_state" "vpc" {
backend = "s3"
config = {
bucket = “s3-terraform-bucket”
key = “vpc/terraform.tfstate"
region = “us-east-1”
   }
}

Lock State File

Es kann mehrere Szenarien geben, in denen mehrere Entwickler gleichzeitig versuchen, die Terraform-Konfiguration auszuführen. Dies kann zur Beschädigung der Terraform-Statusdatei oder sogar zum Datenverlust führen. Der Verriegelungsmechanismus hilft, solche Szenarien zu verhindern. Es stellt sicher, dass jeweils nur eine Person die Terraform-Konfigurationen ausführt und kein Konflikt vorliegt.

Hier ist ein Beispiel für das Sperren der Statusdatei, die sich mit DynamoDB an einem Remotestandort befindet.

resource “aws_dynamodb_table” “terraform_state_lock” {
name = “terraform-locking”
read_capacity = 3
write_capacity = 3
hash_key = “LockingID”

attribute {
name = “LockingID”
type = “S”
   }

}
terraform {
backend “s3” {
bucket = “s3-terraform-bucket”
key = “vpc/terraform.tfstate”
region = “us-east-2”
dynamodb_table = “terraform-locking”
   }
}

Wenn mehrere Benutzer versuchen, auf die Statusdatei zuzugreifen, werden der Name der DynamoDB-Datenbank und der Primärschlüssel zum Sperren des Status und zum Aufrechterhalten der Konsistenz verwendet.

Hinweis: Nicht alle Backend-Support-Sperren.

Use self Variable

self Variable ist eine spezielle Art von Variable, die verwendet wird, wenn Sie den Wert der Variablen vor der Bereitstellung einer Infrastruktur nicht kennen.

Angenommen, Sie möchten die IP-Adresse einer Instanz verwenden, die erst nach dem Befehl terraform apply bereitgestellt wird, sodass Sie die IP-Adresse erst kennen, wenn sie betriebsbereit ist.

In solchen Fällen verwenden Sie Selbstvariablen, und die Syntax, die Sie verwenden, lautet self.ATTRIBUTE. In diesem Fall verwenden Sie also self.ipv4_address als Selbstvariable, um die IP-Adresse der Instanz abzurufen. Diese Variablen sind nur für Verbindungs- und Bereitstellungsblöcke der Terraform-Konfiguration zulässig.

connection {
host = self.ipv4_address
type = "ssh"
user = var.users[2]
private_key = file(var.private_key_path)
}

Minimize Blast Radius

Der Explosionsradius ist nichts anderes als das Maß für den Schaden, der entstehen kann, wenn die Dinge nicht wie geplant verlaufen.

Wenn Sie beispielsweise einige Terraform-Konfigurationen in der Infrastruktur bereitstellen und die Konfiguration nicht korrekt angewendet wird, wie hoch ist der Schaden für die Infrastruktur?

Um den Explosionsradius zu minimieren, wird immer empfohlen, einige Konfigurationen gleichzeitig auf die Infrastruktur zu übertragen. Wenn also etwas schief geht, ist der Schaden an der Infrastruktur minimal und kann schnell behoben werden. Das gleichzeitige Bereitstellen vieler Konfigurationen ist sehr riskant.

Use var-file

In Terraform können Sie eine Datei mit der Erweiterung erstellen <em>.</em>tfvars und übergeben Sie diese Datei mit dem Befehl terraform apply mit -var-file Flagge. Dies hilft Ihnen beim Übergeben der Variablen, die Sie nicht in den Terraform-Konfigurationscode einfügen möchten.

Es wird immer empfohlen, Variablen für ein Kennwort, einen geheimen Schlüssel usw. lokal zu übergeben -var-Datei anstatt es in Terraform-Konfigurationen oder auf einem Versionskontrollsystem für Remote-Standorte zu speichern.

Wenn Sie beispielsweise eine ec2-Instanz mit terraform starten möchten, können Sie den Zugriffsschlüssel und den geheimen Schlüssel mit übergeben -var-Datei

Erstellen Sie eine Datei terraform.tfvars und legen Sie die Schlüssel in diese Datei.

geekflare@geekflare:~$ gedit terraform.tfvars

access_key = "AKIATYWSDFYU5DUDJI5F"
secret_key = "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"

Verwenden Sie nun diese var-Datei im Befehl terraform.

geekflare@geekflare:~$ terraform apply -var-file=/home/geekflare/terraform.tfvars

User Docker

Wenn Sie einen CI / CD-Pipeline-Build-Job ausführen, wird die Verwendung empfohlen Docker Behälter. Terraform bietet offizielle Docker-Container, die verwendet werden können. Falls Sie das ändern CI / CD Server können Sie die Infrastruktur einfach in einem Container übergeben.

Vor dem Bereitstellen der Infrastruktur in der Produktionsumgebung können Sie die Infrastruktur auch auf den Docker-Containern testen, die sehr einfach bereitzustellen sind. Durch die Kombination von Terraform und Docker erhalten Sie eine tragbare, wiederverwendbare und wiederholbare Infrastruktur.

Fazit

Ich hoffe, diese Best Practices helfen Ihnen beim Schreiben besserer Terraform-Konfigurationen. Beginnen Sie mit der Implementierung dieser in Ihren Terraform-Projekten, um bessere Ergebnisse zu erzielen.

Danke an unsere Sponsoren
Weitere großartige Lektüren zum Thema Cloud Computing
Treiben Sie Ihr Geschäft an
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti verwendet das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu verifizieren und innerhalb weniger Stunden umsetzbare Ergebnisse zu generieren.
    Versuchen Sie es mit Invicti
  • Web-Scraping, Wohn-Proxy, Proxy-Manager, Web-Unlocker, Suchmaschinen-Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie es mit Brightdata
  • Semrush ist eine All-in-One-Lösung für digitales Marketing mit mehr als 50 Tools in den Bereichen SEO, Social Media und Content-Marketing.
    Versuchen Sie es mit Semrush
  • Intruder ist ein Online-Schwachstellenscanner, der Cyber-Sicherheitslücken in Ihrer Infrastruktur findet, um kostspielige Datenschutzverletzungen zu vermeiden.
    MIT DER INTELLIGENTEN SCHADENKALKULATION VON Intruder