sacloud / terraform-provider-sakuracloud

Terraform provider for SakuraCloud
https://docs.usacloud.jp/terraform
Apache License 2.0
71 stars 23 forks source link

サーバーのSSH鍵にGitHubのIDを指定したい #798

Closed inductor closed 3 years ago

inductor commented 3 years ago

コンソールでいうとこれと同じことが実現したいのですが、可能でしょうか?

image

yamamoto-febc commented 3 years ago

このプロバイダーではGitHubから公開鍵を取得する機能を直接はサポートしていません。 しかしhttpプロバイダーなどを組み合わせることでコントロールパネルと同等の機能を実現可能です。

GitHubの公開鍵はhttps://github.com/<GitHubのユーザ名>.keysから参照可能なので、httpプロバイダーを利用して公開鍵を取得〜それを用いてさくらのクラウド上に公開鍵を登録することで実現します。

# GitHub上の公開鍵を参照するためのデータソース
data "http" "key" {
  url = "https://github.com/<GitHubのユーザ名>.keys" # 任意のユーザー名に置き換える
}

# データソースを参照してさくらのクラウド上にSSH公開鍵を登録
resource "sakuracloud_ssh_key" "key" {
  name       = "example"
  public_key = data.http.key.body
}

動作する完全なコード例は以下のようになります。

terraform {
  required_providers {
    http = {
      source  = "hashicorp/http"
      version = "2.1.0"
    }
    sakuracloud = {
      source  = "sacloud/sakuracloud"
      version = "2.7.1"
    }
  }
}

variable "password" {}

data "sakuracloud_archive" "ubuntu" {
  os_type = "ubuntu2004"
}

resource "sakuracloud_disk" "example" {
  name              = "example"
  source_archive_id = data.sakuracloud_archive.ubuntu.id
}

resource "sakuracloud_server" "example" {
  name  = "example"
  disks = [sakuracloud_disk.example.id]

  network_interface {
    upstream = "shared"
  }

  disk_edit_parameter {
    password    = var.password
    ssh_key_ids = [sakuracloud_ssh_key.key.id]
  }
}

resource "sakuracloud_ssh_key" "key" {
  name       = "example"
  public_key = data.http.key.body
}

data "http" "key" {
  url = "https://github.com/<GitHubのユーザ名>.keys" # 任意のユーザー名に置き換える
}

上記のコードでサーバを作成すると、作成したサーバ上の~/.ssh/authorized_keysにGitHub上の公開鍵が登録されているはずです。

yamamoto-febc commented 3 years ago

不明点などあれば再オープンしてください。