Terraform
Terraform Versorger Serverspace ermöglicht Ihnen die Verwaltung von Cloud-Ressourcen mithilfe des Infrastructure-as-Code-Ansatzes. Die Verwaltung erfolgt über spezielle Konfigurationsdateien, in denen Sie den gewünschten Zustand Ihrer Infrastruktur beschreiben.
Montage von Terraform
Lassen Sie uns zunächst installieren Terraform in Ihrem Betriebssystem. Wir empfehlen die Verwendung von Terraform Entwicklerhandbuch.
Anbieterkonfiguration
-
- Erstellen Sie ein API Schlüssel für das Projekt, mit dem gearbeitet werden soll Terraform.
- Erstellen Sie das Verzeichnis, mit dem Sie arbeiten möchten, und navigieren Sie zu diesem Verzeichnis Terraform Anbieter
- Erstellen und öffnen Sie die Konfigurationsdatei „provider.tf“.
- Fügen Sie die Anbieterinformationen in die Datei ein
Ihr API drücken Sie die Taste und speichern Sie die Änderungen: - Öffnen Sie eine Eingabeaufforderung und navigieren Sie zu dem Verzeichnis, in dem Sie die Datei erstellt haben. Führen Sie eine Initialisierung durch, um die Richtigkeit zu überprüfen:
terraform init
Wenn die Initialisierung erfolgreich war, wird die folgende Meldung angezeigt:
Initializing the backend...
Initializing provider plugins...
- Finding itglobalcom/serverspace versions matching "0.2.0"...
- Installing itglobalcom/serverspace v0.2.0...
- Installed itglobalcom/serverspace v0.2.0 (self-signed, key ID 062XXXXXXXXXXXX)Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here: https://www.terraform.io/docs/cli/plugins/signing.htmlTerraform has created a lock file .terraform.lock.hcl to record the provider selections it made above. Include this file in your version control repository so that Terraform can guarantee to make the same selections by default when you run "terraform init" in the future.
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 {
required_providers {
serverspace = {
source = "itglobalcom/serverspace"
version = "0.2.2"
}
}
}variable "s2_token" {
type = string
default = ""
}provider "serverspace" {
key = var.s2_token
}
Ihre Infrastrukturbeschreibung
Mit der Serverspace Terraform Als Anbieter können Sie eine Infrastruktur mit verschiedenen Konfigurationen erstellen. Eine ausführliche Dokumentation finden Sie im Terraform Registratur.
Schauen wir uns das Beispiel der Erstellung einer einfachen Infrastruktur mit zwei Servern an, die über ein isoliertes Netzwerk verbunden sind:
- Server in Amsterdam namens „server-1“ mit Ubuntu 20.04 Betriebssystem. Serverkonfiguration – 2 GB RAM, 2 CPUs, 40 GB SSD Bootlaufwerk, zusätzlich 20 GB SSD Laufwerk, 50 Mbit/s. SSH Verbindung zum Server herstellen. Auf dem Server installierter Redis-Datenspeicher.
- Server in Amsterdam namens „server-2“ mit Ubuntu 20.04 Betriebssystem. Serverkonfiguration – 8 GB RAM, 4 CPUs, 40 GB SSD Boot-Laufwerk, 70 Mbit/s.
- Isoliertes Netzwerk in Amsterdam mit der Adresse 192.168.0.0/24
Führen Sie die folgenden Schritte aus, um diese Infrastruktur einzurichten:
-
- Erstellen und öffnen Sie die Datei ssh_key.tf, das den öffentlichen Teil von enthält ssh Schlüssel zum Erstellen des Servers.
- Geben Sie die Informationen zum öffentlichen Teil des ein ssh Geben Sie den Schlüssel in die Datei ein ssh_key.tf und speichern Sie die Änderungen, indem Sie den Inhalt der Variable public_key durch Ihren Wert ersetzen:
resource "serverspace_ssh" "terraform" {
name = "terraform-key"
public_key = "ssh-rsa AAAAB3Nza...JUDjlM= root@CentOS.local"
}variable "pvt_key" {
type = string
default = ""
} - Erstellen und öffnen Sie die Datei main.tf, die die Infrastrukturbeschreibung enthält.
- Fügen Sie die Beschreibung Ihrer Infrastruktur in die Datei ein.
resource "serverspace_server" "server1" {
image = "Ubuntu-20.04-X64"
name = "server-1"
location = "am2"
cpu = 2
ram = 2048boot_volume_size = 40*1024
volume {
name = "bar"
size = 20*1024
}nic {
network = ""
network_type = "PublicShared"
bandwidth = 50
}
nic {
network = resource.serverspace_isolated_network.my_net.id
network_type = "Isolated"
bandwidth = 0
}ssh_keys = [
resource.serverspace_ssh.terraform.id,
]connection {
host = self.public_ip_addresses[0]
user = "root"
type = "ssh"
private_key = file(var.pvt_key)
timeout = "2m"
}provisioner "remote-exec" {
inline = [
"export PATH=$PATH:/usr/bin",
"sudo apt-get update",
"sudo apt-get install -y redis-server",
"exit 0"
]
}}
resource "serverspace_server" "server2" {
image = "Ubuntu-20.04-X64"
name = "server-2"
location = "am2"
cpu = 4
ram = 8192boot_volume_size = 40*1024
nic {
network = ""
network_type = "PublicShared"
bandwidth = 70
}
nic {
network = resource.serverspace_isolated_network.my_net.id
network_type = "Isolated"
bandwidth = 0
}
}resource"serverspace_isolated_network" "my_net" {
location = "am2"
name = "my_net"
description = "Example for Terraform"
network_prefix = "192.168.0.0"
mask = 24
} - Um die oben beschriebene Infrastruktur zu erstellen, führen Sie den folgenden Befehl aus:
terraform apply
Es erscheint ein Dialogfenster:
Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
+ createTerraform will perform the following actions:
# serverspace_isolated_network.my_net will be created
+ resource "serverspace_isolated_network" "my_net" {
+ description = "Example for Terraform"
+ id = (known after apply)
+ location = "am2"
+ mask = 24
+ name = "my_net"
+ network_prefix = "192.168.0.0"
}# serverspace_server.server1 will be created
+ resource "serverspace_server" "server1" {
+ boot_volume_id = (known after apply)
+ boot_volume_size = 40960
+ cpu = 2
+ id = (known after apply)
+ image = "Ubuntu-20.04-X64"
+ location = "am2"
+ name = "server-1"
+ public_ip_addresses = (known after apply)
+ ram = 2048
+ ssh_keys = (known after apply)+ nic {
+ bandwidth = 0
+ id = (known after apply)
+ ip_address = (known after apply)
+ network = (known after apply)
+ network_type = "Isolated"
}
+ nic {
+ bandwidth = 50
+ id = (known after apply)
+ ip_address = (known after apply)
+ network_type = "PublicShared"
}+ volume {
+ id = (known after apply)
+ name = "bar"
+ size = 20480
}
}# serverspace_server.server2 will be created
+ resource "serverspace_server" "server2" {
+ boot_volume_id = (known after apply)
+ boot_volume_size = 40960
+ cpu = 4
+ id = (known after apply)
+ image = "Ubuntu-20.04-X64"
+ location = "am2"
+ name = "server-2"
+ public_ip_addresses = (known after apply)
+ ram = 8192
+ ssh_keys = (known after apply)+ nic {
+ bandwidth = 0
+ id = (known after apply)
+ ip_address = (known after apply)
+ network = (known after apply)
+ network_type = "Isolated"
}
+ nic {
+ bandwidth = 70
+ id = (known after apply)
+ ip_address = (known after apply)
+ network_type = "PublicShared"
}
}# serverspace_ssh.terraform will be created
+ resource "serverspace_ssh" "terraform" {
+ id = (known after apply)
+ name = "terraform-key"
+ public_key = "ssh-rsa AAAAB3Nza...JUDjlM= root@CentOS.local"
}Plan: 4 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.
- Geben Sie „Ja“ ein, um die Infrastruktur zu erstellen.
Enter a value: yesserverspace_ssh.terraform: Creating...
serverspace_isolated_network.my_net: Creating...
serverspace_ssh.terraform: Creation complete after 1s [id=3181]
serverspace_isolated_network.my_net: Creation complete after 8s [id=l2n403]
serverspace_server.server2: Creating...
serverspace_server.server1: Creating...
serverspace_server.server1: Still creating... [10s elapsed]
serverspace_server.server2: Still creating... [10s elapsed]
...
serverspace_server.server1 (remote-exec): (Reading database ...
serverspace_server.server1 (remote-exec): (Reading database ... 5%
serverspace_server.server1 (remote-exec): (Reading database ... 10%
...
serverspace_server.server1: Creation complete after 1m3s [id=l2s190038]
Apply complete! Resources: 4 added, 0 changed, 0 destroyed. - Um die aktuelle Infrastruktur anzuzeigen, führen Sie den folgenden Befehl aus:
terraform show
Dadurch wird die aktuelle Infrastrukturkonfiguration angezeigt:
# serverspace_isolated_network.my_net:
resource "serverspace_isolated_network" "my_net" {
description = "Example for Terraform"
id = "l2n403"
location = "am2"
mask = 24
name = "my_net"
network_prefix = "192.168.0.0"
}# serverspace_server.server1:
resource "serverspace_server" "server1" {
boot_volume_id = 58909
boot_volume_size = 40960
cpu = 2
id = "l2s190038"
image = "Ubuntu-20.04-X64"
location = "am2"
name = "server-1"
public_ip_addresses = [
"45.138.24.19",
]
ram = 2048
ssh_keys = [
3181,
]nic {
bandwidth = 0
id = 59576
ip_address = "192.168.0.1"
network = "l2n403"
network_type = "Isolated"
}
nic {
bandwidth = 50
id = 59575
ip_address = "45.138.24.19"
network_type = "PublicShared"
}volume {
id = 58910
name = "bar"
size = 20480
}
}# serverspace_server.server2:
resource "serverspace_server" "server2" {
boot_volume_id = 58911
boot_volume_size = 40960
cpu = 4
id = "l2s190039"
image = "Ubuntu-20.04-X64"
location = "am2"
name = "server-2"
public_ip_addresses = [
"31.44.3.68",
]
ram = 8192
ssh_keys = []nic {
bandwidth = 0
id = 59578
ip_address = "192.168.0.2"
network = "l2n403"
network_type = "Isolated"
}
nic {
bandwidth = 70
id = 59577
ip_address = "31.44.3.68"
network_type = "PublicShared"
}
}# serverspace_ssh.terraform:
resource "serverspace_ssh" "terraform" {
id = "3181"
name = "terraform-key"
public_key = "ssh-rsa AAAAB3Nza...JUDjlM= root@CentOS.local"
}
Herzlichen Glückwunsch zu Ihrer ersten Infrastructure-as-a-Code-Implementierung.