Source: HashiCorp Developer
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.
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ả.
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.
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"
}
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"
}
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"
...
}
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"
}
}
]
}
]
}
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"
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.
terraform init
: Khởi tạo môi trường Terraform và tải các Providers cần thiết.terraform plan
: Tạo bản kế hoạch về những thay đổi sẽ được thực hiện.terraform apply
: Thực thi kế hoạch, triển khai hoặc thay đổi hạ tầng theo cấu hình.terraform apply
.provider "aws" {
region = "us-west-1"
}
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}
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.