Complete Terraform - part 3

Complete Terraform - part 3

·

6 min read

Cách gắn thẻ tài nguyên AWS hiệu quả trong Terraform

How to tag AWS resources in Terraform effectively

Gắn thẻ tài nguyên AWS là một phương pháp hay để tổ chức, quản lý và theo dõi cơ sở hạ tầng AWS của bạn. Terraform cung cấp các tính năng mạnh mẽ để hỗ trợ việc gắn thẻ hiệu quả. Dưới đây là một số nguyên tắc hay nhất để gắn thẻ tài nguyên AWS trong Terraform:

1. Xác định Quy tắc Đặt Tên Nhất Quán:

  • Thiết lập quy tắc đặt tên rõ ràng và nhất quán cho thẻ của bạn trên toàn bộ cơ sở hạ tầng. Điều này cải thiện khả năng đọc, khả năng tìm kiếm và khả năng quản lý.

  • Sử dụng tên mô tả phản ánh mục đích hoặc chức năng của tài nguyên.

  • Cân nhắc sử dụng cấu trúc phân cấp với dấu phân cách (ví dụ: /) để tổ chức thẻ một cách logic.

  •   locals {
        app           = "aws-tags"
        owner         = "tagging-team"
        cost_centre   = "platform"
        slack_channel = "#help-tagging"
      }
    
      provider "aws" {
        region = "us-east-1"
      }
    
      resource "aws_security_group" "allow_tls" {
        name        = local.app
        description = "Allow TLS inbound traffic"
    
        ingress {
          from_port = 443
          to_port   = 443
          protocol  = "tcp"
        }
    
        egress {
          from_port        = 0
          to_port          = 0
          protocol         = "-1"
          cidr_blocks      = ["0.0.0.0/0"]
          ipv6_cidr_blocks = ["::/0"]
        }
    
        tags = {
          Name          = "my security group"
          app           = local.app
          owner         = local.owner
          cost_centre   = local.cost_centre
          slack_channel = local.slack_channel
        }
      }
    

2. Chuẩn hóa Các Thẻ Cốt lõi:

  • Xác định một tập hợp thẻ cốt lõi có liên quan đến hầu hết hoặc tất cả tài nguyên của bạn. Những thẻ này có thể bao gồm:

    • Name: Tên mô tả cho tài nguyên.

    • Environment: Môi trường mà tài nguyên thuộc về (ví dụ: dev, test, prod).

    • Project: Dự án mà tài nguyên thuộc về.

    • Cost Center: Trung tâm chi phí chịu trách nhiệm cho tài nguyên.

    • Owner: Nhóm hoặc cá nhân chịu trách nhiệm cho tài nguyên.

  • Áp dụng các thẻ cốt lõi này bằng cách sử dụng các mô-đun hoặc công cụ kiểm tra linting.

3. Tận dụng Mô-đun để Tái sử dụng:

  • Tạo các mô-đun Terraform bao gồm các thành phần cơ sở hạ tầng và định nghĩa trước các thẻ cốt lõi trong mô-đun.

  • Điều này đảm bảo gắn thẻ nhất quán trên tất cả các triển khai của mô-đun.

4. Sử dụng Trạng thái Terraform để Tham khảo:

  • Trạng thái Terraform lưu trữ thông tin về tài nguyên của bạn, bao gồm thẻ của chúng.

  • Bạn có thể sử dụng lệnh terraform state show để xem các thẻ hiện có và có thể tham chiếu chúng một cách linh hoạt trong các tài nguyên khác.

Định nghĩa nhãn như biến: Bắt đầu bằng cách định nghĩa nhãn như biến trong cấu hình Terraform của bạn. Điều này cho phép bạn quản lý và cập nhật nhãn một cách nhất quán trên tất cả các nguồn tài nguyên.

variable "tags" {
  type    = map(string)
  default = {
    Environment = "Production"
    Project     = "MyProject"
    Owner       = "John Doe"
  }
}

Gán nhãn cho nguồn tài nguyên: Áp dụng các nhãn đã được định nghĩa cho các nguồn tài nguyên AWS của bạn bằng cách sử dụng đối số tags. Bạn có thể sử dụng biến được định nghĩa ở bước trước để gán nhãn.

