はじめに
先日、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 Estimation
やSentinel
との連携もできますし、最近ではPrivate Enterprise限定機能のSSOやログ管理などの昨日も使えるようになりましたね。
しかし、個人的には一番根本のところ、変更管理であるtfstateの管理が楽になれば良いなというところに期待します。
準備
- ターミナルでterraformが実行できる環境
- 今回の一連の記事でのterraformのバージョンは0.13移行を想定しています
Terraform Cloudの利用開始
ではまずTerraform Cloudの利用を開始しましょう。
大まかな流れは、利用ユーザを作成し、そのユーザで利用するOrganizationを作成するという流れになります。
ユーザ作成
-
https://app.terraform.io/ にアクセスし、
free account
をクリック
Organization作成
ローカルで実行していたTerraformをCloudに移行
先にCloudでWorkspaceを作成してからプロジェクトを開始できればいいのですが、初めてTerraform Cloudを使う際はローカルにあるコードをCloudで実行するよう変更する必要が出ると思います。
その際の手順を記載します。
User Token取得
リモートでTerraform Cloudを実行するのにTokenが必要なのですが、今回はUser Token
を発行して使うことにします
- 画面右上のアバターをクリックし、表示されたメニューの
User Settings
をクリック
-
Tokens
を選択し、Create an API token
をクリックする
-
Description
を入力しCreate API token
をクリック
- 表示された
Token
を控える
Terraformの設定変更
- クレデンシャル情報を下記のように
~/.terraformrc
に記述
credentials "app.terraform.io" {
token = "TOKEN_KEY"
}
- リモートで実行するための設定を追加
terraform {
backend "remote" {
hostname = "app.terraform.io"
organization = "ORGANIZATION_NAME"
workspaces {
name = "aws-test" # ←ワークスペース名
}
}
}
- 改めて
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を入力
- Cloud上にワークスペースが作成され、stateがコピーされていることを確認
- ローカルのtfstateファイルを削除し、実行時に渡しているvariablesがあればCloud上に設定する
- ローカルで
terraform plan
やterraform 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上ではこんな感じ。
まとめ
こんな感じでTerraform Cloud上での実行に切り替えることができました。
Saasで管理ができますのでチームで使う際に最も頭を悩ませたtfstateの扱いが簡単になることと思います。
次回はバージョン管理システムとの連携と自動デプロイを試してみたいと思います。
関連記事
Terraform Cloud その1 - まずは使ってみた(ローカル実行からリモート実行に変更)
Terraform Cloud その2 - Gihubと連携してみた(VCSとWorking Directoryの設定)
Terraform Cloud その3 - Terraform CloudをTerraformで管理する
Terraform Cloud その4 - ワークスペース間で共有する閉じられた空間で使用するModuleについて