Terraform Cloud を使って構成ファイルの管理を楽にする

インフラ構成管理ツールTerraformの構成ファイルをクラウドで管理できる「Terraform Cloud」を使ってみます。アカウント作成からサンプル（AWSのVPCの作成）の実行までやります。

# 必要なもの
- GithubのAccount
- AWSのAccount
- Terraform CloudのAccount（今回作成）  
（これだけ！CLIのインストールなどは不要！）

# 準備
## Account作成
https://www.terraform.io/

Sign up for Cloud
Username, Email, Password, 同意のチェックを入れて、Create account

<img width="300" border="1" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132550/eddf6b0c-6f3a-1a42-68a8-7910b6bb18fd.png"> → <img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132550/fbabd589-4524-2fea-ac03-e4ee6cfe4c40.png">

## Organization作成
Organization name, Email addressを入力して、Create an Organization

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132550/f4d1cfe2-3070-12ef-56ce-ee3d7ff9602a.png"> → <img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132550/818cd3e3-ae79-89bf-7190-25be13f79ba8.png">

# tfファイル作成
[VPCだけを作成するtfファイルをGithubへPush](https://github.com/pureone-tcy/IaC-provisioning-recipe/blob/master/terraform/aws/sandbox/main.tf)

```tf
variable "aws_access_key" {}
variable "aws_secret_key" {}

provider "aws" {
  access_key = var.aws_access_key
  secret_key = var.aws_secret_key
  region     = "ap-northeast-1"
}

resource "aws_vpc" "test-vpc" {
  cidr_block = "10.0.0.0/16"
  tags = {
    Name = "test-vpc"
  }
}
```

# Workspace作成
Githubと連携する（ブラウザのポップアップブロックでエラーになる場合は許可する）
今回は特定のリポジトリのみ対象とするため、Only select repositoriesを選択して、Install

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132550/fd7752e1-bc6e-b971-0d85-62019f655efa.png"> → <img width="300" alt="スクリーンショット 2019-09-27 20.13.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132550/132782d2-e725-1bb7-bd0c-3ccc64750261.png">

ちなみに、ここでInstallしたものは、GithubのSettingsのApplicationsに追加されています
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132550/c3a4327e-8a2d-c31e-f1ae-c4c28045bde6.png">

tfファイルをリポジトリの直下に置いていないため、Terraform Working Directoryに、<font color="Tomato">tfファイルが置いてあるディレクトリの相対パスを入力し、</font>Create Workspace（私の場合は`IaC-provisioning-recipe/terraform/aws/sandbox/main.tf`）

<img width="500" alt="スクリーンショット 2019-09-27 20.40.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132550/3d984919-6a04-3d56-de2b-69630b117307.png">

# 変数の設定
AWS Credential情報（aws_access_key,baws_secret_key）を入力して、Save variable
<img width="300" alt="スクリーンショット 2019-09-27 20.46.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132550/bb43450c-cf44-5a91-2538-2bc41b6a7619.png">
<img width="600" alt="スクリーンショット 2019-09-27 20.47.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132550/3c43ab63-f1d2-ff89-3a51-e18c081cc8ce.png">

# 実行
Queue plan
Confirm & Apply（コメントが入力できる）

<img width="300" alt="スクリーンショット 2019-09-27 20.56.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132550/f0512c9b-c5da-68c6-be13-3027e1d8f9b9.png">

<img width="1187" alt="スクリーンショット 2019-09-27 20.59.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132550/bbd6a602-1feb-4b02-236e-be5308a95ac0.png">

これでVPCが作成されていると思います:comet:

# 感想
- tf.stateの管理が楽になった（S3に上げなくていい）
- AWS Credentialの設定をGithubに上げてなくていい
- 今回はやってませんが、MasterへのMergeをトリガーにConfirm&Applyする機能もあり  
などなど！かなり便利になっております！おすすめです:sunny: