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

Hạ tầng Terraform

Filter this guidePick generator option values to hide sections that don't apply.

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

Trình tạo hạ tầng Terraform tạo ra một dự án 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 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:

Terminal window
pnpm nx g @aws/nx-plugin:terraform#project --name=tf-infra
Bạn cũng có thể thực hiện chạy thử để xem những tệp nào sẽ bị thay đổi
Terminal window
pnpm nx g @aws/nx-plugin:terraform#project --name=tf-infra --dry-run
Tham sốKiểuMặc địnhMô tả
name Bắt buộcstring-Tên của dự án.
type application | libraryapplicationĐây là terraform lib (các module có thể tái sử dụng) hay app (có thể triển khai).
directory stringpackagesThư mục của dự án mới.
subDirectory string-Thư mục con mà dự án được đặt trong đó. Mặc định đây là tên dự án.
preferInstallDependencies booleantrueCó nên cài đặt các dependencies sau khi generator chạy xong hay không. Đặt thành false để hoãn việc cài đặt khi chạy nhiều generator liên tiếp (việc cài đặt vẫn sẽ chạy nếu cần thiết để các generator tiếp theo có thể tính toán Nx project graph); cài đặt một lần vào cuối.

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:

type = application

Đố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 S3 backend
    • 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 cụ thể cho môi trường
      • dev.tfvars Biến môi trường Development
  • Thư mụcbootstrap Cấu hình Bootstrap cho trạng thái từ xa
    • main.tf S3 bucket và policies cho lưu trữ state
    • providers.tf Cấu hình AWS provider
    • variables.tf Định nghĩa biến Bootstrap
  • Thư mụcscripts Node helpers chạy bởi các target nx bootstrapinit
    • aws-config.ts Phân giải account + region thông qua chuỗi thông tin xác thực AWS SDK
    • bootstrap.ts Pull/push bootstrap tfstate và chạy terraform apply
    • init.ts Chạy terraform init với cấu hình S3 backend
  • project.json Cấu hình dự án và build targets
type = library

Đố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à build targets

Bạn có thể bắt đầu viết 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}'"
}
}
# Declare your infrastructure here
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 sử dụng của bạn và lib của bạn.

Cấu hình các biến cụ thể cho môi trường 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 cụ thể cho môi trường và thêm các mục mới cho apply, destroy, init, plan trong project.json cho cấu hình env mới. Ví dụ, giả sử chúng ta muốn thêm một env prod:

# Production environment variables
environment = "prod"
region = "us-west-2"
type = application

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

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

Trước khi triển khai 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 bootstrap tf-infra

Các target khả dụng 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 validate tf-infra

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

Terminal window
pnpm nx fmt tf-infra

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

Terminal window
pnpm nx test tf-infra

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.

type = application

Các target sau chỉ khả dụng cho các dự án loại application:

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 plan tf-infra

Điều này sẽ tạo một tệp plan 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 hạ tầng của mình lên AWS bằng cách sử dụng target apply:

Terminal window
pnpm nx apply tf-infra

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

Terminal window
pnpm nx output tf-infra

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

Terminal window
pnpm nx destroy tf-infra

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

Terminal window
pnpm nx bootstrap-destroy tf-infra

Để 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.