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
Đ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
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:
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:
__ __
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ụ s3 đến 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:
__ __
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
GitLab cung cấp
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.
__ __
Tìm hiểu thêm về giao diện của gitlab-ci.yml của chúng tôi
__ __
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
Để 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 .