[A-00227]Terraform 1000本ノック(2)

前回記事はこちら

今回はGoogleCloud上にリージョナル外部パススルーネットワークロードバランサーを作りたいと思います。

・リージョナル外部パススルーネットワークロードバランサーを組み立てる

terraform {
  required_providers {
    google = {
        source = "hashicorp/google"
        version = "6.15.0"
    }
  }
}

provider "google" {
  project = var.project_id
  region = var.region
}
variable "project_id" {
  type = string
}

variable "region" {
  type = string
}

variable "name" {
  type = string
}
project_id = "your-project"
region = "asia-northeast1"
name = "example"
terraform {
  backend "gcs" {
  }
}
resource "google_compute_network" "lb_network" {
    project = var.project_id
    name = "lb-network"
    auto_create_subnetworks = false
}

resource "google_compute_subnetwork" "lb_subnet" {
    project = var.project_id
    name = "lb-subnet"
    region = var.region
    ip_cidr_range = "10.0.1.0/24"
    network = google_compute_network.lb_network.id
}
resource "google_compute_firewall" "allow_network_ipv4" {
    network = google_compute_network.lb_network.id
    name = "allow-network-ipv4"

    target_tags = [ "lb-tag" ]

    source_ranges = [ "0.0.0.0/0" ]

    allow {
      protocol = "tcp"
      ports = ["80"]
    }
  
}
resource "google_compute_instance" "web_server" {
  project = var.project_id
  name = "${var.name}-web-server"
  zone = "${var.region}-a"
  machine_type = "e2-micro"

  tags = [ "lb-tag" ]

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-12"
      size = "10"
    }
  }

  network_interface {
    network = google_compute_network.lb_network.id
    subnetwork = google_compute_subnetwork.lb_subnet.id
    access_config {
    }
  }

  metadata_startup_script = "sudo apt update; sudo apt install nginx -y; sudo systemctl start nginx"
}

resource "google_compute_instance_group" "web_server_group" {
    project = var.project_id
    zone = "${var.region}-a"
    name = "${var.name}-web-server-group"
    
    instances = [ google_compute_instance.web_server.self_link ]

    named_port {
      name = "tcp"
      port = "80"
    }

}
resource "google_compute_address" "network_lb_ipv4" {
    name = "network-lb-ipv4"
    region = var.region
}

resource "google_compute_region_health_check" "tcp_health_check" {
    name = "tcp-health-check"
    timeout_sec = 1
    check_interval_sec = 1
    region = var.region

    tcp_health_check {
      port = 80
    }
}

resource "google_compute_region_backend_service" "network_lb_backend_service" {
    name = "network-lb-backend-service"
    load_balancing_scheme = "EXTERNAL"
    protocol = "TCP"
    region = var.region
    health_checks = [ google_compute_region_health_check.tcp_health_check.self_link ]

    backend {
      group = google_compute_instance_group.web_server_group.id
      balancing_mode = "CONNECTION"
    }
}

resource "google_compute_forwarding_rule" "network_lb_forwarding_rule_ipv4" {
    name = "network-lb-forwarding-rule-ipv4"
    load_balancing_scheme = "EXTERNAL"
    region = var.region
    port_range = "80"
    ip_address = google_compute_address.network_lb_ipv4.address
    backend_service = google_compute_region_backend_service.network_lb_backend_service.id
}

上記を作成したら下記のコマンドを実行してGoogleCloud上にプロビジョニングします。

terraform init
terraform plan -var-file=dev.tfvars
terraform apply -var-file=dev.tfvars

GCPコンソールからロードバランサーのIPを確認します。

ウェブブラウザにてアクセスします。下記の通り、NginxサーバーのWelcomeページが表示されたらOKです。

・Appendix

参考文献はこちら

https://cloud.google.com/load-balancing/docs/network/networklb-backend-service?hl=ja

https://cloud.google.com/load-balancing/docs/network/setting-up-network-backend-service?hl=ja

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*