Eine Einführung in Terraform für Anfänger – Terraform-Tutorial

Fragen Sie sich, was ist Terraform? Lass es uns herausfinden.
Infrastruktur als Code (IaC) ist eine weit verbreitete Terminologie unter DevOps Profis. Es ist der process der Verwaltung und Bereitstellung der kompletten IT-Infrastruktur (vglrise(sowohl physische als auch virtuelle Maschinen) mithilfe maschinenlesbarer Definitionsdateien. Es handelt sich um einen softwaretechnischen Ansatz für den Betrieb. Es hilft bei der Automatisierung des gesamten Rechenzentrums mithilfe von Programmierskripten.
Mit all den Funktionen, die Infrastruktur als Code bietet, hat es mehrere Herausforderungen:
- Müssen lernen, zu codieren
- Ich kenne die Auswirkungen der Änderung nicht.
- Müssen revGeben Sie die Änderung ein
- Änderungen können nicht verfolgt werden
- Kann nicht automatisch erfolgenate eine Ressource
- Mehrere Umgebungen für die Infrastruktur
Terraform wurde created, um diese Herausforderungen zu lösen.
Terraform ist eine Open-Source-Infrastruktur als Code-Tool, die von HashiCorp entwickelt wurde. Es wird verwendet, um die gesamte Infrastruktur in einer leicht zu erlernenden deklarativen Sprache zu definieren und bereitzustellen.
Es ist ein Tool zur Bereitstellung von Infrastrukturen, mit dem Sie Ihr Cloud-Infrastruktur-Setup als Codes speichern können. Es ist sehr ähnlich zu Tools wie Wolkenbildung, mit dem Sie automatisieren würdenate Ihre AWS-Infrastruktur, aber Sie können diese nur auf AWS verwenden. Mit Terraform können Sie es auf anderen verwenden Cloud-Plattformen .
Im Folgenden finden Sie einige Vorteile der Verwendung von Terraform.
- Führt Orchestrierung durch, nicht nur Konfigurationsmanagement
- Unterstützt mehrere Anbieter wie AWS, Azure, GCP, DigitalOcean und viele mehr
- Stellen Sie eine unveränderliche Infrastruktur bereit, in der sich die Konfiguration reibungslos ändert
- Verwendet leicht verständliche Sprache, HCL (HashiCorp Konfigurationssprache)
- Leicht zu jedem anderen Anbieter tragbar
- Unterstützt nur die Client-Architektur, sodass keine zusätzliche Konfigurationsverwaltung auf einem Server erforderlich ist
Terraform-Kernkonzepte
Nachfolgend sind die in Terraform verwendeten Kernkonzepte / Terminologien aufgeführt:
- Variablen: Wird auch als Eingabevariable verwendet und ist ein Schlüssel-Wert-Paar, das von Terraform-Modulen verwendet wird, um die Anpassung zu ermöglichen.
- Provider: Es handelt sich um ein Plugin zur Interaktion mit Service-APIs und zum Zugriff darauf related Ressourcen.
- Modul: Es ist ein Ordner mit Terraform-TemplateHier werden alle Konfigurationen definiert
- Bundesstaat: Es besteht aus zwischengespeicherten Informationen über die von Terraform verwaltete Infrastruktur und die related Konfigurationen.
- Downloads & Ressourcen: Es bezieht sich auf einen Block eines oder mehrerer Infrastrukturobjekte (Recheninstanzen, virtuelle Netzwerke usw.), die zum Konfigurieren und Verwalten der Infrastruktur verwendet werden.
- Datenquelle: Es wird von Anbietern implementiert, um Informationen zu externen Objekten an terraform zurückzugeben.
- Ausgabewerte: Dies sind Rückgabewerte eines Terraform-Moduls, die von anderen Konfigurationen verwendet werden können.
- Plan: Es ist eine der Phasen, in der bestimmt wird, was erstellt werden mussated, aktualisiertated, oder zerstört, um vom echten/aktuellen st zu wechselnate der Infrastruktur auf die gewünschte State.
- Zur Bewerbung: Dies ist eine der Phasen, in der die Änderungen real/aktuell angewendet werdenate der Infrastruktur, um in die gewünschte St. zu ziehenate.
Terraform-Lebenszyklus
Der Terraform-Lebenszyklus besteht aus - init, Plan, sich bewerben und zerstören.

- Terraform init initialisiert das Arbeitsverzeichnis, das aus allen Konfigurationsdateien besteht
- Zur Erstellung wird der Terraform-Plan verwendetate ein Ausführungsplan, um eine gewünschte St. zu erreichenate der Infrastruktur. Änderungen in den Konfigurationsdateien werden vorgenommen, um die gewünschte St. zu erreichenate.
- Terraform Apply nimmt dann die im Plan definierten Änderungen an der Infrastruktur vor und die Infrastruktur erreicht den gewünschten Standate.
- Terraform Destroy wird verwendet, um alle alten Infrastrukturressourcen zu löschen, die nach der Anwendungsphase als fehlerhaft markiert sind.
Wie funktioniert Terraform?
Terraform besteht aus zwei Hauptkomponenten seiner Architektur:
- Terraform-Kern
- Anbieter

Terraform-Kern
Der Terraform-Kern verwendet zwei Eingabequellen, um seine Arbeit zu erledigen.
Der zuerst Die Eingabequelle ist eine Terraform-Konfiguration, die Sie als Benutzer konfigurieren. Hier legen Sie fest, was erstellt werden mussated oder bereitgestellt. Und das zweite Eingabequelle ist ein state wo Terraform auf dem Laufenden bleibtate state wie der aktuelle Aufbau der Infrastruktur aussieht.
Was der Terraform-Kern also tut, ist, dass er die Eingaben aufnimmt und den Plan ausarbeitet, was getan werden muss. Es vergleicht den state, was ist der aktuelle stateund welche Konfiguration wünschen Sie sich im Endergebnis? Es findet heraus, was getan werden muss, um zum gewünschten Ziel zu gelangenate in der Konfigurationsdatei. Es zeigt an, was erstellt werden mussated, was muss aktualisiert werdenated, was muss gelöscht werden, um zu erstellenate und Bereitstellung der Infrastruktur.
Anbieter
Die zweite Komponente der Architektur sind Anbieter für bestimmte Technologien. Dies können Cloud-Anbieter wie AWS, Azure, GCP oder eine andere Infrastruktur als Serviceplattform sein. Es ist auch ein Anbieter für höherwertige Komponenten wie Kubernetes oder andere Platform-as-a-Service-Tools, sogar einige Software als Self-Service-Tool.
Es gibt Ihnen die Möglichkeit, Create Infrastruktur auf verschiedenen Ebenen.
Zum Beispiel – create eine AWS-Infrastruktur erstellen, dann Kubernetes darauf bereitstellen und dann erstellenate Dienste/Komponenten innerhalb dieses Kubernetes-Clusters.
Terraform hat über hundert Anbieter für verschiedene Technologien, und jeder Anbieter gewährt Terraform-Benutzern Zugriff auf seine Ressourcen. Über den AWS-Anbieter haben Sie beispielsweise Zugriff auf Hunderte von AWS-Ressourcen wie EC2-Instanzen, AWS-Benutzer usw. Mit dem Kubernetes-Anbieter haben Sie Zugriff auf Waren, Ressourcen wie Dienste und Bereitstellungen sowie Namespaces usw.
So funktioniert Terraform und versucht Ihnen auf diese Weise dabei zu helfen, das gesamte Anwendungssetup von der Infrastruktur bis zur Anwendung bereitzustellen und abzudecken.
Lass uns ein paar praktische Sachen machen. 👨💻
Wir werden Terraform unter Ubuntu installieren und eine sehr einfache Infrastruktur bereitstellen.
Installieren Sie Terraform
Laden Sie das l herunteratest Terraform-Paket.
Siehe die offizielle Download-Seite um das l zu bekommenatest-Version für das jeweilige Betriebssystem.
geekflare@geekflare:~$ wget https://releases.hashicorp.com/terraform/0.13.0/terraform_0.13.0_linux_amd64.zip
--2020-08-14 16:55:38--
https://releases.hashicorp.com/terraform/0.13.0/terraform_0.13.0_linux_amd64.zip
Resolving releases.hashicorp.com (releases.hashicorp.com)... 151.101.153.183, 2a04:4e42:24::439
Connecting to releases.hashicorp.com (releases.hashicorp.com)|151.101.153.183|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 34851622 (33M) [application/zip]
Saving to: ‘terraform_0.13.0_linux_amd64.zip’
terraform_0.13.0_linux_amd64.zip
100%[=================================================================>] 33.24M
90.3KB/s in 5m 28s
2020-08-14 17:01:06 (104 KB/s) - ‘terraform_0.13.0_linux_amd64.zip’ saved [34851622/34851622]
Extrahieren Sie das heruntergeladene Paket.
geekflare@geekflare:~$ unzip terraform_0.13.0_linux_amd64.zip
Archive:
terraform_0.13.0_linux_amd64.zip
inflating: terraform
Verschieben Sie die ausführbare Terraform-Datei in den unten gezeigten Pfad. Überprüfen Sie die Terraform-Version.
geekflare@geekflare:~$ sudo mv terraform /usr/local/bin/
[sudo] password for geekflare:
geekflare@geekflare:~$ terraform -v
Terraform v0.13.0
Sie können sehen, dass dies die verfügbaren Befehle in terraform zur Ausführung sind.
geekflare@geekflare:~$ terraform
Usage: terraform [-version] [-help] <command> [args]
The available commands for execution are listed below.
The most common, useful commands are shown first, followed by
less common or more advanced commands. If you're just getting
started with Terraform, stick with the common commands. For the
other commands, please read the help and docs before usage.
Common commands:
apply Builds or changes infrastructure
console Interactive console for Terraform interpolations
destroy Destroy Terraform-managed infrastructure
env Workspace management
fmt Rewrites config files to canonical format
get Download and install modules for the configuration
graph Create a visual graph of Terraform resources
import Import existing infrastructure into Terraform
init Initialize a Terraform working directory
login Obtain and save credentials for a remote host
logout Remove locally-stored credentials for a remote host
output Read an output from a state file
plan Generate and show an execution plan
providers Prints a tree of the providers used in the configuration
refresh Update local state file against real resources
show Inspect Terraform state or plan
taint Manually mark a resource for recreation
untaint Manually unmark a resource as tainted
validate Validates the Terraform files
version Prints the Terraform version
workspace Workspace management
All other commands:
0.12upgrade Rewrites pre-0.12 module source code for v0.12
0.13upgrade Rewrites pre-0.13 module source code for v0.13
debug Debug output management (experimental)
force-unlock Manually unlock the terraform state
push Obsolete command for Terraform Enterprise legacy (v1)
state Advanced state management
Stellen Sie eine AWS EC2-Instanz mit Terraform bereit
In dieser Demo werde ich eine neue starten AWS EC2-Instanz mit Terraform.
Create ein Arbeitsverzeichnis für diese Terraform-Demo.
geekflare@geekflare:~$ mkdir terraform_demo
Gehen Sie in das Verzeichnis und erstellen Sie esate eine Terraform-Konfigurationsdatei, in der Sie den Anbieter und die Ressourcen zum Starten einer AWS EC2-Instanz definieren.
geekflare@geekflare:~$ cd terraform_demo/
geekflare@geekflare:~/terraform_demo$ gedit awsec2.tf
provider "aws" {
access_key = "B5KG6Fe5GUKIATUF5UD"
secret_key = "R4gb65y56GBF6765ejYSJA4YtaZ+T6GY7H"
region = "us-west-2"
}
resource "aws_instance" "terraform_demo" {
ami = "ami-0a634ae95e11c6f91"
instance_type = "t2.micro"
}
Hinweis: Ich habe den Zugang und die geheimen Schlüssel geändert. Sie müssen Ihre eigenen verwenden.
Aus der oben genannten Konfiguration geht hervor, dass ich den Anbieter wie AWS erwähne. Innerhalb des Anbieters gebe ich AWS-Benutzeranmeldeinformationen und Regionen an, in denen die Instanz gestartet werden muss.
In den Ressourcen gebe ich AMI-Details zu Ubuntu (ami-0a634ae95e11c6f91) an und erwähne, dass der Instanztyp t2.micro sein sollte
Sie können sehen, wie einfach und lesbar die Konfigurationsdatei ist, auch wenn Sie kein eingefleischter Codierer sind.
Terraform-Initialisierung
Der erste Schritt besteht nun darin, die Terraform zu initialisieren.
geekflare@geekflare:~/terraform_demo$ terraform init
Initializing the backend...
Initializing provider plugins...
- Using previously-installed hashicorp/aws v3.2.0
The following providers do not have any version constraints in configuration,
so the latest version was installed.
To prevent automatic upgrades to new major versions that may contain breaking
changes, we recommend adding version constraints in a required_providers block
in your configuration, with the constraint strings suggested below.
* hashicorp/aws: version = "~> 3.2.0"
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
Terraform-Plan
Als nächstes kommt die Planungsphase; es wird Create der Ausführungsgraph für die Erstellung und Bereitstellung der Infrastruktur.
geekflare@geekflare:~/terraform_demo$ terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.
------------------------------------------------------------------------
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# aws_instance.terraform_demo will be created
+ resource "aws_instance" "terraform_demo" {
+ ami = "ami-0a634ae95e11c6f91"
+ arn = (known after apply)
+ associate_public_ip_address = (known after apply)
+ availability_zone = (known after apply)
+ cpu_core_count = (known after apply)
+ cpu_threads_per_core = (known after apply)
+ get_password_data = false
+ host_id = (known after apply)
+ id = (known after apply)
+ instance_state = (known after apply)
+ instance_type = "t2.micro"
+ ipv6_address_count = (known after apply)
+ ipv6_addresses = (known after apply)
+ key_name = (known after apply)
+ outpost_arn = (known after apply)
+ password_data = (known after apply)
+ placement_group = (known after apply)
+ primary_network_interface_id = (known after apply)
+ private_dns = (known after apply)
+ private_ip = (known after apply)
+ public_dns = (known after apply)
+ public_ip = (known after apply)
+ secondary_private_ips = (known after apply)
+ security_groups = (known after apply)
+ source_dest_check = true
+ subnet_id = (known after apply)
+ tenancy = (known after apply)
+ volume_tags = (known after apply)
+ vpc_security_group_ids = (known after apply)
+ ebs_block_device {
+ delete_on_termination = (known after apply)
+ device_name = (known after apply)
+ encrypted = (known after apply)
+ iops = (known after apply)
+ kms_key_id = (known after apply)
+ snapshot_id = (known after apply)
+ volume_id = (known after apply)
+ volume_size = (known after apply)
+ volume_type = (known after apply)
}
+ ephemeral_block_device {
+ device_name = (known after apply)
+ no_device = (known after apply)
+ virtual_name = (known after apply)
}
+ metadata_options {
+ http_endpoint = (known after apply)
+ http_put_response_hop_limit = (known after apply)
+ http_tokens = (known after apply)
}
+ network_interface {
+ delete_on_termination = (known after apply)
+ device_index = (known after apply)
+ network_interface_id = (known after apply)
}
+ root_block_device {
+ delete_on_termination = (known after apply)
+ device_name = (known after apply)
+ encrypted = (known after apply)
+ iops = (known after apply)
+ kms_key_id = (known after apply)
+ volume_id = (known after apply)
+ volume_size = (known after apply)
+ volume_type = (known after apply)
}
}
Plan: 1 to add, 0 to change, 0 to destroy.
------------------------------------------------------------------------
Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.
Terraform anwenden
In der Apply-Phase wird die Konfigurationsdatei ausgeführt und eine AWS EC2-Instanz gestartet. Wenn Sie den Befehl apply ausführen, werden Sie gefragt: "Möchten Sie diese Aktionen ausführen?". Geben Sie yes ein und drücken Sie die Eingabetaste.
geekflare@geekflare:~/terraform_demo$ terraform apply
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# aws_instance.terraform_demo will be created
+ resource "aws_instance" "terraform_demo" {
+ ami = "ami-0a634ae95e11c6f91"
+ arn = (known after apply)
+ associate_public_ip_address = (known after apply)
+ availability_zone = (known after apply)
+ cpu_core_count = (known after apply)
+ cpu_threads_per_core = (known after apply)
+ get_password_data = false
+ host_id = (known after apply)
+ id = (known after apply)
+ instance_state = (known after apply)
+ instance_type = "t2.micro"
+ ipv6_address_count = (known after apply)
+ ipv6_addresses = (known after apply)
+ key_name = (known after apply)
+ outpost_arn = (known after apply)
+ password_data = (known after apply)
+ placement_group = (known after apply)
+ primary_network_interface_id = (known after apply)
+ private_dns = (known after apply)
+ private_ip = (known after apply)
+ public_dns = (known after apply)
+ public_ip = (known after apply)
+ secondary_private_ips = (known after apply)
+ security_groups = (known after apply)
+ source_dest_check = true
+ subnet_id = (known after apply)
+ tenancy = (known after apply)
+ volume_tags = (known after apply)
+ vpc_security_group_ids = (known after apply)
+ ebs_block_device {
+ delete_on_termination = (known after apply)
+ device_name = (known after apply)
+ encrypted = (known after apply)
+ iops = (known after apply)
+ kms_key_id = (known after apply)
+ snapshot_id = (known after apply)
+ volume_id = (known after apply)
+ volume_size = (known after apply)
+ volume_type = (known after apply)
}
+ ephemeral_block_device {
+ device_name = (known after apply)
+ no_device = (known after apply)
+ virtual_name = (known after apply)
}
+ metadata_options {
+ http_endpoint = (known after apply)
+ http_put_response_hop_limit = (known after apply)
+ http_tokens = (known after apply)
}
+ network_interface {
+ delete_on_termination = (known after apply)
+ device_index = (known after apply)
+ network_interface_id = (known after apply)
}
+ root_block_device {
+ delete_on_termination = (known after apply)
+ device_name = (known after apply)
+ encrypted = (known after apply)
+ iops = (known after apply)
+ kms_key_id = (known after apply)
+ volume_id = (known after apply)
+ volume_size = (known after apply)
+ volume_type = (known after apply)
}
}
Plan: 1 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
aws_instance.terraform_demo: Creating...
aws_instance.terraform_demo: Still creating... [10s elapsed]
aws_instance.terraform_demo: Still creating... [20s elapsed]
aws_instance.terraform_demo: Still creating... [30s elapsed]
aws_instance.terraform_demo: Still creating... [40s elapsed]
aws_instance.terraform_demo: Creation complete after 44s [id=i-0eec33286ea4b0740]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Gehen Sie zu Ihrem AWS EC2-Dashboard und Sie werden eine neue Instanz mit der Instanz-ID sehen, die am Ende des Apply-Befehls angegeben wurdeated.

Sie haben eine AWS EC2-Instanz erfolgreich mit Terraform gestartet.
Terraform zerstören
FinallyWenn Sie die Infrastruktur löschen möchten, müssen Sie den Befehl destroy ausführen.
geekflare@geekflare:~/terraform_demo$ terraform destroy
aws_instance.terraform_demo: Refreshing state... [id=i-0eec33286ea4b0740]
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
- destroy
Terraform will perform the following actions:
# aws_instance.terraform_demo will be destroyed
- resource "aws_instance" "terraform_demo" {
- ami = "ami-0a634ae95e11c6f91" -> null
- arn = "arn:aws:ec2:us-west-2:259212389929:instance/i-0eec33286ea4b0740" -> null
- associate_public_ip_address = true -> null
- availability_zone = "us-west-2c" -> null
- cpu_core_count = 1 -> null
- cpu_threads_per_core = 1 -> null
- disable_api_termination = false -> null
- ebs_optimized = false -> null
- get_password_data = false -> null
- hibernation = false -> null
- id = "i-0eec33286ea4b0740" -> null
- instance_state = "running" -> null
- instance_type = "t2.micro" -> null
- ipv6_address_count = 0 -> null
- ipv6_addresses = [] -> null
- monitoring = false -> null
- primary_network_interface_id = "eni-02a46f2802fd15634" -> null
- private_dns = "ip-172-31-13-160.us-west-2.compute.internal" -> null
- private_ip = "172.31.13.160" -> null
- public_dns = "ec2-34-221-77-94.us-west-2.compute.amazonaws.com" -> null
- public_ip = "34.221.77.94" -> null
- secondary_private_ips = [] -> null
- security_groups = [
- "default",
] -> null
- source_dest_check = true -> null
- subnet_id = "subnet-5551200c" -> null
- tags = {} -> null
- tenancy = "default" -> null
- volume_tags = {} -> null
- vpc_security_group_ids = [
- "sg-b5b480d1",
] -> null
- credit_specification {
- cpu_credits = "standard" -> null
}
- metadata_options {
- http_endpoint = "enabled" -> null
- http_put_response_hop_limit = 1 -> null
- http_tokens = "optional" -> null
}
- root_block_device {
- delete_on_termination = true -> null
- device_name = "/dev/sda1" -> null
- encrypted = false -> null
- iops = 100 -> null
- volume_id = "vol-0be2673afff6b1a86" -> null
- volume_size = 8 -> null
- volume_type = "gp2" -> null
}
}
Plan: 0 to add, 0 to change, 1 to destroy.
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
aws_instance.terraform_demo: Destroying... [id=i-0eec33286ea4b0740]
aws_instance.terraform_demo: Still destroying... [id=i-0eec33286ea4b0740, 10s elapsed]
aws_instance.terraform_demo: Still destroying... [id=i-0eec33286ea4b0740, 20s elapsed]
aws_instance.terraform_demo: Still destroying... [id=i-0eec33286ea4b0740, 30s elapsed]
aws_instance.terraform_demo: Destruction complete after 34s
Destroy complete! Resources: 1 destroyed.
Wenn Sie das EC2-Dashboard erneut überprüfen, sehen Sie, dass die Instanz beendet wurdeated.

Schlussfolgerung
Ich glaube, das Obige gibt Ihnen eine Idee, wie Sie mit Terraform beginnen können. Probieren Sie das gerade gezeigte Beispiel aus.
Sie sollten auch diese überprüfen Software zur Infrastrukturautomatisierung.
Wenn Sie mehr erfahren möchten, würde ich empfehlen, dies zu überprüfen DevOps mit Terraform lernen.