Cách sử dụng Terraform với nhóm của bạn

Tác giả đã chọn Quỹ Nguồn mở và Miễn phí để nhận một khoản đóng góp như một phần của chương trình Viết cho DO donate.

Giới thiệu

Khi nhiều người đang làm việc trên cùng một dự án Terraform từ các vị trí khác nhau đồng thời, điều quan trọng là phải xử lý mã cơ sở hạ tầng và trạng thái dự án một cách chính xác để tránh lỗi ghi đè. Giải pháp là lưu trữ trạng thái từ xa thay vì cục bộ. Một hệ thống từ xa khả dụng cho tất cả các thành viên trong nhóm của bạn và họ có thể khóa trạng thái khi đang làm việc.

Một trong những chương trình phụ trợ từ xa như vậy là pg, lưu trữ trạng thái trong cơ sở dữ liệu PostgreSQL. Trong quá trình hướng dẫn này, bạn sẽ sử dụng nó với Cơ sở dữ liệu được quản lý DigitalOcean để đảm bảo tính khả dụng của dữ liệu.

Terraform cũng hỗ trợ cung cấp đám mây được quản lý, chính thức của Hashicorp được gọi là Terraform Cloud — một ứng dụng độc quyền đồng bộ hóa công việc của nhóm bạn ở một nơi và cung cấp giao diện người dùng để cấu hình và quản lý.

Trong hướng dẫn này, bạn sẽ tạo một tổ chức trong Terraform Cloud mà bạn sẽ kết nối dự án của mình. Sau đó, bạn sẽ sử dụng tổ chức của mình để thiết lập không gian làm việc và tài nguyên. Bạn sẽ lưu trữ trạng thái của mình trong đám mây được quản lý để nó luôn khả dụng. Bạn cũng sẽ thiết lập pg phụ trợ với cơ sở dữ liệu PostgreSQL được quản lý đi kèm.

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

Ghi chú: Chúng tôi đã thử nghiệm cụ thể hướng dẫn này bằng Terraform 1.0.2.

Lưu trữ trạng thái trong đám mây Terraform

Trong bước này, bạn sẽ tạo một dự án triển khai Droplet, nhưng thay vì lưu trữ trạng thái cục bộ, bạn sẽ sử dụng Terraform Cloud làm chương trình phụ trợ với remote các nhà cung cấp. Điều này đòi hỏi phải tạo tổ chức và không gian làm việc trong Terraform Cloud, viết mã cơ sở hạ tầng và lập kế hoạch cho nó.

Tạo một tổ chức

Terraform Cloud cho phép bạn có nhiều tổ chức, nơi chứa không gian làm việc và mô-đun của bạn. Các tổ chức gói trả phí có thể có nhiều nhóm với các kiểm soát cấp độ truy cập, trong khi gói miễn phí mà bạn sẽ sử dụng chỉ cung cấp một nhóm cho mỗi tổ chức. Bạn có thể mời các thành viên trong nhóm tham gia tổ chức.

Bắt đầu bằng cách chuyển đến Terraform Cloud và đăng nhập. Nếu bạn chưa tạo tổ chức, nó sẽ nhắc bạn làm như vậy.

Terraform Cloud - Tạo một tổ chức mới

Nhập tên tổ chức mà bạn chọn và nhớ rằng tên đó phải là duy nhất trong số tất cả các tên trong Terraform Cloud. Bạn sẽ nhận được lỗi nếu tên đã tồn tại. Địa chỉ email phải được điền cùng với địa chỉ tài khoản của bạn. Sau khi bạn hoàn tất, hãy nhấp vào Tạo tổ chức để tiếp tục.

Sau đó, nó sẽ yêu cầu bạn chọn loại không gian làm việc.

Terraform Cloud - Chọn loại không gian làm việc

Vì bạn sẽ giao diện với Terraform Cloud bằng dòng lệnh, hãy nhấp vào Quy trình làm việc theo hướng CLI Lựa chọn. Sau đó, nhập tên cho không gian làm việc của bạn.

Terraform Cloud - Đặt tên không gian làm việc

Nhập tên không gian làm việc mà bạn chọn (chúng tôi sẽ gọi nó là sammy), sau đó nhấp vào Tạo không gian làm việc để hoàn thiện quá trình thành lập tổ chức. Sau đó, nó sẽ hướng bạn đến trang cài đặt không gian làm việc.

Terraform Cloud - Cài đặt không gian làm việc

