You are on page 1of 5

PNH DEVOPS PRO 2022

Học viện PNH: www.pnh.vn (Zalo: 0906289618 – 8A Tôn Thất Thuyết – Hà nội)

LAB: InfraStructure as Code - IaC Terraform


1 IaC : Là khái niệm mô tả việc DevOps tự chuẩn bị máy chủ, kết nối mạng… bằng cách viết ra các dòng
code như khi lập trình. Phải có Cloud sẵn sàng nhận các dòng lệnh đó để chuẩn bị hạ tầng máy chủ và
mạng.
Ví dụ sau đây: Một máy ubuntu đã cài giao diện lệnh aws cli có thể chạy một bash shell để tạo máy ảo
EC2.

Trông rất giống khái niệm IaC tuy nhiên cách làm này mất rất nhiều công sức trong cả quá trình viết bash
shell IaC cũng như bảo trì, tái sử dụng Code sau này.
2 Cả Ansible và Terraform đều cho phép thực hiện đoạn Code trên bằng một file text YAML (ansible) hoặc
.tf (terraform)
DevOps không cần phải lo việc kiểm tra trạng thái của từng resource để thực hiện bước tiếp theo.
3 Sự khác nhau giữa Ansible và Terraform nằm ở cách tiếp cận thực hiện công việc:
- Ansible: Procedural code : Mô tả các thủ tục để thực hiện cấu hình, chuẩn bị máy chủ… để cho
ra kết quả. Người dùng chịu trách nhiệm về các bước thực hiện và kết quả cuối cùng.
- Terraform: Declarative code: Định nghĩa luôn trạng thái cuối cùng (kết quả) của hạ tầng. Nhìn
vào Code biết luôn kết quả cuối cùng.
4 Về ứng dụng thực tiễn: Cả hai Tool đều có thể làm các chức năng tương tự nhau, nhưng phù hợp nhất:
- Ansible: Dùng để cấu hình các máy chủ đã có sẵn (VD do Terraform chuẩn bị) hoặc để deploy
code lên máy chủ.
- Terraform: Dùng để chuẩn bị trước hạ tầng máy chủ, PVC, Data store trên các nền tảng Cloud
(AWS, Azure, GCP, VMWARE)
5 Để so sánh kỹ hơn, xem xét ví dụ sau: Cần deploy 10 máy ảo EC2 thì Ansible và Terraform sẽ như sau:

6 Nhưng khi muốn tăng lên 15 máy ảo EC2, thì Terraform chỉ việc tăng lên 15 và chạy cập nhật, còn
Ansible nếu tăng lên 15 mà chạy lại thì sẽ có tổng 25 máy ảo EC2 do nó sẽ Deploy thêm 15 máy nữa.
Tất nhiên sẽ có cách để xử lý cho Ansible, nhưng sẽ phức tạp và năng suất thấp.
7
Sau khi viết Code IAC, cài đặt Terraform providers , chạy lệnh Plan để xem trước và Apply các thay đổi
8 Các bước cài đặt Terraform: (Chức năng aws tương đương terraform là AWS CloudFormation)
Link hướng dẫn cài terraform: https://learn.hashicorp.com/tutorials/terraform/install-cli

Chuẩn bị máy EC2 và tiến hành cài đặt:


curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -

sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs)


main"

sudo apt-get update && sudo apt-get install terraform


Kiểm tra lại: terraform --version
(hoặc cài sudo snap install terraform –classic)
Với máy chạy Windows: download Terraform.exe về và Copy vào thư mục C:\Windows\System32
9
Cài đặt AWS CLI lên máy EC2 ubuntu
Terraform sử dụng chung file cấu hình với aws cli
Tạo thư mục: mkdir -p ~/aws
cd ~/aws
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
sudo apt install unzip
unzip awscliv2.zip

sudo apt install awscli


sudo ./aws/install
aws --version
Đến đây đăng nhập aws cli trực tiếp gõ lệnh:
aws configure
Chú ý: Vào AWS -> IAM chọn user -> Security Credential để lấy Access Key và Secret mới nếu quên
Default region name [None]: ap-east-1
Default output format [None]:
Sau khi đăng nhập thì xem file cridentials mới được tạo ra:
cat /home/ubuntu/.aws/credentials
File này sẽ được Terraform (cũng như aws cli) sử dụng để đăng nhập vào AWS tạo EC2, VPC thay cho
người dùng
10 Tạo thư mục chứa Code để sử dụng Terraform deploy máy ảo EC2

mkdir ec2terraform
cd ec2terraform

nano main.tf

terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.27"
}
}

required_version = ">= 0.14.9"


}

provider "aws" {
profile = "default"
region = " ap-east-1"
# shared_credentials_file = “/home/ubuntu/.aws/credentials"
}

resource "aws_instance" "app_server" {


ami = "ami-0f2ea204cd818ce8e"
instance_type = "t3.micro"

tags = {
Name = "EC2terraform"
}
}
11 Sau khi lưu file main.tf thì cần chạy khởi tạo:
terraform init
Quá trình init sẽ download và cài đặt Providers được định nghĩa trong file main.tf
Providers trong trường hợp này là aws

Nếu khi viết Code trong file main.tf bị xộc xệch hàng lối thì có thể Format lại cho đẹp:
terraform fmt
Kiểm tra lại cú pháp viết trong file main.tf có chuẩn không bằng lệnh:
terraform validate
12 Gõ lệnh kiểm tra xem nếu chạy file main.tf thì sẽ tạo ra những resources nào trên AWS:
terraform plan

Sẽ thấy Terraform liệt kê rất nhiều thông số của EC2 nhưng hiện tại chưa có giá trị vì chưa thực sự chạy
lệnh apply để tạo ra EC2

terraform apply

Chọn: Yes và quá trình tạo EC2 sẽ diễn ra.


Kiểm tra lại kết quả đã tạo ra:
terraform show
cat terraform.tfstate lưu lại trạng thái hiện trạng của resources để so sánh khi có thay đổi

Xem trực quan mối quan hệ giữa các resources bằng lệnh:
terraform graph | dot -Tsvg > graph.svg
Sau đó copy về máy laptop để xem:
scp -i Front2.pem ubuntu@16.162.187.68:/home/ubuntu/terraform/graph.svg .

Mở xem file để thấy giản đồ


Truy cập vào AWS và kiểm tra EC2 vừa tạo.
Xóa infrastructure vừa tạo :
terraform destroy
Chọn yes, sau đó chạy xong thì kiểm tra lại AWS thấy máy ảo EC2 đã bị Terminated

Nếu chỉ muốn xóa 1 resource thì có thể chạy lệnh:


terraform destroy --target aws_instance.app_server
Kiểm tra lại state file:
cat terraform.tfstate
cat terraform.tfstate.backup
13
Ý nghĩa các file
File main.tf: File chạy chính
File outputs.tf : Gửi giá trị các biến ra để các phần code khác đọc được.
File variables.tf : Chứa danh sách tên biến và giá trị mặc định của biến
File terraform.tfvars : Chứa giá trị các biến
File terraform.tfstate : Lưu giữ hiện trạng của dự án terraform
Folder modules: là các thư mục chứa các file tạo Resource, phân chia để dễ quản lý và tái sử dụng

You might also like