使用Terraform创建GCP Dataproc集群时启用Component Gateway报错
错误原因1:Unsupported block type(endpoint_config位置错误)
你碰到的endpoint_config块不支持的错误,核心原因是配置块的位置放错了。在Terraform的google_dataproc_cluster资源定义中,endpoint_config是直接归属resource根层级的配置块,不能嵌套在cluster_config内部。
错误原因2:Component Gateway未实际启用
仅在software_config.override_properties中添加dataproc:dataproc.enable_component_gateway = "true"不足以激活Component Gateway。这个属性需要配合正确的endpoint_config配置才能生效——GCP需要通过endpoint_config的设置开启网关的端口访问权限,单独设置属性只会在后台标记为启用状态,但不会实际激活网关服务。
可行解决方案
1. 修正endpoint_config的位置
将endpoint_config块从cluster_config中移出,放到google_dataproc_cluster资源的根层级下,设置enable_http_port_access = true。
2. 检查Google Provider版本
确保你的Terraform Google Provider版本不低于v3.50.0,endpoint_config块是在这个版本之后才被引入的。可以在versions.tf中指定版本约束:
terraform { required_providers { google = { source = "hashicorp/google" version = ">= 3.50.0" } } }
3. 完整修正后的配置示例
resource "google_dataproc_cluster" "dataproc_cluster" { name = var.cluster_name region = var.region graceful_decommission_timeout = "120s" labels = var.labels # 正确位置的endpoint_config块 endpoint_config { enable_http_port_access = true } cluster_config { staging_bucket = var.staging_bucket software_config { image_version = var.image_version override_properties = { "dataproc:dataproc.allow.zero.workers" = "true" "dataproc:dataproc.enable_component_gateway" = "true" } } gce_cluster_config { subnetwork = var.subnetwork zone = var.zone tags = var.network_tags service_account_scopes = [ "cloud-platform" ] } master_config { num_instances = var.master_num_instances machine_type = var.master_machine_type disk_config { boot_disk_type = var.master_boot_disk_type boot_disk_size_gb = var.master_boot_disk_size_gb num_local_ssds = var.master_num_local_ssds } } } depends_on = [google_storage_bucket.dataproc_cluster_storage_bucket] timeouts { create = "30m" delete = "30m" } }
验证步骤
执行terraform init确保provider版本匹配,然后依次运行terraform plan和terraform apply,完成后到GCP控制台检查Dataproc集群的Component Gateway状态,此时应该显示为已启用。
内容的提问来源于stack exchange,提问作者Sriram Raghavan