resource "aws_instance" "example" {
  ami           = "ami-0c94855ba95c71c99"
  instance_type = "t2.micro"

  tags = var.tags
}

Ví dụ, nếu bạn có một VPC và các instance EC2 trong VPC đó, bạn có thể kế thừa nhãn từ VPC và áp dụng cho các instance EC2.

resource "aws_vpc" "example" {
  cidr_block = "10.0.0.0/16"

  tags = var.tags
}

resource "aws_instance" "example" {
  ami           = "ami-0c94855ba95c71c99"
  instance_type = "t2.micro"
  vpc_id        = aws_vpc.example.id

  tags = aws_vpc.example.tags
}

Bằng cách kế thừa nhãn từ các nguồn tài nguyên cấp cao hơn, bạn có thể tránh việc sao chép nhãn thủ công và đảm bảo tính nhất quán.

Default Tags at the provider level

Default Tags at the provider level là một tính năng trong Terraform cho phép bạn tự động gắn thẻ tất cả các tài nguyên được tạo ra bởi một nhà cung cấp cụ thể với một tập hợp thẻ được xác định trước. Điều này giúp bạn dễ dàng áp dụng các thẻ nhất quán cho tất cả các tài nguyên trong cơ sở hạ tầng của bạn mà không cần phải thêm thẻ thủ công cho từng tài nguyên riêng lẻ.

Cách sử dụng Thẻ mặc định:

Để sử dụng thẻ mặc định, bạn cần thêm khối tags vào cấu hình nhà cung cấp Terraform của mình. Bên trong khối tags, bạn có thể khai báo các thẻ mà bạn muốn áp dụng cho tất cả các tài nguyên được tạo ra bởi nhà cung cấp đó

provider "aws" {
  region = "us-east-1"
  default_tags {
    tags = {
      app           = "aws-tags"
      owner         = "tagging-team"
      cost_centre   = "platform"
      slack_channel = "#help-tagging"
    }
  }
}

resource "aws_security_group" "allow_tls" {
  name        = "aws-tags"
  description = "Allow TLS inbound traffic"

  ingress {
    from_port = 443
    to_port   = 443
    protocol  = "tcp"
  }

  egress {
    from_port        = 0
    to_port          = 0
    protocol         = "-1"
    cidr_blocks      = ["0.0.0.0/0"]
    ipv6_cidr_blocks = ["::/0"]
  }
}

Lợi ích của Thẻ mặc định:

  • Tăng tính nhất quán: Thẻ mặc định giúp đảm bảo rằng tất cả các tài nguyên trong cơ sở hạ tầng của bạn đều được gắn thẻ nhất quán, giúp dễ dàng tìm kiếm và quản lý tài nguyên.

  • Tiết kiệm thời gian: Thẻ mặc định giúp bạn tiết kiệm thời gian vì bạn không cần phải thêm thẻ thủ công cho từng tài nguyên riêng lẻ.

  • Giảm lỗi: Thẻ mặc định giúp giảm nguy cơ mắc lỗi do con người do bạn không cần phải nhớ thêm thẻ cho từng tài nguyên.

Thêm ví dụ:

provider "aws" {
  region = "us-west-2"

  default_tags {
    tags = {
      Environment = "Production"
      Project     = "MyProject"
      Owner       = "Kilo"
    }
  }
}

resource "aws_instance" "example" {
  ami           = "ami-0c94855ba95c71c99"
  instance_type = "t2.micro"
}

Trong ví dụ này, chúng ta đã định nghĩa provider AWS và đã thiết lập default tags cho provideer này. Các nhãn đã được xác định, chẳng hạn như Environment, ProjectOwner, sẽ được tự động áp dụng cho tất cả các nguồn tài nguyên mới được tạo ra trong phạm vi của nhà cung cấp AWS.

Vì vậy, khi chúng ta triển khai một instance EC2 mới thông qua resource aws_instance, các nhãn mặc định sẽ tự động được gắn vào instance đó.