הקדמה
המחשוב בענן מספק משאבים לחישוב לפי דרישה, אשר מופרדים מחומרה פיזית והגדרות התחתונות נחוצות. מערכות תוכנה אוטונומיות מציעות משאבי חישוב אלה בענן כדי להשיג אוטומציה שמציע המחשוב בענן. בזכות האוטומציה כזו, ניתן לשלוט ולשנות את המשאבים הזמינים באופן פרוגרמטי על ידי תיבת הכלים של ספקי הענן. בכך, שינויים בתשתית (כמו התקנת משאבים) ניתן ליישם במהירות ובאמינות יותר ולפעול בעיקר בלי התערבות ידנית, אך עם היכולת לצפות בכל התהליך ולהחזיר שינויים אם משהו לא הולך כנדרש.
תשתית כקוד (Infrastructure as Code – IaC) היא הגישה של האוטומציה בהטמעת תשתיות ושינויים על ידי הגדרת מצבי המשאבים הרצויים ויחסיהם הנאמנים בקוד. הקוד נכתב בשפות מיוחדות וקריאות לאנוש של כלי IaC. המשאבים האמיתיים בענן נוצרים (או משתנים) כאשר אתה מפעיל את הקוד. מכאן, תיבת הכלים מתאפשרת לפנות אל ספק הענן או למערכת ההטמעה בשמך כדי ליישם את השינויים הנדרשים, מבלי להשתמש בממשק האינטרנט של ספק הענן. הקוד ניתן לשנות כל פעם שנדרש — בעת ביצוע הקוד, תיבת הכלים של IaC תדאג למצוא את ההבדלים בין התשתית הרצויה בקוד לתשתית האמיתית בענן, ולקחת צעדים להביא את המצב האמיתי להיות שווה למצב הרצוי
כדי ש-IaC יעבוד בפועל, המשאבים שנוצרים לא יישנו ידנית לאחר מכן (תשתית לא נעלמה), מאחר שמייצר סכסוך בין התשתית הצפויה בקוד למצב האמיתי בענן. בנוסף, המשאבים שנערכו ידנית עשויים להיות נוצרים מחדש או להימחק במהלך ביצועי הקוד בעתיד, וכל ההתאמה למידע ייאבד. הפתרון לכך הוא לכלול את השינויים בקוד התשתית.
במאמר הקונספטואלי הזה, נבחן את הגישת IaC, היתרונות שלה ודוגמאות של מימושים בעולם האמיתי. נכיר גם את Terraform, כלי תיעוד קוד פתוח להגדרת תשתית. נסקור את תפקידו של Terraform בגישה זו ואיך הוא נשווה לכלי IaC אחרים. יתרונות של IaC
עם IaC, תוכלו ליצור מהר תשתיות רבות, ממקור יחיד של אמת: הקוד המצהיר. זה מבטיח יתרונות רבים המבטיחים יצירת משאבים בצורה עקבית ללא שגיאות וכן הפחתת זמן הניהול וההגדרה הידנית.
היתרונות העיקריים הם:
- מאפשרת ניהול ואספקת משאבים באמצעות שפת תכנות, מה שמקל על אוטומציה ועקביות.
- חיסכון בעלויות: IaC, כגון Terraform, מפחית משמעותית את העלויות על ידי תיאור התשתית בקוד, מה שמאפשר הקצאה מהירה וביטול הקצאה של סביבות ענן. בניגוד למשאבים שאינם של Terraform, שעלולים לגרור עלויות מתמשכות על ידי ריצה ברקע
- אוטומציה: Terraform עושה אוטומציה של יצירת סביבות שלמות, ומבטלת את הצורך בהתערבות ידנית. זה מייעל את תהליך הפריסה ומבטיח עקביות על פני פריסות.
- אבטחה ותצורה: תבניות מוכנות עם הגדרות אבטחה מוגדרות מראש, המסופקות על ידי מומחים, ניתנות להגדרה ולהוספה בקלות לסביבות ולפריסות בלחיצת כפתור. זה משפר את האבטחה ומבטיח ציות לשיטות עבודה מומלצות.
היתרונות הפיתוחיים של IaC:
- הטמעה- Deployment : הסרת התערבות ההטמעה הידנית עם ספקי הענן משמעה מהירות הטמעה יותר.
- החלמה Recovery : זיהוי בעיות בהגדרה יכול למשוך החלמה מהירה מכשלים ותקלות.
- עקביות Consistency : הפיצול של משאבים זהים בכל פעם, מונע את השברון בתשתית.
- שינוי Modification : שינוי משאבים יכול להיות לך זמן מילוי מהיר.
- חוזר Reusability : שימוש חוזר בחלקי הארכיטקטורה של התשתית בפרויקטים עתידיים.
- שליטה גרסאות Version Control : אחסון הקוד של התשתית במערכות בקרת גרסאות.
- ראיות Visibility : כתיבת תצורה כקוד פועלת כתיעוד לתשתית.
במסגרת זרימת עבודה של IaC ניתן להפעיל תשתיות באופן חוזר על דרך תקן, וכך לקצר את תהליך פיתוח התוכנה והבדיקה כיון שהפיתוח, הסבב המיועד, בדיקת האיכות (QA) והפרודוקציה (Production) הם מופרדים. תוכלו לחזור על התהליך של כתיבת קוד ובדיקתו בזמן אמת על ידי הפעלת התשתית כפעמים רבות שתרצו. לאחר שהתשתית שנכתבה עומדת בכל הדרישות, תוכלו להטמיע אותה בסביבות עננים הרצויות. כאשר דרישות חדשות עולות, תוכלו לחזור על התהליך.

