הרצאה: Infrastructure as Code (IaC) ו-Terraform¶
הקדמה – למה IaC?¶
הiac או infrastructure as code הוא העקרון שאנחנו יכולים להרים סביבה (למשל עננית בAWS) באמצעות קטעי קוד, במקום ידנית.
בעולם הענן המסורתי:
- נדרשנו להקים שרתים, מסדי נתונים, רשתות ועוד בידיים
- כל שינוי קטן → כניסה לקונסול, שינוי, לחיצה על כפתור
- קשה לשכפל, קשה לניהול גרסאות, טעויות נפוצות
Infrastructure as Code (IaC) אומר לנו:
"ניהול התשתית כמו קוד – כל משאב בענן מוגדר בקבצי קוד, ניתן לגיט, לבדוק ולפרוס אוטומטית."
עקרונות IaC¶
-
Versioned Infrastructure
-
כל שינוי בתשתית נמצא ב-Git
-
קל לחזור אחורה
-
Repeatable
-
אפשר לשחזר את התשתית באותו מצב בכל סביבה (DEV, STAGE, PROD)
-
Automated
-
פריסות, עדכונים והסרות של משאבים מתבצעים אוטומטית
-
Declarative
-
מגדירים מה רוצים שיהיה, לא איך לבצע
- דומה ל־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"
}
}
שלבי הרצה:
terraform init→ מגדיר את Terraform ומוריד pluginsterraform plan→ מציג מה Terraform עומד לעשותterraform apply→ יוצר/מעדכן את המשאבים בענןterraform destroy→ מסיר את כל המשאבים
שימוש במשתנים¶
variable "instance_type" {
default = "t2.micro"
}
resource "aws_instance" "web_server" {
ami = "ami-0c02fb55956c7d316"
instance_type = var.instance_type
}
- מאפשר גמישות
- קל לשנות סביבה בלי לגעת בקוד
Outputs – לקבל מידע חשוב¶
- 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