{Terraform} ALB/GCP

 

https://zenn.dev/btc4043/articles/5d9859d3226f7d
https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_instance_template
https://zenn.dev/syuri/articles/8f86312f8f52b1


インスタンステンプレートにnetwork_interface.access_configを指定しないとパブリックIPが付与されない

 

-- 1. 前作業

gcloud init
gcloud auth list

gcloud --version

gcloud projects create project01-9999999 \
--name="project01"

gcloud config list
gcloud config set project project01-9999999
gcloud config set compute/region asia-northeast1 --quiet
gcloud config set compute/zone asia-northeast1-a --quiet

 

gcloud beta billing accounts list
gcloud beta billing projects link project01-9999999 --billing-account=111111-111111-111111

gcloud services enable compute.googleapis.com --project project01-9999999

 


-- 2. tfファイル作成

 

cat <<-'EOF' > a.sh

#!/bin/bash

sudo apt-get update
sudo apt-get install apache2 -y
sudo hostname > /var/www/html/index.html
sudo systemctl restart apache2

EOF

 

cat <<-'EOF' > variables.tf

locals {
  project = "project01-9999999"

}


EOF

cat <<-'EOF' > main.tf

provider "google" {
  project = local.project
  region = "asia-northeast1"
}

resource "google_service_account" "sa99999999" {
  account_id   = "sa99999999"
  display_name = "sa99999999"
}

data "google_compute_image" "image01" {
  family  = "debian-10"
  project = "debian-cloud"
}

 


resource "google_compute_instance_template" "template01" {
  name        = "template01"
  description = "template01"

  tags = ["tag01"]

  machine_type = "e2-micro"

  scheduling {
    automatic_restart = true
  }

  disk {
    source_image = data.google_compute_image.image01.self_link
    auto_delete  = true
    boot         = true
  }

  network_interface {
    network = "default"
    subnetwork = "default"
    
    access_config {
      network_tier ="PREMIUM"
 
    }
  }

  service_account {
    email  = google_service_account.sa99999999.email
    scopes = ["cloud-platform"]
  }
  
  metadata_startup_script = file("./a.sh")

}

resource "google_compute_instance_group_manager" "group01" {
  name = "group01"

  base_instance_name = "group01"
  zone               = "asia-northeast1-a"

  target_size = 2

  named_port {
    name = "http"
    port = 80
  }

  version {
    instance_template = google_compute_instance_template.template01.id
  }

}

resource "google_compute_firewall" "fw01" {
  name    = "fw01"
  network = "default"

  direction = "INGRESS"

  allow {
    protocol = "tcp"
    ports    = ["80"]
  }

  source_ranges = [
    "130.211.0.0/22",
    "35.191.0.0/16"
  ]

  target_tags = ["tag01"]
  
}

 

resource "google_compute_global_address" "pip01" {
  name = "pip01"
  ip_version = "IPV4"

}


resource "google_compute_health_check" "hc01" {
  name = "hc01"

  http_health_check {
    port = 80
  }
}


resource "google_compute_backend_service" "backend01" {
  name                  = "backend01"
  load_balancing_scheme = "EXTERNAL_MANAGED"
  protocol              = "HTTP"
  timeout_sec           = 10
  port_name             = "http"

  health_checks = [google_compute_health_check.hc01.id]

  backend {
    group           = google_compute_instance_group_manager.group01.instance_group
  }
}

resource "google_compute_url_map" "map01" {
  name            = "map01"
  default_service = google_compute_backend_service.backend01.id
}


resource "google_compute_target_http_proxy" "proxy01" {
  name    = "proxy01"
  url_map = google_compute_url_map.map01.id
}


resource "google_compute_global_forwarding_rule" "rule01" {
  name = "rule01"

  load_balancing_scheme = "EXTERNAL_MANAGED"
  ip_protocol           = "TCP"
  port_range            = "80"
  target                = google_compute_target_http_proxy.proxy01.id
  ip_address            = google_compute_global_address.pip01.id
}

EOF

 

 


terraform init -upgrade
terraform fmt
terraform -version


terraform plan

terraform apply -auto-approve


gcloud compute addresses describe pip01 \
--format="get(address)" \
--global

while true;do curl http://192.0.2.1; sleep 1;done

 


terraform destroy -auto-approve

 

 


-- 3. GCPクリーンアップ

 

gcloud projects list

gcloud projects delete project01-9999999 \
--quiet


gcloud beta billing projects unlink project01-9999999