Macでのterraform version管理
記事の内容3行で
- Macで
- Terraformを
- Versioningしたい
選択肢
まだまだ変更の多いTerraformですので、プロジェクト毎にバージョンが異なっていることが多々あると思います。そのため、基本的にTerraformをそのままインストールして使うのは少ししんどいです。
なので、バージョニングしたいのでいくつか選択肢について使いながら検討しました。
- tfenv
- Docker
先にどちらが良いかの感想
結論から書くと、どちらも使う、というのが私の今のところの考えです。
理由ですが、まずTerraformのコマンドはバッチ処理チックに使用することが多いため
$ docker run
$ docker-compose run
的なものを用いて、Terraformコマンド実行毎に環境が生えた方が良い気がしています。
環境が変わることなくクリーンな感じで実行できる(言語化できてないです)ので安心感があります。本番運用するのであればこういった枠組みが欲しくなります。
一方で、Terraformの開発をしていくにあたって、関数やリソースの動作確認のためのデバッグを毎回Dockerで実行するのはしんどいです。
そこで便利なのが、TerraformのインタラクティブなREPLを起動してくれる下記コマンドです。
$ terraform console
開発時にはこれを使って、細かい処理について試しながらやっていくことになると思います。
そのため、冒頭のどちらも使うという結論になります。
あまり依存関係やライブラリが膨れ上がることも多くないと思うので、正直どちらでも良いといえば良い(例えば、開発時はdocker-compose.ymlに対してエントリーポイントを消してデーモン起動できるようにするとか)のですが、メンテナンスも面倒なことが少ないと思うので、Docker用のリソースを用意しておきながら、terraformのバージョン指定(≠固定)用に .terraform_version
ファイルをおいておくことでローカルのTerraformを用いてもどのバージョンがサポートされているか分かる形にするのが柔軟で良いかなと思っています。
tfenv
pyenvのような良くあるバージョン切り替えをサポートしてくれる、Terraformのバージョン管理ツールです。ほぼほぼ公式チュートリアルにあることまんまですが...
- tfenv インストール
$ brew install tfenv
- Terraform 最新バージョンインストール(どれでも良い)
$ tfenv install
$ tfenv install latest
$ tfenv install {最新バージョン指定}
- インストール可能なリスト
$ tfenv list-remote
- 手元のインストール済みリスト
$ tfenv list
Docker
Docker
ファイルと docker-compose.yml
ファイルを用いたdocker composeの構成にしてみます。
FROM hashicorp/terraform:0.15.0
WORKDIR /root/terraform/
ENTRYPOINT /bin/sh
version: '3'
services:
terraform:
build:
context: .
dockerfile: Dockerfile
tty: true
image: terraform
working_dir: /root/terraform/
volumes:
- .:/root/terraform/
env_file: .env
envファイルはTerraformで構築するための環境変数ファイルです。
後はイメージをpull, buildしてrunすればOKです。
$ docker-compose build
$ docker-compose run terraform init
$ docker-compose run terraform plan
$ docker-compose run terraform apply
$ docker-compose run terraform destroy
$ docker-compose run terraform import
Discussion