תחילת העבודה ב-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. חשוב להפעיל שיקול דעת כשמשתמשים ב-Cloud Functions בסביבת ייצור.

    # 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
    • אפשרות 2: הצגת פרויקט 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

  • google_firebase_storage_bucket — מתן גישה לקטגוריה קיימת של Cloud Storage ל-SDK של Firebase, לאימות ול-Firebase Security Rules

  • google_storage_bucket_object — הוספת אובייקט לקטגוריה Cloud Storage

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


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 לתרחישים נפוצים



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