Tìm hiểu Nguồn của module Terraform
Mọi mô-đun được khai báo trong cấu hình Terraform phải đến từ một nguồn. Do đó, source được cung cấp một đường dẫn đến thư mục module như hình dưới đây:
module "local-module" { source = "../local-module" }
Hoặc có thể sử dụng các mô-đun từ Terraform registry
module "vpc" { source = "terraform-aws-modules/vpc/aws" }
Hoặc dùng kho lưu trữ git
module "modules" { source = "git::https://gitlab.com//modules.git" }
Trong bài viết hôm nay, bạn sẻ học được cách sử dụng git làm remote module cho Terraform. Bắt đầu với template modules ở đây. Clone repo này về sau đó push lên repo của bạn ở chế độ riêng tư.
Cung cấp thông tin đăng nhập Git
Nếu kho lưu trữ là công khai, không cần thực hiện thêm hành động nào. Tuy nhiên, kho lưu trữ riêng tư sẽ không tải được khi chạy terraform init.
Thêm vào file ~/.ssh/config (đối với linux và dùng phương thức xác thực ssh) với nội dung như sau:
# GitLab.com Host gitlab.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa
trong đó ~/.ssh/id_rsa là đường dẫn đên private key. Đối với phương thức https bạn có thẻ thử như sau:
module "name_of_module" { source = "git::https://<user>:<pass>@github.com/folder/terraform-aws.git" }
Tham chiếu mô-đun trong thư mục con
Kho lưu trữ git nếu nó lưu trữ một module duy nhất. Git kiểm tra toàn bộ kho lưu trữ và trả lại nội dung cho Terraform dưới dạng một module. Tuy nhiên, cũng có thể lưu trữ nhiều module trong một kho lưu trữ git duy nhất. Điều này được gọi là “monorepo.”
Đối với repo được cung cấp ở trên có hai module là vpc và security group. Bằng cách sử dụng một cặp // ở cuối vị trí nguồn, bạn có thể hướng dẫn Terraform kiểm tra một thư mục cụ thể để đáp ứng yêu cầu của bạn.
module "transit-gateway" { source = "git@github.com:devopsifyco/terraform_module_template.git//module_aws_vpc" }
Ghim vào một phiên bản hoặc nhánh cụ thể
Đối với kho lưu trữ được lưu trữ trên git, bạn sẻ có nhu cầu sử dụng nhánh hoặc tag để quản lý version của module. Tham số ref truy vấn được chuyển đến git checkout để chọn phiên bản(tag) hoặc nhánh cụ thể.
module "transit-gateway" { source = "git@github.com:devopsifyco/terraform_module_template.git//module_aws_vpc?ref=production" }