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

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

תהליך העבודה הבסיסי לשימוש ב-Terraform עם Firebase כולל את השלבים הבאים:

  • יצירת קובץ תצורה של Terraform (קובץ .tf) בהתאמה אישית, שמציין את התשתית שרוצים להקצות (כלומר, המשאבים שרוצים להקצות והשירותים שרוצים להפעיל).

  • שימוש בפקודות gcloud CLI שמתממשקות עם Terraform כדי להקצות את התשתית שצוינה בקובץ .tf.

מה אפשר לעשות עם Terraform ו-Firebase?

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

  • מחיקה ושינוי של תשתית קיימת באמצעות Terraform.

  • ניהול הגדרות ומשימות ספציפיות למוצר באמצעות Terraform, כמו:

    • מתבצעת הפעלה של Firebase Authentication ספקי כניסה.
    • יצירת Cloud Storage קטגוריות או מכונות של מסד נתונים ופריסה Firebase Security Rules.

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



תהליך עבודה כללי לשימוש ב-Terraform עם Firebase

דרישות מוקדמות

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

  • התקנת Terraform להכיר את Terraform באמצעות המדריכים הרשמיים שלהם.

  • התקנה של Google Cloud CLI (gcloud CLI). התחברות באמצעות חשבון משתמש או חשבון שירות.


שלב 1: יצירה והתאמה אישית של קובץ תצורה של Terraform

לקובץ תצורה של Terraform נדרשים שני קטעים עיקריים (המתוארים בפירוט למטה):

הגדרת provider

צריך להגדיר את provider לא משנה אילו מוצרים או שירותים של Firebase מעורבות.

  1. יוצרים קובץ תצורה של Terraform (כמו קובץ main.tf) בקובץ המקומי

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

  2. כוללים את הגדרת provider הבאה בחלק העליון של קובץ main.tf.

    צריך להשתמש בספק google-beta כי זוהי גרסה בטא של השימוש ב-Firebase עם Terraform. חשוב להתנהל בזהירות כשמשתמשים במוצר בסביבת הייצור.

    # Terraform configuration to set up providers by version.
    terraform {
      required_providers {
        google-beta = {
          source  = "hashicorp/google-beta"
          version = "~> 5.0"
        }
      }
    }
    
    # Configures the provider to use the resource block's specified project for quota checks.
    provider "google-beta" {
      user_project_override = true
    }
    
    # Configures the provider to not use the resource block's specified project for quota checks.
    # This provider should only be used during project creation and initializing services.
    provider "google-beta" {
      alias = "no_user_project_override"
      user_project_override = false
    }

    מידע נוסף על הסוגים השונים של מאפיינים שקשורים לפרויקט (כולל מה שמכונה במדריך הזה 'הפרויקט לבדיקה של המכסות') כשמשתמשים ב-Terraform עם Firebase.

  3. ממשיכים לקטע הבא כדי להשלים את קובץ התצורה ולציין את התשתית שרוצים ליצור.

ציון איזו תשתית ליצור באמצעות בלוקים של resource

בקובץ התצורה של Terraform (למדריך הזה, קובץ ה-main.tf), צריך: ולציין את כל התשתית שרוצים ליצור ב-Terraform (כלומר, כל משאבים שרוצים להקצות וכל השירותים שרוצים להפעיל). לחשבון במדריך הזה תמצאו רשימה מלאה של מקורות מידע ב-Firebase שתומכים ב-Terraform.

  1. פותחים את הקובץ main.tf.

  2. בהגדרה של provider, כוללים את הגדרת הבלוק הבאה של resource.

    הדוגמה הבסיסית הזו יוצרת פרויקט Firebase חדש ואז יוצרת אפליקציית Firebase ל-Android בפרויקט הזה.

    # Terraform configuration to set up providers by version.
    ...
    
    # Configures the provider to use the resource block's specified project for quota checks.
    ...
    
    # Configures the provider to not use the resource block's specified project for quota checks.
    ...
    
    # Creates a new Google Cloud project.
    resource "google_project" "default" {
      provider   = google-beta.no_user_project_override
    
      name       = "Project Display Name"
      project_id = "project-id-for-new-project"
      # Required for any service that requires the Blaze pricing plan
      # (like Firebase Authentication with GCIP)
      billing_account = "000000-000000-000000"
    
      # Required for the project to display in any list of Firebase projects.
      labels = {
        "firebase" = "enabled"
      }
    }
    
    # Enables required APIs.
    resource "google_project_service" "default" {
      provider = google-beta.no_user_project_override
      project  = google_project.default.project_id
      for_each = toset([
        "cloudbilling.googleapis.com",
        "cloudresourcemanager.googleapis.com",
        "firebase.googleapis.com",
        # Enabling the ServiceUsage API allows the new project to be quota checked from now on.
        "serviceusage.googleapis.com",
      ])
      service = each.key
    
      # Don't disable the service if the resource block is removed by accident.
      disable_on_destroy = false
    }
    
    # Enables Firebase services for the new project created above.
    resource "google_firebase_project" "default" {
      provider = google-beta
      project  = google_project.default.project_id
    
      # Waits for the required APIs to be enabled.
      depends_on = [
        google_project_service.default
      ]
    }
    
    # Creates a Firebase Android App in the new project created above.
    resource "google_firebase_android_app" "default" {
      provider = google-beta
    
      project      = google_project.default.project_id
      display_name = "My Awesome Android app"
      package_name = "awesome.package.name"
    
      # Wait for Firebase to be enabled in the Google Cloud project before creating this App.
      depends_on = [
        google_firebase_project.default,
      ]
    }


