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

עשוי שתתרשמו: מהו תשתיות כקוד? איך זה משפר את תהליך הפיתוח והחוויה, ואיפה תרהפורם נכנסת לתמונה? נבחן את כל זה ועוד במדריך זה. אך לפני שנתחיל, הנה כמה דרישות מוקדמות:

  • ידע בסיסי על הענן ומונחים ענן

  • גישה למחשב אישי כדי ליישם דוגמאות קוד

  • חשבון GCP

עם זה, בואו נתחיל.

וזה מה שנכסה:

  1. סקירה של תשתיות כקוד

  2. מהו תרהפורם?

  3. יתרונות של תרהפורם

  4. מונחים נפוצים בשימוש ב-Terraform

  5. פרויקט הדגמה: כיצד לכתוב קונפיגורציה של Terraform

  6. סיכום

סקירה של תשתית כהקוד (IaC)

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

ישנן שתי גישות שונות לתשתית כהקוד: הגישה הפקודתית והגישה המוצהרת.

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

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

ישנם כלים המסוגלים לתמוך בשתי הגישות בעוד אחרים מתאימים רק לאחת מהן. דוגמאות לכמה מהכלים הפופולריים של IaC הנמצאים בשימוש ברחבי העולם כוללים Terraform IaC, AWS Cloud Formation, Ansible, וPulumi, Chef, בין היתר.

כמו שהשם מרמז – תשתית כקוד – הקוד היוצר את התשתית נכתב בשפות תבנית שונות בתחום ה-IaC. שפות תבנית פופולריות כוללות JSON, YAML, תבנית ARM, HCL, סקריפטי Heat, ועוד.

אתה יכול גם להשתמש בכלי סקריפט כדי לבצע תשתית ענן. כמה מהפופולריים כוללים Bash ו-PowerShell. אלה לפעמים מגיעים מותקנים מראש על רוב המחשבים האישיים.

מתוך כל הכלים הללו, תרהפורם ייחודי בגלל סיבות שונות – וזה הכלי שנבחן במאמר זה.

מהו תרהפורם?

תרהפורם הוא כלי קוד פתוח שפותח על ידי HashiCorp בשנת 2014. הוא עבר שיפורים במשך השנים וכיום משמש ככלי תשתיות שאינו תלוי בענן שמאפשר ליצור תשתיות במספר ספקי שירות בעננים שונים.

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

בנוסף, כמו כלים אחרים לניהול תשתיות כקוד, המסגרת התבניתית המשמשת ליצירת תשתיות בתרהפורם היא שפת התבניות של HashiCorp (HCL).

יתרונות של תרהפורם

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

1. גישה דקלרטיבית

גישה זו לאוטומציה של תשתיות בענן מבטיחה שכל התשתיות הנדרשות לפרסום (בסיסי נתונים, שרתים, וכו') מצויינות באופן מפורש ומבוצעות לפיהן. זה עוזר למניעת התנגשויות.

2. טיפול בהתנגשויות

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

3. נטול תלות בענן

טראפורם הוא ספק שירותי אוטומציה רב-תכליתי ורב-ענני עם יכולות אוטומציה של תשתיות יעילות בקרב ספקי שירותי הענן הגדולים (AWS, GCP ו-Azure). הוא מאפשר גם אוטומציה היברידית ובין ספקים.

4. ידידותי למשתמש

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

5. יכולות ניהול קבצים

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

6. בקרת גרסאות

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

7. שימוש חוזר בקוד

Terraform מציע מגוון רחב של תבניות קוד לשימוש קל בעמוד המסמכים למפתחים שלו.

עכשיו כשדגשנו את היתרונות של Terraform, בואו נלמד כמה מונחים נפוצים ששימושם ב-Terraform ומה הם אומרים.

מונחים נפוצים בשימוש ב-Terraform

לפני שתתחיל להשתמש ב-Terraform, כדאי להיות מוכר עם כמה מונחים מרכזיים שמופיעים הרבה. הנה מה שאתה צריך לדעת:

  1. ספקים: ב-Terraform, ספק הוא ממשק תכנות המאפשר ל-Terraform לתקשר עם APIs ושירותי ענן שונים. לדוגמה, תשתמש בספק כדי לתקשר עם ספק שירותי ענן כמו GCP או Azure.

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

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

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

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

פרויקט הדמיה: כיצד לכתוב תצורת Terraform

בסעיף זה, נתעמק בכתיבת קובץ ה-Terraform הראשון שלנו כדי לאורכטר תכנית מכונת וירטואלית של Google Cloud עם רק מספר שורות של קוד. אך לפני שנתחיל, נדון בפקודות השונות שעליך להבין לפני שנממש את פרויקט הדמונאו.

פקודות Terraform נפוצות

  • Terraform init: פקודה זו מאתחלת את כלי ה-Terraform ומורידה קבצים חיוניים הקשורים לספק הענן. היא גם מייצרת חיבור בין Terraform וספק הענן בשאלה. במקרה שלנו, זהו בין GCP וספק ה-Terraform.

  • טרהפורם fmt: פקודה זו מבצעת אוטומטית עיצוב קוד אופטימלי והזחה. היא מבטיחה ביצוע סדרני של הקוד וממזערת שגיאות.

  • טרהפורם plan: פקודה זו מתארת את שלבי ביצוע קוד טרהפורם, וזוהה כל שגיאה שעלולה להתרחש במהלך ביצוע התהליך. היא גם מדגישה שגיאות בקוד הטרהפורם שעשויות למנוע ביצוע. לבסוף, היא עובדת בשילוב עם ניהול מצב טרהפורם כדי לזהות שינוי במצב ולהסיר או ליצור שירותי ענן נוספים אם נדרש.

  • Terraform apply: פקודה זו מבצעת את מצב ה-Terraform המתוכנן המיושם על ידי פקודת Terraform plan.

  • Terraform destroy: פקודה זו היא הפקודה הסופית בתכנית Terraform שמטרתה לנטרל או להשמיד את כל שירותי הענן שנוצרו באמצעות פקודת Terraform apply. חשוב לציין שעליך לבצע את הפקודות המפורטות לעיל בסדר כרונולוגי כדי להבטיח שהתשתית שלך תיווצר כראוי.

יצירת מכונה וירטואלית על בסיס IaC ב-GCP

עכשיו שכבר למדת את הפקודות החשובות הללו, בוא נבחן את כולן על ידי יצירת מכונה וירטואלית הראשונה שלנו המופעלת על ידי IaC ב-GCP.

בעורך הקוד שלך, הקלד את הקוד הבא:

provider "google" {
  project = "your-gcp-project-id"  # Replace with your GCP Project ID
  region  = "us-central1"          
  zone    = "us-central1-a"        
}

קוד זה מדגיש את ספק הענן שבו אנו משתמשים כדי ליצור את משאבי הענן הנדרשים. במקרה שלנו, מדובר בתכנית הענן של גוגל. השם שהוקצה לכך הוא פשוט "google". ספקי ענן אחרים כמו AWS ו-Azure הם "aws" ו-"azure" בהתאמה.

השורה השנייה מזהה את מזהה המנוי של GCP, שהוא ייחודי לכל חשבון GCP (ועוזר להקל על אינטגרציה מדויקת). עליכם להשתמש בשלהם במקום המיועד.

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

resource "google_compute_instance" "vm_instance" {
  name         = "example-vm"      
  machine_type = "e2-medium"          

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11" 
    }
  }

