לדלג לתוכן

הרצאה: Infrastructure as Code (IaC) ו-Terraform

הקדמה – למה IaC?

הiac או infrastructure as code הוא העקרון שאנחנו יכולים להרים סביבה (למשל עננית בAWS) באמצעות קטעי קוד, במקום ידנית.

בעולם הענן המסורתי:

  • נדרשנו להקים שרתים, מסדי נתונים, רשתות ועוד בידיים
  • כל שינוי קטן → כניסה לקונסול, שינוי, לחיצה על כפתור
  • קשה לשכפל, קשה לניהול גרסאות, טעויות נפוצות

Infrastructure as Code (IaC) אומר לנו:

"ניהול התשתית כמו קוד – כל משאב בענן מוגדר בקבצי קוד, ניתן לגיט, לבדוק ולפרוס אוטומטית."


עקרונות IaC

  1. Versioned Infrastructure

  2. כל שינוי בתשתית נמצא ב-Git

  3. קל לחזור אחורה

  4. Repeatable

  5. אפשר לשחזר את התשתית באותו מצב בכל סביבה (DEV, STAGE, PROD)

  6. Automated

  7. פריסות, עדכונים והסרות של משאבים מתבצעים אוטומטית

  8. Declarative

  9. מגדירים מה רוצים שיהיה, לא איך לבצע

  10. דומה ל־SQL: "Create table…" ולא "פתח פקודה X"

Terraform – הכלי הפופולרי ל-IaC

הTerraform היא ספריית קוד פתוח מ־HashiCorp לניהול תשתיות בענן:

  • רב-ענני – AWS, Azure, GCP ועוד
  • Declarative language – מגדירים משאבים בקבצי .tf
  • State file – Terraform שומר מצב כדי לדעת מה עוד צריך לעדכן

מבנה בסיסי של פרויקט Terraform

main.tf        ← קובץ המשאבים
variables.tf   ← משתנים (Region, instance type, ...)  
outputs.tf     ← פלטים (IP, URLs)
terraform.tfvars ← ערכים אמיתיים למשתנים

דוגמה בסיסית – יצירת שרת AWS EC2

provider "aws" {
  region = "us-east-1"
}

resource "aws_instance" "web_server" {
  ami           = "ami-0c02fb55956c7d316"
  instance_type = "t2.micro"

  tags = {
    Name = "MyWebServer"
  }
}

שלבי הרצה:

  1. terraform init → מגדיר את Terraform ומוריד plugins
  2. terraform plan → מציג מה Terraform עומד לעשות
  3. terraform apply → יוצר/מעדכן את המשאבים בענן
  4. terraform destroy → מסיר את כל המשאבים

שימוש במשתנים

variable "instance_type" {
  default = "t2.micro"
}

resource "aws_instance" "web_server" {
  ami           = "ami-0c02fb55956c7d316"
  instance_type = var.instance_type
}
  • מאפשר גמישות
  • קל לשנות סביבה בלי לגעת בקוד

Outputs – לקבל מידע חשוב

output "public_ip" {
  value = aws_instance.web_server.public_ip
}
  • Terraform מחזיר מידע שימושי אחרי apply
  • ניתן להשתמש ב-output הזה בתסריטים נוספים או CI/CD

Terraform State

  • Terraform שומר קובץ terraform.tfstate
  • הקובץ אומר לו:

  • אילו משאבים קיימים

  • מה שונה לעומת הקוד
  • חובה לשים לב:

  • לא לשים בקוד רגיש

  • ב-Production משתמשים ב-Remote State (S3 + DynamoDB ל-lock)

יתרונות Terraform + IaC

  • אוטומציה מלאה – אין יותר "לוח בקרה ידני"
  • גרסאות – כל שינוי נשמר ב-Git
  • שחזור סביבות – DEV / PROD / TEST זהות
  • אפשרות לכתוב מודולים – reuse לכל פרויקט

דוגמה חיבור לפרויקט שלנו – TRIP בענן

במקום:

  • להקים EC2/DB/S3 בעיניים
  • ולהפיץ ידנית

עם Terraform:

  • מגדירים EC2, RDS, S3, Security Groups בקוד
  • מבצעים terraform apply → הכל מוכן
  • מוסיפים Auto Scaling Group או Load Balancer במודול אחד
  • משתנים את Region / instance_type – והסביבה נבנית מחדש בדיוק

Best Practices

  • מודולים – כדי לא לשכפל קוד
  • Remote state – לשיתוף בין צוותים
  • Variables & Outputs – גמישות ושילוב ב-CI/CD
  • Version control – כל שינוי חייב לעבור דרך Git