Bây giờ bạn đã tạo không gian làm việc của mình, không gian này là một phần của tổ chức của bạn. Vì bạn vừa tạo nó nên không gian làm việc của bạn không chứa mã cơ sở hạ tầng. Ở phần trung tâm của giao diện, Terraform Cloud cung cấp cho bạn các hướng dẫn bắt đầu để kết nối với không gian làm việc này.

Trước khi kết nối với nó, bạn cần phải định cấu hình phiên bản Terraform mà đám mây sẽ sử dụng để thực thi các lệnh của bạn. Để đặt nó, hãy nhấp vào Cài đặt thả xuống bên cạnh Tổng quat và chọn Tổng quan khỏi danh sách. Khi trang mở ra, hãy điều hướng đến Phiên bản Terraform thả xuống và chọn 1.0.2 (cho hướng dẫn này).

Xem tiếp:   Tìm hiểu KMS Server là gì? Cách hoạt động ra sao? - toiyeuit.com

Terraform Cloud - Thiết lập phiên bản Terraform

Sau đó, nhấp vào Lưu các thiết lập để lưu các thay đổi.

Để kết nối dự án với tổ chức và không gian làm việc của bạn, trước tiên bạn cần đăng nhập bằng dòng lệnh. Trước khi bạn chạy lệnh, hãy điều hướng đến trang mã thông báo để tạo mã thông báo truy cập mới cho máy chủ của bạn, mã này sẽ cung cấp quyền truy cập vào tài khoản của bạn. Bạn sẽ nhận được lời nhắc tạo mã thông báo API.

Terraform Cloud - Tạo mã thông báo API

Mô tả mặc định là ổn, vì vậy hãy nhấp vào Tạo mã thông báo API để tạo ra nó.

Terraform Cloud - Mã thông báo API đã tạo

Nhấp vào giá trị mã thông báo hoặc biểu tượng sau nó, để sao chép mã thông báo API. Bạn sẽ sử dụng mã thông báo này để kết nối dự án với tài khoản Terraform Cloud của mình.

Trong dòng lệnh, hãy chạy lệnh sau để đăng nhập:

You'll receive the following output:

Output

Terraform will request an API token for app.terraform.io using your browser. If login is successful, Terraform will store the token in plain text in the following file for use by subsequent commands: /home/sammy/.terraform.d/credentials.tfrc.json Do you want to proceed? Only 'yes' will be accepted to confirm. ...

Terraform đang cảnh báo bạn rằng mã thông báo sẽ được lưu trữ cục bộ. Vào yes khi nó nhắc bạn:

Output

--------------------------------------------------------------------------------- Open the following URL to access the tokens page for app.terraform.io: https://app.terraform.io/app/settings/tokens?source=terraform-login --------------------------------------------------------------------------------- Generate a token using your browser, and copy-paste it into this prompt. Terraform will store the token in plain text in the following file for use by subsequent commands: /home/sammy/.terraform.d/credentials.tfrc.json Token for app.terraform.io: Enter a value:

Dán mã thông báo bạn đã sao chép và xác nhận bằng ENTER. Terraform sẽ hiển thị thông báo thành công:

Output

... - ----- - --------- -- --------- - ----- --------- ------ ------- ------- --------- ---------- ---- ---------- ---------- -- ---------- ---------- Welcome to Terraform Cloud! - ---------- ------- --- ----- --- Documentation: terraform.io/docs/cloud -------- - ---------- ---------- --------- ----- - New to TFC? Follow these steps to instantly apply an example configuration: $ git clone https://github.com/hashicorp/tfc-getting-started.git $ cd tfc-getting-started $ scripts/setup.sh

Bạn đã định cấu hình cài đặt Terraform cục bộ của mình để truy cập tài khoản Terraform Cloud của mình. Bây giờ bạn sẽ tạo một dự án triển khai Droplet và định cấu hình nó để sử dụng Terraform Cloud để lưu trữ trạng thái của nó.

Thiết lập dự án

Đầu tiên, tạo một thư mục có tên terraform-team-remote nơi bạn sẽ lưu trữ dự án:

  • mkdir ~/terraform-team-remote

Điều hướng đến nó:

  • cd ~/terraform-team-remote

Để thiết lập dự án của bạn, bạn cần phải:

  • xác định và cấu hình remote nhà cung cấp giao diện với Terraform Cloud.
  • yêu cầu digitalocean nhà cung cấp để có thể triển khai tài nguyên DigitalOcean.
  • xác định và khởi tạo các biến mà bạn sẽ sử dụng.

