📐

ファイル名=リソース名に強制するtflintをつくった

2024/08/15に公開

https://github.com/shoppingjaws/tflint-ruleset-file-name-is-resource-name/tree/v1.0.0

弊社のTerraform環境の命名規則が運用しやすいお気に入りの規則でしたが、特にtflintに定義されていなかったので、つくりました。

  • variable,locals,output,provider,moduleはすべてvariable.tf,locals.tf,output.tf,provider.tf,module.tfに定義する
  • dataはすべてdata_<data_type>.tfに定義する
  • resourceはすべて<resource_type>.tfに定義する

インストール方法

.tflint.hcl
plugin "file-name-is-resource-name" {
  enabled = true
  source  = "github.com/shoppingjaws/tflint-ruleset-file-name-is-resource-name"
  version = "0.1.12"
}

設定

各種定義するべきファイル名の規則は上書き可能です

.tflint.hcl
rule "file_name_is_resource_name" {
  enabled = true
  module_file_name_pattern = "^main.tf$"
  variable_file_name_pattern= "^variable.tf$"
  locals_file_name_pattern= "^locals.tf$"
  provider_file_name_pattern= "^provider.tf$"
  output_file_name_pattern= "^output.tf$"
  module_file_name_pattern= "^module.tf$"
  data_file_name_pattern= "^data_.*.tf$"
}

この規則のメリデメ

メリット

  • 検索しやすい
    vscodeなどでファイル名を指定して検索する機能を使うと、リソース名で絞り込みやすい
  • レビューしやすい
    作成者の意図や癖が入らず、宣言が一意に定まるため揺れが減る

デメリット

  • tfstateを分割していないと、1ファイルに大量のリソースが宣言されることになる

Discussion