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:
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
.
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