רוב הבעיות בתשתית הן לא טכניות. הן ארכיאולוגיות. מישהו שינה security group לפני שמונה חודשים, אף אחד לא תיעד את זה, ועכשיו אתם מפענחים מערכת פרודקשן דרך לחיצות בקונסולה. תשתית כקוד (IaC) היא הדרך החוצה.
מה “כקוד” באמת נותן לכם
הגדרה של השרתים, הרשתות וההרשאות בקבצים - Terraform, Pulumi, CloudFormation - היא לא עניין של להיראות מודרני. היא נותנת שלושה דברים קונקרטיים:
- diff. כל שינוי הוא pull request שאפשר לסקור, לא לחיצה שקטה.
- מקור אמת אחד. ה-repo אומר מה אמור להתקיים. סטייה (drift) הופכת לגלויה במקום נסתרת.
- שחזור. אפשר לבנות מחדש את כל הסטאק בחשבון נקי ולקבל את אותה תוצאה.
התחילו קטן יותר ממה שנדמה לכם
הטעות הנפוצה היא לנסות לקודד הכל בבת אחת. אל תעשו את זה. בחרו רכיב אחד כואב שמנוהל ידנית - בדרך כלל רשת או IAM - והכניסו רק אותו לקוד.
resource "aws_security_group" "web" {
name = "web-tier"
description = "HTTP/HTTPS from the load balancer only"
vpc_id = var.vpc_id
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
security_groups = [aws_security_group.alb.id]
}
}
זה כלל שכל אחד יכול לקרוא, לסקור ולסמוך עליו. אין יותר “אני חושב שפורט 8080 פתוח, תן לי לבדוק”.
ה-state הוא החלק שמזלזלים בו
Terraform שומר קובץ state שממפה בין הקוד למשאבים האמיתיים. תתייחסו אליו כמו למסד נתונים בפרודקשן: לאחסן מרחוק, לנעול, לגבות, ולעולם לא לערוך ידנית. רוב סיפורי האימה על IaC הם למעשה סיפורי אימה על ניהול state.
התמורה
ברגע שהתשתית חיה ב-git, הקונסולה מפסיקה להיות המקום שבו אתם מבצעים שינויים והופכת למקום שבו אתם מסתכלים עליהם. המעבר הזה - מלחיצה לסקירה - הוא מה שהופך תשתית מדבר שאתם זוכרים לדבר שאתם מנהלים.