cloud Terraform

Terraform GCP – 3. Xây Dựng Hạ Tầng Với Terraform

Sau khi đã cài đặt Terraform, chúng ta sẽ bắt đầu tiến hành tìm hiểu cách để có thể xây dựng một cơ sở hạ tầng từ file cấu hình Terraform. 

Terraform hỗ trợ nhiều nhà cung cấp khác nhau như: AWS, Azure, Google Cloud … Trong bài này, chúng ta sẽ tìm hiểu các ví dụ cho Google Cloud.

Bài hướng dẫn này, sẽ giúp bạn tạo, cập nhật, và xóa hạ tầng từ tệp tin cấu hình terraform. 

Cấu hình trong các ví dụ sẽ giúp bạn hiểu cách tạo tài nguyên cho Group, tài nguyên Network, Rule, Storage và cả việc tạo một máy ảo. Bạn cũng sẽ được học về remote backend, output và các prosioner, luyện tập xây dựng các khối ( block) phức tạp hơn. 

Điều kiện tiên quyết

  • Đầu tiên, bạn cần có một tài khoản trial google cloud, nếu chưa bạn có thể tạo nó ở đây.
  • Đã cài đặt Terraform.

Google Cloud Shell

Trong phần này, chúng ta sẽ tương tác với Google Cloud Shell. Bạn có thể tham khảo thêm về nó ở đây:

Tìm hiểu về Google Cloud Shell

Cấu hình GCP

Chúng ta sẽ cần 2 tham số để cấu hình cho Terraform:

  • Project ID
  • Bật Google Compute Engine: Trong phần Cloud Engine, bạn cần bật nó lên thì Terraform mới có thể tương tác với GCP của bạn.  
  • Một key của service account:  Terraform sẽ dùng key này để truy cập vào GCP, bạn có thể tạo nó theo:
    • Bên dưới “Service account”, chọn “New service account”.
    • Đặt một tên bất kỳ
    • Trong phần Role, chọn “Project -> Editor”.
    • Phần “Key Type” chọn JSON.
    • Click “Create”  để tạo Key, và lưu lại nó. 

Lưu ý: service account key này sẽ dùng để truy cập vào GCP project của bạn. Do đó, vì tính an toàn thông tin hay giữ nó cẩn thận và bảo mật. 

Cấu hình

Chúng ta sẽ viết một file cấu hình ví dụ để tạo ra một Instance trên GCP.

Có nhiều định dạng cho tệp tin cấu hình, bạn có thể tham khảo thêm tại: https://www.terraform.io/docs/language/index.html

Tuy nhiên, chúng tôi sẽ sử dụng JSON trong ví dụ này.  Toàn bộ file cấu hình sẽ được để bên dưới, chúng ta sẽ cùng tìm hiểu về từng phần của nó.

Khi thực thi, Terraform sẽ nạp toàn bộ file cấu hình từ thư mục hiện tại. Vì vậy, tốt nhất là chúng ta nên chia các tệp tin cấu hình thành các thư mục khác nhau ( DEV, UAT, Staging, Production ….)

Terraform sẽ công nhận các file có đuôi là .tf hoặc .tf.json và sẽ nạp chúng trong quá trình thực thi.

terraform {
  required_providers {
    google = {
      source = "hashicorp/google"
      version = "3.5.0"
    }
  }
}

provider "google" {

  credentials = file("<NAME>.json")

  project = "<PROJECT_ID>"
  region  = "us-central1"
  zone    = "us-central1-c"
}

resource "google_compute_network" "vpc_network" {
  name = "terraform-network"
}
Lưu ý: Bạn cần thay đổi <NAME> với tên của file service account key của bạn đã tạo trước đó và <PROJECT_ID> với Project ID của bạn.

Bạn cần copy file service account key mà bạn đã tạo và tải về ở phần trước, vào trong cùng thư mục project terraform. 

Tiếp theo, chúng ta sẽ tìm hiểu chi tiết từng khối trong file cấu hình Terraform.

Khối Terraform 

terraform {} là khối dùng để tải về các provider ( nhà cung cấp ) từ  Terraform Registry . Trong cấu hình trên, provider ở đây là Google, nó được định nghĩa trong phần hashicorp/google

Bạn cũng có thể chỉ định một phiên bản cho từng nhà cung cấp được xác định trong khối required_providers . Đối với version  chúng ta có tùy chọn, nhưng nó được khuyến nghị là nên sử dụng. Version được dùng để hạn chế nhà cung cấp trong một hoặc nhiều phiên bản cụ thể, ngăn chặn việc tải xuống một nhà cung cấp mới,  có thể chứa các thay đổi không mong muốn. Nếu phiên bản không được chỉ định, Terraform sẽ tự động tải xuống nhà cung cấp gần nhất trong quá trình khởi tạo.

Providers

provider  được sử dụng để định cấu hình nhà cung cấp, ví dụ như là google, aws, azure…. Nhà cung cấp sẽ chịu trách nhiệm tạo và quản lý tài nguyên. Trong file cấu hình, có thể khai báo nhiều nhà cung cấp khác nhau.

Resource

Khối resource  dùng để xác định tài nguyên cần có trong cơ sở hạ tầng. Tài nguyên ở đây có thể là một thành phần vật lý như máy chủ hoặc có thể là tài nguyên logic như ứng dụng Heroku.

