google-cloud-platform - 无法使用 Terraform 创建具有静态 IP 的 GCE 实例

标签 google-cloud-platform terraform google-compute-engine

我正在尝试创建一个具有静态外部 IP 地址的 GCE 实例,该地址将在机器的生命周期后持续存在。

我有两个独立的 terraform 目录。

(1) 创建 IP 地址:

# project_ips/ip.tf

locals {
  project_id             = "my_project"
  region                 = "my-region"
  static_ip_address_name  = "my-address"

}

module "address-fe" {
  source       = "terraform-google-modules/address/google"
  version      = "~> 3.1"
  project_id   = local.project_id
  region       = local.region
  address_type = "EXTERNAL"
  names = [
    local.static_ip_address_name,
  ]
  global = true
}

(2) 创建虚拟机及其网络:

# project_vm/networks.tf

# ...
# code where network and subnetwork are created 
# ...

data "google_compute_address" "vm_address" {
  project = var.project_id
  region  = var.region
  name    = "my-address"
}

虚拟机:

# project_vm/neo4j.tf

resource "google_compute_instance" "vm" {
  project      = var.project_id
  name         = "my-instance"
  machine_type = var.machine_type
  zone         = var.zone

  network_interface {
    subnetwork_project = var.project_id
    subnetwork         = google_compute_subnetwork.public_subnet.name
    access_config {
      nat_ip = data.google_compute_address.vm_address.address
    }
  }
}

但是,当创建机器时,它会被分配一个新的临时 IP 地址,而不是在其他项目中创建的 IP 地址,并且可能是通过数据 block 传递的。这里缺少什么?

最佳答案

您可能需要使用 resource 子句创建地址,而不是使用 data 子句获取有关该地址的信息(请参阅您的代码)。

所以,而不是

data "google_compute_address" "vm_address" {
  project = var.project_id
  region  = var.region
  name    = "my-address"
}

你可能需要类似的东西

resource "google_compute_address" "vm_address" {
  project      = var.project_id
  address_type = "EXTERNAL"
  network_tier = "PREMIUM"
  region       = var.region
  name         = "some name"
  description  = "An external IP address for my virtual machine"
}

并在network_interface部分中使用它:

nat_ip = google_compute_address.vm_address.address

上面的子句中不需要 data 前缀。请参阅此处的 Terraform 文档和示例:google_compute_address

关于google-cloud-platform - 无法使用 Terraform 创建具有静态 IP 的 GCE 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74786318/

相关文章:

google-cloud-storage - 如何获取或生成存储桶中对象的 URL?

google-compute-engine - 无法将磁盘添加到谷歌虚拟机实例

google-compute-engine - 使用谷歌计算引擎运行 openai gym

visual-studio-code - Google Cloud Engine 上的代码服务器(Visual Studio Code) - ERR_CONNECTION_REFUSED

Kubernetes secret 加密

docker - 如何使用Terraform在Kubernetes上的容器中推出新版本的容器?

Terraform iam_policy_document - 差异。资源与委托(delegate)人

google-cloud-platform - GCP-IAM - 如何授予对组织中所有服务帐户的访问权限?

postgresql - 无法在 Google Cloud SQL 上创建 postgis 扩展

terraform - 变量值的 Heredoc 语法