コンテンツにスキップ

Pants で Terraform を使う際の setup と tips

Pants で Terraform を使う際の setup と tips を備忘録として残す。

setup

terraform で remote module を利用する際に git が必要になる。開発マシンに git があっても、pants から認識できないことがある。その場合は、以下のように設定する。参考

pants.toml
[download-terraform]
extra_env_vars = [
  "PATH"
]

# 上記の設定でgitバイナリが見つからない場合は下記を追加してみる
[system-binaries]
system_binary_paths.add = [
    '/path/to/bin',
]

git の注意点

external data source で 以下のように git を使っている場合、pants を経由しなかったら問題なく実行できていたものが、pants を経由するとエラーが発生するようになる。これは、pants の実行環境では.gitディレクトリがないため。

1
2
3
4
5
6
7
8
9
data "external" "git" {
  program = [
    "git",
    "log",
    "--pretty=format:{ \"sha\": \"%h\" }",
    "-1",
    "HEAD"
  ]
}

lockfile 対応

v2.22.0 時点では terraform の lockfile をそのまま pants で扱う。lockfile が更新されてないまま pants から terraform を実行するとエラーになる。その場合は、generate-lockfilesのオプションでterraform_moduleのターゲットの名前を指定して lockfile を更新すると良い。

terraform_module(name="infrastructure")
terraform_deployment(name="prod", root_module="//tf:infrastructure")
pants generate-lockfiles --resolve=tf:infrastructure

terraform_module を対象とした generate-lockfiles の実行では、裏側でterraform initが実行される。