Bạn sẽ lưu trữ thông số kỹ thuật yêu cầu của nhà cung cấp và mô-đun trong một tệp có tên provider.tf. Tạo và mở nó để chỉnh sửa bằng cách chạy:

Add the following lines:

~/terraform-team-remote/provider.tf

terraform {
  required_providers {
    digitalocean = {
      source = "digitalocean/digitalocean"
      version = "~> 2.0"
    }
  }

  backend "remote" {
    hostname = "app.terraform.io"
    organization = "your_organization_name"

    workspaces {
      name = "your_workspace_name"
    }
  }
}

variable "do_token" {}

provider "digitalocean" {
  token = var.do_token
}

Tại đây, trước tiên bạn chỉ định phiên bản Terraform của mình. Sau đó, bạn chỉ định digitalocean nhà cung cấp theo yêu cầu và đặt chương trình phụ trợ thành remote.

Tên máy chủ của nó được đặt thành app.terraform.io, là địa chỉ của Terraform Cloud. Cho organizationworkspaces.name, thay thế các giá trị được đánh dấu bằng tên bạn đã chỉ định.

Tiếp theo, bạn xác định một biến có tên là do_token, mà bạn chuyển cho digitalocean nhà cung cấp được tạo sau nó. Bây giờ bạn đã định cấu hình dự án của mình để kết nối với tổ chức của bạn, vì vậy hãy lưu và đóng tệp.

Khởi tạo dự án của bạn bằng lệnh sau:

The output will be similar to this:

Output

Initializing the backend... Successfully configured the backend "remote"! Terraform will automatically use this backend unless the backend configuration changes. Initializing provider plugins... - Finding digitalocean/digitalocean versions matching "~> 2.0"... - Installing digitalocean/digitalocean v2.10.1... - Installed digitalocean/digitalocean v2.10.1 (signed by a HashiCorp partner, key ID F82037E524B9C0E8) Partner and community providers are signed by their developers. If you'd like to know more about provider signing, you can read about it here: https://www.terraform.io/docs/cli/plugins/signing.html Terraform has created a lock file .terraform.lock.hcl to record the provider selections it made above. Include this file in your version control repository so that Terraform can guarantee to make the same selections by default when you run "terraform init" in the future. Terraform has been successfully initialized! ...

Tiếp theo, xác định Droplet trong một tệp có tên droplets.tf. Tạo và mở nó để chỉnh sửa bằng cách chạy:

Add the following lines:

Xem tiếp:   tải nhạc youtube sang mp3 trên điện thoại nhanh đơn giản

~/terraform-team-remote/droplets.tf

resource "digitalocean_droplet" "web" {
  image  = "-20-04-x64"
  name   = "web-1"
  region = "fra1"
  size   = "s-1vcpu-1gb"
}

Mã này sẽ triển khai một Droplet được gọi là web-1 bên trong fra1 vùng, chạy trên RAM 1GB và một lõi CPU. Đó là tất cả những gì bạn cần xác định, vì vậy hãy lưu và đóng tệp.

Những gì còn lại để xác định là các giá trị biến. Các remote nhà cung cấp không hỗ trợ chuyển giá trị cho các biến thông qua dòng lệnh, vì vậy bạn sẽ phải chuyển chúng bằng cách sử dụng tệp biến hoặc đặt chúng trong Terraform Cloud. Terraform đọc các giá trị biến từ các tệp có tên tệp kết thúc bằng .auto.tfvars. Tạo và mở một tệp có tên vars.auto.tfvars để chỉnh sửa, trong đó bạn sẽ xác định do_token Biến đổi:

Add the following line, replacing your_do_token với mã thông báo API DigitalOcean của bạn:

vars.auto.tfvars

do_token = "your_do_token"

Khi bạn hoàn tất, hãy lưu và đóng tệp. Terraform sẽ tự động đọc tệp này khi lập kế hoạch hành động.

Dự án của bạn hiện đã hoàn tất và được thiết lập để sử dụng Terraform Cloud làm chương trình phụ trợ của nó. Bây giờ bạn sẽ lập kế hoạch và áp dụng Droplet và xem lại cách nó phản ánh trong ứng dụng Cloud.

Áp dụng cấu hình

