Tạp chí Thợ Code

For Dummies: Terraform là gì? Dùng với AWS như thế nào?

I. Giới thiệu

画像が読み込まれない場合はページを更新してみてください。

Source: HashiCorp Developer

1. Terraform là gì?

Terraform là một công cụ mạnh mẽ do HashiCorp phát triển, giúp quản lý cơ sở hạ tầng dưới dạng mã (Infrastructure as Code - IaC). Với Terraform, thay vì cấu hình thủ công hạ tầng, bạn có thể viết mã để mô tả cách xây dựng và quản lý các tài nguyên hạ tầng, từ đó dễ dàng tái sử dụng, mở rộng và quản lý sự thay đổi.

2. AWS là gì?

Amazon Web Services (AWS) là một trong những nền tảng dịch vụ đám mây phổ biến nhất hiện nay, cung cấp hơn 200 dịch vụ từ máy chủ ảo, lưu trữ, đến cơ sở dữ liệu, trí tuệ nhân tạo, và phân tích dữ liệu. AWS giúp doanh nghiệp xây dựng và mở rộng hạ tầng một cách linh hoạt, nhanh chóng và hiệu quả.

3. Tại sao nên kết hợp Terraform và AWS?

Khi kết hợp Terraform và AWS, bạn sẽ tận dụng được sức mạnh của cả hai: Terraform giúp tự động hóa việc quản lý hạ tầng trên nền tảng đám mây AWS, cho phép người dùng nhanh chóng triển khai, thay đổi, và mở rộng hạ tầng mà không cần can thiệp thủ công. Terraform còn giúp giảm thiểu rủi ro lỗi do con người, đảm bảo hạ tầng được đồng bộ và có thể dễ dàng rollback khi cần.

II. Các thành phần và khái niệm chính trong Terraform AWS

1. Providers

Providers là trung tâm của Terraform, cho phép nó tương tác với các dịch vụ của bên thứ ba. AWS Provider giúp Terraform kết nối và quản lý các tài nguyên trên AWS như EC2, S3, VPC,... Việc cấu hình AWS Provider rất đơn giản, bạn chỉ cần cung cấp các thông tin xác thực (credentials) như Access Key và Secret Key của tài khoản AWS.

provider "aws" {
  region = "us-west-1"
}

2. Resources

Tài nguyên (Resources) là các đối tượng thực tế mà bạn tạo và quản lý trên AWS, ví dụ như EC2 instance, S3 bucket, hay VPC. Tài nguyên là khối xây dựng cơ bản nhất trong file cấu hình Terraform.

Ví dụ tạo EC2 instance:

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

3. Modules

Là một nhóm các file cấu hình có thể tái sử dụng được, giúp bạn quản lý các khối cấu hình phức tạp và giảm thiểu mã trùng lặp. Bằng cách sử dụng modules, bạn có thể tổ chức mã Terraform một cách rõ ràng và dễ bảo trì.

Ví dụ sử dụng module:

module "vpc" {
  source = "terraform-aws-modules/vpc/aws"
  version = "3.0.0"
  ...
}

4. State

Terraform State lưu trữ thông tin về các tài nguyên mà nó quản lý. Đây là thành phần quan trọng giúp Terraform theo dõi trạng thái hiện tại của hạ tầng và đối chiếu với file cấu hình để thực hiện các thay đổi cần thiết.

画像が読み込まれない場合はページを更新してみてください。

Khi bạn chạy terraform apply, Terraform tạo hoặc cập nhật file state để theo dõi trạng thái hiện tại của hạ tầng.

Ví dụ: Khi bạn tạo một EC2 instance bằng Terraform, thông tin chi tiết của instance này sẽ được lưu vào file state (terraform.tfstate).

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

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

Sau khi chạy terraform apply, một file terraform.tfstate sẽ được tạo ra, lưu trạng thái của EC2 instance này, chẳng hạn như địa chỉ IP, ID instance, v.v. Terraform dựa vào file state để biết tài nguyên nào cần tạo mới hoặc cập nhật.

State File (terraform.tfstate)

