🐧

tfaction が OpenTofu や Terragrunt をサポート

2024/02/29に公開

tfaction という、 GitHub Actions で Terraform Workflow を構築するための Action を開発しています。

https://github.com/suzuki-shunsuke/tfaction

https://zenn.dev/topics/tfaction

先日 tfaction v1.2.0 をリリースし、 Terraform の代わりに OpenTofuTerragrunt のような Terraform とコマンドレベルで互換性のあるツールを実行することが出来るようになりました。
本記事ではそのことについて紹介します。

https://suzuki-shunsuke.github.io/tfaction/docs/feature/use-terraform-compatible-tool/

tfaction ではデフォルトで terraform init, fmt, validate, plan, apply といった Terraform のコマンドが実行されます。
tfaction v1.2.0 ではこれらのコマンドを実行する際に terraform 以外のツールを実行出来るようになりました。
例えば Terraform の代わりに OpenTofu を使い、上記のコマンドの代わりに tofu init, fmt, validate, plan, apply といったコマンドを実行することができます。
任意のツールを使用することができますが、 Terraform とコマンドレベルで互換性がある必要があります。
OpenTofu や Terragrunt は Terraform と互換性があるはずなので問題なく動きます。

使い方

使い方は簡単です。

  1. 実行したいツールをインストール (OpenTofu や Terragrunt は aqua でインストールできます)
aqua g -i opentofu/opentofu
aqua g -i gruntwork-io/terragrunt
  1. tfaction-root.yaml か tfaction.yaml で terraform_command を指定
tfaction-root.yaml
terraform_command: tofu
target_groups:
  - terraform_command: tofu
tfaction.yaml
terraform_command: terragrunt

上記の通り 3 個所で指定可能です。
特定の working directory でのみ変更も可能なので、例えば段階的に Terragrunt を導入するといったことも tfaction としては可能です。

ちなみに tfmigrate も内部的に Terraform を実行しており、これを別のツールに置き換えるには環境変数 TFMIGRATE_EXEC_PATH を設定する必要がありますが、これも tfaction が内部的に terraform_command に合わせて設定してくれます。

terraform_command のバリデーション

terraform_command を置き換えることで任意の外部コマンドが実行可能になるので、 terraform_command をバリデーションするのがセキュリティ的に望ましいでしょう。
下記の記事でも紹介しているように、 pull_request_target を使って GitHub Actions Workflow の改竄を防ぎつつバリデーションをすることができます。

https://zenn.dev/shunsuke_suzuki/articles/secure-github-actions-by-pull-request-target

簡単な validation の例
- uses: suzuki-shunsuke/tfaction/get-target-config@v1.2.0
  id: target-config

- run: |
    echo "::error:: terraform_command is invalid"
    exit 1
  if: |
    ! contains(fromJSON('["terraform", "terragrunt", "tofu"]'), steps.target-config.outputs.terraform_command)

さいごに

以上、 tfaction が OpenTofu や Terragrunt のような Terraform と互換性のあるツールをサポートした話でした。

Terragrunt をお使いの方は結構多いと思うので、今回 tfaction が Terragrunt もサポートできたのは大きかったかなと思います。
Terragrunt をご利用の方は是非この機会に tfaction にも興味を持ってもらえると幸いです。

OpenTofu を使っているという方はまだまだ少ないとは思いますが、自分が当初思ってた以上に開発が活発で勢いがあるようですし、今後どうなるかはわかりませんね。
OpenTofu を使うということは Terraform Cloud は使えないと思うので、そうなると tfaction も一つの選択肢になるのではとポジティブに考えることにします。

自分は普段 Terragrunt や OpenTofu を使っていないのでもし何か気づいたことがあればフィードバックを下さい。よろしくお願いします。

https://github.com/suzuki-shunsuke/tfaction/discussions

Discussion