Terraform init, plan và apply – Bài 2

Bài viết này sẽ trình bày về workflow với Terraform: configuration, init, plan, destroy kèm ví dụ minh họa tạo một EC2 instance trên AWS.

Xem thêm:

Terraform và Infrastructure as Code (IAC) – Bài 1

1. Terraform Workflow

1.1. Terraform Configuration

Bước đầu tiên trong quy trình là Terraform Configuration. Tại đây, dev sẽ tạo ra các file configuration cho hạ tầng cần triển khai. Tất cả các tài nguyên như máy ảo (VMs), ổ đĩa (Disks), mạng (Networks)… đều sẽ được định nghĩa bằng ngôn ngữ HCL (HashiCorp Configuration Language).

1.2. Plan Infrastructure

Sau khi hoàn thành việc viết file cấu hình, bước tiếp theo là Plan Infrastructure.

Trước khi triển khai, Terraform cho phép kiểm tra và xem trước các thay đổi dự kiến thông qua lệnh terraform plan. Bằng cách này, bạn có thể xác nhận lại toàn bộ các thiết lập, phát hiện lỗi cú pháp hoặc logic và điều chỉnh nếu cần.

1.3. Deploy Infrastructure

Khi mọi thứ đã sẵn sàng, Terraform sẽ deploy các resource theo cấu hình đã định. Hệ thống sẽ tự động tạo, cập nhật hoặc xóa resource để khớp với file cấu hình.

2. Terraform Initialization

Terraform được chia thành nhiều bước: viết file cấu hình => terraform init => terrafom plan => terraform apply => terraform destroy.

Terraform Workflow

2.1. Terraform Init – Khởi tạo môi trường làm việc

Trước khi triển khai hạ tầng, bạn cần chạy terraform init để thiết lập thư mục làm việc. Lệnh này giúp:

  • Đánh dấu thư mục hiện tại là một dự án Terraform.
  • Tải xuống provider, modules và plugins cần thiết (hỗ trợ kết nối với AWS, GCP, Azure…).
  • Thiết lập backend để lưu trạng thái hạ tầng (state file). Backend chịu trách nhiệm lưu trữ thông tin trạng thái (state) của hạ tầng đã triển khai giúp theo dõi, quản lý các thay đổi và đảm bảo tính nhất quán của hạ tầng qua các lần triển khai sau này.
terraform init

Initializing the backend...

Initializing provider plugins...
- Finding latest version of hashicorp/aws...
- Installing hashicorp/aws v3.68.0...
- Installed hashicorp/aws v3.68.0 (signed by HashiCorp)

Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
...

2.2. Terraform Plan – Lập kế hoạch triển khai

Sau khi khởi tạo, chạy terraform plan để:

  • Đọc và phân tích các tệp cấu hình Terraform (VM, mạng, security groups, IP, và các thông số khác).
  • Hiển thị danh sách các thay đổi dự kiến (tạo, cập nhật, xóa tài nguyên). Bạn sẽ thấy danh sách các thay đổi dự kiến, từ việc tạo mới đến cập nhật hoặc thậm chí xóa bỏ các tài nguyên. Điều này cho phép bạn kiểm tra lại cấu hình, xác nhận rằng tất cả đều chính xác trước khi tiến hành bước triển khai thực tế.
terraform plan

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the
following symbols:
  + create

Terraform will perform the following actions:

  # aws_instance.hello will be created
  + resource "aws_instance" "hello" {
      + ami                                  = "ami-09dd2e08d601bff67"
      + arn                                  = (known after apply)
      ...
    }

Plan: 1 to add, 0 to change, 0 to destroy.

───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you
run "terraform apply" now.

2.3. Terraform Apply – Triển khai hạ tầng

Sau khi đã kiểm tra kỹ các thay đổi, sử dụng terraform apply để:

  • Triển khai các thay đổi, nếu cấu hình của bạn chỉ định tạo mới resource, chúng sẽ được tạo ra; nếu đã tồn tại, các tài nguyên đó sẽ được cập nhật theo đúng cấu hình mới.
  • Sau khi triển khai, file state sẽ được cập nhật để ghi nhận trạng thái hạ tầng sau khi triển khai. Terraform sẽ so sánh file state hiện tại với cấu hình mới và thực hiện các thay đổi cần thiết.
terraform apply

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the
following symbols:
  + create

Terraform will perform the following actions:

  # aws_instance.hello will be created
  + resource "aws_instance" "hello" {
      + ami                                  = "ami-09dd2e08d601bff67"
      + arn                                  = (known after apply)
      ...
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:

...
Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

aws_instance.hello: Creating...
aws_instance.hello: Still creating... [10s elapsed]
aws_instance.hello: Still creating... [20s elapsed]
aws_instance.hello: Still creating... [30s elapsed]
aws_instance.hello: Still creating... [40s elapsed]
aws_instance.hello: Creation complete after 42s [id=i-0c0285db1ffe968a2]

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

2.4. Terraform Destroy – Hủy bỏ hạ tầng

Khi cần xóa toàn bộ hạ tầng, chạy lệnh terraform destroy để:

  • Lệnh này sẽ đọc file state để xác định tất cả các resource đã được quản lý bởi Terraform, sau đó thực hiện việc hủy bỏ, xóa các resource đó khỏi môi trường đám mây.

Lưu ý: Hành động này không thể hoàn tác, nên cần kiểm tra kỹ trước khi thực hiện.

3. Ví dụ triển khai EC2 với Terraform

Để minh họa workfolw của Terraform, hãy xem ví dụ đơn giản về cách tạo một EC2 instance trên AWS:

Bước 1: Tạo Workspace và Viết Cấu Hình

  • Tạo thư mục: Tạo một thư mục (ví dụ: ec2) và bên trong tạo tệp main.tf.
  • Nội dung tệp main.tf:
provider "aws" {
  region = "us-west-2"
}

resource "aws_instance" "hello" {
  ami           = "ami-09dd2e08d601bff67"
  instance_type = "t2.micro"
  tags = {
    Name = "HelloWorld"
  }
}

Bước 2: Khởi tạo Workspace

Khởi tạo Terraform bằng lệnh:

terraform init

Quá trình này sẽ:

  • Tải xuống provider AWS và các plugin cần thiết.
  • Tạo thư mục .terraform chứa các file plugin và tạo tệp .terraform.lock.hcl để ghi nhận phiên bản provider.

Bước 3: Kiểm tra các tài nguyên được tạo

Xem trước kế hoạch triển khai:

terraform plan

Lệnh này sẽ hiển thị danh sách các thay đổi dự kiến (ví dụ: “Plan: 1 to add, 0 to change, 0 to destroy”) giúp bạn kiểm tra lại cấu hình và phát hiện lỗi nếu có. Có thể tăng tốc quá trình bằng cách sử dụng tham số -parallelism=n nếu số lượng tài nguyên lớn.

Bước 4: Triển khai tài nguyên

Triển khai hạ tầng:

terraform apply
  • Xác nhận: Terraform sẽ hiển thị lại danh sách thay đổi và yêu cầu bạn nhập “yes” để xác nhận triển khai.
  • Quá trình triển khai: Terraform sẽ tạo ra tài nguyên EC2 theo cấu hình, đồng thời cập nhật file terraform.tfstate để lưu trữ trạng thái hiện tại của hạ tầng.

Bước 5: Huỷ bỏ hạ tầng

terraform destroy

Cảm ơn bạn đã tham khảo trên ttnguyen.net

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em