Files

115 lines
2.8 KiB
Terraform
Raw Permalink Normal View History

2026-01-27 17:35:45 -05:00
# GCP VPC Module Template
variable "network_name" {
description = "VPC network name"
type = string
default = "main"
}
# VPC Network
resource "google_compute_network" "main" {
name = "${var.project_name}-${var.environment}-vpc"
auto_create_subnetworks = false
project = var.project_id
}
# Public Subnet
resource "google_compute_subnetwork" "public" {
name = "${var.project_name}-${var.environment}-public"
ip_cidr_range = "10.0.1.0/24"
region = var.region
network = google_compute_network.main.id
project = var.project_id
secondary_ip_range {
range_name = "gke-pods"
ip_cidr_range = "10.1.0.0/16"
}
secondary_ip_range {
range_name = "gke-services"
ip_cidr_range = "10.2.0.0/20"
}
}
# Private Subnet
resource "google_compute_subnetwork" "private" {
name = "${var.project_name}-${var.environment}-private"
ip_cidr_range = "10.0.2.0/24"
region = var.region
network = google_compute_network.main.id
project = var.project_id
private_ip_google_access = true
}
# Cloud Router (for NAT)
resource "google_compute_router" "main" {
name = "${var.project_name}-${var.environment}-router"
region = var.region
network = google_compute_network.main.id
project = var.project_id
}
# Cloud NAT
resource "google_compute_router_nat" "main" {
name = "${var.project_name}-${var.environment}-nat"
router = google_compute_router.main.name
region = var.region
project = var.project_id
nat_ip_allocate_option = "AUTO_ONLY"
source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"
}
# Firewall - Allow SSH
resource "google_compute_firewall" "allow_ssh" {
name = "${var.project_name}-${var.environment}-allow-ssh"
network = google_compute_network.main.name
project = var.project_id
allow {
protocol = "tcp"
ports = ["22"]
}
source_ranges = ["0.0.0.0/0"]
target_tags = ["ssh"]
}
# Firewall - Allow Internal
resource "google_compute_firewall" "allow_internal" {
name = "${var.project_name}-${var.environment}-allow-internal"
network = google_compute_network.main.name
project = var.project_id
allow {
protocol = "icmp"
}
allow {
protocol = "tcp"
ports = ["0-65535"]
}
allow {
protocol = "udp"
ports = ["0-65535"]
}
source_ranges = ["10.0.0.0/8"]
}
output "network_name" {
value = google_compute_network.main.name
}
output "network_id" {
value = google_compute_network.main.id
}
output "subnet_ids" {
value = {
public = google_compute_subnetwork.public.id
private = google_compute_subnetwork.private.id
}
}