Tìm hiểu Code Style trong Terraform

Tìm hiểu Code Style trong TerraformCuongquach.com | Cùng tìm hiểu một số Code Stylesyntax đượ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é.

code-style-terraform

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" cho default = [] , type = "map" cho default = {} .
  • Khi định nghĩa thông tin biến variable nên để thứ tự các nội dung description, typedefault 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ột list 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ện if/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 đích if/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/

Previous articleEbook 11 điều cần biết khi thuê dịch vụ kiểm thử Pentest (PDF)
Next articleDownload VMware Workstation Pro 16 Full Key – Phần mềm ảo hóa quyền năng nhất
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !