Terraform 和 GCP - 在现有的共享 VPC 和子网中创建新的计算 VM

Posted

技术标签:

【中文标题】Terraform 和 GCP - 在现有的共享 VPC 和子网中创建新的计算 VM【英文标题】:Terraform and GCP - Create new Compute VM in existing Shared VPC and Subnet 【发布时间】:2022-01-21 20:02:00 【问题描述】:

如何创建新的计算实例并将其与现有的共享 VPC/子网关联?共享的 VPC/子网已存在于另一个项目中。

我的 TF 块:

resource "google_compute_instance" "computevm1" 
  name                      = "test-compute-vm1"
  zone                      = "us-west1-a"
  machine_type              = "e2-standard-1"

  network_interface 
    network = "isolated-vpc"
  
  boot_disk 
    initialize_params 
      image = "ubuntu-2004-focal-v20211212"
      size  = 20
    
  

我得到的错误:

The referenced network resource cannot be found., invalid

【问题讨论】:

【参考方案1】:

对于 HCL 属性 network,指定要在其中创建实例的项目中的 VPC 的网络名称。将自动从区域中选择子网。创建实例时,共享 VPC 没有什么特别之处。

假设您的共享 VPC 在默认网络上启用:

network_interface 
  network = "default"

如果不同,请更改名称。

【讨论】:

这没有意义。我有一个已经在另一个项目中创建的网络,并与我正在创建这个新实例的项目共享。 Terraform 如何知道将新实例与共享网络相关联?并且将“默认”设置为无效。 Error 400: Invalid value for field 'resource.networkInterfaces[0].network': 'projects/project-name/global/networks/default'. The referenced network resource cannot be found @BenVek 使用正在创建 VM 实例的网络的实际名称。该网络必须已经存在。 VM 不关心共享/对等网络。只需在 HCL 中选择正确的网络即可。 共享网络已经存在。我确实包含了网络名称并得到了同样的错误。 network_interface network = "NAME OF SHAREDVPC" @BenVek - 你的名字有问题。在您的问题中,列出您在其中创建 VM 的项目中所有网络的实际名称。 屏蔽名称没有安全优势。在您的问题和 cmets 中使用实际值。 共享 VPC 网络名称为“isolated-vpc” 子网名称为“isolated-net”network_interface network = "isolated-vpc"

以上是关于Terraform 和 GCP - 在现有的共享 VPC 和子网中创建新的计算 VM的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Terraform 公开 gcp 云功能

GCP 为每个项目和 Terraform 预定义 IAM 角色

在同一个 TF 脚本中使用多个 Terraform 提供程序(GCP 和 Kubernetes)创建资源

使用 Terraformer\Terraform 克隆 GCP 项目

在 Terraform for GCP 中允许帐户和角色时出错

使用 Github 和 Cloud Source Repository 的 Terraform GCP Cloud 功能