Vì bạn chưa lập kế hoạch hoặc áp dụng dự án của mình nên không gian làm việc trong Terraform Cloud hiện đang trống. Bạn có thể thử áp dụng dự án bằng cách chạy lệnh sau để cập nhật dự án:

You'll notice that the output is different from when you use local làm chương trình phụ trợ của bạn:

Output

Running apply in the remote backend. Output will stream here. Pressing Ctrl-C will cancel the remote apply if it's still pending. If the apply started it will stop streaming the logs, but will not stop the apply running remotely. Preparing the remote apply... To view this run in a browser, visit: https://app.terraform.io/app/sammy-shark/sammy/runs/run-QnAh2HDwx6zWbNV1 Waiting for the plan to start... Terraform v1.0.2 on linux_amd64 Configuring remote state backend... Initializing Terraform configuration... Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # digitalocean_droplet.web will be created + resource "digitalocean_droplet" "web" { + backups = false + created_at = (known after apply) + disk = (known after apply) + id = (known after apply) + image = "ubuntu-20-04-x64" + ipv4_address = (known after apply) + ipv4_address_private = (known after apply) + ipv6 = false + ipv6_address = (known after apply) + locked = (known after apply) + memory = (known after apply) + monitoring = false + name = "web-1" + price_hourly = (known after apply) + price_monthly = (known after apply) + private_networking = (known after apply) + region = "fra1" + resize_disk = true + size = "s-1vcpu-1gb" + status = (known after apply) + urn = (known after apply) + vcpus = (known after apply) + volume_ids = (known after apply) + vpc_uuid = (known after apply) } Plan: 1 to add, 0 to change, 0 to destroy. ...

Khi sử dụng remote phụ trợ, Terraform không lập kế hoạch hoặc áp dụng cấu hình từ máy cục bộ. Thay vào đó, nó ủy quyền các tác vụ đó cho đám mây và chỉ truyền đầu ra tới bảng điều khiển trong thời gian thực.

Vào yes khi được nhắc. Terraform sẽ sớm hoàn tất việc áp dụng cấu hình và bạn có thể điều hướng đến không gian làm việc trên trang web Terraform Cloud để biết rằng nó đã áp dụng một hành động mới.

Terraform Cloud - Đã áp dụng Run mới

Bây giờ bạn có thể hủy các tài nguyên đã triển khai bằng cách chạy như sau:

In this section, you've connected your project to Terraform Cloud. You'll now use another backend, pg, lưu trữ trạng thái trong cơ sở dữ liệu PostgreSQL.

Lưu trữ trạng thái trong cơ sở dữ liệu PostgreSQL được quản lý

Trong phần này, bạn sẽ thiết lập một dự án triển khai Droplet, giống như bước trước. Tuy nhiên, lần này, bạn sẽ lưu trữ trạng thái trong cơ sở dữ liệu DigitalOcean Managed PostgreSQL bằng cách sử dụng pg các nhà cung cấp. Nhà cung cấp này hỗ trợ khóa trạng thái, vì vậy trạng thái sẽ không bao giờ bị ghi đè bởi hai hoặc nhiều thay đổi xảy ra cùng một lúc.

Xem tiếp:   Hướng dẫn Cách Xoay Video 90 độ trong Camtasia 9.1 nhanh

Bắt đầu bằng cách tạo một thư mục có tên terraform-team-pg trong đó bạn sẽ lưu trữ dự án:

  • mkdir ~/terraform-team-pg

Điều hướng đến nó:

Like the previous section, you'll first define the provider and then pass in the connection string for the database and the digitalocean mô-đun. Tạo và mở provider.tf để chỉnh sửa:

Add the following lines:

~/terraform-team-pg/provider.tf

terraform {
  required_providers {
    digitalocean = {
      source = "digitalocean/digitalocean"
      version = "~> 2.0"
    }
  }

  backend "pg" {
    conn_str = "your_db_connection_string"
  }
}

variable "do_token" {}

provider "digitalocean" {
  token = var.do_token
}

Ở đây bạn yêu cầu digitalocean nhà cung cấp và xác định pg backend, chấp nhận một chuỗi kết nối. Sau đó, bạn xác định do_token và chuyển nó vào phiên bản của digitalocean các nhà cung cấp.

