פריסה של שרת אינטרנט בסיסי של Flask באמצעות Terraform

במדריך הזה מוסבר איך להתחיל להשתמש ב-Terraform באמצעות שימוש ב-Terraform ליצירת שרת אינטרנט בסיסי ב-Compute Engine.

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

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

עלויות

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

Compute Engine

כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אפשר להשתמש במחשבון התמחור.

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

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

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

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

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

  1. In the Google Cloud console, go to the project selector page.

    Go to project selector

  2. Select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

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

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

  • compute.instances.*
  • compute.firewalls.*

כניסה לדף IAM

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

הפעלת ה-API

Enable the Compute Engine API.

Roles required to enable APIs

To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

Enable the API

הפעלת Cloud Shell

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

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

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

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

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

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

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

ב-Cloud Shell:

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.

המאמרים הבאים