بدء استخدام 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

تتوفّر إمكانية استخدام 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 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 الحالية من خلال حِزم تطوير البرامج (SDK) وخدمة المصادقة وFirebase Security Rules في Firebase.

  • استبدِل 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 لحالات الاستخدام الشائعة



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