# #google-cloud-platform #terraform #load-balancing #private-subnet
Вопрос:
Я пытаюсь создать зарезервированную подсеть для регионального балансировщика нагрузки. Это первый раз, когда я использую google-бета-провайдера, и когда я пытаюсь создать подсеть, используя следующий сценарий…:
resource "google_compute_subnetwork" "proxy-subnet" {
provider = google-beta
project = "proyecto-pegachucho"
name = "website-net-proxy"
ip_cidr_range = "10.10.50.0/24"
region = "us-central1"
network = google_compute_network.HSBC_project_network.self_link
purpose = "INTERNAL_HTTPS_LOAD_BALANCER"
role = "ACTIVE"
}
… появляется эта ошибка:
Error: Error creating Subnetwork: googleapi: Error 403: Required 'compute.subnetworks.create' permission for 'projects/proyecto-pegachucho/regions/us-central1/subnetworks/website-net-proxy'
More details:
Reason: forbidden, Message: Required 'compute.subnetworks.create' permission for 'projects/proyecto-pegachucho/regions/us-central1/subnetworks/website-net-proxy'
Reason: forbidden, Message: Required 'compute.networks.updatePolicy' permission for 'projects/proyecto-pegachucho/global/networks/hsbc-vpc-project'
on .terraformmodulesnetworkingnetworking.tf line 18, in resource "google_compute_subnetwork" "proxy-subnet":
18: resource "google_compute_subnetwork" "proxy-subnet" {
Это не имеет никакого смысла, потому что у меня есть роль владельца в моей учетной записи службы, и эти разрешения включены. Что я мог сделать?
ИЗМЕНИТЬ: я решил эту проблему, добавив поставщика непосредственно в модули, как это:
provider "google-beta" {
project = var.project
region = var.region
credentials = "./mario.json"
}
resource "google_compute_health_check" "lb-health-check-global" {
name = var.healthckeck_name
check_interval_sec = var.check_interval_sec
timeout_sec = var.timeout_sec
healthy_threshold = var.healthy_threshold
unhealthy_threshold = var.unhealthy_threshold # 50 seconds
tcp_health_check {
port = var.healthckeck_port
}
}
resource "google_compute_region_health_check" "lb-health-check-regional" {
provider = google-beta
region = var.region
project = var.project
name = "healthcheck-regional"
check_interval_sec = var.check_interval_sec
timeout_sec = var.timeout_sec
healthy_threshold = var.healthy_threshold
unhealthy_threshold = var.unhealthy_threshold # 50 seconds
tcp_health_check {
port = var.healthckeck_port
}
}
Комментарии:
1. У роли владельца есть разрешение
compute.subnetworks.create
. Это означает, что учетная запись службы, которую, по вашему мнению, вы используете, не является той, которую использует Terraform (просмотрите ADC). Укажите учетную запись службы в HCL, чтобы убедиться, что вы используете правильные учетные данные.
Ответ №1:
Я решил эту проблему, используя строки поставщика внутри модуля terraform вместо основного модуля (также вы можете настроить двух поставщиков).:
provider "google-beta" {
project = var.project
region = var.region
credentials = var.credentials
}