تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
بدأت 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
وتعرَّف على كيفية استخدامه من خلال البرامج التعليمية الرسمية.
في حال استخدام حساب مستخدم، يجب أن تكون قد وافقت على بنود خدمة Firebase. لقد وافقت على بنود خدمة Firebase إذا كان بإمكانك الاطّلاع على مشروع Firebase في Firebase وحدة التحكّم.
لكي تتّخذ Terraform إجراءات معيّنة (مثل إنشاء مشاريع)، يجب استيفاء الشروط التالية:
يجب أن يكون لدى المستخدم أو حساب الخدمة إذن الوصول المناسب في "إدارة الهوية وإمكانية الوصول" (IAM) لتنفيذ هذه الإجراءات.
إذا كان حساب المستخدم أو حساب الخدمة جزءًا من Google Cloud مؤسسة،
يجب أن تسمح سياسات المؤسسة للحساب باتّخاذ هذه الإجراءات.
الخطوة 1: إنشاء ملف إعداد Terraform وتخصيصه
يجب أن يتضمّن ملف إعداد Terraform قسمَين رئيسيَين (موضّحَين بالتفصيل أدناه):
يجب إجراء عملية provider بغض النظر عن منتجات أو خدمات Firebase المعنيّة.
أنشئ ملف إعداد Terraform (مثل ملف main.tf) في الدليل المحلي.
في هذا الدليل، ستستخدم ملف الإعداد هذا لتحديد كل من provider
عملية الإعداد وجميع البنية الأساسية التي تريد أن تنشئها أداة Terraform. يُرجى العِلم أنّه تتوفّر لك خيارات بشأن كيفية تضمين إعدادات مقدّم الخدمة.
عرض خيارات كيفية تضمين إعداد provider
تتوفّر لك الخيارات التالية بشأن كيفية تضمين إعداد provider في بقية إعدادات Terraform:
الخيار 1: تضمينها في أعلى ملف إعداد Terraform .tf واحد (كما هو موضّح في هذا الدليل).
استخدِم هذا الخيار إذا كنت بصدد البدء في استخدام Terraform أو إذا كنت بصدد تجربة Terraform مع Firebase.
الخيار 2: تضمينها في ملف .tf منفصل (مثل ملف provider.tf)، بصرف النظر عن ملف .tf الذي تحدّد فيه البنية الأساسية التي تريد إنشاءها (مثل ملف main.tf).
استخدِم هذا الخيار إذا كنت جزءًا من فريق أكبر يحتاج إلى توحيد عملية الإعداد.
عند تنفيذ أوامر Terraform، يجب أن يكون كل من ملف provider.tf وملف main.tf في الدليل نفسه.
أدرِج إعداد 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.
انتقِل إلى القسم التالي لإكمال ملف الإعداد وتحديد البنية الأساسية التي تريد إنشاءها.
تحديد البنية الأساسية التي تريد إنشاءها باستخدام resource كتل
في ملف إعداد Terraform (ملف main.tf في هذا الدليل)، عليك تحديد جميع البنية الأساسية التي تريد أن تنشئها Terraform (أي جميع الموارد التي تريد توفيرها وجميع الخدمات التي تريد تفعيلها). في هذا الدليل، يمكنك الاطّلاع على قائمة كاملة بجميع موارد Firebase المتوافقة مع Terraform.
افتح ملف main.tf.
ضمن إعداد 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_overridename="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_overrideproject=google_project.default.project_idfor_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-betaproject=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-betaproject=google_project.default.project_iddisplay_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,]}
عرض نسخة من ملف الإعداد هذا تتضمّن تعليقات توضيحية كثيرة
إذا لم تكن على دراية ببنية المشاريع والتطبيقات كموارد، راجِع المستندات التالية:
# 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"{ # Use the provider that enables the setup of quota checks for a new projectprovider=google-beta.no_user_project_overridename="Project Display Name" // learn more about the project nameproject_id="project-id-for-new-project" // learn more about the project ID # 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" // learn more about the Firebase-enabled label}}# Enables required APIs.resource"google_project_service""default"{ # Use the provider without quota checks for enabling APISprovider=google-beta.no_user_project_overrideproject=google_project.default.project_idfor_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.# This action essentially "creates a Firebase project" and allows the project to use# Firebase services (like Firebase Authentication) and# Firebase tooling (like the Firebase console).# Learn more about the relationship between Firebase projects and Google Cloud.resource"google_firebase_project""default"{ # Use the provider that performs quota checks from now onprovider=google-betaproject=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.# Learn more about the relationship between Firebase Apps and Firebase projects.resource"google_firebase_android_app""default"{provider=google-betaproject=google_project.default.project_iddisplay_name="My Awesome Android app" # learn more about an app's display namepackage_name="awesome.package.name" # learn more about an app's 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.
إذا كانت هذه هي المرة الأولى التي تنفّذ فيها أوامر Terraform في الدليل، عليك تهيئة دليل الإعداد وتثبيت موفّر Google Terraform. يمكنك إجراء ذلك من خلال تنفيذ الأمر التالي:
terraform init
أنشئ البنية الأساسية المحدّدة في ملف main.tf من خلال تنفيذ الأمر التالي:
terraform apply
تأكَّد من أنّ كل شيء تم توفيره أو تفعيله على النحو المتوقّع:
الخيار 1: اطّلِع على الإعدادات المطبوعة في نافذة الأوامر من خلال تنفيذ الأمر التالي:
تتوفّر إمكانية استخدام Terraform في مراجع Firebase وGoogle التالية. ونحن نعمل على إضافة المزيد من المراجع بانتظام. لذا، إذا لم يظهر لك المرجع الذي تريد إدارته باستخدام Terraform، يُرجى التحقّق مجددًا قريبًا لمعرفة ما إذا كان متاحًا أو طلب ذلك من خلال الإبلاغ عن مشكلة في مستودع GitHub.
google_identity_platform_config —
تفعيل Google Cloud Identity Platform (GCIP) (وهو الخلفية لـ Firebase Authentication)
وتوفير إعدادات المصادقة على مستوى المشروع
يجب أن يكون المشروع الذي ستفعّل فيه Terraform خدمة GCIP و/أو Firebase Authentication
ضمن خطة أسعار Blaze (أي يجب أن يكون المشروع مرتبطًا بحساب Cloud Billing). يمكنك إجراء ذلك آليًا من خلال ضبط السمة billing_account في مورد google_project.
يتيح هذا المورد أيضًا المزيد من الإعدادات، مثل طرق تسجيل الدخول المحلية،
مثل المصادقة المجهولة والمصادقة باستخدام البريد الإلكتروني/كلمة المرور والمصادقة باستخدام الهاتف، بالإضافة إلى
وظائف الحظر والنطاقات المسموح بها.
ملاحظة مهمة: لا تستخدِم بيانات حقيقية للمستخدمين النهائيين أو بيانات إنتاج في مستند البيانات الأولية هذا.
Cloud Storage for Firebase
google_firebase_storage_bucket: تتيح هذه السمة إمكانية الوصول إلى حزمة Cloud Storage الحالية من خلال حِزم تطوير البرامج (SDK) وخدمة المصادقة وFirebase Security Rules في Firebase.
نماذج ملفات إعداد Terraform لحالات الاستخدام الشائعة
إعداد Firebase Authentication باستخدام GCIP
ينشئ هذا الإعداد مشروعًا جديدًا باسم Google Cloud،
ويربط المشروع بحساب Cloud Billing (يجب استخدام خطة أسعار Blaze مع Firebase Authentication وGCIP)،
ويفعّل خدمات Firebase للمشروع،
ويضبط Firebase Authentication مع GCIP،
ويسجّل ثلاثة أنواع مختلفة من التطبيقات في المشروع.
يُرجى العِلم أنّ تفعيل GCIP مطلوب لإعداد Firebase Authentication من خلال Terraform.
# Creates a new Google Cloud project.resource"google_project""auth"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required for Firebase Authentication with GCIP).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""auth"{provider=google-beta.no_user_project_overrideproject=google_project.auth.project_idfor_each=toset(["cloudbilling.googleapis.com","cloudresourcemanager.googleapis.com","serviceusage.googleapis.com","identitytoolkit.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""auth"{provider=google-betaproject=google_project.auth.project_iddepends_on=[google_project_service.auth,]}# Creates an Identity Platform config.# Also enables Firebase Authentication with Identity Platform in the project if not.resource"google_identity_platform_config""auth"{provider=google-betaproject=google_firebase_project.auth.project # Auto-deletes anonymous usersautodelete_anonymous_users=true # Configures local sign-in methods, like anonymous, email/password, and phone authentication.sign_in{allow_duplicate_emails=trueanonymous{enabled=true}email{enabled=truepassword_required=false}phone_number{enabled=truetest_phone_numbers={"+11231231234"="000000"}}} # Sets an SMS region policy.sms_region_config{allowlist_only{allowed_regions=["US","CA",]}} # Configures blocking functions.blocking_functions{triggers{event_type="beforeSignIn"function_uri="https://us-east1-${google_project.auth.project_id}.cloudfunctions.net/before-sign-in"}forward_inbound_credentials{refresh_token=trueaccess_token=trueid_token=true}} # Configures a temporary quota for new signups for anonymous, email/password, and phone number.quota{sign_up_quota_config{quota=1000start_time=""quota_duration="7200s"}} # Configures authorized domains.authorized_domains=["localhost","${google_project.auth.project_id}.firebaseapp.com","${google_project.auth.project_id}.web.app",]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""auth"{provider=google-betaproject=google_firebase_project.auth.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""auth"{provider=google-betaproject=google_firebase_project.auth.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""auth"{provider=google-betaproject=google_firebase_project.auth.projectdisplay_name="My Web app"}
توفير خدمة Firebase Data Connect
ينشئ هذا الإعداد مشروع Google Cloud جديدًا،
ويفعّل خدمات Firebase للمشروع،
ويوفّر خدمة Data Connect.
# Creates a new Google Cloud project.resource"google_project""dataconnect"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase Data Connect).billing_account="000000-000000-000000" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.dataconnect.project_idfor_each=toset(["serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebasedataconnect.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 earlier.resource"google_firebase_project""dataconnect"{provider=google-betaproject=google_project.dataconnect.project_iddepends_on=[google_project_service.services]}# Create a Firebase Data Connect serviceresource"google_firebase_data_connect_service""dataconnect-default"{project=google_firebase_project.dataconnect.projectlocation="name-of-region-for-service"service_id="${google_firebase_project.dataconnect.project}-default-fdc"deletion_policy="DEFAULT"}
توفير مثيل Firebase Realtime Database تلقائي
يؤدي هذا الإعداد إلى إنشاء مشروع Google Cloud جديد،
وتفعيل خدمات Firebase للمشروع،
وتوفير مثيل Realtime Database تلقائي للمشروع،
وتسجيل ثلاثة أنواع مختلفة من التطبيقات في المشروع.
# Creates a new Google Cloud project.resource"google_project""rtdb"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project"}# Enables required APIs.resource"google_project_service""rtdb"{provider=google-beta.no_user_project_overrideproject=google_project.rtdb.project_idfor_each=toset(["serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebasedatabase.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""rtdb"{provider=google-betaproject=google_project.rtdb.project_iddepends_on=[google_project_service.rtdb]}# Provisions the default Realtime Database default instance.resource"google_firebase_database_instance""database"{provider=google-betaproject=google_firebase_project.rtdb.project # See available locations: https://firebase.google.com/docs/database/locationsregion="name-of-region" # This value will become the first segment of the database's URL.instance_id="${google_project.rtdb.project_id}-default-rtdb"type="DEFAULT_DATABASE"}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""rtdb"{provider=google-betaproject=google_firebase_project.rtdb.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""rtdb"{provider=google-betaproject=google_firebase_project.rtdb.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""rtdb"{provider=google-betaproject=google_firebase_project.rtdb.projectdisplay_name="My Web app"}
توفير عدة
Firebase Realtime Database مثيلات
ينشئ هذا الإعداد مشروع Google Cloud جديدًا، ويربط المشروع بحساب Cloud Billing (يجب توفّر خطة أسعار Blaze لاستخدام عدة مثيلات Realtime Database)، ويتيح خدمات Firebase للمشروع، ويوفر عدة مثيلات Realtime Database (بما في ذلك مثيل Realtime Database التلقائي للمشروع)، ويسجّل ثلاثة أنواع مختلفة من التطبيقات في المشروع.
# Creates a new Google Cloud project.resource"google_project""rtdb-multi"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associate the project with a Cloud Billing account # (required for multiple Realtime Database instances).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""rtdb-multi"{provider=google-beta.no_user_project_overrideproject=google_project.rtdb-multi.project_idfor_each=toset(["cloudbilling.googleapis.com","serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebasedatabase.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""rtdb-multi"{provider=google-betaproject=google_project.rtdb-multi.project_iddepends_on=[google_project_service.rtdb-multi]}# Provisions the default Realtime Database default instance.resource"google_firebase_database_instance""database-default"{provider=google-betaproject=google_firebase_project.rtdb-multi.project # See available locations: https://firebase.google.com/docs/database/locationsregion="name-of-region" # This value will become the first segment of the database's URL.instance_id="${google_project.rtdb-multi.project_id}-default-rtdb"type="DEFAULT_DATABASE"}# Provisions an additional Realtime Database instance.resource"google_firebase_database_instance""database-additional"{provider=google-betaproject=google_firebase_project.rtdb-multi.project # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locations # This location doesn't need to be the same as the default database instance.region="name-of-region" # This value will become the first segment of the database's URL.instance_id="name-of-additional-database-instance"type="USER_DATABASE"}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""rtdb-multi"{provider=google-betaproject=google_firebase_project.rtdb-multi.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""rtdb-multi"{provider=google-betaproject=google_firebase_project.rtdb-multi.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""rtdb-multi"{provider=google-betaproject=google_firebase_project.rtdb-multi.projectdisplay_name="My Web app"}
توفير مثيل Cloud Firestore التلقائي
يؤدي هذا الإعداد إلى إنشاء مشروع Google Cloud جديد،
وتفعيل خدمات Firebase للمشروع،
وتوفير مثيل Cloud Firestore تلقائي للمشروع،
وتسجيل ثلاثة أنواع مختلفة من التطبيقات في المشروع.
ويوفّر أيضًا Firebase Security Rules لمثيل Cloud Firestore التلقائي،
وينشئ فهرس Cloud Firestore،
ويضيف مستند Cloud Firestore يتضمّن بيانات أولية.
# Creates a new Google Cloud project.resource"google_project""firestore"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project"}# Enables required APIs.resource"google_project_service""firestore"{provider=google-beta.no_user_project_overrideproject=google_project.firestore.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","serviceusage.googleapis.com","firestore.googleapis.com","firebaserules.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""firestore"{provider=google-betaproject=google_project.firestore.project_iddepends_on=[google_project_service.firestore]}# Provisions the Firestore database instance.resource"google_firestore_database""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectname="(default)" # See available locations: https://firebase.google.com/docs/firestore/locationslocation_id="name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules.type="FIRESTORE_NATIVE"concurrency_mode="OPTIMISTIC"}# Creates a ruleset of Firestore Security Rules from a local file.resource"google_firebaserules_ruleset""firestore"{provider=google-betaproject=google_firestore_database.firestore.projectsource{files{name="firestore.rules" # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-startedcontent=file("firestore.rules")}}}# Releases the ruleset for the Firestore instance.resource"google_firebaserules_release""firestore"{provider=google-betaname="cloud.firestore" # must be cloud.firestoreruleset_name=google_firebaserules_ruleset.firestore.nameproject=google_firestore_database.firestore.project}# Adds a new Firestore index.resource"google_firestore_index""indexes"{provider=google-betaproject=google_firestore_database.firestore.projectcollection="quiz"query_scope="COLLECTION"fields{field_path="question"order="ASCENDING"}fields{field_path="answer"order="ASCENDING"}}# Adds a new Firestore document with seed data.# Don't use real end-user or production data in this seed document.resource"google_firestore_document""doc"{provider=google-betaproject=google_firestore_database.firestore.projectcollection="quiz"document_id="question-1"fields="{\"question\":{\"stringValue\":\"Favorite Database\"},\"answer\":{\"stringValue\":\"Firestore\"}}"}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""firestore"{provider=google-betaproject=google_firebase_project.firestore.projectdisplay_name="My Web app"}
هذه هي مجموعة قواعد Cloud Firestore Security Rules التي يجب أن تكون في ملف محلي باسم firestore.rules.
ينشئ هذا الإعداد مشروع Google Cloud جديدًا،
ويربط المشروع بحساب Cloud Billing (يجب توفّر خطة أسعار "الفئة المَرِنة"
للحصول على حِزم إضافية)،
ويفعّل خدمات Firebase للمشروع،
ويوفّر حِزم Cloud Storage إضافية غير تلقائية،
ويسجّل ثلاثة أنواع مختلفة من التطبيقات في المشروع.
ويوفّر أيضًا Firebase Security Rules لكل مجموعة بيانات Cloud Storage،
ويحمّل ملفًا إلى إحدى مجموعات البيانات Cloud Storage.
# Creates a new Google Cloud project.resource"google_project""storage-multi"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required for multiple Cloud Storage buckets).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""storage-multi"{provider=google-beta.no_user_project_overrideproject=google_project.storage-multi.project_idfor_each=toset(["cloudbilling.googleapis.com","serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebaserules.googleapis.com","firebasestorage.googleapis.com","storage.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""storage-multi"{provider=google-betaproject=google_project.storage-multi.project_iddepends_on=[google_project_service.storage-multi]}# Provisions a Cloud Storage bucket.resource"google_storage_bucket""bucket-1"{provider=google-betaproject=google_firebase_project.storage-multi.projectname="name-of-storage-bucket" # See available locations: https://cloud.google.com/storage/docs/locations#available-locationslocation="name-of-region-for-bucket"}# Provisions an additional Cloud Storage bucket.resource"google_storage_bucket""bucket-2"{provider=google-betaproject=google_firebase_project.storage-multi.projectname="name-of-additional-storage-bucket" # See available locations: https://cloud.google.com/storage/docs/locations#available-locations # This location does not need to be the same as the existing Storage bucket.location="name-of-region-for-additional-bucket"}# Makes the first Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""bucket-1"{provider=google-betaproject=google_firebase_project.storage-multi.projectbucket_id=google_storage_bucket.bucket-1.name}# Makes the additional Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""bucket-2"{provider=google-betaproject=google_firebase_project.storage-multi.projectbucket_id=google_storage_bucket.bucket-2.name}# Creates a ruleset of Firebase Security Rules from a local file.resource"google_firebaserules_ruleset""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectsource{files{ # Write security rules in a local file named "storage.rules" # Learn more: https://firebase.google.com/docs/storage/security/get-startedname="storage.rules"content=file("storage.rules")}}}# Releases the ruleset to the first Storage bucket.resource"google_firebaserules_release""bucket-1"{provider=google-betaname="firebase.storage/${google_storage_bucket.bucket-1.name}"ruleset_name="projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}"project=google_firebase_project.storage-multi.project}# Releases the ruleset to the additional Storage bucket.resource"google_firebaserules_release""bucket-2"{provider=google-betaname="firebase.storage/${google_storage_bucket.bucket-2.name}"ruleset_name="projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}"project=google_firebase_project.storage-multi.project}# Uploads a new file to the first Storage bucket.# Do not use real end-user or production data in this file.resource"google_storage_bucket_object""cat-picture-multi"{provider=google-betaname="cat.png"source="path/to/cat.png"bucket=google_storage_bucket.bucket-1.name}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectdisplay_name="My Android app"package_name="android.package.name"}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectdisplay_name="My Apple app"bundle_id="apple.app.12345"}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""storage-multi"{provider=google-betaproject=google_firebase_project.storage-multi.projectdisplay_name="My Web app"}
هذه هي مجموعة قواعد Cloud Storage Security Rules التي يجب أن تكون في ملف محلي باسم storage.rules.
حماية مورد واجهة برمجة التطبيقات
باستخدام Firebase App Check
ينشئ هذا الإعداد مشروع Google Cloud جديدًا،
ويفعّل خدمات Firebase للمشروع،
ويضبط عملية فرض Firebase App Check على Cloud Firestore ويفعّلها
بحيث لا يمكن الوصول إليها إلا من تطبيق Android.
# Creates a new Google Cloud project.resource"google_project""appcheck"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.appcheck.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","firebaseappcheck.googleapis.com","firestore.googleapis.com","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 earlier.resource"google_firebase_project""appcheck"{provider=google-betaproject=google_project.appcheck.project_iddepends_on=[google_project_service.services]}# Provisions the Firestore database instance.resource"google_firestore_database""database"{provider=google-betaproject=google_firebase_project.appcheck.projectname="(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-locationlocation_id="name-of-region" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, authentication, and Firebase Security Rules.type="FIRESTORE_NATIVE"concurrency_mode="OPTIMISTIC"}# Creates a Firebase Android App in the new project created earlier.resource"google_firebase_android_app""appcheck"{provider=google-betaproject=google_firebase_project.appcheck.projectdisplay_name="Play Integrity app"package_name="package.name.playintegrity"sha256_hashes=[ # TODO: insert your Android app's SHA256 certificate]}# Register the Android app with the Play Integrity providerresource"google_firebase_app_check_play_integrity_config""appcheck"{provider=google-betaproject=google_firebase_project.appcheck.projectapp_id=google_firebase_android_app.appcheck.app_iddepends_on=[google_firestore_database.database]lifecycle{precondition{condition=length(google_firebase_android_app.appcheck.sha256_hashes)>0error_message="Provide a SHA-256 certificate on the Android App to use App Check"}}}# Enable enforcement of App Check for Firestoreresource"google_firebase_app_check_service_config""firestore"{provider=google-betaproject=google_firebase_project.appcheck.projectservice_id="firestore.googleapis.com"depends_on=[google_project_service.services]}
تثبيت مثيل Firebase Extension
ينشئ هذا الإعداد مشروع Google Cloud جديدًا،
ويفعّل خدمات Firebase للمشروع،
ويثبّت نسخة جديدة من Firebase Extension
في المشروع. إذا كانت النسخة الافتراضية متوفّرة، يتم تعديل مَعلماتها استنادًا إلى القيم المقدَّمة في الإعداد.
# Creates a new Google Cloud project.resource"google_project""extensions"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase Extensions).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""extensions"{provider=google-beta.no_user_project_overrideproject=google_project.extensions.project_idfor_each=toset(["cloudbilling.googleapis.com","cloudresourcemanager.googleapis.com","serviceusage.googleapis.com","firebase.googleapis.com","firebaseextensions.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""extensions"{provider=google-betaproject=google_project.extensions.project_iddepends_on=[google_project_service.extensions,]}# Installs an instance of the "Translate Text in Firestore" extension.# Or updates the extension if the specified instance already exists.resource"google_firebase_extensions_instance""translation"{provider=google-betaproject=google_firebase_project.extensions.projectinstance_id="translate-text-in-firestore"config{extension_ref="firebase/firestore-translate-text"params={COLLECTION_PATH="posts/comments/translations"DO_BACKFILL=trueLANGUAGES="ar,en,es,de,fr"INPUT_FIELD_NAME="input"LANGUAGES_FIELD_NAME="languages"OUTPUT_FIELD_NAME="translated"}system_params={"firebaseextensions.v1beta.function/location"="us-central1""firebaseextensions.v1beta.function/memory"="256""firebaseextensions.v1beta.function/minInstances"="0""firebaseextensions.v1beta.function/vpcConnectorEgressSettings"="VPC_CONNECTOR_EGRESS_SETTINGS_UNSPECIFIED"}}}
تفعيل ميزة "Firebase AI Logic" وحمايتها
ينشئ هذا الإعداد مشروع Google Cloud جديدًا،
ويفعّل خدمات Firebase للمشروع، بما في ذلك Firebase AI Logic،
ويضبط عملية فرض Firebase App Check على Firebase AI Logic ويفعّلها،
بحيث لا يمكن الوصول إليها إلا من تطبيقاتك.
# Creates a new Google Cloud project.resource"google_project""vertex"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associate the project with a Cloud Billing account # (required for Vertex AI in Firebase).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.vertex.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","serviceusage.googleapis.com", # Required APIs for Vertex AI in Firebase"aiplatform.googleapis.com","firebasevertexai.googleapis.com", # App Check is recommended to protect Vertex AI in Firebase from abuse"firebaseappcheck.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 earlier.resource"google_firebase_project""vertex"{provider=google-betaproject=google_project.vertex.project_iddepends_on=[google_project_service.services]}# Creates a Firebase Web App in the new project created earlier.resource"google_firebase_web_app""app"{provider=google-betaproject=google_firebase_project.vertex.projectdisplay_name="My Web App"}# Creates a Firebase Android App in the new project created earlier.resource"google_firebase_android_app""app"{provider=google-betaproject=google_firebase_project.vertex.projectdisplay_name="My Android App"package_name="package.name.playintegrity"sha256_hashes=[ # TODO: insert your Android app's SHA256 certificate]}# Creates a Firebase Apple App in the new project created earlier.resource"google_firebase_apple_app""app"{provider=google-betaproject=google_firebase_project.vertex.projectdisplay_name="My Apple App"bundle_id="bundle.id"team_id="1234567890"}### Protects Vertex AI in Firebase with App Check.# Turns on enforcement for Vertex AI in Firebaseresource"google_firebase_app_check_service_config""vertex"{provider=google-betaproject=google_firebase_project.vertex.projectservice_id="firebaseml.googleapis.com"enforcement_mode="ENFORCED"}# Enables the reCAPTCHA Enterprise APIresource"google_project_service""recaptcha_enterprise"{provider=google-betaproject=google_firebase_project.vertex.projectservice="recaptchaenterprise.googleapis.com" # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Enables the Play Integrity APIresource"google_project_service""play_integrity"{provider=google-betaproject=google_firebase_project.vertex.projectservice="playintegrity.googleapis.com" # Don't disable the service if the resource block is removed by accident.disable_on_destroy=false}# Allows the web app to use reCAPTCHA Enterprise with App Checkresource"google_firebase_app_check_recaptcha_enterprise_config""appcheck"{provider=google-betaproject=google_firebase_project.vertex.projectapp_id=google_firebase_web_app.app.app_idsite_key="your site key"token_ttl="7200s" # Optionaldepends_on=[google_project_service.recaptcha_enterprise]}# Registers the Android app with the Play Integrity providerresource"google_firebase_app_check_play_integrity_config""appcheck"{provider=google-betaproject=google_firebase_project.vertex.projectapp_id=google_firebase_android_app.app.app_idtoken_ttl="7200s" # Optionallifecycle{precondition{condition=length(google_firebase_android_app.app.sha256_hashes)>0error_message="Provide a SHA-256 certificate on the Android App to use App Check"}}depends_on=[google_project_service.play_integrity]}# Registers the Apple app with the AppAttest providerresource"google_firebase_app_check_app_attest_config""appcheck"{provider=google-betaproject=google_firebase_project.vertex.projectapp_id=google_firebase_apple_app.app.app_idtoken_ttl="7200s" # Optionallifecycle{precondition{condition=google_firebase_apple_app.app.team_id!=""error_message="Provide a Team ID on the Apple App to use App Check"}}}
توفير متطلبات App Hosting الخلفية يدويًا
يوضّح هذا الإعداد كيفية توفير App Hosting
خلفية يدويًا باستخدام Terraform. تمنحك هذه الطريقة تحكّمًا دقيقًا في الموارد التي يتم إنشاؤها، ولكنها تتطلّب منك تحديد كل مورد على حدة. ويكون ذلك مفيدًا عندما تحتاج إلى تخصيص الخلفية بما يتجاوز الخيارات التلقائية.
# Creates a new Google Cloud project.resource"google_project""apphosting"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase App Hosting).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.apphosting.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","firebaseapphosting.googleapis.com","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 earlier.resource"google_firebase_project""apphosting"{provider=google-betaproject=google_project.apphosting.project_iddepends_on=[google_project_service.services]}# Creates a Firebase Web App in the new project created earlier.resource"google_firebase_web_app""apphosting"{provider=google-betaproject=google_firebase_project.apphosting.projectdisplay_name="My web app"}# Creates a Firebase App Hosting Backendresource"google_firebase_app_hosting_backend""example"{provider=google-betaproject=google_firebase_project.apphosting.project # Choose the region closest to your userslocation="name-of-region-for-service"backend_id="name-of-backend-for-service"app_id=google_firebase_web_app.apphosting.app_iddisplay_name="My Backend"serving_locality="GLOBAL_ACCESS" # or "REGIONAL_STRICT"service_account=google_service_account.service_account.email}# Creates the service account for Firebase App Hostingresource"google_service_account""service_account"{provider=google-betaproject=google_firebase_project.apphosting.project # Must be firebase-app-hosting-computeaccount_id="firebase-app-hosting-compute"display_name="Firebase App Hosting compute service account" # Do not throw if already existscreate_ignore_already_exists=true}# Adds permission to the App Hosting service accountresource"google_project_iam_member""app_hosting_sa"{provider=google-betaproject=google_firebase_project.apphosting.projectfor_each=toset(["roles/firebase.sdkAdminServiceAgent","roles/firebaseapphosting.computeRunner"])role=each.keymember=google_service_account.service_account.member}# Creates a Buildresource"google_firebase_app_hosting_build""example"{provider=google-betaproject=google_firebase_app_hosting_backend.example.projectlocation=google_firebase_app_hosting_backend.example.locationbackend=google_firebase_app_hosting_backend.example.backend_idbuild_id="my-build"source{container{ # TODO: use your own imageimage="us-docker.pkg.dev/cloudrun/container/hello"}}}# Rolls out the Buildresource"google_firebase_app_hosting_traffic""example"{provider=google-betaproject=google_firebase_app_hosting_backend.example.projectlocation=google_firebase_app_hosting_backend.example.locationbackend=google_firebase_app_hosting_backend.example.backend_idtarget{splits{build=google_firebase_app_hosting_build.example.namepercent=100}}}
توفير
App Hosting خلفية باستخدام GitHub
يوضّح هذا الإعداد كيفية توفير App Hosting خلفية
باستخدام رمز التطبيق المخزَّن في مستودع GitHub. يتيح لك هذا النهج إدارة البنية الأساسية وتعديلها من خلال طلبات السحب في GitHub وعمليات CI/CD وفقًا للنموذج المعتاد لعمليات نشر App Hosting.
# Creates a new Google Cloud project.resource"google_project""apphosting"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Associates the project with a Cloud Billing account # (required to use Firebase App Hosting).billing_account="000000-000000-000000"}# Enables required APIs.resource"google_project_service""services"{provider=google-beta.no_user_project_overrideproject=google_project.apphosting.project_idfor_each=toset(["cloudresourcemanager.googleapis.com","firebase.googleapis.com","firebaseapphosting.googleapis.com","serviceusage.googleapis.com","developerconnect.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 earlier.resource"google_firebase_project""apphosting"{provider=google-betaproject=google_project.apphosting.project_iddepends_on=[google_project_service.services]}# Creates a Firebase Web App in the new project created earlier.resource"google_firebase_web_app""apphosting"{provider=google-betaproject=google_firebase_project.apphosting.projectdisplay_name="My web app"}### Setting up Firebase App Hosting #### Creates a Firebase App Hosting Backendresource"google_firebase_app_hosting_backend""example"{provider=google-betaproject=google_firebase_project.apphosting.project # Choose the region closest to your userslocation="name-of-region-for-service"backend_id="name-of-backend-for-service"app_id=google_firebase_web_app.apphosting.app_iddisplay_name="My Backend"serving_locality="GLOBAL_ACCESS" # or "REGIONAL_STRICT"service_account=google_service_account.service_account.emailcodebase{repository=google_developer_connect_git_repository_link.my-repository.nameroot_directory="/"}}# Creates the service account for Firebase App Hostingresource"google_service_account""service_account"{provider=google-betaproject=google_firebase_project.apphosting.project # Must be firebase-app-hosting-computeaccount_id="firebase-app-hosting-compute"display_name="Firebase App Hosting compute service account" # Do not throw if already existscreate_ignore_already_exists=true}# Adds permission to the App Hosting service accountresource"google_project_iam_member""app_hosting_sa"{provider=google-betaproject=google_firebase_project.apphosting.projectfor_each=toset(["roles/developerconnect.readTokenAccessor","roles/firebase.sdkAdminServiceAgent","roles/firebaseapphosting.computeRunner"])role=each.keymember=google_service_account.service_account.member}# Configures auto rollout from GitHubresource"google_firebase_app_hosting_traffic""example"{provider=google-betaproject=google_firebase_app_hosting_backend.example.projectlocation=google_firebase_app_hosting_backend.example.locationbackend=google_firebase_app_hosting_backend.example.backend_idrollout_policy{codebase_branch="main" # Or another branch}}###### Setting up a connection to GitHub #### Provisions Service Agent for Developer Connectresource"google_project_service_identity""devconnect-p4sa"{provider=google-betaproject=google_firebase_project.apphosting.projectservice="developerconnect.googleapis.com"}# Adds permission to Developer Connect Service Agent to manager GitHub tokensresource"google_project_iam_member""devconnect-secret"{provider=google-betaproject=google_firebase_project.apphosting.projectrole="roles/secretmanager.admin"member=google_project_service_identity.devconnect-p4sa.member}# Connects to a GitHub accountresource"google_developer_connect_connection""my-connection"{provider=google-betaproject=google_firebase_project.apphosting.project # Must match the google_firebase_app_hosting_backend's locationlocation="name-of-region-for-service" # Must be `firebase-app-hosting-github-oauth`connection_id="firebase-app-hosting-github-oauth"github_config{github_app="FIREBASE"}depends_on=[google_project_iam_member.devconnect-secret]}# Follow the next steps to set up the GitHub connection# Tip: Run terraform refresh to obtain the outputoutput"next_steps"{description="Follow the action_uri if present to continue setup"value=google_developer_connect_connection.my-connection.installation_state}# Links a GitHub repo to the projectresource"google_developer_connect_git_repository_link""my-repository"{provider=google-betaproject=google_firebase_project.apphosting.projectlocation=google_developer_connect_connection.my-connection.locationgit_repository_link_id="my-repo-id"parent_connection=google_developer_connect_connection.my-connection.connection_idclone_uri="https://github.com/myuser/myrepo.git"}###
تحديد المشاكل وحلّها والأسئلة الشائعة
تريد
التعرّف على مزيد من المعلومات حول جميع السمات المختلفة ذات الصلة بالمشاريع (مثل
project وuser_project_override)
يستخدم هذا الدليل سمات Terraform التالية عند التعامل مع "المشاريع".
project ضمن حظر resource
يُنصح بما يلي: أدرِج السمة project ضمن كل كتلة resource كلما أمكن ذلك.
من خلال تضمين سمة مشروع، سينشئ Terraform البنية الأساسية المحدّدة في كتلة الموارد ضمن المشروع المحدّد. يستخدم هذا الدليل وجميع نماذج ملفات الإعداد هذه الطريقة.
يمكنك الاطّلاع على مستندات Terraform الرسمية حول
project.
user_project_override ضمن الحظر provider
لتوفير معظم الموارد، عليك استخدام
user_project_override = true، ما يعني التحقّق من الحصة المتاحة في مشروعك على Firebase. ومع ذلك، لإعداد مشروعك الجديد كي يتمكّن من قبول عمليات التحقّق من الحصة، عليك أولاً استخدام user_project_override = false.
يظهر لك الخطأ التالي:
generic::permission_denied: Firebase Tos Not Accepted.
تأكَّد من أنّ حساب المستخدم الذي تستخدمه لتنفيذ gcloud CLIالأوامر قد وافق على بنود خدمة Firebase.
يمكنك إجراء هذا التحقّق باستخدام متصفّح تم تسجيل الدخول فيه إلى حساب المستخدِم ومحاولة عرض مشروع حالي على Firebase في وحدة تحكّم Firebase. إذا كان بإمكانك الاطّلاع على مشروع حالي على Firebase، يعني ذلك أنّ حساب المستخدِم قد وافق على بنود خدمة Firebase.
إذا لم تتمكّن من عرض أي مشروع حالي على Firebase، من المحتمل أنّ حساب المستخدِم لم يوافق على بنود خدمة Firebase. لحلّ هذه المشكلة، أنشِئ مشروعًا جديدًا في Firebase من خلال وحدة تحكّم Firebase واقبل بنود خدمة Firebase كجزء من عملية إنشاء المشروع. يمكنك حذف هذا المشروع على الفور من خلال إعدادات المشروع في Play Console.
بعد تشغيل
terraform apply، يظهر لك الخطأ التالي:
generic::permission_denied: IAM authority does not have the
permission.
انتظِر بضع دقائق، ثم أعِد تشغيل terraform apply.
تعذّر إنشاء مورد، ولكن عند تشغيل terraform apply مرة أخرى، تظهر الرسالة ALREADY_EXISTS.
قد يرجع ذلك إلى مهلة النشر في الأنظمة المختلفة. حاوِل حلّ هذه المشكلة من خلال استيراد المورد إلى حالة Terraform عن طريق تنفيذ terraform import. بعد ذلك، حاوِل تشغيل terraform apply مرة أخرى.
عند استخدام
Cloud Firestore، يظهر لك الخطأ التالي: Error creating Index: googleapi:
Error 409;...Concurrent access -- try again
كما يشير الخطأ، قد تحاول أداة Terraform توفير فهارس متعددة
و/أو إنشاء مستند في الوقت نفسه، ما يؤدي إلى حدوث خطأ في التزامن.
يُرجى محاولة تشغيل terraform apply مرة أخرى.
يظهر لك الخطأ التالي:
"you may need to specify 'X-Goog-User-Project' HTTP header for quota and
billing purposes".
يشير هذا الخطأ إلى أنّ Terraform لا يعرف المشروع الذي يجب التحقّق من الحصة
المخصّصة له. لتحديد المشاكل وحلّها، تحقَّق من ما يلي في الحظر resource:
تأكَّد من أنّك حدّدت قيمة للسمة project.
تأكَّد من استخدام مقدّم الخدمة مع user_project_override = true
(بدون اسم مستعار)، وهو google-beta في نماذج Firebase.
عند إنشاء مشروع Google Cloud جديد، يظهر لك الخطأ الذي يشير إلى أنّ رقم تعريف المشروع المحدّد للمشروع الجديد متوفّر حاليًا.
في ما يلي الأسباب المحتملة لتوفّر معرّف المشروع من قبل:
المشروع المرتبط بهذا المعرّف يخص مستخدمًا آخر.
لحلّ هذه المشكلة: اختَر رقم تعريف مشروع آخر.
تم مؤخرًا حذف المشروع المرتبط برقم التعريف هذا (في حالة الحذف المؤقت).
لحلّ هذه المشكلة: إذا كنت تعتقد أنّ المشروع المرتبط برقم التعريف يخصّك، تحقّق من حالة المشروع باستخدام projects.get REST API.
يجب أن يكون المشروع المرتبط بهذا المعرّف متوفّرًا بشكل صحيح ضمن حساب المستخدم الحالي. قد يكون السبب المحتمل لهذا الخطأ هو أنّ عملية terraform apply سابقة قد توقّفت.
لماذا يجب توفير مثيل Cloud Firestore التلقائي قبل حزمة Cloud Storage التلقائية؟
إذا أعددت حاوية Cloud Storage التلقائية (من خلال
google_app_engine_application) قبل محاولة إعداد مثيل Cloud Firestore التلقائي، ستجد أنّ مثيل Cloud Firestore التلقائي قد تم إعداده بالفعل. يُرجى العِلم أنّ مثيل قاعدة البيانات الموفَّر يكون في وضع Datastore، ما يعني أنّه لا يمكن الوصول إليه باستخدام حِزم تطوير البرامج (SDK) أو المصادقة أو Firebase Security Rules في Firebase. إذا أردت استخدام
Cloud Firestore مع خدمات Firebase هذه، عليك إفراغ قاعدة البيانات ثم تغيير نوعها في وحدة تحكّم
Google Cloud.
عند محاولة توفير Cloud Storage (عبر google_app_engine_application) ثم مثيل Cloud Firestore التلقائي، يظهر لك الخطأ التالي:
Error: Error creating Database: googleapi: Error 409: Database already
exists. Please use another database_id.
عند توفير حزمة Cloud Storage التلقائية للمشروع (من خلال google_app_engine_application) ولم يكن المشروع يتضمّن بعد مثيل Cloud Firestore التلقائي، يوفّر google_app_engine_application تلقائيًا مثيل Cloud Firestore التلقائي للمشروع.
وبما أنّه تم بالفعل توفير مثيل Cloud Firestore التلقائي لمشروعك، سيحدث خطأ في google_firestore_database إذا حاولت توفير هذا المثيل التلقائي مرة أخرى بشكل صريح.
بعد توفير مثيل Cloud Firestore التلقائي للمشروع، لا يمكنك إعادة توفيره أو تغيير موقعه الجغرافي. يُرجى العِلم أنّ مثيل قاعدة البيانات الموفَّر يكون في وضع Datastore، ما يعني أنّه لا يمكن الوصول إليه باستخدام حِزم تطوير البرامج (SDK) أو المصادقة أو Firebase Security Rules في Firebase. إذا أردت استخدام Cloud Firestore
مع خدمات Firebase هذه، عليك إفراغ قاعدة البيانات ثم تغيير نوعها في وحدة تحكّم Google Cloud.
تاريخ التعديل الأخير: 2025-08-23 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-08-23 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,[]]