投稿者:中根 洋平

はじめに

先日Terraform Cloudが5人まで無料で使えるようになりました。
今回はそのTerraform Cloudを利用してGCP上に環境を作成します。

Terraform Cloudの準備

兎にも角にもまずはTerraform Cloudのアカウントが必要となります。
Terraform Cloudにアクセスしアカウントを作成します。

tf-blog-001.JPG

アカウトを作成したらまず組織を作成します。

tf-blog-002.JPG

組織名とメールアドレスを入力します。
次にTerraform Cloudで利用するversion control system(VCS)の設定をします。
VCSはGithub、GitLab、Bitbucketから選択できます。

それぞれの設定手順はマニュアルに記載があるので割愛します。

Workspaceの作成

WorkspaceはNew Workspaceから作成します。
先程設定したVCSを選択するとリポジトリが表示されます。

tf-blog-008.JPG

選択すると設定画面が表示されます。ここでAdvanced optionsを選ぶと地下の設定が可能となります。
こちらはWorkspace作成後も変更が可能です。

環境変数

Workspaceが作成できたら環境変数の設定をします。

環境変数はTerraform VariablesEnvironment Valiablesがあります。
Terraform Variablesterraform.tfvarsにセットする値を、Environment VariablesにはTerraformのShell環境で使用する値をセットします。

  • GCP認証情報

GCPコンソールでTerraform Cloudで使用する権限を付与したサービスアカウントを作成し、JSONファイルをダウンロードします。
KeyはGOOGLE_CREDENTIALS、Valueに上記JSONファイルの中身を貼り付けます。

機密情報の高い情報なのでSensitiveにチェックマークを入れます。
Sensitiveにチェックいれることで、閲覧不可の更新のみ、という状態になりGUIから参照することはできなくなります。

  • Project ID

今回はGCPのプロジェクトIDも変数として扱うので一緒にセットします。

  • CONFIRM_DESTROY

終了後のクリーンアップのためににCONFIRM_DESTROYに1もセットします。
これはTerraform Cloudからterraform destroyをするためのものです。
実環境ではうっかり削除できないように設定しないでおくのが良いですね。

tf-blog-003.JPG

通知設定

NotificationよりWebhookおよびSlackへの通知設定が行なえます。
今回はSlackへ通知するようにしてみましょう。
Slack側のWebhook URLを設定するだけです。

tf-blog-004.JPG

GCEインスタンスの作成

今回はシンプルにGCEインスタンスを1台作成する以下のTFファイルを使います。

variable "GOOGLE_CREDENTIALS" {}
variable "PROJECT_ID" {}

provider "google" {
  credentials = "${var.GOOGLE_CREDENTIALS}"
  project     = "${var.PROJECT_ID}"
  region      = "us-central1"
  zone        = "us-central1-c"
}

resource "google_compute_instance" "tf-cloud-01" {
    name         = "tf-cloud-01"
    machine_type = "f1-micro"
    allow_stopping_for_update = true

    boot_disk {
        initialize_params {
        size  = 10
        type  = "pd-standard"
        image = "debian-cloud/debian-9"
        }
    }

	network_interface {
		network = "default"
	}
}

初回はQueue Planを実行します。
実行するとUI上からPlanが確認できます。
planが問題なく通ればコメントと承認ができます。
この設定はApply Methodにて自動/手動の設定ができます。

tf-blog.gif

また通知設定がうまく行っていればこの段階でApply Pendingの通知が来ます。

tf-blog-005.JPG

それではインスタンスのマシンタイプをf1-microからg1-smallに変えたコードをGitlabへコミットします。
コミットすると自動的にTerraform Cloudにて変更を検知し、Terraform Cloud側でplanが走ります。 先程と同じように承認をすると変更が走ります。

tf-blog-006.JPG

環境削除

SettingからDestruction and Deletionを開きQueue destory planでWorkspaceの環境を削除できます。
ボタンを押すと作成時同様Planの確認、承認という流れになります。

tf-blog-007.JPG

まとめ

まだ触り始めたばかりですがTerraform Cloudは非常に良さそうな感じです。
現在Terraformを利用されている方はもちろん、手を出せていなかった方も5人までは無料なのでまずは試してみてはいかがでしょうか。