Bỏ qua để đến nội dung

Cơ sở hạ tầng Terraform

Terraform là một công cụ phần mềm mã nguồn mở về cơ sở hạ tầng dưới dạng mã (infrastructure as code) cho phép bạn tạo, thay đổi và cải thiện cơ sở hạ tầng một cách an toàn và có thể dự đoán được.

Trình tạo cơ sở hạ tầng Terraform tạo ra một dự án cơ sở hạ tầng Terraform. Ứng dụng được tạo ra bao gồm các phương pháp bảo mật tốt nhất thông qua các kiểm tra bảo mật Checkov.

Bạn có thể tạo một dự án Terraform mới theo hai cách:

  1. Install the Nx Console VSCode Plugin if you haven't already
  2. Open the Nx Console in VSCode
  3. Click Generate (UI) in the "Common Nx Commands" section
  4. Search for @aws/nx-plugin - terraform#project
  5. Fill in the required parameters
    • name: tf-infra
  6. Click Generate
Parameter Type Default Description
name Required string - The name of the project.
type string application Whether this is a terraform lib (re-usable modules) or app (deployable).
directory string packages The directory of the new project.

Trình tạo tạo ra các cấu trúc tệp khác nhau tùy thuộc vào loại dự án:

Đối với các dự án application (--type=application), trình tạo tạo ra một ứng dụng Terraform hoàn chỉnh với quản lý trạng thái từ xa:

  • Thư mụcsrc
    • main.tf Tệp cấu hình Terraform chính
    • providers.tf Cấu hình Provider với backend S3
    • variables.tf Định nghĩa biến đầu vào
    • outputs.tf Định nghĩa giá trị đầu ra
    • Thư mụcenv Tệp biến theo môi trường cụ thể
      • dev.tfvars Biến môi trường phát triển
  • Thư mụcbootstrap Cấu hình Bootstrap cho trạng thái từ xa
    • main.tf S3 bucket và các chính sách cho lưu trữ trạng thái
    • providers.tf Cấu hình AWS provider
    • variables.tf Định nghĩa biến Bootstrap
  • project.json Cấu hình dự án và các target build

Đối với các dự án library (--type=library), trình tạo tạo ra một cấu trúc đơn giản hơn cho các module Terraform có thể tái sử dụng:

  • Thư mụcsrc
    • main.tf Tệp module Terraform chính
  • project.json Cấu hình dự án và các target build

Triển khai Cơ sở hạ tầng Terraform của bạn

Phần tiêu đề “Triển khai Cơ sở hạ tầng Terraform của bạn”

Bạn có thể bắt đầu viết cơ sở hạ tầng Terraform của mình bên trong src/main.tf, ví dụ:

src/main.tf
locals {
account_id = data.aws_caller_identity.current.account_id
aws_region = data.aws_region.current.id
}
resource "null_resource" "print_info" {
# triggers = {
# always_run = timestamp()
# }
provisioner "local-exec" {
command = "echo 'AWS Region: ${local.aws_region}, AWS Account: ${local.account_id}, Environment: ${var.environment}'"
}
}
# Khai báo cơ sở hạ tầng của bạn ở đây
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-unique-bucket-name"
}

Nếu bạn muốn thực thi một module từ một dự án riêng biệt (lib), bạn có thể làm như sau:

module "lib_module" {
source = "../../path/to/my-lib/src"
}

Điều này sẽ tự động cập nhật đồ thị Nx để thêm phụ thuộc giữa ứng dụng tiêu thụ của bạn và lib của bạn.

Cấu hình các biến theo môi trường cụ thể trong các tệp src/env/*.tfvars.

Để thêm môi trường mới, tạo một tệp src/env/<environment>.tfvars mới với các biến theo môi trường cụ thể và thêm các mục mới cho apply, destroy, init, plan trong project.json cho cấu hình môi trường mới. Ví dụ, giả sử chúng ta muốn thêm một môi trường prod:

# Biến môi trường Production
environment = "prod"
region = "us-west-2"

Bootstrap Trạng thái Từ xa (Chỉ dành cho Dự án Application)

Phần tiêu đề “Bootstrap Trạng thái Từ xa (Chỉ dành cho Dự án Application)”

Đối với các dự án application, trước khi triển khai cơ sở hạ tầng của bạn, bạn sẽ cần bootstrap backend trạng thái từ xa. Điều này tạo ra một S3 bucket để lưu trữ các tệp trạng thái Terraform của bạn:

Terminal window
pnpm nx run tf-infra:bootstrap

Các target có sẵn phụ thuộc vào loại dự án của bạn:

Bạn có thể xác thực cấu hình Terraform của mình bằng cách sử dụng target validate:

Terminal window
pnpm nx run tf-infra:validate

Định dạng mã Terraform của bạn bằng cách sử dụng target fmt:

Terminal window
pnpm nx run tf-infra:fmt

Chạy kiểm tra bảo mật trên cơ sở hạ tầng của bạn bằng cách sử dụng Checkov với target test:

Terminal window
pnpm nx run tf-infra:test

Bạn sẽ tìm thấy kết quả kiểm tra bảo mật của mình trong thư mục dist gốc, dưới dist/packages/<my-terraform-project>/checkov.

Các target sau chỉ có sẵn cho các dự án loại application:

Lập kế hoạch cho Cơ sở hạ tầng của bạn

Phần tiêu đề “Lập kế hoạch cho Cơ sở hạ tầng của bạn”

Trước khi áp dụng các thay đổi, bạn có thể xem Terraform sẽ làm gì bằng cách chạy target plan:

Terminal window
pnpm nx run tf-infra:plan

Điều này sẽ tạo một tệp kế hoạch trong dist/packages/<my-terraform-project>/terraform/dev.tfplan.

Khởi tạo thư mục làm việc Terraform của bạn với target init:

Terminal window
pnpm nx run tf-infra:init

Sau khi lập kế hoạch, bạn có thể triển khai cơ sở hạ tầng của mình lên AWS bằng cách sử dụng target apply:

Terminal window
pnpm nx run tf-infra:apply

Truy xuất các giá trị đầu ra từ cấu hình Terraform của bạn:

Terminal window
pnpm nx run tf-infra:output

Khi bạn cần phá bỏ cơ sở hạ tầng của mình, sử dụng target destroy:

Terminal window
pnpm nx run tf-infra:destroy

Để dọn dẹp các tài nguyên bootstrap (S3 bucket để lưu trữ trạng thái):

Terminal window
pnpm nx run tf-infra:bootstrap-destroy

Để biết thêm thông tin về Terraform, vui lòng tham khảo Tài liệu TerraformTài liệu AWS Provider.