在GCP中,Terraform的`name`和`self_link`有什么区别?

3
在GCP中,使用Terraform时,我发现可以使用name属性和self_link。因此,我想知道是否存在必须使用其中任何一个的情况。
例如:
resource "google_compute_ssl_policy" "custom_ssl_policy" {
  name            = "my-ssl-policy"
  profile         = "MODERN"
  min_tls_version = "TLS_1_1"
}

这个对象,可以被称为:

ssl_policy = google_compute_ssl_policy.custom_ssl_policy.name

并且

ssl_policy = google_compute_ssl_policy.custom_ssl_policy.self_link

我知道object.name返回Terraform对象名称,object.self_link返回GCP资源的URI。
我已经尝试了几个对象,并且这两个属性都可以使用,所以我想知道这是否是微不足道的,或者有时候应该使用其中之一。
2个回答

7

以下是官方文档中的定义:

几乎所有 GCP 资源都有一个名字字段 (name field)。它们用作识别资源的简短方式,云控制台中资源的显示名称就是在名字字段中定义的那个。

然而,在 Terraform 配置文件中连接(link)资源时,您主要需要使用另一个字段,即资源的self_link。类似于 name,几乎每个资源都有一个 self_link。它们看起来像:

https://www.googleapis.com/compute/v1/projects/foo/zones/us-central1-c/instances/terraform-instance

一个资源的 self_link 是指向该资源的唯一引用。在 Terraform 中链接两个资源时,您可以使用 Terraform 插值避免手动输入 self_link!

参考:https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/getting_started

例如,我可以在不同的区域部署相同名称 / 相同项目的两个云函数。在这种情况下,如果您需要在 Terraform 代码中引用两个资源,则最好使用 self_link,因为它是一个唯一的 URI。


0
除了CaioT的回答之外,self-link用于引用outputs.tf文件中的值。
例如,如果您想在应用terraform配置之前了解最低的TLS版本,您可以使用outputs在控制台上显示这些值。这样可以确保您在应用terraform之前确认这些值。
// 当您运行terraform apply时,下面的代码将将最低TLS版本的值输出到控制台上 //
output "current_min_tls_version" {
    value = google_compute_ssl_policy.custom_ssl_policy.min_tls_version
}

https://developer.hashicorp.com/terraform/tutorials/gcp-get-started/google-cloud-platform-outputs


我怀疑google_compute_ssl_policy.custom_ssl_policy.min_tls_version最终不会成为任何东西的self-link。可能是类似1.1这样的东西。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接