Nhớ thay your_db_connection_string với chuỗi kết nối cho cơ sở dữ liệu được quản lý của bạn từ Bảng điều khiển DigitalOcean, bạn có thể tìm thấy chuỗi này bằng cách nhấn Hành động, lựa chọn Chi tiết kết nốivà lựa chọn Chuỗi kết nối từ menu thả xuống. Sau đó lưu và đóng tệp

Cảnh báo: Để tiếp tục, trong Cài đặt của cơ sở dữ liệu của bạn, hãy đảm bảo rằng bạn có địa chỉ IP của máy mà bạn đang chạy Terraform trên danh sách cho phép.

Khởi tạo dự án bằng cách chạy:

The output will be similar to the following:

Output

Initializing the backend... Successfully configured the backend "pg"! Terraform will automatically use this backend unless the backend configuration changes. Initializing provider plugins... - Finding digitalocean/digitalocean versions matching "~> 2.0"... - Installing digitalocean/digitalocean v2.10.1... - Installed digitalocean/digitalocean v2.10.1 (signed by a HashiCorp partner, key ID F82037E524B9C0E8) Partner and community providers are signed by their developers. If you'd like to know more about provider signing, you can read about it here: https://www.terraform.io/docs/cli/plugins/signing.html Terraform has created a lock file .terraform.lock.hcl to record the provider selections it made above. Include this file in your version control repository so that Terraform can guarantee to make the same selections by default when you run "terraform init" in the future. Terraform has been successfully initialized! ...

Terraform đã khởi tạo thành công chương trình phụ trợ; nghĩa là nó được kết nối với cơ sở dữ liệu.

Vì định nghĩa Droplet giống như trong dự án trước, bạn có thể sao chép nó bằng cách chạy:

  • cp ../terraform-team-remote/droplets.tf .

Bạn sẽ cần mã thông báo DigitalOcean của mình trong một biến môi trường. Tạo một, thay thế your_do_token với mã thông báo của bạn:

  • export DO_PAT="your_do_token"

Để kiểm tra xem kết nối với cơ sở dữ liệu có hoạt động hay không, hãy thử lập kế hoạch cấu hình:

  • terraform plan -var "do_token=${DO_PAT}"

Đầu ra sẽ tương tự như sau:

Output

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # digitalocean_droplet.web will be created + resource "digitalocean_droplet" "web" { + backups = false + created_at = (known after apply) + disk = (known after apply) + id = (known after apply) + image = "ubuntu-20-04-x64" + ipv4_address = (known after apply) + ipv4_address_private = (known after apply) + ipv6 = false + ipv6_address = (known after apply) + locked = (known after apply) + memory = (known after apply) + monitoring = false + name = "web-1" + price_hourly = (known after apply) + price_monthly = (known after apply) + private_networking = (known after apply) + region = "fra1" + resize_disk = true + size = "s-1vcpu-1gb" + status = (known after apply) + urn = (known after apply) + vcpus = (known after apply) + volume_ids = (known after apply) + vpc_uuid = (known after apply) } Plan: 1 to add, 0 to change, 0 to destroy. ...

Terraform báo cáo không có lỗi và lập kế hoạch các hành động như bình thường. Nó đã kết nối thành công với cơ sở dữ liệu PostgreSQL của bạn và lưu trữ trạng thái của nó. Nhiều người hiện có thể làm việc này đồng thời với dự án vẫn được đồng bộ hóa.

Phần kết luận

Trong hướng dẫn này, bạn đã sử dụng hai phần mềm phụ trợ khác nhau: Terraform Cloud, là dịch vụ đám mây được quản lý của Hashicorp dành cho Terraform; và pg, cho phép bạn lưu trữ trạng thái của dự án trong cơ sở dữ liệu PostgreSQL. Bạn đã sử dụng cơ sở dữ liệu PostgreSQL được quản lý từ DigitalOcean, cơ sở dữ liệu này bạn có thể cung cấp và sử dụng với Terraform trong vòng vài phút.

Để biết thêm thông tin về các tính năng của Terraform Cloud, hãy truy cập tài liệu chính thức.

Hướng dẫn này là một phần của loạt bài Cách Quản lý Cơ sở hạ tầng với Terraform. Loạt bài này bao gồm một số chủ đề về Terraform, từ việc cài đặt Terraform lần đầu tiên đến quản lý các dự án phức tạp.

.

Check Also

Cách cung cấp các ứng dụng Flask với Gunicorn và Nginx trên Ubuntu

Giới thiệu Trong hướng dẫn này, bạn sẽ xây dựng một ứng dụng Python bằng …