Wer schon einmal versucht hat, manuell in der Google Cloud Ressourcen anzulegen, weiß: Klickt man sich durch die Weboberfläche, wird es schnell unübersichtlich.
Die Lösung heißt Infrastructure-as-Code. Terraform ist ein Open-Source-Werkzeug von HashiCorp, das Cloud-Ressourcen automatisiert, wiederholbar und versionskontrolliert bereitstellt.
In diesem Artikel wird Schritt für Schritt erklärt, wie man mit Terraform und GCP einfache, aber nützliche Data-Science-nahe Ressourcen erstellen kann.
Ein einfaches Beispiel
Terraform nutzt eine deklarative Sprache namens HCL (HashiCorp Configuration Language), um Cloud-Ressourcen zu beschreiben.
Du sagst also nicht wie etwas gebaut werden soll, sondern was du brauchst.
Um beispielsweise ein Bucket in der EU zu erstellen der gelöscht werden darf schreibt man:
resource "google_storage_bucket" "data_bucket" {
name = "mein-datascience-bucket"
location = "EU"
force_destroy = true
}Voraussetzungen & Installation
Terraform kann hier heruntergeladen werden: https://developer.hashicorp.com/terraform/downloads
Dort gibt es auch Erklärungen zur Installation. Weitere Infos findet man hier: https://developer.hashicorp.com/terraform/tutorials/gcp-get-started/install-cli
Unter Windows lädt man einfach die entsprechenden Dateien herunter und kopiert die Datei „terraform.exe“ dann in ein Verzeichnis das als Pfad registriert ist (bspw. C:\Windows).
Für die Arbeit mit GCP benötigt man natürlich auch ein GCP-Konto und Google Cloud CLI. Mit letzterer legen wir ein neues GCP-Projekt an:
gcloud projects create my-terraform-2006 --set-as-default
gcloud auth application-default login
gcloud auth application-default set-quota-project my-terraform-2026Danach muss noch Billing aktiviert werden. Seinen Account findet man über:
gcloud billing accounts listDas Aktivieren geht dann so:
gcloud billing projects link my-terraform-2026 --billing-account=xxxx-xxxx-xxxxAußerdem muss man die Compute Engine API aktivieren:
gcloud services enable compute.googleapis.com --project=my-terraform-2026Funktionsweise von Terraform
Wichtige Grundlage in Terraform ist, dass alle .tf-Dateien in einem Verzeichnis ausführt werden (ohne Unterordner). Terraform unterscheidet nicht nach Dateinamen oder Reihenfolge. Stattdessen analysiert Terraform alle Inhalte und erstellt einen Dependency-Graph, der der Ausführung zugrundliegt.
Darüber hinaus ist wichtig zu verstehen, dass man mit Terraform einen Soll-Zustand definiert. Terraform überprüft dann für jedes Element, ob es bereits verfügbar ist. Falls der Soll-Zustand vom Ist-Zustand abweicht, bspw. weil eine Ressource noch nicht angelegt ist, dann wird diese erzeugt.
Ist eine Ressource bereits vorhanden, dann wird dieser Schritt übersprungen, da der Soll-Zustand bereits erreicht ist.
Build
In einem neuen Ordner erstellen wir nun eine Datei namens „main.tf“.
- „terraform“ spezifiziert die Einstellungen. Hier wird der Hostname und der Providertype für Google festgelegt.
- „provider“ legt die Einstellungen für GCP fest, hier also Projektname, Region und Zone.
- „ressource“ legt dann Komponenten der Infrastruktur fest. Hier wird ein Netzwerk festgelegt.
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "6.8.0"
}
}
}
provider "google" {
project = "my-terraform-2026"
region = "europe-west3"
zone = "europe-west3-a"
}
resource "google_compute_network" "vpc_network" {
name = "terraform-network"
}
Um den Code auszuführen muss im entsprechenden Verzeichnis zunächst Terraform initiiert werden:
terraform initTerraform erstellt daraufhin im Ordner ein verstecktes Verzeichnis mit dem „.terraform“.
Darüber hinaus empfiehlt Terraform die korrekte Formatierung der Konfigurationsdateien. Dies kann automatisch angepasst werden mit dem Befehl:
terraform fmtAußerdem kann die Konfiguration vor Ausführung überprüft werden:
terraform validateOptional kann man sich auch noch anzeigen lassen, was genau Terraform ausführen wird:
terraform planUm die Konfiguration nun tatsächlich auszuführen, verwendet man den Befehl apply:
terraform applyDas Ergebnis kann man sich danach anzeigen lassen:
terraform showBeispiele für weitere Ressourcen
Cloud Storage-Bucket
Ein einfaches Cloud Storage Bucket kann so erzeugt werden:
resource "google_storage_bucket" "data_bucket" {
name = "mein-bucket"
location = "EU"
storage_class = "STANDARD"
force_destroy = true
}Compute Engine VM für JupyterLab
Um eine Compute Instanz zu erstellen und JupyterLab zu installieren, kann man dieses Skript verwenden:
resource "google_compute_instance" "jupyter_vm" {
name = "jupyter-vm"
machine_type = "e2-micro"
zone = "europe-west1-b"
boot_disk {
initialize_params {
image = "debian-cloud/debian-12"
}
}
network_interface {
network = "default"
access_config {}
}
metadata_startup_script = <<-EOT
#!/bin/bash
apt-get update
apt-get install -y python3-pip
pip3 install jupyter
nohup jupyter notebook --ip=0.0.0.0 --port=8888 --allow-root &
EOT
}
Nach dem Ausführen (terraform apply) kannst du dich mit der externen IP-Adresse der VM verbinden. Das geht allerdings nur von der Google Cloud Console aus, da SSH benötigt wird. Du findest das unter Compute Engine / VM-Instanzen. Dort klickst Du auf Verbinden und wählst „Im Browserfenster an benutzerdefiniertem Port öffnen“. Der Port für JupyterLab lautet 8888.
Ansonsten kann man sich mit SSH auch direkt auf die virtuelle Maschine verbinden:
http://<EXTERNAL_IP>:8888Aufräumen
Terraform löscht alle Ressourcen, die du erstellt hast mit einem Befehl – super praktisch, um Kosten zu vermeiden:
terraform destroy