エキサイト株式会社の@mthiroshiです。
運用している Terraform に TFLint を導入してみましたので、設定の方法や lint ルールの一例について紹介します。
TFLint とは
TFLint は、Terraform の lintです。 github.com
HashiCorp 非公式のサードパーティツールですが、Terraform の公式 Style Guide の中で紹介されています。 developer.hashicorp.com
Use a linter such as TFLint to enforce your organization's own coding best practices.
TFLint の設定
運用中の Terraform プロジェクトは、Docker で Terraform を実行していました。 TFLint の導入も Docker で行いました。
Docker の設定
まず、compose.yaml を説明します。
services: terraform: image: hashicorp/terraform:1.7.5 volumes: - .:/terraform-demo working_dir: /terraform-demo entrypoint: ["/bin/ash"] tty: true tflint: image: ghcr.io/terraform-linters/tflint volumes: - .:/terraform-demo working_dir: /terraform-demo entrypoint: ["/bin/sh"] tty: true
ディレクトリ terraform-demo/
以下で Terraform コードを管理します。
Terraform を実行する際は、下記のコマンドで Docker 環境にログインします。
docker compose up -d terraform docker compose exec terraform /bin/ash
TFLint の設定
続いて、TFLint を実行するために .tflint.hcl
に設定を記述していきます。
公式の設定を参考にしています。
plugin "terraform" { enabled = true preset = "recommended" } plugin "aws" { enabled = true version = "0.31.0" source = "github.com/terraform-linters/tflint-ruleset-aws" }
AWS を使っているプロジェクトなので、AWS 用のプラグインを有効にします。
TFLint を実行する
下記で TFLint を実行します。
docker compose run --rm tflint -c "\ tflint --init;\ tflint --recursive;\ "
実行結果の例です。
docker compose run --rm tflint -c "\ tflint --init;\ tflint --recursive;\ " Installing "aws" plugin... Installed "aws" (source: github.com/terraform-linters/tflint-ruleset-aws, version: 0.31.0) .... Warning: Missing version constraint for provider "aws" in `required_providers` (terraform_required_providers) on main.tf line 107: 107: resource "aws_route53_record" "record" { Reference: https://github.com/terraform-linters/tflint-ruleset-terraform/blob/v0.7.0/docs/rules/terraform_required_providers.md
terraform_required_providers
のルールについて警告されました。
このルールは、Provider にはバージョンを必須で指定することを求めています。
内容の詳細は、表示されたリンクから確認できます。
次に、--fix
オプションをつけて実行します。
--fix
オプションでは、いくつかのルールを自動で修正してくれます。
docker compose run --rm tflint -c "\ tflint --init;\ tflint --recursive --fix;\ "
--fix
オプションで適用されたルールの例です。
terraform_deprecated_index
terraform_unused_declarations
terraform_deprecated_index
のルールは、配列参照のレガシーな記法を指摘するものです。
--fix
オプションでは、自動で角括弧の記法に修正します。
terraform_unused_declarations
のルールは、使用されていない変数の宣言を指摘するものです。
--fix
オプションでは、自動で変数の宣言を削除します。
注意点として、自動修正の内容によっては構文エラーが起きます。
例えば、 terraform_unused_declarations
の場合、module で定義していた使われていない引数が削除されることがあります。module を参照していた側では、削除された引数を残したままになるため、構文エラーになります。
自動適用後の terraform plan
の確認を行いましょう。
最後に
Docker 運用の Terraform プロジェクトに対する TFLint の設定と lint ルールの一例を紹介しました。 運用中のコードに対して lint を実行すると、様々な警告が指摘されると思います。 修正によってはエラーが起きていることがあるので、確認をしながら修正しましょう。
参考になれば幸いです。
採用アナウンス
エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しております。長期インターンも歓迎していますので、興味があれば連絡いただければと思います。
募集職種一覧はこちらになります!(カジュアル面談もぜひ!) www.wantedly.com