بدء استخدام 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 وتعرَّف على 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

تتوفّر ميزة Terraform في موارد Firebase وGoogle التالية. ونحن نعمل على إضافة المزيد من المراجع باستمرار. لذا، إذا لم يظهر لك المورد الذي تريد إدارته باستخدام 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

  • google_firebase_app_hosting_backend — إنشاء وإدارة خلفية Firebase App Hosting، بما في ذلك اتصال مستودع GitHub والفرع المباشر للنشر المستمر.

  • google_firebase_app_hosting_build — إنشاء إصدار للواجهة الخلفية، في نقطة معيّنة من علامة مرجعية لقاعدة الرموز البرمجية وفي وقت محدّد.

  • google_firebase_app_hosting_traffic — طرح إصدار أو ضبط عملية النشر المستمر من GitHub


Firebase SQL Connect


Firebase Realtime Database

الميزات غير المتوافقة بعد:

  • نشر Firebase Realtime Database Security Rules عبر Terraform (تعرَّف على كيفية نشر هذه Security 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 لحالات الاستخدام الشائعة



تحديد المشاكل وحلّها والأسئلة الشائعة