- vừa được xem lúc

Terraform Series - Phần 2 - Terraform CLI

0 0 25

Người đăng: Eri Huỳnh

Theo Viblo Asia

Cài đặt Terraform

Hashicorp distribute Terraform như một binary package. Vì thế mình có thể cài đặt thông qua cách sử dụng các package manager, hoặc cài đặt manual. Mình sẽ giới thiệu một số cách cài đặt phổ biến.

Homebrew trên MacOS

  • Cài đặt HashiCorp tab package

    	brew tap hashicorp/tap
    
  • Cài đặt Terraform CLI package

    brew install hashicorp/tap/terraform
    
  • Update latest version Terraform

    brew update
    brew upgrade hashicorp/tap/terraform
    
  • Kiểm tra cài đặt

    terraform -help
    

Chocolatey trên Windows

  • Cài đặt Terraform CLI package

    choco install terraform
    
  • Kiểm tra cài đặt

    terraform -help
    

Ubuntu/Debian

  • Cập nhật hệ thống, và các packages liên quan để chuẩn bị cho phần cài đặt terraform

    sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl
    
  • Thêm HashiCorp GPG key

    curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
    
  • Tải về HashiCorp Linux repository

    sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
    
  • Cài đặt Terraform CLI package

    sudo apt-get update && sudo apt-get install terraform
    
  • Kiểm tra cài đặt

    terraform -help
    

Ngoài ra còn có các cách cài đặt thủ công khác. Xem chi tiết tại: Terraform CLI Install

Terraform CLI Commands

Để xem danh sách các commands có trong terraform có thể dùng cmd terraform -help . Kết quả sẽ như sau:

Terraform Init

  • Đây là một lệnh bắt buộc cần thực hiện đầu tiên để khởi tạo một Terraform Project.

  • Sau khi cài đặt Terraform CLI, mình tiến hành tạo thư mục Root cho project, tạo file main.tf và tiến hành thêm một số config vào. Mình chưa cần quan tâm nội dung chi tiết của file.

    //main.tf terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 3.0" } }
    }
    # Configure the AWS Provider
    provider "aws" { region = "us-east-1"
    }
    # Create a VPC
    resource "aws_vpc" "example" { cidr_block = "10.0.0.0/16"
    }
    
  • Tiến hành run CMD

    terraform init
    
  • Khi thực thi lệnh Terraform sẽ tiến hành các bước sau:

    1. Đầu tiên, Terraform sẽ đọc configuration file (file main). Với những plugins được sử dụng sẽ tiến hành cài đặt (AWS 3.55 provider)
    2. Create log file để ghi lại version đã down của plugins
    3. Cuối cùng là tải xuống các external modules để sử dụng trong Terraform template. Lúc này khi kiểm tra thư mục Root, mình sẽ thấy xuất hiện thêm file .terraform.lock.hcl và thư mục .terraform. Trong đó file lock dùng để ghi lại version plugins như mình nói ở trên. Thư mục .terraform chưa các modules đã pull về.

Terraform Validate

  • CMD

    terraform validate
    
  • CMD validate sẽ tiến hành kiểm tra tất cả các Terraform configuration để đảm bảo rằng toàn bộ syntax đều chính xác. Thường sử dụng sau khi configuration files được sửa chữa để kiểm tra hợp lệ.

  • Nếu toàn bộ các configs đều đúng syntax, sẽ nhận được log như sau:

  • Trong trường hợp sai syntax, hệ thống sẽ báo lỗi và chỉ định chỗ lỗi cụ thể:

Terraform Plan

  • CMD

    terraform plan
    
  • CMD plan là một dry-run command, khi thực thi terraform sẽ cấp cho mình một execution plan, có highlight các thay đổi để mình có thể xác định được các thay đổi trong configuration.

  • Execution Plan sẽ bao gồm 3 loại dữ liệu.

    1. Những gì ta đã chỉnh sửa trong Terraform templates
    2. Terraform state file hiện tại
    3. Những thay đổi thực tế trong infrastructure provider
  • Ví dụ kết quả sau khi run plan cmd

