GCP 中的 Terraform `name` 与 `self_link`

Terraform `name` vs `self_link` in GCP

在 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 returns Terraform 对象名称,object.self_link returns GCP 资源的 URI。

我尝试了几个对象,它对两个属性都有效,所以我想知道这是否微不足道,或者在某些情况下我应该使用其中之一。

官方文档中的定义如下:

Nearly every GCP resource will have a name field. They are used as a short way to identify resources, and a resource's display name in the Cloud Console will be the one defined in the name field.

When linking resources in a Terraform config though, you'll primarily want to use a different field, the self_link of a resource. Like name, nearly every resource has a self_link. They look like:

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

A resource's self_link is a unique reference to that resource. When linking two resources in Terraform, you can use Terraform interpolation to avoid typing out the self link!

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

举个例子,我可以部署两个具有相同 name/same 项目但位于不同区域的云函数。在这种情况下,如果您必须在 Terraform 代码中引用这两个资源,最好使用 self_link,因为它是一个唯一的 URI。