Terraform Cloudからさくらのクラウドにサーバを作成する

Terraform CloudはHashiCorp社が提供しているTerraformをマネージドしてくれるサービスです。

Githubと連携してterraformがあるリポジトリにpushなどが行われると、自動でterraformコマンドが実行されGitops的なことができたりして便利です。

特に複数人でTerraformを利用しているケースには非常にありがたいです。

無料で使える範囲があるので、今回はその範囲内で使ってみました。

デフォルトの状態ではさくらのクラウドにサーバを作成することができないので、手順をまとめてみました。

## 準備するもの
- さくらのクラウドのAPIキー
- Githubアカウント

## 環境
今回は以下のバージョンで実行されることを想定しています。

Terraform v0.11.14
Terraform for さくらのクラウド v1.16.4
Githubリポジトリ https://github.com/tar-xzvff/sakura-cloud-tfcloud-sample

## 1. リポジトリの作成

Githubリポジトリにさくらのクラウドに対してサーバを作成するTerraformを置きます。

また、Terraform provider(さくらのクラウド for Terraform)のバイナリファイルも同じリポジトリ内に置きます。

※事前にGithubにリポジトリを作成します。(Public/Privateどちらでも可)
※git initしたディレクトリにて以下を実行

### プラグインの配置
```
curl -O https://releases.usacloud.jp/terraform/terraform-provider-sakuracloud_1.16.4_linux-amd64.zip

unzip terraform-provider-sakuracloud_1.16.4_linux-amd64.zip

mkdir -p terraform.d/plugins/linux_amd64

mv terraform-provider-sakuracloud_v1.16.4 terraform.d/plugins/linux_amd64
```

### Terraformファイルの配置

```
cat <<'EOF' >  server.tf
data sakuracloud_archive "ubuntu" {
    filter = {
        name = "Name"
        values = ["Ubuntu Server"]
    }
    filter = {
        name = "Tags"
        values = ["current-stable","arch-64bit","os-linux"]
    }
}

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

resource "sakuracloud_server" "server01" {
  name  = "server01"
  disks = ["${sakuracloud_disk.disk01.id}"]
  password          = "YourPassw0rd"
}
EOF
```

```
git add server.tf
git commit -m "Add a tf file"
git add terraform.d/plugins/linux_amd64/terraform-provider-sakuracloud_v1.16.4
git commit -m "Add terraform-provider-sakuracloud"
git push origin master
```

ディレクトリの最終的な状態

```
# tree
.
├── server.tf
└── terraform.d
    └── plugins
        └── linux_amd64
            └── terraform-provider-sakuracloud_v1.16.4
```

## 2. Terraform Cloudのサインアップ

割愛します。

## 3. Workspaceの作成

Create a New Organizationを選択します。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/8ce3347d-09b7-0b77-a53a-71ba9d386a2f.png)

Organization nameとEmail addressを入力します。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/c7a62a85-c291-f654-c668-b48fca4ff6d3.png)

Githubをクリックし、連携させたいGithubリポジトリを選択します。
<img width="960" alt="3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/2572dcfe-4388-9543-dcfd-12d2c4b27a0d.png">

選択します。
<img width="960" alt="4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/0f918ea1-b043-287d-8ccb-9b0afdf5372a.png">

Workspace Nameを入力します。
<img width="960" alt="5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/7909e23d-b6a4-8f54-4169-81397882303d.png">

Workspaceが作成されました。
<img width="960" alt="6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/43f97b55-8bf9-19db-42cb-d5eda045ad65.png">

## 3. Terraformバージョンの切り替え
SettingsをクリックしGeneralを選択します。
<img width="960" alt="7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/b2d6708b-0d0b-e6aa-c647-9fcc50216ecf.png">

画面下部のTerraform Versionをクリックし
<img width="960" alt="8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/209f1359-2e66-6192-ba40-2125e3d26c2c.png">

0.11.14を選択します。
<img width="960" alt="9.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/13205a5e-7e5f-8294-a992-305ca908eeb5.png">


最後に `Save settings` をクリックします。

## 4. APIキー、サーバ作成先ゾーンの設定
さくらのクラウドに対してサーバを作成するために以下の値を設定します。

- SAKURACLOUD_ACCESS_TOKEN
- SAKURACLOUD_ACCESS_TOKEN_SECRET
- SAKURACLOUD_ZONE

Variablesをクリックし、Environment VariablesのAdd variableをクリックします。
<img width="960" alt="10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/886111bc-f5c1-a7f6-bf85-236e5d3ba9e2.png">

以下のように値を設定します。
APIキーに関する2項目はSensitiveにチェックを入れます。
<img width="960" alt="11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/cfe717a6-26be-5f3a-b4a8-2eafae597550.png">

## 5. リソースの作成実行

Queue planをクリックし、Queue plan(青ボタン)を選択します。
<img width="960" alt="12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/322b541f-ace5-e3e3-3508-512498019532.png">

terraform planが実行されます。
NEEDS CONFIRMATION が表示されたら画面をスクロールし
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/fa2ec678-7aa2-e3ee-2592-03529073aca0.png)

Confirm & Applyを選択します。
<img width="960" alt="14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/e2cec2ef-a156-54e7-3cb1-77501d867853.png">

コメントを入力し、Confirm Planを選択します。
<img width="960" alt="15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/70bdb8aa-1aac-011b-a349-6b32efcdd4fd.png">

terraform applyが実行されます。
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/a7e6e8e7-a6f1-9723-9050-afba85ef3237.png)

terraform applyが完了。
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/9dfbfbd3-4062-32ee-3039-1b54028d0c74.png)

さくらのクラウドのコントロールパネルにログインし、Terraform Cloudから作成したサーバが存在していることを確認します。
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58803/4bf58d7b-2911-0413-d343-1caad49638d8.png)

以上で終わりです。