[GCP] リダイレクトしかしないLBの建て方

Tweet

特定のURLにリダイレクトするだけのLBが必要になったので、Terraformを使って建ててみた記録

Code

このコードでは自分のTwiterプロフィールページにリダイレクトさせている。

resource "google_compute_global_address" "default" {
  name = "redirect-bl-ip"
}

resource "google_compute_global_forwarding_rule" "default" {
  name                  = "redirect-bl-http"
  ip_protocol           = "TCP"
  load_balancing_scheme = "EXTERNAL"
  port_range            = "80"
  target                = google_compute_target_http_proxy.default.id
  ip_address            = google_compute_global_address.default.id
}

resource "google_compute_target_http_proxy" "default" {
  name     = "redirect-bl-http-proxy"
  url_map  = google_compute_url_map.default.id
}

resource "google_compute_url_map" "default" {
  name = "redirect-url-map"

  # https://twitter.com/yamato_sorariku にリダイレクトさせる設定
  default_url_redirect {
    https_redirect = true # -> https でリダイレクト
    host_redirect = "twitter.com" # -> ホスト名は twitter.com
    path_redirect = "/yamato_sorariku" # -> パスは /yamato_sorariku
    redirect_response_code = "FOUND" # -> ステータスコードは 302 で応答(一時的なリダイレクトとして使いたいから)
    strip_query = true # -> もともと付与されていたクエリを削除
  }
}

google_compute_global_forwarding_rule -> google_compute_target_http_proxy -> google_compute_url_map
という順番の構造


実用まで考えると google_compute_managed_ssl_certificate を使って マネージドSSL証明書を作成するなどしてHTTPSにも対応させる必要あり。

resource "google_compute_managed_ssl_certificate" "default" {
  name = "example-cert"

  managed {
    domains = ["redirect.example.com"]
  }
}

resource "google_compute_target_https_proxy" "default" {
  name             = "redirect-bl-https-proxy"
  url_map          = google_compute_url_map.default.id
  ssl_certificates = [google_compute_managed_ssl_certificate.default.id]
}

resource "google_compute_global_forwarding_rule" "default" {
  name       = "redirect-bl-https"
  target     = google_compute_target_https_proxy.default.id
  port_range = 443
}