{
  "resources": [
    {
      "type": "aws_instance",
      "name": "example",
      "instances": [
        {
          "attributes": {
            "ami": "ami-0c55b159cbfafe1f0",
            "instance_type": "t2.micro",
            "private_ip": "10.0.0.1",
            "public_ip": "3.101.23.14",
            "id": "i-1234567890abcdef"
          }
        }
      ]
    }
  ]
}

5. Variables

Giúp bạn làm cho cấu hình của mình linh hoạt hơn bằng cách định nghĩa giá trị thay đổi trong các môi trường khác nhau hoặc giữa các tài nguyên

File variables.tf:

variable "instance_type" {
  description = "Instance type for EC2 instance"
  default     = "t2.micro"
}

variable "aws_region" {
  description = "AWS Region"
  default     = "us-west-2"
}

File main.tf:

provider "aws" {
  region = var.aws_region
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = var.instance_type
}

Nếu không truyền giá trị, Terraform sẽ sử dụng các giá trị mặc định trong file variables.tf.

terraform apply -var="instance_type=t2.medium" -var="aws_region=us-east-1"

6. Outputs

Là các giá trị bạn có thể lấy ra sau khi Terraform hoàn thành quá trình triển khai, ví dụ như địa chỉ IP của EC2 instance hay tên của S3 bucket.

File main.tf:

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

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

output "instance_public_ip" {
  description = "The public IP address of the EC2 instance"
  value       = aws_instance.example.public_ip
}

Sau khi chạy terraform apply, bạn sẽ thấy output như sau:

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Outputs:

instance_public_ip = "3.101.23.14"

Output này giúp bạn dễ dàng lấy thông tin cần thiết mà không phải tìm kiếm thủ công trong file state hoặc trên AWS Console.

III. Cách Terraform hoạt động với AWS

1. Quy trình làm việc với Terraform
  • Viết file cấu hình: Đầu tiên, bạn sẽ viết file cấu hình Terraform với định dạng HCL (HashiCorp Configuration Language) để mô tả hạ tầng bạn muốn triển khai.
  • Thực hiện lệnh terraform init: Khởi tạo môi trường Terraform và tải các Providers cần thiết.
  • Chạy lệnh terraform plan: Tạo bản kế hoạch về những thay đổi sẽ được thực hiện.
  • Chạy lệnh terraform apply: Thực thi kế hoạch, triển khai hoặc thay đổi hạ tầng theo cấu hình.
  • Cập nhật hạ tầng: Nếu cần thay đổi, chỉ cần cập nhật file cấu hình và chạy lại terraform apply.
2. Ví dụ triển khai hạ tầng trên AWS bằng Terraform
provider "aws" {
  region = "us-west-1"
}

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

IV. Lợi ích của việc sử dụng Terraform với AWS

  1. Tự động hóa toàn bộ quá trình triển khai hạ tầng Terraform cho phép bạn tự động hóa hoàn toàn việc quản lý và triển khai các tài nguyên hạ tầng trên AWS. Điều này giúp tiết kiệm thời gian và giảm thiểu rủi ro từ các thao tác thủ công.
  2. Quản lý đa vùng và đa tài khoản Terraform cho phép quản lý các tài nguyên hạ tầng trên nhiều vùng (region) và tài khoản AWS khác nhau một cách dễ dàng.
  3. Khả năng mở rộng Với Terraform, bạn có thể dễ dàng mở rộng hạ tầng mà không cần lo lắng về sự phức tạp của việc quản lý hạ tầng lớn.
  4. Dễ dàng rollback Terraform cung cấp khả năng theo dõi và quản lý sự thay đổi của hạ tầng, giúp bạn có thể quay lại trạng thái trước đó nếu cần thiết.

Terraform là một công cụ quản lý hạ tầng mạnh mẽ và linh hoạt, đặc biệt hữu ích khi làm việc với AWS. Nó giúp bạn tự động hóa, quản lý và tối ưu hóa việc triển khai hạ tầng đám mây một cách hiệu quả, đồng thời giảm thiểu lỗi và tiết kiệm thời gian. Trong bối cảnh xu hướng sử dụng IaC ngày càng phát triển, Terraform sẽ tiếp tục đóng vai trò quan trọng trong việc quản lý hệ thống hạ tầng phức tạp trên AWS và các nền tảng đám mây khác.

Biên soạn: Tí Dev.

Hiệu đính: Anh Dũng.