بدء استخدام 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، لذا يفترض أنّك تمتلك معرفة dasar بـ 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 = "~> 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، ثمّ ينشئ تطبيق 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. للحصول على معلومات تفصيلية حول هذه الأوامر، راجِع مستندات الأشكال المصغّرة.

  1. إذا كانت هذه هي المرة الأولى التي يتم فيها تنفيذ أوامر Terraform في directory، عليك بدء ملف الإعداد وتثبيت Google Terraform provider. يمكنك إجراء ذلك من خلال تنفيذ الأمر التالي:

    terraform init
  2. أنشئ البنية الأساسية المحددة في ملف main.tf من خلال تنفيذ الأمر التالي:

    terraform apply
  3. تأكَّد من أنّه تم توفير كل العناصر أو تفعيلها على النحو المتوقّع:

    • الخيار 1: الاطّلاع على الإعدادات المطبوعة في وحدة التحكّم من خلال تنفيذ الأمر التالي:

      terraform show
    • الخيار الثاني: يمكنك الاطّلاع على مشروعك في 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 "شركاء تكنولوجيا المعلومات في Google" و/أو 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 لحالات الاستخدام الشائعة



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