Monday, January 20, 2025

[Terraform] Lesson 9 – Init and Get

-

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 file main.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 file main.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 initget đề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 initterraform 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ệnh terraform 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ặc modules.tf và được liệt kê trong file requirements.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 initterraform 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 initterraform 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ệnh terraform 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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories