1. Init and Get là gì?
Init và Get là hai lệnh cơ bản trong Terraform để cài đặt và tải các provider và module được sử dụng trong project, khởi tạo môi trường làm việc và tải về các plugin cần thiết cho provider đã được khai báo trong file cấu hình
2. Cú pháp khai báo.
terraform init
: lệnh này sẽ khởi tạo một thư mục.terraform
trong thư mục hiện tại và tải và cài đặt các provider và module được khai báo trong filemain.tf
của dự án. Lệnh này chỉ cần chạy một lần duy nhất để khởi tạo và cài đặt các yêu cầu của dự án. Nếu có thay đổi về các provider hay module thì cần chạy lại lệnh này để cập nhật lại.terraform get
: lệnh này sẽ tải các module được khai báo trong filemain.tf
và lưu trữ chúng trong thư mục.terraform/modules
. Lệnh này cũng có thể sử dụng với tùy chọn-update
để tải lại các module đã tồn tại và cập nhật chúng với phiên bản mới nhất.
Cả hai lệnh init
và get
đều là các lệnh quan trọng và cần thiết khi sử dụng Terraform để quản lý hạ tầng.
3. Các lưu ý khi sử dụng Init and Get.
Dưới đây là một số lưu ý khi sử dụng lệnh terraform init
và terraform get
trong Terraform:
Lưu ý khi sử dụng terraform init
:
- Lệnh
terraform init
được sử dụng để khởi tạo môi trường Terraform, bao gồm việc tải xuống các plugin cần thiết cho các provider, module và remote backend. - Cần sử dụng lệnh
terraform init
trước khi sử dụng các lệnh khác trong Terraform. - Nếu muốn sử dụng remote backend thì cần cung cấp các thông tin đăng nhập vào trong file
backend.tf
. - Nếu muốn sử dụng module được lưu trữ trên một git repository thì cần cung cấp đường dẫn tới repository đó trong file
main.tf
. - Nếu muốn sử dụng một phiên bản Terraform khác với phiên bản hiện tại, có thể cài đặt phiên bản đó bằng công cụ quản lý gói và sử dụng tùy chọn
-version
khi gọi lệnhterraform init
.
Lưu ý khi sử dụng terraform get
:
- Lệnh
terraform get
được sử dụng để tải xuống các module mà một configuration cần sử dụng. - Các module được khai báo trong file
main.tf
hoặcmodules.tf
và được liệt kê trong filerequirements.txt
. - Nếu module được lưu trữ trên một git repository thì cần cung cấp đường dẫn tới repository đó trong file
main.tf
. - Nếu sử dụng các module có phiên bản cố định, cần sử dụng file
requirements.lock
để đảm bảo các phiên bản module được sử dụng đúng như yêu cầu.
4. Một số ví dụ.
Ví dụ về Init và Get trong KVM:
- Khai báo provider KVM trong file cấu hình:
provider "libvirt" {
uri = "qemu:///system"
}
Chạy lệnh terraform init
để khởi tạo môi trường làm việc và tải về các plugin cần thiết:
terraform init
Chạy lệnh terraform get
để tải về các module và plugin được khai báo trong file cấu hình:
terraform get
Lệnh terraform init
và terraform get
được sử dụng để chuẩn bị môi trường làm việc cho các lệnh Terraform khác như terraform plan
hoặc terraform apply
.
Khi chạy lệnh terraform init
và terraform get
, có một số lưu ý sau đây cần lưu ý:
- Nếu cài đặt Terraform bằng package manager, thì Terraform sẽ được cài đặt trong thư mục
/usr/local/bin
trên hệ thống của bạn. Đảm bảo rằng đường dẫn này được thêm vào biến môi trường PATH để có thể chạy lệnh Terraform bất kỳ đâu trên hệ thống của bạn. - Nếu sử dụng Terraform phiên bản cũ, hãy đảm bảo rằng bạn đã cập nhật phiên bản mới nhất của Terraform.
- Nếu sử dụng provider từ bên thứ ba, hãy đảm bảo rằng provider này đã được cài đặt và đăng ký với Terraform.
- Khi sử dụng lệnh
terraform get
, Terraform sẽ tải về các plugin và module được khai báo trong file cấu hình. Đảm bảo rằng bạn có quyền truy cập Internet để tải về các plugin và module này. - Khi tải về các plugin và module, Terraform sẽ tạo một thư mục
.terraform
trong thư mục làm việc của bạn. Không bao giờ chỉnh sửa hoặc xóa thư mục này thủ công. Nếu cần, hãy chạy lệnhterraform init
để khởi tạo lại môi trường làm việc.
Ví dụ về Init and Get trong AWS:
Để sử dụng các module được chia sẻ từ Terraform Registry, ta cần sử dụng terraform init
để tải về các dependencies và plugins cần thiết. Ví dụ, ta muốn sử dụng module “vpc” từ Terraform Registry, ta có thể khai báo như sau:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "3.64.0"
}
}
}
provider "aws" {
region = "us-west-2"
}
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "3.0.0"
name = "my-vpc"
cidr = "10.0.0.0/16"
azs = ["us-west-2a", "us-west-2b", "us-west-2c"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]
enable_nat_gateway = true
single_nat_gateway = true
}
Sau đó, ta sử dụng terraform init
để tải về các dependencies và plugins cần thiết để sử dụng module “vpc” từ Terraform Registry:
$ terraform init
Initializing modules...
- vpc in .terraform/modules/vpc
Initializing the backend...
Initializing provider plugins...
- Finding latest version of hashicorp/aws...
- Installing hashicorp/aws v3.64.0...
- Installed hashicorp/aws v3.64.0 (signed by HashiCorp)
Terraform has been successfully initialized!
Sau khi terraform init
hoàn tất, ta sử dụng terraform get
để tải về các module đã khai báo:
$ terraform get
- module.vpc
Getting source "terraform-aws-modules/vpc/aws"
Initializing modules...
- module.vpc
Getting source "terraform-aws-modules/vpc/aws"
Lúc này, ta có thể sử dụng module “vpc” trong Terraform Configuration của mình.