paint-brush
Hướng dẫn hữu ích để di chuyển trạng thái Terraform sang GitLab CI/CDtừ tác giả@bluelight
1,878 lượt đọc
1,878 lượt đọc

Hướng dẫn hữu ích để di chuyển trạng thái Terraform sang GitLab CI/CD

từ tác giả Bluelight6m2023/02/21
Read on Terminal Reader

dài quá đọc không nổi

Terraform là một công cụ phần mềm dành cho Cơ sở hạ tầng dưới dạng mã (IaC) Nó ghi lại mọi thông tin về cơ sở hạ tầng được xác định trong mã của bạn thông qua một tệp trạng thái. GitLab gần đây đã hạ thấp rào cản gia nhập để tích hợp Terraform bằng cách cung cấp một cách để lưu trữ và quản lý trạng thái Terraform, cũng như một cách dễ dàng để thiết lập một CI xung quanh nó.
featured image - Hướng dẫn hữu ích để di chuyển trạng thái Terraform sang GitLab CI/CD
Bluelight HackerNoon profile picture


Là một chuyên gia phần mềm xử lý Cơ sở hạ tầng dưới dạng Mã (IaC), rất có thể bạn sẽ làm việc nhiều với địa hình . Khi giúp khách hàng mới sử dụng IaC, thông thường bạn sẽ đơn giản hóa mọi thứ, nhưng việc quản lý tệp trạng thái Terraform là thách thức đầu tiên bạn gặp phải. Về cơ bản, trạng thái Terraform chứa thông tin nhạy cảm không nên được lưu trữ bởi kiểm soát nguồn nhưng đồng thời sẽ không mở rộng quy mô nếu bạn có nhiều người dùng làm việc trên cùng một trạng thái Terraform. Câu trả lời cho điều đó? phụ trợ.


Điều quan trọng cần lưu ý là bạn có thể lưu trữ tệp trạng thái đó trên bộ chứa S3 và sử dụng DynamoDB để quản lý trạng thái khóa. Tuy nhiên, cách tiếp cận này sẽ buộc bạn phải tạo các tài nguyên bổ sung khiến nó trở thành một tùy chọn phức tạp, đặc biệt nếu khách hàng đang sử dụng GitLab. GitLab gần đây đã hạ thấp rào cản gia nhập để tích hợp Terraform bằng cách cung cấp một cách để lưu trữ và quản lý trạng thái Terraform, cũng như một cách dễ dàng để thiết lập một CI xung quanh nó.


Trong bài đăng trên blog này, chúng tôi sẽ giải thích tệp trạng thái Terraform là gì, cách di chuyển tệp đó sang GitLab và thiết lập Đường ống CI cho tệp đó. Bạn có thể ghé thăm kho lưu trữ của chúng tôi đây .

Mục lục

  • Trạng thái Terraform là gì?
  • Cách để GitLab quản lý trạng thái Terraform
  • Cách để GitLab chạy IaC của bạn thông qua CI Pipeline
  • Tiền thưởng: Cơ sở hạ tầng
  • Phần kết luận

Trạng thái Terraform là gì?

Terraform ghi lại bất kỳ thông tin nào về cơ sở hạ tầng được xác định trong mã của bạn thông qua tệp trạng thái. Được viết bằng JSON, về cơ bản, nó ghi lại ánh xạ từ mã Terraform tới các tài nguyên thực được tạo. Dưới đây là một ví dụ về giao diện của terraform.tfstate.


Về cơ bản, mỗi khi bạn chạy Terraform, nó sẽ tìm nạp trạng thái mới nhất cho Phiên bản EC2 của nó và so sánh nó với cấu hình Terraform của bạn để xác định những thay đổi nào cần được áp dụng.


 { "version": 4, "terraform_version": "0.12.0", "serial": 1, "lineage": "1f2087f9-4b3c-1b66-65db-8b78faafc6fb", "outputs": {}, "resources": [ { "mode": "managed", "type": "aws_instance", "name": "example", "provider": "provider.aws", "instances": [ { "schema_version": 1, "attributes": { "ami": "ami-0c55b159cbfafe1f0", "availability_zone": "us-west-2a", "id": "i-00a123a0accffffff", "instance_state": "running", "instance_type": "t2.micro", "(...)": "(truncated)" } } ] } ] }


