🕌
TerraformでGCPのLoadBalancerを立ててみた
検証環境
macOS Bigsur
terraform 0.15.3.
Google Cloud SDK 321.0.0
試すこと
googleが提供しているLBとcloud runの環境をterraformで整える以下の記事を土台にしてcloud runを二台建てて指定したkeyリストのHeaderのみ別のにプロキシする.
全体のコード
全体のコードはこちら
やってみる
上の記事の完成の状態からもう一台、cloud_runをgcr.io/cloudrun/helloイメージを使用して立てる.
# default2
resource "google_cloud_run_service" "default2" {
name = var.cloud_run_service2
location = var.region
project = var.project_id
template {
spec {
containers {
image = "gcr.io/cloudrun/hello"
}
}
}
}
リクエストを振り分けているurl_mapを記述していく.
priorityは同一の値を取ると怒られるのでterraformのvariablesのlistを使用してindexを割り振るようにしました.
match_rulesは全ての条件が当てはまったらserviceで指定したbackendサービスにリクエストを割り当てる.
route_rulesをdynamicで定義しvariablesに指定したkeysの数分複製する.
resource "google_compute_url_map" "default" {
name = "${var.name}-urlmap"
default_service = google_compute_backend_service.default.id
host_rule {
hosts = ["*"]
path_matcher = "default"
}
path_matcher {
name = "default"
default_service = google_compute_backend_service.default.self_link
dynamic "route_rules" {
for_each = var.keys
content {
priority = 1 + index(var.keys, route_rules.value)
service = google_compute_backend_service.default2.id
match_rules {
header_matches {
header_name = "X-ABTEST"
exact_match = route_rules.value
}
}
}
}
}
}
varablesでkeysを指定することにより割り振り先を変えるHeaderの値を指定する.
vars.tfvars
keys = [
"hello",
"world",
"hoge",
]
ローカル上で
terraform plan -var-file=vars.tfvars
terraform apply -var-file=vars.tfvars
で反映させて
curl -H 'X-ABTEST:hello' http://ip_addr
curlでHeaderに値を打ち込んでリクエストを送ってみると割り振られていることが確認できる.
簡単なABテストなどに使用できそう
全体としてすこし複雑なような気がするのでより良い改善案をさがしたい.
Discussion