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