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

אנחנו מתחילים להוסיף תמיכה ב-Terraform ל-Firebase. אם אתם עובדים בצוות שרוצה להפוך את תהליך היצירה של פרויקטים ב-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 לתרחישים נפוצים



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