Tại sao sử dụng Terraform
Hiểu đơn giản, terraform ra đời giúp giải quyết các vấn đề của phương pháp manual (truyền thống), như là:
- tốc độ
- sai sót khi làm bằng cách truyền thống manual
- sự nhất quán
- không thể tái sử dụng trong các dự án khác
- tăng tốc độ triển khai trong dự án tiếp theo của công ty
Thành phần chính của terraform gồm 1 vài thứ như sau
- Template files (.tf) : tệp cấu hình viết bằng HCL
- providers : dùng để tương tác với APIs bên ngoài
- resources : định nghĩa bất cứ mọi service
- Terraform cli : các tập lệnh như terraform init, terraform apply, terraform plan
- State files : file quản lý trạng thái cơ sở hạ tầng đã được tạo
- Variable : đặt biến trong terraform
- Outputs : là chất keo kết nối giữa các module với nhau
Các bước triển khai terraform
Init -> Plan -> Apply -> Destroy
- Init : chuẩn bị môi trường bằng cách khởi tạo terraform. Terraform sẽ load toàn bộ các plugin, library cần thiết để chúng ta làm việc với cloud provider
- planning : xác định và lên kế hoạch những gì sẽ được tạo, thay đổi hoặc xoá bỏ
- apply : sau khi đã xác định các thay đổi ở bước plan, áp dụng thay đổi trên infra structore
- destroy : xoá các resource không còn sử dụng. Thường dùng cho môi trường dev, stg và prod dùng lệnh apply
Để cài đặt Terraform
Thứ nhất, cần cài đặt AWS CLI
Sau khi cài đặt xong, dùng lệnh aws —version
để kiểm tra nhé
Download và cài đặt terraform
Link download : https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli
- Note : vì mình dùng máy MacBook nên chọn download bằng Homebrew
Cài đặt Terraform plugin cho VScode
Có 2 plugin này rất thuận tiện cho việc viết code trên terraform
- https://prnt.sc/MXGLPNH6bYuG
- https://prnt.sc/SwXoqP3YDQsw
Thực hành đơn giản với Terraform
Lần lượt chạy các lệnh sau
- terrform init
- terraform plan -auto-approve
- terraform apply -auto-approve
Kết quả : https://prnt.sc/LHnOMIqior1i
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.16"
}
}
required_version = ">= 1.2.0"
}
provider "aws" {
region = "us-east-1"
profile = "caeruxlab"
}
resource "aws_instance" "web" {
ami = "ami-0c24eaf3d1fc176f0"
instance_type = "t3.micro"
tags = {
Name = "web01"
}
}
Và phần tiếp theo là những concept chính của terraform, mà chắc chắn bạn sẽ cần sử dụng trong dự án!