Professional Documents
Culture Documents
PNH DEVOPS PRO LAB 64 IaC Terraform
PNH DEVOPS PRO LAB 64 IaC Terraform
Học viện PNH: www.pnh.vn (Zalo: 0906289618 – 8A Tôn Thất Thuyết – Hà nội)
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
mkdir ec2terraform
cd ec2terraform
nano main.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.27"
}
}
provider "aws" {
profile = "default"
region = " ap-east-1"
# shared_credentials_file = “/home/ubuntu/.aws/credentials"
}
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
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 .