我的 Google Cloud Platform 项目中有一个现有的 VM 实例,它是手动创建的(不使用 Terraform)。
现在,我想使用 Terraform 为该虚拟机配置 DNS 记录。我不想手动复制 IP 地址并将其硬编码到配置中。 Terraform 有没有办法读取现有 VM 实例的公共 IP 地址并在创建另一个资源时将此值用作变量?
此外,一般来说,Terraform 是否能够从现有资源(不由 Terraform 管理)中查询数据?
答案 0 :(得分:1)
Terraform 有一项名为 Data Sources 的功能。这种机制本质上提供了一种查询现有基础架构并从资源中读取数据的方法。
每个提供程序都有自己的一组受支持的数据源。例如,GCP 提供程序有一个 google_compute_instance 数据源。
以下是如何使用此机制为现有 VM 实例创建 DNS 记录的示例:
data "google_compute_instance" "my-instance" {
# this is how you query/match the existing resources
name = "unique-name-of-your-instance"
}
resource "google_dns_record_set" "my-record" {
name = "foo.example.com."
type = "A"
managed_zone = google_dns_managed_zone.my-zone.name
rrdatas = [
data.google_compute_instance.my-instance.network_interface.0.access_config.0.nat_ip
]
}