[ad_1]
Trong môi trường sản xuất của công ty, các dự án đám mây thường được chia thành phát triển (dev) và sản xuất (prod) để tách biệt hai môi trường. Với tư cách là một kỹ sư, điều quan trọng là có thể thực hiện các thử nghiệm và phát triển cần thiết trong (dev) và chuyển chúng vào (prod) sau khi được phê duyệt, một cách nhanh chóng và hiệu quả.
Đúng như mong đợi, có một số giải pháp để thực hiện việc này, terragrunt là một giải pháp ngay lập tức xuất hiện trong đầu bạn. Tuy nhiên, không phải ai cũng quen thuộc với địa hình, chứ đừng nói đến địa hình. Làm cách nào tôi có thể đơn giản hóa mẫu này để cho phép những người khác trong nhóm chỉ cần sử dụng tệp terraform và yaml? Đây là quan điểm của tôi về việc thực hiện đơn giản hóa.
1. Cấu trúc kho lưu trữ
Để tham khảo cho bài viết này, đây là cách tôi cấu trúc kho lưu trữ của mình.
.
├── surroundings # Folder to include each dev and prod yaml
│ ├── dev-config.yaml
│ └── prod-config.yaml
├── modules # Folder to include terraform code by providers
│ ├── module1
│ │ └──fundamental.tf
│ └── module2
│ └── fundamental.tf
├── backend.tf # backend file to configure terraform backend
├── locals.tf # locals file to level to surroundings yaml
└── fundamental.tf # fundamental file to level to modules
2. Tạo địa hình của bạn native.tf
Tệp native.tf là cách mặc định mà terraform tương tác với các tệp được lưu trữ cục bộ. Locals.tf của bạn phải trỏ đến không gian làm việc địa hình mà bạn muốn làm việc, điều này sẽ gọi tệp cấu hình chính xác.
# Choose the workspace
terraform workspace choose dev
# This could run terraform plan towards 'surroundings/dev-config.yaml' file
terraform plan
Việc sử dụng một tệp cục bộ có thể được cam kết thông qua git được ưu tiên hơn nhiều so với việc duy trì một số .tfvar riêng lẻ trên một số nhà phát triển. Hãy cẩn thận để không đưa thông tin nhạy cảm vào tệp yaml.
Ngoài ra, terraform còn cho phép các loại tệp cấu hình khác ngoài yaml, bao gồm json và văn bản (xem liên kết).
# filename: locals.tf
locals {
config = yamldecode(file("surroundings/${terraform.workspace}-config.yaml"))
}
2. Tạo file cấu hình cho cả dev và prod
Trong thư mục môi trường, tạo tập tin cấu hình của bạn. Hãy chắc chắn khi đặt tên rằng tên đó cũng giống với tên không gian làm việc trên địa hình của bạn vì chúng tôi sẽ sử dụng biến `${terraform.workspace}` để phân biệt giữa hai tệp.
# filename: dev-config.yaml
project_id: "cloud-project-dev"
terraform_state_bucket_name: "terraform_state_bucket-name"
some_dataset_map:
dataset_1:
description: "dataset_1"
dataset_2:
description: "dataset_2"
# filename: prod-config.yaml
project_id: "cloud-project-prod"
terraform_state_bucket_name: "terraform_state_bucket-name"
3. Mô-đun
Tôi sử dụng các khối mô-đun để phân tách các tài nguyên được sử dụng. Không có quy tắc nghiêm ngặt nào về những gì diễn ra trong một mô-đun, nhưng tôi thường nhóm các tài nguyên được phân tách cho cùng một dịch vụ lại với nhau (ví dụ: Công việc luồng khí ghi vào bảng SQL hoặc VM và các bộ cân bằng tải liên quan của nó).
Điều chính ở đây là các mô-đun của bạn trỏ đến native.config trong trường hợp này là tệp yaml mà chúng tôi đã tạo. Sau đó, Locals.tf sẽ lo phần còn lại.
# filename: fundamental.tf
module "module1" {
supply = "./modules/module1"
terraform_state_bucket_name = native.config.terraform_state_bucket_name
location = native.config.location
}module "module2" {
supply = "./modules/module2"
project_id = native.config.project_id
}
Nguồn
[ad_2]
Source link