Theo mặc định, terraform.tfstate này được lưu trữ cục bộ nơi bạn có các tệp Terraform, lập kế hoạch và áp dụng các thay đổi của mình. Đối với một dự án cá nhân mà bạn chỉ đang chạy một số thử nghiệm, đó là cách tốt nhưng không phải là cách được đề xuất, đây là lý do:

  • Được lưu trữ ở một vị trí được chia sẻ: nếu bạn đang lưu trữ tệp trạng thái này trên máy trạm cục bộ của mình và phải làm việc với một kỹ sư khác, mọi thứ sẽ trở nên phức tạp. Cả hai bạn sẽ phải đảm bảo rằng bạn đang sử dụng phiên bản mới nhất của trạng thái và bạn có thể gặp phải tình trạng chạy đua nếu chạy gói Terraform hoặc đăng ký cùng một lúc.
  • Bảo vệ thông tin nhạy cảm: Tệp trạng thái được tạo có thể chứa các khóa mã hóa và mật khẩu cơ sở hạ tầng. Tuy nhiên, các tệp trạng thái không được mã hóa theo mặc định và việc lưu trữ thông tin nhạy cảm ở dạng văn bản thuần túy là một ý tưởng tồi.
  • Khóa: Hầu hết các hệ thống kiểm soát phiên bản không hỗ trợ bất kỳ hình thức khóa nào ngăn hai thành viên trong nhóm chạy ứng dụng Terraform đồng thời trên cùng một tệp trạng thái. Đây là một lý do khác khiến chúng tôi sẽ không thấy tệp trạng thái được quản lý bởi kiểm soát nguồn.

Cách nhận GitLab để quản lý trạng thái Terraform

Với việc Terraform được coi là tiêu chuẩn trong việc cung cấp cơ sở hạ tầng đám mây, đã khoảng một năm kể từ khi GitLab bắt đầu cung cấp một cách để lưu trữ và quản lý trạng thái Terraform của bạn. Vì lý do này, chúng tôi muốn chia sẻ quá trình di chuyển với bạn vì gần đây chúng tôi đã bắt đầu sử dụng GitLab để quản lý IaC của mình.


Đối với bài viết này, chúng tôi giả định rằng bạn đang sử dụng trạng thái cục bộ và được quản lý trạng thái của bạn bằng Bộ chứa AWS S3 hoặc giải pháp phụ trợ khác.

Đầu tiên, bạn cần thay đổi backend.tf của mình để sử dụng HTTP.


 terraform { backend "http" {} }


Tiếp theo, bạn sẽ cần thiết lập 4 biến trong thiết bị đầu cuối của mình:

  • DỰ ÁN_ID: Bạn có thể dễ dàng tìm thấy điều này bằng cách điều hướng đến kho lưu trữ của mình trên trang Tổng quan về dự án

__ Phụ trợ dự án Terraform __

  • TF_USERNAME: Tên người dùng Gitlab có quyền truy cập vào repo mà bạn đang làm việc.
  • TF_PASSWORD: Mã thông báo truy cập được tạo từ người dùng GitLab của bạn.
  • TF_ADDRESS: URL của phụ trợ trạng thái từ xa


 PROJECT_ID="28450092" TF_USERNAME="florianpialoux" TF_PASSWORD="123456789" TF_ADDRESS="https://gitlab.com/api/v4/projects/${PROJECT_ID}/terraform/state/aws-buckets"


Bây giờ bạn có thể chạy lệnh di chuyển sẽ di chuyển trạng thái Terraform của bạn từ vị trí trước đó sang GitLab bằng lệnh sau:


 terraform init \ -migrate-state \ -backend-config=address=${TF_ADDRESS} \ -backend-config=lock_address=${TF_ADDRESS}/lock \ -backend-config=unlock_address=${TF_ADDRESS}/lock \ -backend-config=username=${TF_USERNAME} \ -backend-config=password=${TF_PASSWORD} \ -backend-config=lock_method=POST \ -backend-config=unlock_method=DELETE \ -backend-config=retry_wait_min=5


