Tìm hiểu Code Style trong Terraform – Cuongquach.com | Cùng tìm hiểu một số Code Style và syntax được Terraform khuyến nghị các lập trình viên/quản trị viên sử dụng khi code ngôn ngữ HCL cho Terraform nhé.
Contents
1. Indent Spacing (khoảng trắng)
Thay vì sử dụng 4 khoảng trắng thường thấy cho các thụt đầu dòng thì Terraform khuyến nghị bạn chỉ sử dụng 2 khoảng trắng để thụt đầu dòng trong ngôn ngữ HCL.
resource "aws_iam_role" "iam_role" { name = "${var.resource_name}-role" assume_role_policy = <<EOF { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Principal": { "Service": "ec2.amazonaws.com" }, "Effect": "Allow", "Sid": "" } ] } EOF }
2. Comment
Bạn có thể comment nội dung chú thích với 3 cú pháp :
- #
- //
- /* xxx /*
3. Resource Block Alignment
Các parameter trong một resource block nên được canh thẳng hàng ở phần =
. Bạn có thể chạy lệnh terraform fmt
để format lại file cấu hình cho mục tiêu này.
provider "aws" { access_key = var.aws_access_key secret_key = var.aws_secret_key region = "us-east-1" }
4. Variables config
- Một số lưu ý khi cấu hình phần
variable
trong Terraform . - Nên chỉ định loại dữ liệu biến nếu có sử dụng giá trị default tương ứng loại dữ liệu đó. Ví dụ:
type = "list"
chodefault = []
,type = "map"
chodefault = {}
. - Khi định nghĩa thông tin biến
variable
nên để thứ tự các nội dung description, type và default như dưới. - Nên luôn để thông tin
description
nhằm giúp người đọc hiểu ý nghĩa của biến đó.
variable "create_vpc" { description = "Controls if VPC should be created (it affects almost all resources)" type = bool default = true }
5. Output config
- Khuyến nghị đặt tên output có ý nghĩa với cú pháp như sau :
{name}_{attribute}
. Trong đó{name}
là tên resource (bỏ phần provider prefix) ví dụaws_subnet
thì {name} làsubnet
, {attribute} thuộc tính trả về của output của bạn.
Ví dụ:
output "security_group_id" { description = "The ID of the security group" value = "${element(concat(coalescelist(aws_security_group.this.*.id, aws_security_group.this_name_prefix.*.id), list("")), 0)}" }
- Nên đặt thêm thông tin
description
cho output. - Nếu
output
là mộtlist
thì nên đặt tên tiếng anh ở dạng số nhiều (plural name).
output "this_rds_cluster_instance_endpoints" { description = "A list of all cluster instance endpoints" value = ["${aws_rds_cluster_instance.this.*.endpoint}"] }
6. Quy hoạch tên file
Chúng ta nên quy hoạch các nội dung resource cấu hình theo loại resource đó, để tìm kiếm và nhận diện dễ hơn.
Ví dụ:
main.tf ami.tf autoscaling_group.tf cloudwatch.tf iam.tf launch_configuration.tf providers.tf s3.tf security_groups.tf sns.tf sqs.tf user_data.sh variables.tf
7. Các lưu ý khác
- Dùng kí tự “_” thay vì “–” khi đặt tên cho biến (variable), resource, output.
resource "aws_security_group" "security_group" {}
- Chỉ nên sử dụng chữ thường, không sử dụng chữ in hoa.
- Nếu bạn có sử dụng
#meta-argument
nhưcount
, thì nên để trên đầu và cách 1 khoảng trắng với các cấu hình còn lại.
Code đẹp:
resource "aws_instance" "example" { count = 2 # meta-argument first ami = "abc123" instance_type = "t2.micro" network_interface { # ... } lifecycle { # meta-argument block last create_before_destroy = true } }
Code xấu :
resource "aws_instance" "example" { ami = "abc123" instance_type = "t2.micro" count = 2 # meta-argument network_interface { # ... } lifecycle { # meta-argument block last create_before_destroy = true } }
- Nếu bạn sử dụng
count
để làm điều kiệnif/else
khởi tạo resource, thì khuyến khích nên sử dụng biến thông tin thể hiện rõ mục đíchif/else
Ví dụ:
locals { create_public_subnets = length(var.public_subnets) > 0 ? 1 : 0 } resource "aws_subnet" "public" { count = local.create_public_subnets }
- Không nên lặp tên loại resource trong resource name .
Code đẹp:
resource "aws_route_table" "public" {}
Code xấu:
resource "aws_route_table" "public_route_table" {} resource "aws_route_table" "public_aws_route_table" {}
Các bạn có những ý kiến đóng góp gì thì đại ngại comment bên dưới nhé.
Nguồn: https://cuongquach.com/