首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过terraform描述共享VPC并在GCP中定义其子网

问如何通过terraform描述共享VPC并在GCP中定义其子网
EN

Stack Overflow用户
提问于 2022-08-24 14:10:40
回答 1查看 177关注 0票数 -1

我为我的组织创建了两个共享的VPCs,一个用于prod,另一个用于非prod使用。

对于这些共享的VPC,我想要创建一个描述并定义子网,但是我无法为这些元素找到正确的terraform条目。

下面是我如何定义资源块来指定主机项目(并创建一个共享的VPC):

代码语言:javascript
复制
resource "google_compute_shared_vpc_host_project" "dev-shared-shared-vpc-host" {
  provider = google.as_network_admin
  project  = google_project.dev-shared-vpc-host.project_id
}

现在,当我尝试创建子网时:

代码语言:javascript
复制
resource "google_compute_subnetwork" "dev-subnetwork" {
  provider      = google.as_network_admin
  name          = var.vpc_and_subnet_info.for_dev_env.subnetwork.name
  ip_cidr_range = var.vpc_and_subnet_info.for_dev_env.subnetwork.ip_cidr_range
  region        = var.region
  secondary_ip_range {
    range_name    = var.vpc_and_subnet_info.for_dev_env.subnetwork.secondary_ip_range.name
    ip_cidr_range = var.vpc_and_subnet_info.for_dev_env.subnetwork.secondary_ip_range.ip_cidr_range
  }
  network = google_compute_shared_vpc_host_project.dev-shared-shared-vpc-host.id
  project = google_project.dev-shared-vpc-host.id
}

我遇到了一个错误

代码语言:javascript
复制
╷
│ Error: Error creating Subnetwork: googleapi: Error 400: Invalid value for field 'resource.network': 'projects/projects/<redacted_project_id>/global/networks/<redacted_project_id>'. The URL is malformed., invalid
│
│   with google_compute_subnetwork.dev-subnetwork,
│   on networking.tf line 5, in resource "google_compute_subnetwork" "dev-subnetwork":
│    5: resource "google_compute_subnetwork" "dev-subnetwork" {
│

显然,projects/projects/..扰乱了网络参数,但在项目中,除了id之外,没有任何其他输出。对于输入参数,不存在description。但是,当我尝试手动创建共享VPC时,我可以输入一个描述,并创建一个子网。

请注意,创建常规VPCs的网络已经有了很好的文档记录,并且我上面定义的子网与它很好地工作。

编辑:

将project参数固定到project = google_project.dev-shared-vpc-host.project_id而不是id中将删除projects/projects/...网络错误,但会给出此错误:

代码语言:javascript
复制
╷
│ Error: Error creating Subnetwork: googleapi: Error 404: The resource 'projects/<redacted_project_id>/global/networks/<redacted_project_id>' was not found, notFound
│
│   with google_compute_subnetwork.dev-subnetwork,
│   on networking.tf line 5, in resource "google_compute_subnetwork" "dev-subnetwork":
│    5: resource "google_compute_subnetwork" "dev-subnetwork" {
│
╵
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-24 15:16:47

我似乎误解了通过google_compute_shared_vpc_host_project创建共享VPC,这并不是创建vpc perse,而是指定一个项目作为宿主项目,因此共享(必须预先存在的vpc )。

因此,我应该事先创建一个google_compute_network,这里是实现我在问题中想要的东西所必需的HCL:

代码语言:javascript
复制
resource "google_compute_network" "dev-vpc-network" {
  provider                = google.as_network_admin
  name                    = var.vpc_and_subnet_info.for_dev_env.vpc.name
  auto_create_subnetworks = var.vpc_and_subnet_info.for_dev_env.vpc.auto_create_subnetworks
  project                 = google_project.dev-shared-vpc-host.project_id
  description             = var.vpc_and_subnet_info.for_dev_env.vpc.description
}
resource "google_compute_shared_vpc_host_project" "dev-shared-shared-vpc-host" {
  provider = google.as_network_admin
  project  = google_project.dev-shared-vpc-host.project_id
}
resource "google_compute_subnetwork" "dev-subnetwork" {
  provider      = google.as_network_admin
  name          = var.vpc_and_subnet_info.for_dev_env.subnetwork.name
  ip_cidr_range = var.vpc_and_subnet_info.for_dev_env.subnetwork.ip_cidr_range
  region        = var.region
  secondary_ip_range {
    range_name    = var.vpc_and_subnet_info.for_dev_env.subnetwork.secondary_ip_range.name
    ip_cidr_range = var.vpc_and_subnet_info.for_dev_env.subnetwork.secondary_ip_range.ip_cidr_range
  }
  network = google_compute_network.dev-vpc-network.id
  project = google_project.dev-shared-vpc-host.project_id
}

当然,在这些示例中,我使用了在.tfvars中声明的变量来填充名称和资源块中需要的其他参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73474673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档