رفتن به محتوا
بازگشت به وبلاگ
خودکارسازی

ساخت ماژول‌های Terraform قابل استفاده مجدد برای زیرساخت

طراحی و انتشار ماژول‌های Terraform قابل استفاده مجدد با متغیرهای ورودی، مقادیر خروجی و Pin کردن نسخه برای اشتراک زیرساخت در تیم.

شهریور ۱۴۰۴
۱۴ دقیقه مطالعه

مقدمه

ماژول‌های Terraform سنگ بنای infrastructure-as-code قابل استفاده مجدد و قابل نگهداری هستند. بدون ماژول‌ها، کد Terraform را در پروژه‌ها کپی-پیست می‌کنید که تغییرات گلوبال را کابوس می‌کند. با ماژول‌های طراحی‌شده خوب، الگوهای زیرساخت را یک بار تعریف کرده و با پارامترهای مختلف مجدداً استفاده می‌کنید.

ساختار ماژول

TEXT
project/
├── main.tf          ← ماژول root
└── modules/
    └── security-group/
        ├── main.tf
        ├── variables.tf
        └── outputs.tf

نوشتن ماژول

HCL
# modules/security-group/variables.tf
variable "name" {
  type = string
}

variable "vpc_id" {
  type = string
}

variable "ingress_rules" {
  type = list(object({
    from_port   = number
    to_port     = number
    protocol    = string
    cidr_blocks = list(string)
    description = string
  }))
  default = []
}
HCL
# modules/security-group/main.tf
resource "aws_security_group" "this" {
  name   = var.name
  vpc_id = var.vpc_id
}

resource "aws_security_group_rule" "ingress" {
  for_each = { for i, rule in var.ingress_rules : i => rule }

  type              = "ingress"
  security_group_id = aws_security_group.this.id
  from_port         = each.value.from_port
  to_port           = each.value.to_port
  protocol          = each.value.protocol
  cidr_blocks       = each.value.cidr_blocks
}

استفاده از ماژول

HCL
module "web_sg" {
  source = "./modules/security-group"

  name   = "web-tier-sg"
  vpc_id = module.vpc.vpc_id

  ingress_rules = [
    {
      from_port   = 443
      to_port     = 443
      protocol    = "tcp"
      cidr_blocks = ["0.0.0.0/0"]
      description = "HTTPS"
    }
  ]
}

نسخه‌بندی ماژول

BASH
# تگ‌گذاری نسخه
git tag v1.0.0
git push origin v1.0.0

# استفاده از نسخه خاص
module "security_group" {
  source = "git::https://github.com/company/tf-modules.git//security-group?ref=v1.0.0"
}

ماژول‌های قابل استفاده مجدد کلید نگهداری زیرساخت در مقیاس هستند. با ماژول‌ها برای الگوهای تکراری‌ترتان شروع کنید، آن‌ها را به‌دقت نسخه‌بندی کنید، و همیشه مثال‌هایی بنویسید که هم به عنوان مستندات و هم تست یکپارچه‌سازی عمل کنند.