Zum Inhalt springen

Eine VM über den Terraform Provider erstellen

Zuletzt aktualisiert am

Um eine virtuelle Maschine auf der STACKIT-Plattform mit Terraform erstellen zu können, muss der STACKIT Terraform Provider installiert sein.

Folgen Sie der Installationsanleitung für den Provider auf The official Terraform provider for STACKIT. Sie benötigen außerdem Ihre Projekt-ID sowie die ID des Images, das Sie verwenden möchten.

Erstellen Sie in Ihrer main.tf-Datei eine Volume-Ressource.

resource "stackit_volume" "<VOLUME_NAME>" {
project_id = "<PROJECT_ID>"
name = "<VOLUME_NAME>"
availability_zone = "eu01-1"
description = "<DESCRIPTION>"
size = <VOLUME_SIZE>
performance_class = "<PERFORMANCE_CLASS_NAME>"
source = {
id = "<IMAGE_ID>"
type = "image"
}
labels = {
"my" = "label"
}
}

Erstellen Sie eine Security-Group-Ressource und fügen Sie die Regeln hinzu, um SSH und ICMP zu erlauben.

resource "stackit_security_group" "sg1" {
project_id = "<PROJECT_ID>"
name = "sg1"
}
resource "stackit_security_group_rule" "SSH" {
project_id = "<PROJECT_ID>"
security_group_id = stackit_security_group.sg1.security_group_id
direction = "ingress"
protocol = {
name = "tcp"
}
port_range = {
min = 22
max = 22
}
}
resource "stackit_security_group_rule" "ICMP" {
project_id = "<PROJECT_ID>"
security_group_id = stackit_security_group.sg1.security_group_id
direction = "ingress"
protocol = {
name = "icmp"
}
}

Erstellen Sie ein Netzwerk, eine Interface-Ressource und eine öffentliche IP für Ihren Server.

resource "stackit_network" "net1" {
project_id = "<PROJECT_ID>"
name = "net1"
nameservers = ["1.1.1.1"]
ipv4_prefix_length = 24
labels = {
"key" = "value"
}
}
resource "stackit_network_interface" "nic1" {
project_id = "<PROJECT_ID>"
network_id = stackit_network.net1.network_id
allowed_addresses = [<ARRAY_OF_ALLOWED_IP_ADDRESSES]
security_group_ids = [stackit_security_group.sg1.security_group_id]
}
resource "stackit_public_ip" "pub1" {
project_id = "<PROJECT_ID>"
network_interface_id = stackit_network_interface.nic1.network_interface_id
}

Erstellen Sie ein Schlüsselpaar, das zur Authentifizierung Ihres SSH-Zugriffs verwendet wird.

resource "stackit_key_pair" "mykey" {
name = "mykey"
public_key = chomp(file("~/.ssh/id_rsa.pub"))
labels = {
"foo" = "bar"
}
}

Erstellen Sie eine Server-Ressource und hängen Sie Ihr Netzwerk-Interface an den Server an.

resource "stackit_server" "<SERVER_NAME>" {
project_id = "<PROJECT_ID"
name = "<SERVER_NAME>"
boot_volume = {
source_type = "volume"
source_id = stackit_volume.<VOLUME_NAME>.volume_id
}
availability_zone = "eu01-1"
labels = {
"key" = "value"
}
machine_type = "<FLAVOR_ID>"
keypair_name = "<KEY_NAME>"
}
resource "stackit_server_network_interface_attach" "<ATTACH_NAME>" {
project_id = "<PROJECT_ID>"
server_id = stackit_server.<SERVER_NAME>.server_id
network_interface_id = stackit_network_interface.nic1.network_interface_id
}

Um diese Einstellungen auf Ihr Projekt anzuwenden, müssen Sie die Dateien in Ihrem Terraform-Verzeichnis planen.

Terminal-Fenster
terraform plan

Jetzt können Sie die Änderungen anwenden.

Terminal-Fenster
terraform apply

Die Erstellung Ihres Servers sollte jetzt beginnen.

Nachdem der Server erstellt wurde, versuchen Sie, sich mit dem Server zu verbinden.

Terminal-Fenster
ssh <USERNAME>@<PUBLIC_IP>