Cloud その1 - まずは使ってみた(ローカル実行からリモート実行に変更)


はじめに

先日、Terraform Cloud Businessが発表されましたが、折角Free版で5Usersまで使えるので個人的に試してみました。

この記事で実現すること

  • Terraform Cloudの利用開始
  • ローカルで実行していたTerraformをCloudに移行

この記事がターゲットとする読者層

  • Terraformのローカル実行の不便さに悩んでいる人
  • Terraform Cloudを使用してみたい人
  • ローカルで使用しているTerraformのコードをTerraform Cloudに移行したい人

Terraform Cloudとは

OSS版のTerraformをSaasで実行できるというものです。
主なメリットは
* 変更履歴をSaas上で管理できる
* 誰が更新したか履歴が残る
* ユーザごとに実行権限が管理できる
* SaasになるのでCI/CDのフローに取り入れやすい
こんなところでしょうか。
有料版を使えばCost EstimationSentinelとの連携もできますし、最近ではPrivate Enterprise限定機能のSSOやログ管理などの昨日も使えるようになりましたね。
しかし、個人的には一番根本のところ、変更管理であるtfstateの管理が楽になれば良いなというところに期待します。

準備

  • ターミナルでterraformが実行できる環境
    • 今回の一連の記事でのterraformのバージョンは0.13移行を想定しています

Terraform Cloudの利用開始

ではまずTerraform Cloudの利用を開始しましょう。
大まかな流れは、利用ユーザを作成し、そのユーザで利用するOrganizationを作成するという流れになります。

ユーザ作成

  1. https://app.terraform.io/ にアクセスし、free accountをクリック

  2. 必要情報を入力する

  3. 以下のようなメールが届くのでURLをクリックして承認する

Organization作成

  1. メニューのOrganizationsからCreate new organizationをクリックする

  2. 費用項目を入力する

  3. 最初なのでStart with a fresh Terraform configをクリックする

  4. Organizationの画面になれば完了

ローカルで実行していたTerraformをCloudに移行

先にCloudでWorkspaceを作成してからプロジェクトを開始できればいいのですが、初めてTerraform Cloudを使う際はローカルにあるコードをCloudで実行するよう変更する必要が出ると思います。
その際の手順を記載します。

User Token取得

リモートでTerraform Cloudを実行するのにTokenが必要なのですが、今回はUser Tokenを発行して使うことにします
1. 画面右上のアバターをクリックし、表示されたメニューのUser Settingsをクリック

2. Tokensを選択し、Create an API tokenをクリックする

3. Descriptionを入力しCreate API tokenをクリック

4. 表示されたTokenを控える

Terraformの設定変更

  1. クレデンシャル情報を下記のように~/.terraformrcに記述
credentials "app.terraform.io" {
  token = "TOKEN_KEY"
}
  1. リモートで実行するための設定を追加
terraform {
  backend "remote" {
    hostname = "app.terraform.io"
    organization = "ORGANIZATION_NAME"

    workspaces {
      name = "aws-test"   # ←ワークスペース名
    }
  }
}
  1. 改めてterraform initを実行
$ terraform init

途中でstateファイルをコピーするか聞かれるのでyesと回答

Initializing the backend...
Acquiring state lock. This may take a few moments...
Do you want to copy existing state to the new backend?
  Pre-existing state was found while migrating the previous "local" backend to the
  newly configured "remote" backend. No existing state was found in the newly
  configured "remote" backend. Do you want to copy this state to the new "remote"
  backend? Enter "yes" to copy and "no" to start with an empty state.

  Enter a value:    ←yesを入力
  1. Cloud上にワークスペースが作成され、stateがコピーされていることを確認
  2. ローカルのtfstateファイルを削除し、実行時に渡しているvariablesがあればCloud上に設定する
  3. ローカルでterraform planterraform applyできることを確認
$ terraform apply

Running apply in the remote backend. Output will stream here. Pressing Ctrl-C
will cancel the remote apply if it's still pending. If the apply started it
will stop streaming the logs, but will not stop the apply running remotely.

Preparing the remote apply...

To view this run in a browser, visit:
https://app.terraform.io/app/kuroseets/aws-test/runs/run-Qk56jNqMQQeMxx2S

Preparing the remote XXXX...が記載されていればcloud上で実行されているということです。
ちなみにCloud上ではこんな感じ。
* Runs

* States

まとめ

こんな感じでTerraform Cloud上での実行に切り替えることができました。
Saasで管理ができますのでチームで使う際に最も頭を悩ませたtfstateの扱いが簡単になることと思います。
次回はバージョン管理システムとの連携と自動デプロイを試してみたいと思います。

関連記事

Terraform Cloud その1 - まずは使ってみた(ローカル実行からリモート実行に変更)
Terraform Cloud その2 - Gihubと連携してみた(VCSとWorking Directoryの設定)
Terraform Cloud その3 - Terraform CloudをTerraformで管理する
Terraform Cloud その4 - ワークスペース間で共有する閉じられた空間で使用するModuleについて