web-dev-qa-db-ja.com

Terraformを使用してssh鍵をGCPインスタンスに追加する方法

Google Cloud Platformでインスタンスを作成するTerraformスクリプトがあるので、Teraformスクリプトで作成したインスタンスにsshキーを追加して、sshを介してインスタンスをプロビジョニングできるようにしたいと考えています。これが私の現在のterraformスクリプトです。

#PROVIDER INFO
provider "google" {
  credentials = "${file("account.json")}"
  project     = "myProject"
  region      = "us-central1"
}


#MAKING CONSUL SERVERS
resource "google_compute_instance" "default" {
  count    =  3
  name     =  "a-consul${count.index}"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"

  disk {
    image = "ubuntu-1404-trusty-v20160627"
  }

  # Local SSD disk
  disk {
    type    = "local-ssd"
    scratch = true
  }

  network_interface {
    network = "myNetwork"
    access_config {}
  }
}

私のterraformスクリプトにsshキーを追加させるには、何を追加する必要がありますか/Users/myUsername/.ssh/id_rsa.pub

15
Alex Cohen

私はこのようなものがうまくいくと思います:

  metadata = {
    ssh-keys = "${var.gce_ssh_user}:${file(var.gce_ssh_pub_key_file)}"
  }

https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys はメタデータメカニズムを説明しており、この例は https:// github .com/hashicorp/terraform/issues/6678

25
mblakele

参考までに。 0.12以降、ブロックは次のようになります。

resource "google_compute_instance" "default" {
  # ...

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

  # ...
}

metadataトークンの後の=署名とssh-keyssshKeysに注意してください)。

5
courteouselk

こちらがテスト済みです。

  metadata {
    sshKeys = "${var.ssh_user}:${var.ssh_key} \n${var.ssh_user1}:${var.ssh_key1}"
}
3
tanaji yadav

複数のキーが必要な場合は、このようにheredocを使用できます

  metadata = {
    "ssh-keys" = <<EOT
<user>:<key>
<user>:<key>
EOT
  }

私はここの奇妙なフォーマットのままterraform fmt提供してくれました。

1
hashier