我正在尝试创建一个具有静态外部 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/