Bạn sẽ cần cung cấp xác nhận “có” để GitLab có thể bắt đầu quản lý tệp trạng thái của bạn. Đây là một ví dụ từ trạng thái cục bộ đến GitLab:

__ Ví dụ về trạng thái địa phương của Terraform __

Ví dụ s3 đến GitLab

__ Ví dụ về trạng thái di chuyển S3 sang Gitlab __

Giờ đây, bạn có thể điều hướng đến Cơ sở hạ tầng > Terraform từ giao diện GitLab và xem trạng thái của mình:

__ Giao diện cơ sở hạ tầng Gitlab __

Tôi nhận thấy một số tệp trạng thái mà tôi có từ s3 sẽ trống ngay cả sau khi sử dụng lệnh migration-state đã chạy trước đó, trong trường hợp này, bạn có thể chạy lệnh này:


 terraform state pull > aws-buckets.json


Sao chép và dán nội dung từ trạng thái s3 và chạy một lần đẩy:


 terraform state push -lock=true aws-buckets.json


GitLab hỗ trợ tạo phiên bản cho tệp trạng thái Terraform của bạn nhưng việc xem/khôi phục các phiên bản cũ hơn thông qua WebUI sẽ yêu cầu bạn sử dụng một Gói cao cấp GitLab . Nếu không, bạn sẽ cần tạo API GraphQL lời yêu cầu .

Cách để GitLab chạy IaC của bạn thông qua CI Pipeline

GitLab cung cấp một hình ảnh docker có chứa GitLab-Terraform, là một tập lệnh bao bọc mỏng xung quanh tệp nhị phân chính thức của Terraform. Ngoài ra, bạn có thể sử dụng hình ảnh docker chính thức của Hashicorp. Bạn có thể tìm thêm thông tin về GitLab Terraform Image đây .

Khi công việc áp dụng địa hình chạy, bạn sẽ có thể biết khi nào trạng thái được sử dụng và với đường ống nào.

__ terraform xin việc trong giao diện gitlab __

Tìm hiểu thêm về giao diện của gitlab-ci.yml của chúng tôi đây . Dưới đây là các biến sẽ cần được xác định ở cấp độ dự án:

__ Biến dự án GitLab-ci.yml __

Tiền thưởng: Cơ sở hạ tầng

Như bạn có thể nhận thấy, nhìn vào gitlab-ci.yaml của chúng tôi, chúng tôi đã thêm cơ sở hạ tầng điều này cho phép chúng tôi có nhiều quyền kiểm soát hơn đối với thanh toán trên đám mây của mình vì nó cung cấp cho bạn ước tính chi phí bất cứ khi nào bạn xác định tài nguyên mới cho IaC của mình. Để tìm hiểu thêm về Hạ tầng cơ sở, bạn có thể xem chuyên sâu của chúng tôi bài báo về những gì nó đòi hỏi, và từng bước của chúng tôi hướng dẫn về cách tích hợp nó với Terraform.

Phần kết luận

Để trạng thái Terraform và CI của bạn chạy trên Gitlab là một cách tuyệt vời để tuân theo các phương pháp hay nhất của GitOps. Cả hai đều là sự kết hợp tuyệt vời để phát triển và triển khai IaC. Vì hầu hết các bạn có thể đã sử dụng GitLab cho các kho lưu trữ của mình, nên việc đặt IaC của bạn dưới một mái nhà sẽ trở nên đơn giản hơn nhiều và để GitLab quản lý trạng thái Terraform của bạn bằng cách hỗ trợ mã hóa khi truyền và khi lưu trữ, cũng như tạo phiên bản, khóa và mở khóa kho lưu trữ của bạn. tình trạng.


Cũng được xuất bản ở đây .


L O A D I N G
. . . comments & more!

About Author

Bluelight HackerNoon profile picture
Bluelight@bluelight
Bluelight Consulting are experts in custom software development, devops engineering & nearshore staff augmentation.

chuyên mục

BÀI VIẾT NÀY CŨNG CÓ MẶT TẠI...