はじめに
9月の上旬にTerraform Cloudの完全版リリース発表がありました。
これまではEnterprise版でしか利用できなかったようなチーム開発に便利な機能の一部が
最大5ユーザーまで無料で使えるようになったものです。
参考: 価格/機能一覧表
複数人での開発における利便性向上が主なアピールポイントのようですが
1人で学習用などにTerraformを使う上でも嬉しいことがあったので
もっと広まればいいなーと思い紹介します。
→ https://app.terraform.io/
1. Backendの提供
従来は自分で用意しなくてはいけなかったtfstateファイルの置き場を
無料・無制限で提供してくれます。
terraform {
backend "remote" {
hostname = "app.terraform.io" //Terraform Cloudのホスト上に保存
organization = "<Your Organization Name>"
workspaces {
name = "my-sample-app"
}
}
}
デフォルトで「tfstateのバージョン管理機能 & ロック機能付き」のBackendが無料!!
特にこれまでバージョン管理有効にしたS3+ロック用のDynamoDB を作ってた方は
嬉しいんじゃないでしょうか。。
(個人利用だとDynamoDBまで用意する方は少なそうですが)
地味に、Backendアクセスのためだけの認証情報を持たせなくてよくなるのも楽でした。
Terraform Cloudの認証情報はコードに持たせない作りになっています。
2. Remote Runs & Applies
terraform (plan|apply|destroy)
のコマンドが
ローカル端末ではなくTerraform Cloudのサーバーで走るようになります。
サーバー上には実行ログが残ります。
Workspace(tfstateファイル1つが対応) my-sample-app
の実行履歴一覧
これまではローカルのターミナル上で
儚く埋もれ散りゆくのみだった実行結果が、いつでも確認できます…
各tfstateごとに最新の実行結果が確認できるので、
リソースのお片付け(削除)漏れがわかりやすくなるのも助かります。
destroy失敗したまま忘れちゃって、忘れちゃったことすら忘れちゃってリソース残しっぱ…とかが防げるかも。
忘れちゃったことくらいは思い出せる。
3. Private Module Registry
効率いいやり方はあるかもですが、
例えばちょっとAWSで検証したいなーってときに
本質じゃないNW構成を毎回記述するのが結構めんどくさいです。。
私のAWSアカウント内には既存のゴミVPCがたくさん散らばってますが(…)、
構成もわかったもんじゃないし等々、そちらも使いたくない。
そんなとき、Private Module Registryという
TerraformのModuleをTerraform Cloud上に保管してくれる機能が役立ちます。
- モジュールのソースをGitHub等のVCSにリポジトリを作って配置
- リポジトリにバージョンタグ(
vN.N.N
の形)を付ける - Terraform CloudとVCSを連携させて、ちょちょっと設定
以降は通常のTerraformのModuleと同じように使えます。
私の場合は今後、上図のNW設定を以下の4行で作成できるようになりました。
(Cidr等はdefault値を設定して、変更したいときだけ記述する形にしています)
module "basic-networks" {
source = "app.terraform.io/<Your Organization Name>/basic-networks/aws"
version = "0.2.0" # タグで指定したバージョン
}
従来の自作Moduleを毎回新規のリポジトリの中に持ってきて管理すると手間なことが多かったですが
そのへんがスッキリして楽になりました。
(もっと良いやり方もあったのかな…)
きれいなものでもないですが上記のNW構成をモジュール化したソースは
サンプルとしてこちらに置いています。
まとめ
いろんなめんどくさいことが解消されるし無料なので
チーム開発じゃなくても試しに使ってみたら良いと思います!
わかりませんが、個人でこれ使ってたら仕事で従来のOSS版使うのが辛くなってしまう感じはあるけどそのへんどうなんだろう。特にRemote Runのログ。