Terraform Apply

  • CMD

    terraform apply
    
  • Trong trường hợp chưa run CMD plan trước khi run cmd apply. Terraform sẽ tự động rerun plan và mình cần xác nhận đồng ý với execution plan mới có thể tiến hành apply.

  • Nếu mọi thứ đều hợp lệ và execution plan được approved, Terraform sẽ không lưu lại trạng thái trước khi apply để có thể rollback mà sẽ tuân theo plan mà tiến hành apply. Nếu cần rollback lại trạng thái trước đó, mình cần sử dụng thêm các công cụ Source Control như Git để có thể convert lại trạng thái của các configuration files trước đó và tiến hành apply lại.

  • Mặc định, apply CMD sẽ luôn yêu cầu confirm trước khi thực hiện apply để bảo đảm ta đã approve với execution plan. Mình có thể bypass step này bằng cách gắn thêm parameter “auto-approve” vào CMD

    terraform apply -auto-approve
    

Terraform Destroy

  • CMD

    terraform destroy
    
  • Destroy CMD là lệnh dùng destroy các provided, vì vậy cần cẩn thận và hiểu rõ ý nghĩa những việc đang thực hiện khi sử lệnh này đặc biệt là trên môi trường production.

  • Mặc định, tương tư như apply, destroy CMD sẽ luôn yêu cầu confirm trước khi thực hiện để mình xác nhận lại lần nữa những việc đang làm. Mình có thể bypass step này bằng cách gắn thêm parameter “auto-approve” vào CMD

    terraform destroy -auto-approve
    

Kết bài

Ở phần 2, mình tập trung giới thiệu cách cài đặt Terraform CLI, các command lines cơ bản để có thể hoàn thành được một flow Terraform hoàn chỉnh. Phần tiếp theo mình sẽ giới thiệu về syntax trong Terraform cũng như cách sử dụng cho từng syntax. Bài viết chủ yếu được tổng hợp lại từ những kiến thức mình góp nhặt được trong quá trình tự học Terraform và diễn đạt lại theo cách hiểu của mình. Mình nghĩ sẽ có nhiều chỗ sai sót hoặc mơ hồ. Mong nhận được sự phản hồi, góp ý từ mọi người. Xin cám ơn.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Đề thi interview DevOps ở Châu Âu

Well. Chào mọi người, mình là Rice - một DevOps Engineers ở đâu đó tại Châu Âu.

0 0 88

- vừa được xem lúc

In calculus, love also means zero.

Mình nhớ hồi năm 2 đại học, thầy giáo môn calculus, trong một giây phút ngẫu hứng, đã đưa ra cái definition này. Lúc đấy mình cũng không nghĩ gì nhiều.

0 0 65

- vừa được xem lúc

Chuyện thay đổi

Thay đổi là một thứ gì đó luôn luôn đáng sợ. Cách đây vài tháng mình có duyên đi làm cho một banking solution tên là X.

0 0 47

- vừa được xem lúc

Pet vs Cattle - Thú cưng và gia súc

Khái niệm. Pets vs Cattle là một khái niệm cơ bản của DevOps. Bài viết này sẽ nói về sự phát triển của các mô hình dịch vụ từ cốt lõi Pets and Cattle. 1.

0 0 34

- vừa được xem lúc

Git workflow được Google và Facebook sử dụng có gì hay ho

Với developer thì Git hẳn là công cụ rất quen thuộc và không thể thiếu rồi. Thế nhưng có mấy ai thực sự hiểu được Git.

0 0 85

- vừa được xem lúc

Kubernetes - Học cách sử dụng Kubernetes Namespace cơ bản

Namespace trong Kubernetes là gì. Tại sao nên sử dụng namespace.

0 0 113