מה זה Terraform ולמה משתמשים בו¶
תארו לכם שאתם צריכים להקים סביבת ענן שלמה - כמה שרתים, רשת פרטית, מסד נתונים מנוהל, וכללי הרשאות שמחברים בין הכל. אפשר לעשות את זה ידנית, ללחוץ בקונסולה של AWS או Azure, מסך אחרי מסך. זה עובד, פעם אחת. הבעיה מתחילה כשצריך לעשות את זה שוב, לסביבה נוספת, או כשמישהו אחר בצוות צריך להבין מה בכלל הוקם ולמה. בשביל הבעיה הזו בדיוק נבנה Terraform.
הבעיה ש-Terraform פותר¶
הקמת תשתית ידנית דרך קונסולת ענן היא איטית, ומועדת לטעויות אנוש - שכחתם הגדרה אחת, לחצתם על אפשרות לא נכונה, וקיבלתם סביבה שקצת שונה ממה שהתכוונתם. וגם אם הכל הצליח, אין לכם שום תיעוד מדויק של מה בדיוק נוצר, אין דרך פשוטה לשחזר את אותה סביבה בדיוק בסביבה נוספת, ואין דרך לעקוב אחרי שינויים היסטוריים כמו שעוקבים אחרי שינויים בקוד. Terraform, כלי שפיתחה חברת HashiCorp, פותר את זה על ידי הפיכת ההגדרה של התשתית עצמה לקוד - גישה שנקראת Infrastructure as Code, או בקיצור IaC.
תכנות תשתית בהצהרה - declarative¶
הרעיון המרכזי ב-Terraform הוא שאתם לא כותבים רשימת פעולות, כמו "צור שרת, אחר כך צור רשת, אחר כך חבר ביניהם". במקום זה, אתם כותבים קובץ שמתאר את המצב הסופי הרצוי - "אני רוצה שיהיו שני שרתים מסוג כזה, רשת פרטית עם הטווח הזה, ומסד נתונים עם ההגדרות האלה" - וזה נכתב בשפה שנקראת HCL, שפה שנועדה במיוחד להיות קריאה וברורה גם למי שלא מתכנת ותיק. Terraform לוקח את התיאור הזה, משווה אותו למצב הקיים בפועל בענן, ומחליט בעצמו אילו פעולות צריך לבצע כדי להגיע מהמצב הנוכחי למצב הרצוי. זה בדיוק ההבדל בין תכנות אימפרטיבי, "תגיד לי איך", לבין תכנות דקלרטיבי, "תגיד לי מה, ותבין לבד איך".
תהליך העבודה - plan ו-apply¶
בעבודה יומיומית עם Terraform, שתי פקודות מרכזיות חוזרות שוב ושוב. terraform plan בודק מה ההבדל בין קובצי ההגדרה שלכם למצב הנוכחי בפועל בענן, ומציג רשימה מדויקת של מה הולך להשתנות - מה ייווצר, מה יימחק, ומה יתעדכן - לפני שנוגעים בכלום. זה השלב הכי חשוב מבחינת בטיחות, כי הוא נותן לכם הזדמנות לבדוק שההשפעה של השינוי היא בדיוק מה שציפיתם לה, לפני שהיא קורית בפועל. רק אחרי שבדקתם את התוכנית ואישרתם אותה, מריצים terraform apply, שמבצע בפועל את השינויים מול ספק הענן.
ניהול מצב - state¶
כדי לדעת מה כבר קיים ומה עוד לא, Terraform שומר קובץ שנקרא state, מעין "מפת זיכרון" שמתעדת את כל המשאבים שהוא יצר ואת ההגדרות המדויקות שלהם. בכל פעם שמריצים plan, Terraform משווה שלושה דברים - את הקובץ שכתבתם, את קובץ ה-state ששמור אצלו, ואת המצב האמיתי בענן - כדי לזהות בדיוק מה השתנה. בעבודת צוות, קובץ ה-state בדרך כלל לא נשמר מקומית על המחשב של מישהו, אלא במקום מרכזי ומשותף, כדי שכל אנשי הצוות יעבדו מול אותה תמונה מעודכנת של התשתית, ולא ידרכו זה על זה בטעות.
עצמאות מספק ענן¶
יתרון מרכזי נוסף של Terraform הוא שהוא לא קשור לספק ענן ספציפי אחד. אותה שפה, אותם עקרונות עבודה, ואותו תהליך plan ו-apply עובדים בין אם מנהלים תשתית ב-AWS, ב-Azure, ב-Google Cloud, או אפילו בשירותים שהם לא ענן ציבורי בכלל, כמו Kubernetes או שירותי SaaS שונים. זה נעשה באמצעות מה שנקרא providers, תוספים שמתרגמים את השפה הכללית של Terraform לקריאות ה-API הספציפיות של כל ספק. המשמעות המעשית היא שהידע שלכם ב-Terraform לא נתקע עם ספק ענן אחד, וגם ארגון שמנהל תשתית במספר ספקים בו זמנית, יכול לעשות זאת בכלי אחד ובשפה עקבית אחת.
מי שרוצה להבין את התמונה הרחבה יותר של איך תשתית שרת, פריסה, וניהול סביבות עובדים יחד, יכול למצוא את הבסיס לזה בקורס צד שרת, שבו לומדים גם את היסודות שעליהם Terraform בסופו של דבר עובד - איך שרתים, רשתות, ותהליכי פריסה מתפקדים בפועל.
לסיכום¶
Terraform לא המציא אף רעיון חדש בקונספט של ניהול תשתית - הוא פשוט לקח את אותם עקרונות שכבר מוכרים היטב מעולם ניהול קוד, ויישם אותם על תשתית ענן. התוצאה היא תשתית שאפשר לעקוב אחרי השינויים בה, לשחזר אותה בלחיצת כפתור, ולעבוד עליה בצוות בלי לדרוך אחד על השני. אם אתם עובדים עם ענן ברצינות, זה כלי שכדאי מאוד להכיר.