Terraform

tgenvで複数バージョンのTerragruntを管理する

TerraformのラッパーツールであるTerragruntを、tgenvで複数バージョン管理してみます。

Terragruntは、TerraformをDRY(Don’t Repeat Yourself)に記述でき、複数モジュールでの運用の手間を軽減してくれます。


それを管理するためのtgenvは、以前こちらの記事で紹介したTerraformを複数バージョン管理できるtfenvにインスパイアされて作成されたツールになります。

Terragruntを開発しているGruntwork社の公式ブログでも紹介されていました。

スポンサーリンク

手順

Mac(zsh) でやります。ほぼtfenvと同様の使い方になります。

tgenv自体の管理

インストール

githubより取得します。ダウンロード先はホームディレクトリ配下が一般的かと思います。

$ git clone https://github.com/cunymatthieu/tgenv.git ~/.tgenv
Cloning into '/Users/testuser/.tgenv'...
...
$


Macの場合、デフォルトシェルがzshです。パスをzshrcに追記しましょう。

$ echo 'export PATH="$HOME/.tgenv/bin:$PATH"' >> ~/.zshrc
$
$ source ~/.zshrc
$
$ which tgenv
/Users/testuser/.tgenv/bin/tgenv
$

アップデート

アップデートはgitコマンドを使います。

Git 1.8.5以降は-C オプションで可能です。

$ git --version
git version 2.24.2 (Apple Git-127)
$
$ git -C ~/.tgenv pull
Already up to date.
$


公式手順の~(チルダ)と–git-dir ではなぜか失敗しました。(~が展開されてない??)

$HOMEをつければ大丈夫でした。

## ~(ホームディレクトリを表す) はエラー
$ git --git-dir=~/.tgenv/.git pull
fatal: not a git repository: '~/.tgenv/.git'
$

## $HOME はOK
$ git --git-dir=$HOME/.tgenv/.git --work-tree=$HOME/.tgenv pull
Already up to date.
$

アンインストール

ディレクトリを削除してください。

$ rm -rf ~/.tgenv
$

tfgnvでTerragruntを管理

インストール可能バージョン一覧表示

インストール可能なバージョン一覧を表示します。

$ tgenv list-remote
0.31.8
0.31.7
0.31.6
0.31.5
...
0.31.0
0.30.7
0.30.6
...
$

Terragruntインストール

バージョンを完全指定してインストールします。

$ tgenv install 0.31.5
[INFO] Installing Terragrunt v0.31.5
...
$


latestだと、そのときの最新版がインストールされます。

$ tgenv install latest
[INFO] Installing Terragrunt v0.31.8
...
$


前方一致でもバージョン指定できます。

$ tgenv install latest:^0.30
[INFO] Installing Terragrunt v0.30.7
...
$


後述する .terragrunt-versionがあれば引数なしでインストールできます。

$ cat .terragrunt-version
0.31.5
$
$ tgenv install
[INFO] Installing Terragrunt v0.31.5
...
$

インストール済みバージョン一覧表示

現在、ローカルにインストールされているバージョンを確認します。

$ tgenv list
  0.31.8
  0.31.5
* 0.30.7 (set by /Users/testuser/.tgenv/version)
$

バージョン切り替え

使用するバージョンを切り替えます。インストールのときと同じようにバージョン指定できます。

$ tgenv use 0.31.5
[INFO] Switching to v0.31.5
[INFO] Switching completed
$
$ tgenv list
  0.31.8
* 0.31.5 (set by /Users/testuser/.tgenv/version)
  0.30.7
$
$
$ tgenv use latest
[INFO] Switching to v0.31.8
[INFO] Switching completed
$
$ tgenv list
* 0.31.8 (set by /Users/testuser/.tgenv/version)
  0.31.5
  0.30.7
$


ディレクトリごとにバージョン固定

.terragrunt-version を特定のディレクトリに置くことによって、そのディレクトリ配下のみ適用するバージョンを指定できます。

プロジェクトごとに切り替えられるため、 .terragrunt-version も terraformのコード群と一緒にgithubなどにコミットして管理していくのが良いと思います。

実際は、tfenvの.terraform-versionと一緒に管理することが多いと思います。

$ tgenv list
* 0.31.8 (set by /Users/testuser/.tgenv/version)
  0.31.5
  0.30.7
$ 
$ mkdir hoge
$ 
$ cd hoge/
$ 
## hogeディレクトリ配下で0.31.5固定
$ echo 0.31.5 > .terragrunt-version
$
$ terragrunt --version
[INFO] Getting version from tgenv-version-name
[INFO] TGENV_VERSION is 0.31.5
terragrunt version v0.31.5
$
$ tgenv list
  0.31.8
* 0.31.5 (set by /Users/testuser/hoge/.terragrunt-version)
  0.30.7
$

自動インストール

環境変数TGENV_AUTO_INSTALLtrueで定義すると、tgenv実行時に当該バージョンのTerragurntがなければ自動的にインスト―ルされます。

$ echo 0.31.0 > .terragrunt-version
$
## 未インストールのバージョンであるためエラー
$ terragrunt --version
[INFO] Getting version from tgenv-version-name
tgenv: tgenv-version-name: [WARN] version '0.31.0' is not installed (set by /Users/testuser/hoge/.terragrunt-version)
[INFO] TGENV_VERSION is 0.31.0
tgenv: tgenv-exec: [ERROR] version '0.31.0' was requested, but not installed and TGENV_AUTO_INSTALL is not 'true'
$
$
$ export TGENV_AUTO_INSTALL=true
$
## 自動でインストールされます
$ terragrunt --version
[INFO] Getting version from tgenv-version-name
tgenv: tgenv-version-name: [WARN] version '0.31.0' is not installed (set by /Users/testuser/hoge/.terragrunt-version)
[INFO] TGENV_VERSION is 0.31.0
[INFO] version '0.31.0' is not installed (set by /Users/testuser/hoge/.terragrunt-version). Installing now as TGENV_AUTO_INSTALL==true
[INFO] Installing Terragrunt v0.31.0
[INFO] Downloading release tarball from https://github.com/gruntwork-io/terragrunt/releases/download/v0.31.0/terragrunt_darwin_amd64
################################################################################################################################################################################## 100.0%################################################################################################################################################################################## 100.0%
[INFO] Installation of terragrunt v0.31.0 successful
[INFO] Switching to v0.31.0
[INFO] Switching completed
terragrunt version v0.31.0
$

なお公式ドキュメントではDefault: trueと記載してるのですが、実際こちらのソースコードを見るとfalseのようです。

Terragruntアンインストール

インストールのときと同じようにバージョン指定できます。

$ tgenv uninstall 0.30.7
[INFO] Uninstall Terragrunt v0.30.7
[INFO] Terragrunt v0.30.7 is successfully uninstalled
$
$ tgenv uninstall latest
[INFO] Uninstall Terragrunt v0.31.8
[INFO] Terragrunt v0.31.8 is successfully uninstalled
$

今回は以上です〜ノシ

参考

(*ゝω・)ノ ァリガトネー

Gruntwork公式ブログ tgenvの紹介
GitHub tgenv

関連書籍