תחילת העבודה ב-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 עבורם.
    • יצירת קצה עורפי Firebase App Hosting, בנייה ומשאבים קשורים אחרים.

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



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

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

המדריך הזה הוא מבוא לשימוש ב-Terraform עם Firebase, ולכן הוא מניח שיש לכם ידע בסיסי ב-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 = "~> 6.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, ואז נוצרת אפליקציית Android ב-Firebase בתוך הפרויקט הזה.

    # 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 App Hosting


Firebase Data Connect


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 קיים ל-Firebase SDKs, לאימות ול-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 לתרחישים נפוצים



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