The naming convention for our Terraform environment was one of our favorites because it clearly indicated the declaration location.
So, I built my favorite terraform coding rule via tflint.
The rule is very simple.
Every resource must defined in the its resource-name file.
-
variable
,locals
,output
,provider
,module
are all defined invariable.tf
,locals.tf
,output.tf
,provider.tf
,module.tf
-
data
are all defined indata_<data_type>.tf
-
resource
are all defined in<resource_type>.tf
Installation
.tflint.hcl
plugin "file-name-is-resource-name" {
enabled = true
source = "github.com/shoppingjaws/tflint-ruleset-file-name-is-resource-name"
version = "1.0.0"
}
Settings
File name rules that should be defined can be overwritten
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$"
}
Pros and cons of this rule
Pros
- Easy to search
Using the function to search by file name in vscode, etc., makes it easy to narrow down by resource name - Easy to review
The creator’s intentions and habits are not included, and the declaration is uniquely determined, reducing fluctuations
Cons
- If tfstate is not divided, a large number of resources will be declared in one file
I’d be happy to receive feedback
Source link
lol