תחילת העבודה ב-Terraform

במדריך הזה תלמדו איך להפעיל שרת אינטרנט פשוט ב-Compute Engine באמצעות Terraform כדי להקצות את המשאבים.

במדריך הזה תלמדו:

  • איך משתמשים ב-Terraform כדי ליצור מכונה וירטואלית ב-Google Cloud.
  • איך מפעילים שרת בסיסי של Python Flask.

עלויות

במדריך הזה השתמשנו ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

Compute Engine

תוכלו להשתמש במחשבון התמחור כדי ליצור הערכת עלויות בהתאם לשימוש החזוי. משתמשים חדשים ב-Google Cloud? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

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

לפני שמתחילים

לפני שתתחילו את המדריך צריך לבצע את ההכנות הבאות.

יצירת פרויקט חדש או בחירה בפרויקט קיים

  1. נכנסים לדף לבחירת הפרויקט במסוף Google Cloud.

    כניסה לדף לבחירת הפרויקט

  2. בוחרים פרויקט קיים או יוצרים פרויקט חדש ב-Google Cloud.

הגדרת ההרשאות

ודאו שיש לכם את ההרשאות הנדרשות ל-Compute Engine בחשבון המשתמש.

  • compute.instance.*
  • compute.firewalls.*

כניסה לדף IAM

למידע נוסף על תפקידים והרשאות.

הפעלת ה-API

מפעילים את ה-API של Compute Engine.

מפעילים את ממשק ה-API

הפעלת Cloud Shell

Cloud Shell היא מכונה וירטואלית ב-Compute Engine.

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

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

איך יוצרים מכונה וירטואלית ב-Compute Engine?

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

יצירת הספרייה

יוצרים ספרייה חדשה ב-Cloud Shell. בספרייה החדשה, יוצרים קובץ main.tf לתצורה של Terraform. התוכן של הקובץ מפרט את כל המשאבים של Google Cloud שצריך ליצור בפרויקט.

mkdir tf-tutorial && cd tf-tutorial
nano main.tf

יצירת הרשת והתת-רשת של הענן הווירטואלי הפרטי (VPC)

בקטע הזה, יוצרים רשת ותת-רשת של ענן וירטואלי פרטי (VPC) לממשק הרשת של המכונה הווירטואלית.

הוסיפו את המשאבים הבאים של Terraform לקובץ main.tf שיצרתם:

resource "google_compute_network" "vpc_network" {
  name                    = "my-custom-mode-network"
  auto_create_subnetworks = false
  mtu                     = 1460
}

resource "google_compute_subnetwork" "default" {
  name          = "my-custom-subnet"
  ip_cidr_range = "10.0.1.0/24"
  region        = "us-west1"
  network       = google_compute_network.vpc_network.id
}

יצירת המשאב של מכונה וירטואלית ב-Compute Engine

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

הוסיפו את המשאב google_compute_instance הבא של Terraform לקובץ main.tf שיצרתם.

# Create a single Compute Engine instance
resource "google_compute_instance" "default" {
  name         = "flask-vm"
  machine_type = "f1-micro"
  zone         = "us-west1-a"
  tags         = ["ssh"]

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

  # Install Flask
  metadata_startup_script = "sudo apt-get update; sudo apt-get install -yq build-essential python3-pip rsync; pip install flask"

  network_interface {
    subnetwork = google_compute_subnetwork.default.id

    access_config {
      # Include this section to give the VM an external IP address
    }
  }
}

בקוד לדוגמה הגדרנו את התחום (zone) ב-Google Cloud כ-us-west1-a. אתם יכולים לשנות אותו לתחום אחר.

הפעלת Terraform

בשלב הזה אתם יכולים להריץ את terraform init כדי להוסיף את יישומי הפלאגין הנדרשים וליצור את הספרייה .terraform.

terraform init

פלט:

Initializing the backend...

Initializing provider plugins...
...

Terraform has been successfully initialized!

אימות התצורה של Terraform

אתם יכולים גם לאמת את הקוד של Terraform שיצרתם עד עכשיו. כדי לעשות זאת, מריצים את terraform plan ואז:

  • מוודאים שהתחביר של main.tf נכון.
  • תיווצר תצוגה מקדימה של המשאבים.
terraform plan

פלט:

...

Plan: 1 to add, 0 to change, 0 to destroy.

Note: You didn't use the -out option to save this plan, so Terraform can't
guarantee to take exactly these actions if you run "terraform apply" now.

שימוש בתצורה

כדי ליצור את המכונה הווירטואלית, מריצים את terraform apply.

terraform apply

כשתופיע בקשה, כותבים yes.

תישלח מ-Terraform בקשה ל-Google Cloud APIs להגדרת המכונה הווירטואלית החדשה. תוכלו לראות את המכונה החדשה בדף של המכונות הווירטואליות.

הפעלת שרת אינטרנט ב-Google Cloud

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

הוספת כלל בהתאמה אישית לחומת האש של SSH

