[A-00156]TerraformでCloud NATを作成する
Google Cloud上にTerraformでCloud NATを作成します。
・アーキテクチャ

・Terraformの作成/実行
terraform {
  required_providers {
    google = {
        source = "hashicorp/google"
        version = "4.79.0"
    }
  }
}
provider "google" {
    project = var.project_id
    region = var.region
}variable "project_id" {
    type = string
    default = "<input_your_project_id>"
}
variable "region" {
    type = string
    default = "asia-northeast1"
}# VPC
resource "google_compute_network" "default" {
    name = "vpc1"
    auto_create_subnetworks = false
}
# Subnet
resource "google_compute_subnetwork" "default" {
    name = "subnet1"
    ip_cidr_range = "10.10.0.0/24"
    network = google_compute_network.default.id
    region = var.region
}# Service Account
resource "google_service_account" "default" {
    project = var.project_id
    account_id = "terraform-demo"
    display_name = "Terraform Demo"
}
# IAM Role
resource "google_project_iam_member" "prjiam" {
    project = var.project_id
    role = "roles/iap.tunnelResourceAccessor"
    member = "serviceAccount:${google_service_account.default.email}"
}# Compute Engine
resource "google_compute_instance" "default" {
    name = "vm1"
    machine_type = "e2-micro"
    zone = "${var.region}-a"
    boot_disk {
      initialize_params {
        image = "debian-cloud/debian-11"
      }
    }
    network_interface {
      network = google_compute_network.default.id
      subnetwork = google_compute_subnetwork.default.id
    }
}# Firewall
resource "google_compute_firewall" "default" {
    name = "allow-ssh"
    network = google_compute_network.default.id
    allow {
      protocol = "tcp"
      ports = [ "22" ]
    }
    source_ranges = [ "35.235.240.0/20" ]
}
#Router
resource "google_compute_router" "default" {
    name = "nat-router"
    network = google_compute_network.default.id
    region = var.region
}
#NAT Gateway
resource "google_compute_router_nat" "default" {
    name = "nat-router"
    router = google_compute_router.default.name
    region = var.region
    nat_ip_allocate_option = "AUTO_ONLY"
    source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"
    log_config {
      enable = true
      filter = "ERRORS_ONLY"
    }
}上記のソースを作成したら下記のコマンドを実行してデプロイ
terraform init
terraform plan
terraform applyデプロイが完了したら下記のリソースが作成される。

・疎通確認
Compute EngineにSSH接続してpingを実行してみる

ping google.com
上記のようにEGRESS方向の通信では繋がるのが確認できます。
確認が終わったら下記のコマンドで片付けする
terraform destroy・Appendix
公式ドキュメントはこちら
https://cloud.google.com/blog/ja/topics/developers-practitioners/cloud-nat-explained
https://cloud.google.com/nat/docs/overview?hl=ja
参考文献はこちら
https://qiita.com/oguogura/items/50c68df848239e17c7d3
https://zenn.dev/nekoshita/articles/6ce80834943a48
https://medium.com/google-cloud/gcp-how-to-deploy-cloud-nat-with-terraform-44745a4daaa8
コメントを残す