קטע הקוד למעלה מגדיר את משאב החישוב המדויק שיתואם, שבמקרה שלנו הוא מופע מכונה וירטואלית שמקודד כ“vm_instance”. 'example-vm’ הוא השם שאנו רוצים להקצות למכונה הווירטואלית שניצור עבור הפרויקט הזה. חשוב לציין שהשם של המכונה הווירטואלית חייב להיות ייחודי גם כן. סוג המכונה הווירטואלית שבחרנו היה E2 (כללי)-סוג VM בינוני. תוכלו לקבל מידע נוסף על סוגי מכונות וירטואליות כאן.

בהמשך, אנו גם מגדירים את מערכת ההפעלה המיועדת שתופעל (“boot_disk”) שהיא תמונה של גרסת מערכת ההפעלה Debian Linux 11 במקרה שלי.

  network_interface {
    network = "default"  # Attach to the default VPC network
    access_config {

    }
  }

output "instance_ip" {
  value = google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip
}

כדי להשלים את יצירת מכונה הווירטואלית שלנו, אנו צריכים להגדיר רשת וירטואלית כדי לאפשר גישה מרחוק למכונה הווירטואלית. גוש ממשק הרשת מחבר את מכונת הווירטואלית לרשת ה-VPC (קלאוד פריווט וירטואלי) המוגדרת כברירת מחדל של GCP. לא נוכל להתממשק עם מכונת הווירטואלית שלנו בלעדי רשת ה-VPC. גם גוש הפלט מציג את כתובת ה-IP לגישה המרחוק המוגדרת כברירת מחדל בטרמינל, שנוכל להשתמש בה כדי להתחבר למכונת הווירטואלית.

כאן קוד הצפוי הסופי:


provider "google" {
  project = "your-gcp-project-id"  # Replace with your GCP Project ID
  region  = "us-central1"          
  zone    = "us-central1-a"       
}

resource "google_compute_instance" "vm_instance" {
  name         = "example-vm"         
  machine_type = "e2-medium"          

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"  
    }
  }

  network_interface {
    network = "default"  # Attach to the default VPC network
    access_config {

    }
  }

output "instance_ip" {
  value = google_compute_instance.vm_instance.network_interface[0].access_config[0].nat_ip
}

ממשיכים משם, נבצע את הקוד שנמצא בתמונה להלן באמצעות הפקודות המודגשות:

הפקודה terraform -v מאשרת כי Terraform הותקן בהצלחה בטרמינל. הפלט הצפוי יהיה גרסת כלי ה-Terraform שהותקן.

הפקודה הבאה היא הפונקציה terraform init שמאתחלת תקשורת עם ספק שירותי הענן, שבמקרה שלנו הוא GCP. כל התלות הדרושות מותקנות גם.

הפקודה terraform fmt נפעלת גם כדי לוודא פורמט קוד ומרווחים מתאימים. לאחר מכן מבוצעת הפקודה terraform plan בסדר רציונאלי.

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

בביצוע מוצלח של Terraform plan, נמשיך עם ביצוע הפונקציה terraform apply כדי להפעיל את השלבים שנצויינו בתוכנית של Terraform.

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

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

מסקנה

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

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

אל תהסס לשלוח לי הערות או שאלות. בנוסף, ניתן לבדוק את המאמרים האחרים שלי כאן. עד הפעם הבאה, תמשיך לכתוב קוד!