הכלל default-allow-ssh בחומת האש ברשת default מאפשר להשתמש ב-SSH כדי להתחבר למכונה הווירטואלית. אם אתם מעדיפים להשתמש בכלל משלכם למכונה הווירטואלית, תוכלו להוסיף את המשאב הבא בסוף הקובץ main.tf:

resource "google_compute_firewall" "ssh" {
  name = "allow-ssh"
  allow {
    ports    = ["22"]
    protocol = "tcp"
  }
  direction     = "INGRESS"
  network       = google_compute_network.vpc_network.id
  priority      = 1000
  source_ranges = ["0.0.0.0/0"]
  target_tags   = ["ssh"]
}

כדי ליצור את הכלל בחומת האש, מריצים את terraform apply.

התחברות למכונה הווירטואלית באמצעות SSH

עכשיו מחברים את המכונה הווירטואלית ל-SSH כדי לאמת שכל ההגדרות נכונות.

  1. נכנסים לדף של המכונות הווירטואליות.

  2. מוצאים את המכונה הווירטואלית בשם flask-vm.

  3. לוחצים על SSH בעמודה Connect.

    ייפתח חלון טרמינל של SSH בתוך הדפדפן למכונה הווירטואלית שפועלת.

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

יצירת אפליקציית Flask

במדריך הזה אנחנו יוצרים אפליקציה של Python Flask, כדי שיהיה קובץ אחד שמתאר את שרת האינטרנט ובודק את נקודות הקצה (endpoints).

  1. בחלון הטרמינל של SSH בתוך הדפדפן, יוצרים קובץ בשם app.py.

    nano app.py
    
  2. מוסיפים את הטקסט הבא לקובץ app.py:

    from flask import Flask
    app = Flask(__name__)
    
    @app.route('/')
    def hello_cloud():
      return 'Hello Cloud!'
    
    app.run(host='0.0.0.0')
    
  3. מריצים את app.py:

    python3 app.py
    

    כברירת מחדל, התנועה מ-Flask היא ב-localhost:5000.

  4. פותחים חיבור שני של SSH:

    1. נכנסים לדף של המכונות הווירטואליות.
    2. מוצאים את המכונה הווירטואלית בשם flask-vm ולוחצים על SSH.
  5. בחיבור השני של SSH, מריצים את curl כדי לאשר שמוחזר הפתיח שהוגדר ב-app.py.

    curl http://0.0.0.0:5000
    

    הפלט מהפקודה הזו הוא Hello Cloud.

פתיחת היציאה 5000 במכונה הווירטואלית

כדי להתחבר לשרת האינטרנט מהמחשב המקומי, היציאה 5000 צריכה להיות פתוחה במכונה הווירטואלית. ב-Google Cloud אפשר לפתוח יציאות לתנועה באמצעות כללים בחומת האש.

צריך להוסיף את המשאב google_compute_firewall הבא של Terraform בסוף הקובץ main.tf.

resource "google_compute_firewall" "flask" {
  name    = "flask-app-firewall"
  network = google_compute_network.vpc_network.id

  allow {
    protocol = "tcp"
    ports    = ["5000"]
  }
  source_ranges = ["0.0.0.0/0"]
}

כדי ליצור את הכלל בחומת האש, מריצים את terraform apply ב-Cloud Shell.

הוספת משתנה פלט לכתובת ה-URL של שרת האינטרנט

  1. כדי ליצור את כתובת ה-URL של שרת האינטרנט, מוסיפים משתנה פלט של Terraform בסוף main.tf:

    // A variable for extracting the external IP address of the VM
    output "Web-server-URL" {
     value = join("",["http://",google_compute_instance.default.network_interface.0.access_config.0.nat_ip,":5000"])
    }
    
  2. מריצים את terraform apply.

    terraform apply
    

    כשתופיע בקשה, כותבים yes. כתובת ה-IP החיצונית של המכונה הווירטואלית והיציאה 5000 יודפסו על ידי Terraform במסך, באופן הבא:

    Web-server-URL = "http://IP_ADDRESS:5000"
    

    אפשר להריץ את terraform output בכל שלב כדי לחזור לפלט הזה:

    terraform output
    
  3. לוחצים על כתובת ה-URL מהשלב הקודם. ההודעה "Hello Cloud!‎" תופיע.

    זה סימן שהשרת פועל.

פתרון בעיות

  • אם אחד מה-API שצריך לפעול לא פועל, תופיע הודעת שגיאה ב-Terraform. הודעת השגיאה תכלול קישור להפעלת ה-API. אחרי הפעלת ה-API אפשר יהיה להריץ מחדש את terraform apply.

  • אם לא מצליחים להתחבר למכונה הווירטואלית באמצעות SSH:

הסרת המשאבים

כשתסיימו את המדריך תוכלו למחוק את כל מה שיצרתם, כדי שלא תחויבו.

תוכלו להריץ את הפקודה terraform destroy כדי להסיר את כל המשאבים שהוגדרו בקובץ התצורה של Terraform:

terraform destroy

כדי לאפשר ל-Terraform למחוק את המשאבים, כותבים yes.

המאמר הבא