terraform { required_providers { google = { source = "hashicorp/google" version = "~> 4.0" } } backend "local" { path = "terraform.tfstate" } } provider "google" { project = var.project_id region = var.region zone = var.zone } resource "google_compute_instance" "data_engineering_vm" { name = var.instance_name machine_type = var.machine_type zone = var.zone boot_disk { initialize_params { image = "debian-cloud/debian-11" size = var.disk_size_gb } } network_interface { network = "default" access_config { // Ephemeral public IP } } metadata = { ssh-keys = "${var.ssh_username}:${file(var.ssh_pub_key_path)}" } metadata_startup_script = file("${path.module}/../cloud-init/cloud-init.sh") tags = ["http-server", "https-server", "ssh"] service_account { scopes = ["cloud-platform"] } } resource "google_compute_firewall" "forgejo" { name = "allow-forgejo" network = "default" allow { protocol = "tcp" ports = ["22", "80", "443", "3000", "222"] } source_ranges = ["0.0.0.0/0"] target_tags = ["http-server", "https-server", "ssh"] } output "instance_ip" { value = google_compute_instance.data_engineering_vm.network_interface[0].access_config[0].nat_ip }