使用 Terraform 在 GCE 中管理 ssh-keys

90次阅读
没有评论

问题描述

在使用 Terraform 管理 GCE 中的 VM 访问时,尝试将 ssh-keys 放入变量并使用它,但遇到了问题。以下是用户的代码示例:

variable "ssh_keys" {
  type    = "list"
  default = [
    {
      user = "atolkachev",
      key  = "ssh-rsa my_key atolkachev"
    },
  ]
}

resource "google_compute_instance" "instance" {
  zone    = "${var.region}-${var.zone}"
  project = "${var.project_name}"

  metadata = {
    ssh-keys = join("\n", [for user, key in var.ssh_keys : "${user}:${key}"])
  }
}

在执行代码时,用户遇到了以下错误:

Error: Invalid template interpolation value  on main.tf line 24, in resource "google_compute_instance" "instance":
  24:     ssh-keys = join("\n", [for user, key in var.ssh_keys : "${user}:${key}"])

用户尝试寻找解决方案,但未成功。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

根据用户的代码和问题描述,您遇到了变量类型的问题。为了解决这个问题,您需要将 variable "ssh_keys" 的类型更改为 "map",以便正确处理 ssh-keys。

以下是修正后的代码示例:

variable "ssh_keys" {
  type    = "map"
  default = {
    "atolkachev" = "ssh-rsa my_key atolkachev"
  }
}

resource "google_compute_instance" "instance" {
  zone    = "${var.region}-${var.zone}"
  project = "${var.project_name}"

  metadata = {
    ssh-keys = join("\n", [for user, key in var.ssh_keys : "${user}:${key}"])
  }
}

在上面的示例中,我们将 variable "ssh_keys" 的类型更改为 "map",并更新了默认值。现在,ssh-keys 元数据的构建应该正确无误。

请确保您已经根据您的需求更新了 ssh-keys 的映射关系,并且根据您的实际情况填充了正确的 ssh-keys。

这将使 Terraform 能够正确地处理 ssh-keys,并将其应用于您的 GCE 实例。

总结

通过将 variable "ssh_keys" 的类型更改为 "map",您可以解决在使用 Terraform 管理 GCE 中的 VM 访问时遇到的问题。这将允许 Terraform 正确地构建 ssh-keys 的元数据,并将其应用于您的 GCE 实例。

如果您有其他问题或需要进一步的帮助,请随时提问。

正文完