複数のリージョンで利用できるように Cloud Run サービスを設定する
コードサンプル
Terraform
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。 詳細については、Terraform プロバイダのリファレンス ドキュメントをご覧ください。
resource "google_project_service" "compute_api" {
provider = google-beta
service = "compute.googleapis.com"
disable_dependent_services = false
disable_on_destroy = false
}
resource "google_project_service" "run_api" {
provider = google-beta
service = "run.googleapis.com"
disable_dependent_services = false
disable_on_destroy = false
}
resource "google_compute_global_address" "lb_default" {
provider = google-beta
name = "myservice-service-ip"
# Use an explicit depends_on clause to wait until API is enabled
depends_on = [
google_project_service.compute_api
]
}
resource "google_compute_backend_service" "lb_default" {
provider = google-beta
name = "myservice-backend"
load_balancing_scheme = "EXTERNAL_MANAGED"
backend {
group = google_compute_region_network_endpoint_group.lb_default[0].id
}
backend {
group = google_compute_region_network_endpoint_group.lb_default[1].id
}
# Use an explicit depends_on clause to wait until API is enabled
depends_on = [
google_project_service.compute_api,
]
}
resource "google_compute_url_map" "lb_default" {
provider = google-beta
name = "myservice-lb-urlmap"
default_service = google_compute_backend_service.lb_default.id
path_matcher {
name = "allpaths"
default_service = google_compute_backend_service.lb_default.id
route_rules {
priority = 1
url_redirect {
https_redirect = true
redirect_response_code = "MOVED_PERMANENTLY_DEFAULT"
}
}
}
}
resource "google_compute_managed_ssl_certificate" "lb_default" {
provider = google-beta
name = "myservice-ssl-cert"
managed {
domains = ["example.com"]
}
}
resource "google_compute_target_https_proxy" "lb_default" {
provider = google-beta
name = "myservice-https-proxy"
url_map = google_compute_url_map.lb_default.id
ssl_certificates = [
google_compute_managed_ssl_certificate.lb_default.name
]
depends_on = [
google_compute_managed_ssl_certificate.lb_default
]
}
resource "google_compute_global_forwarding_rule" "lb_default" {
provider = google-beta
name = "myservice-lb-fr"
load_balancing_scheme = "EXTERNAL_MANAGED"
target = google_compute_target_https_proxy.lb_default.id
ip_address = google_compute_global_address.lb_default.id
port_range = "443"
depends_on = [google_compute_target_https_proxy.lb_default]
}
resource "google_compute_region_network_endpoint_group" "lb_default" {
provider = google-beta
count = length(local.run_regions)
name = "myservice-neg"
network_endpoint_type = "SERVERLESS"
region = local.run_regions[count.index]
cloud_run {
service = google_cloud_run_v2_service.run_default[count.index].name
}
}
output "load_balancer_ip_addr" {
value = google_compute_global_address.lb_default.address
}
resource "google_cloud_run_v2_service" "run_default" {
provider = google-beta
count = length(local.run_regions)
name = "myservice-run-app-${local.run_regions[count.index]}"
location = local.run_regions[count.index]
deletion_protection = false # set to "true" in production
template {
containers {
image = "us-docker.pkg.dev/cloudrun/container/hello"
}
}
# Use an explicit depends_on clause to wait until API is enabled
depends_on = [
google_project_service.run_api
]
}
resource "google_cloud_run_service_iam_member" "run_allow_unauthenticated" {
provider = google-beta
count = length(local.run_regions)
location = google_cloud_run_v2_service.run_default[count.index].location
service = google_cloud_run_v2_service.run_default[count.index].name
role = "roles/run.invoker"
member = "allUsers"
}
resource "google_compute_url_map" "https_default" {
provider = google-beta
name = "myservice-https-urlmap"
default_url_redirect {
redirect_response_code = "MOVED_PERMANENTLY_DEFAULT"
https_redirect = true
strip_query = false
}
}
resource "google_compute_target_http_proxy" "https_default" {
provider = google-beta
name = "myservice-http-proxy"
url_map = google_compute_url_map.https_default.id
depends_on = [
google_compute_url_map.https_default
]
}
resource "google_compute_global_forwarding_rule" "https_default" {
provider = google-beta
name = "myservice-https-fr"
target = google_compute_target_http_proxy.https_default.id
ip_address = google_compute_global_address.lb_default.id
port_range = "80"
depends_on = [google_compute_target_http_proxy.https_default]
}
次のステップ
他の Google Cloud プロダクトに関連するコードサンプルの検索およびフィルタ検索を行うには、Google Cloud のサンプルをご覧ください。