Khối tài nguyên có hai tham số cần quan tâm là: loại tài nguyên và tên tài nguyên. Trong ví dụ của chúng tôi, loại tài nguyên là “google_compute_network” và tên là “vpc_network”. Trong đó, các thành phần “google_compute_network” và “vpc_network” là tham số để chỉ định loại tài nguyên cần sử dụng.

có thể thao khảo thêm  tại đây để tìm hiểu thêm về các tham số cấu hình của các nhà cung cấp khác nhau.
Nhà cung cấp GCP cung cấp tài liệu cho các tài nguyên được hỗ trợ, bao gồm cả google_compute_network.

Có nhiều tùy chọn khác nhau, trong ví dụ này, chúng tôi sử dụng GCP.

Khởi Tạo

Lệnh đầu tiên để chạy cấu hình mới  là terraform init, điều này sẽ khởi tạo các cài đặt cục bộ và các dữ liệu khác nhau sẽ được sử dụng cho các lệnh tiếp theo.

Lưu ý, việc khởi tạo cấu hình Terraform bằng cách chạy lệnh terraform init  phải trong cùng thư mục với tệp main.tf.

$ terraform init

Initializing the backend...

Initializing provider plugins...
- Reusing previous version of hashicorp/google from the dependency lock file
- Installing hashicorp/google v3.5.0...
- Installed hashicorp/google v3.5.0 (signed by HashiCorp)

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
Terraform sẽ tải xuống các plugin cần thiết mà chúng ta đã khai báo trong cấu hình, đồng thời thiết lập  thêm các phần phụ trợ, dùng để lưu trữ thông tin về cơ sở hạ tầng.

Plugin nhà cung cấp Google Cloud Platform sẽ được tải xuống và cài đặt trong thư mục con của thư mục làm việc hiện hành.

Tạo tài nguyên

Áp dụng cấu hình bằng cách chạy câu lệnh terraform apply.

$ terraform apply

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # google_compute_network.vpc_network will be created
  + resource "google_compute_network" "vpc_network" {
      + auto_create_subnetworks         = true
      + delete_default_routes_on_create = false
      + gateway_ipv4                    = (known after apply)
      + id                              = (known after apply)
      + ipv4_range                      = (known after apply)
      + name                            = "terraform-network"
      + project                         = (known after apply)
      + routing_mode                    = (known after apply)
      + self_link                       = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:
Terraform sẽ chỉ ra những thay đổi trên cơ sở hạ tầng mà nó dự định thực hiện và chờ sự chấp thuận của bạn trước khi thực hiện những thay đổi đó.

Nếu kế hoạch được tạo thành công, Terraform sẽ tạm dừng và chờ phê duyệt trước khi tiếp tục. Nếu có bất kỳ điều gì trong kế hoạch có vẻ không chính xác hoặc nguy hiểm, chúng ta có thể hủy bỏ mà không có thay đổi nào ảnh hưởng đối với cơ sở hạ tầng.

Trong trường hợp này, kế hoạch có vẻ ổn, vì vậy hãy nhập yes tại dấu nhắc xác nhận để tiếp tục.

Việc thực thi kế hoạch sẽ mất vài phút.

  Enter a value: yes

google_compute_network.vpc_network: Creating...
google_compute_network.vpc_network: Still creating... [10s elapsed]
google_compute_network.vpc_network: Still creating... [20s elapsed]
google_compute_network.vpc_network: Still creating... [30s elapsed]
google_compute_network.vpc_network: Creation complete after 38s [id=projects/testing-project/global/networks/terraform-network]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Sau khi Terraform đã hoàn tất! Bạn có thể truy cập bảng điều khiển GCP để xem thông tin mạng mà bạn đã cấu hình.

Nếu bạn nhìn vào thư mục làm việc hiện tại của mình, bạn sẽ thấy rằng Terraform cũng đã ghi một số dữ liệu vào tệp terraform.tfstate . Tệp trạng thái này cực kỳ quan trọng; nó theo dõi thông tin cấu hình của Terraform về các tài nguyên mà nó tạo ra. Chúng tôi khuyên bạn nên sử dụng các chương trình quản lý source, nhưng tệp trạng thái này không nên được lưu trữ trong chương trình quản lý source. Bạn cũng có thể thiết lập Terraform Cloud để lưu trữ và chia sẻ trạng thái với các nhóm của mình.

Bạn có thể kiểm tra trạng thái hiện tại bằng cách chạy câu lệnh terraform show.

$ terraform show
# google_compute_network.vpc_network:
resource "google_compute_network" "vpc_network" {
    auto_create_subnetworks         = true
    delete_default_routes_on_create = false
    id                              = "projects/testing-project/global/networks/terraform-network"
    name                            = "terraform-network"
    project                         = "testing-project"
    routing_mode                    = "REGIONAL"
    self_link                       = "https://www.googleapis.com/compute/v1/projects/testing-project/global/networks/terraform-network"
}
Terraform sẽ in tất cả thông tin về cơ sở hạ tầng mà nó đã tạo ra.

You can see that by creating our resource, we’ve also gathered a lot of information about it. These values can be referenced to configure other resources or outputs, which will be covered later in this tutorial.

Bạn có thể thấy rằng bằng cách tạo tài nguyên trong bài hướng dẫn này, chúng ta cũng đã thu thập được rất nhiều thông tin về nó. Các giá trị này có thể được tham chiếu để chỉ định cấu hình cho các tài nguyên  khác, điều này sẽ được đề cập ở phần sau.

 

congdonglinux.com

 

Tags

Add Comment

Click here to post a comment