זרימת עבודה כללית של IaC
IaC, המבוסס על קוד, צריך להיות תמיד מקושר עם תוכנת בקרת גרסאות (VCS), כמו Git. אחסון ההצהרות של התשתית ב-VCS עושה אותם נגישים בקלות, עם שינויים הנראים לכל אחד בצוות שלך, ומספק צילומי מסך בנקודות היסטוריות, כך שתוכל לגלות תמיד חזרה לגרסא קודמת אם שינויים חדשים יגרמו לשגיאות. אפשר להגדיר את VCS להפעיל באופן אוטומטי את כלי ה-IaC כדי לעדכן את התשתית בענן כאשר יתווסף שינוי אושר.
עכשיו אתם יודעים מה הגישה IaC, ואילו היתרונות שהיא מביאה. עכשיו תלמדו על המצבים, המנגנונים למעקב אחר משאבים המיושם ב-IaC. לאחר מכן, תמשיכו עם תפקידו של Terraform וכלים אחרים המשתמשים ב-IaC. מהו 'מצב'?
בסביבת IaC, המונח 'מצב' מתייחס למצב העתידי של משאבי התשתית הרצויים בפריסה. יש לפחות שלושה מצבים בכל רגע נתון: המצב האמיתי בענן, המצב האידיאלי שמוצג בקוד, והמצב המטמון ששומר עליו כלי ה-IaC. המצב המטמון מתאר את המצב בענן כפי שהוא היה בעת ביצוע הקוד לאחרונה. Terraform מאפשר לך להפעיל את אותו הקוד פעמים רבות, ובכל פעם יוצר מצבים מרובים לכל פרטה.
איך משתנה המצב (State)
המצב האמיתי בענן (של המשאבים המנוהלים) צריך להיות תמיד זהה למצב המטמון (Cache) של כלי ה-IaC. בעת ביצוע הקוד, הכלי ישווה את המצב האידיאלי למצב המטמון ויחדש את ההבדלים שנזהרו לענן. אם המצבים המטמון והאמיתיים אינם תואמים, סביר מאוד שהביצוע יכשל או שהמשאבים יונצו בצורה שגויה. תפקידו של Terraform ב-IaC
Terraform הוא כלי פתוח לתיעוד קוד IaC, נכתב בשפת Go ופותח על ידיHasicorp . הוא תומך במספר ספקי עננים שונים, כולל DigitalOcean. הגדרות התשתית נכתבות בשפת התצורה של Hashicorp (HCL), וקבצי הקוד שנכתבים בה מכילים את הסיומת ".tf"
Terraform פועל על ידי קריאת הקוד שמתאר את התשתית שלך ויוצר גרף המכיל את כל המשאבים עם היחסים המשותפים שלהם. הוא משווה את זה למצב המטמון של המשאבים בענן, ומכין תוכנית ביצוע שמפרטת אילו פעולות ייושמו בענן, ובאיזה סדר, כדי להגיע למצב הרצוי.
שני הרכיבים המרכזיים של Terraform הם ספקים ומספקים. הספקים אחראים לאינטראקציה עם ספק ענן נתון, ליצירת, לניהול ולמחיקת משאבים, בעוד המספקים משמשים לביצוע פעולות ספציפיות על משאבים מרוחקים שנוצרו או המחשב המקומי שהקוד נכתב עליו.
Terraform תומך בניהול רכיבי ספק ענן בסיסיים, כגון מקרים של חישוב, שיווק מערכות, אחסון ורשומות DNS, אך ניתן להוסיף עוד ספקים ומספקים, בשל טבעו הנרחב.
ב-IaC, התפקיד של Terraform הוא לוודא שמצב המשאבים בענן שווה למצב המוצג בקוד. הוא אינו מקבל את המשאבים שהוטמעו, ומפעילו אינו מתמקד בהתקנת התכנות הראשונית של המשאבים שנצפו עם תוכנה ומשימות. בקטע הבא, תלמדו כיצד הוא נשווה לכלי אחרים וכיצד הם מרחיבים אחד את השני בתהליך רגיל. כלים שמשתמשים ב-IaC
כלים המשתמשים ב IaC
הגישה של IaC נפוצה בתוכנה מודרנית להטמעה, ניהול תצורה, ותוכנות אורכסטרציה. Docker ו-Kubernetes, הכלים המובילים המשמשים ליצירת קונטיינר ולאורכסטרציה, שניהם משתמשים ב-YAML כשפתם להצהרה על התוצאה הרצויה. מאידך, Hashicorp Packer, כלי ליצירת צילומי מסך של הטמעות, משתמש ב-JSON להצהרה על התבנית והמשתנים ממנה ייבנה תמונת המערכת.
Ansible, Chef, ו-Puppet, שלושת כלי ניהול התצורה הפופולריים ביותר, משתמשים כולם בגישת IaC כדי להגדיר את המצב הרצוי של השרתים שהם ניהלים.
Ansible מקשיב לשרתים שניתן ובהתאם לרשימת השרתים שנמסרה. רשימה היא קובץ טקסטואלי המתאר לאנסיבל אילו פעולות לבצע על המשאבים המטרה הקיימים. דוגמאות לפעולות אלו כוללות את הרצת השירותים, התקנת חבילות באמצעות מנהל החבילות הסטנדרטי, או ביצוע פקודות מותאמות בbash.
Chef ו-Puppet דורשים שרתים מרכזיים עם תוכנות שרת מותקנות על כל אחד מהמנוהלים. לעומת אנסיבל, Chef משתמש בשפה Ruby, ו-Puppet משתמש בשפת ההצהרה הדיאלקטית שלו לתיאור המשאבים.
Terraform אינו מתוחכם באופן בלעדי עם כלים אחרים ל-IaC ולמערכות DevOps. הכוח שלו הוא בהצהרת משאבי חומרה, בניגוד להתקנת התוכנה הנוספת ולהגדרות ראשוניות של השרתים.
בניגוד לכלי ניהול תצורה כמו אנסיבל ו-Chef, Terraform אינו מתאים להתקנת תוכנות על המשאבים היעד ולהגדרת משימות. במקום זאת, Terraform מציע ספקים לאינטראקציה עם המשאבים שהוא תומך בהם.
Terraform יכול לעבוד ממחשב יחיד ואינו דורש שרתים מרכזיים עם תוכנות לקוח מותקנות על המשאבים שהוטמעו, למרות שכלי נוסף. הוא לא בודק את המצב האמיתי שלהם ומחדש את התצורה באופן אוטומטי, מאחר וממרכזו העיקרי הוא פרישת המשאבים. הזרימה הרגילה היא לפרוס את משאבי התשתית באמצעות Terraform ולאחר מכן להתקין אותם באמצעות כלי ניהול התצורה, אם נדרש.
לצורך Chef, Terraform מציע מתקין פנימי שמגדיר את Pipelines שלו במשאבים מרוחקים הצורכים. בעזרתו תוכל להוסיף באופן אוטומטי את כל השרתים המטופלים שלך לשרת הראשי, ממנו תוכל להגדיר אותם באמצעות ספריות היוצרות ועל השרתים.

סיכום
מאמר זה כיסה את פרדיגמות גישת ה-IaC, היתרונות שלה מעל ניהול מערכות ידני מסורתי, את היסודות של Terraform ככלי תצורת יישום ל-IaC, וכיצד הוא נשווה לכלים פופולריים נוספים לאוטומציה בתשתיות.
אם אתם מחפשים לשלב את התשתית כקוד בתהליך העבודה שלכם, עיינו עקבו אחרי המאמרים של סדרת Terraform שלנו כדי ללמוד את היסודות של השימוש בכלי זה בתהליך הפיתוח והפרסום שלכם.
אחת הדרכים להתחיל עם Terraform היא לקרוא איך למבנה פרויקט שלך ב-Terraform כדי להבין כיצד לוודא כי התשתית שלך נשארת נפתחת ונרחבת.