שלב 2: מריצים פקודות Terraform כדי ליצור את התשתית שצוינה

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

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

    terraform init
  2. יוצרים את התשתית שצוינה בקובץ main.tf על ידי הרצת הפקודה הבאה:

    terraform apply
  3. מוודאים שהכול הוקצה או הופעל כמצופה:

    • אפשרות 1: הצגת ההגדרות שמודפסות בטרמינל על ידי הרצת הפקודה הבאה:

      terraform show
    • אפשרות שנייה:הצגת פרויקט Firebase בקטע מסוף Firebase.



משאבים של Firebase עם תמיכה ב-Terraform

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


ניהול פרויקטים ואפליקציות ב-Firebase

  • google_firebase_project — הפעלת שירותי Firebase בפרויקט Google Cloud קיים

  • אפליקציות Firebase


Firebase Authentication

  • google_identity_platform_config – להפעיל את Google Cloud Identity Platform (GCIP) (זהו הקצה העורפי של Firebase Authentication) ולספק הגדרות אימות ברמת הפרויקט

    • כדי להגדיר את Firebase Authentication דרך Terraform צריך להפעיל את GCIP. מומלץ לעיין בקובץ .tf לדוגמה כדי ללמוד איך מגדירים את Firebase Authentication.

    • הפרויקט שבו Terraform תפעיל את GCIP ו/או Firebase Authentication חייבים להיות בתוכנית התמחור והתשלומים של Blaze (כלומר, לפרויקט חייב להיות חשבון Cloud Billing משויך). אפשר לעשות זאת באופן פרוגרמטי על ידי הגדרת המאפיין billing_account במשאב google_project.

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

  • google_identity_platform_default_supported_idp_config – להגדיר ספקי זהויות מאוחדים משותפים, כמו Google, Facebook או Apple

  • identity_platform_oauth_idp_config – להגדיר מקורות שרירותיים של ספקי זהויות (IdP) ב-OAuth

  • google_identity_platform_inbound_saml_config – הגדרת שילובים של SAML

עדיין לא נתמך:

  • הגדרת אימות רב-שלבי (MFA) דרך Terraform

Firebase Realtime Database

עדיין אין תמיכה באפשרויות הבאות:

  • פריסת Firebase Realtime Database Security Rules באמצעות Terraform (הוראות מפורטות לפרוס את Rules באמצעות כלים אחרים, כולל אפשרויות פרוגרמטיות)

Cloud Firestore

  • google_firestore_database – יצירת מכונה של Cloud Firestore

  • google_firestore_index – להפעיל שאילתות יעילות עבור Cloud Firestore

  • google_firestore_document – להציג מופע של Cloud Firestore עם מסמך ספציפי באוסף

    חשוב: אל תשתמשו בנתונים אמיתיים של משתמשי קצה או נתונים שהוגדרו בסביבת הייצור במסמך המקור הזה.


Cloud Storage for Firebase


Firebase Security Rules (ל-Cloud Firestore ול-Cloud Storage)

לתשומת ליבך, מערכת Firebase Realtime Database משתמשת במערכת הקצאה אחרת Firebase Security Rules.

  • google_firebaserules_ruleset – מגדירים Firebase Security Rules שחלים על המופע של Cloud Firestore, או על קטגוריה אחת (Cloud Storage)

  • google_firebaserules_release – לפרוס מערכי כללים ספציפיים במכונה של Cloud Firestore, קטגוריה אחת (Cloud Storage)


Firebase App Check


Firebase Extensions



קובצי תצורה לדוגמה ב-Terraform לתרחישים נפוצים לדוגמה



פתרון בעיות ושאלות נפוצות