קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
התמיכה ב-Firebase התחילה
Terraform
אם אתם עובדים בצוות שמעוניין להפוך את יצירת Firebase לאוטומטית וסטנדרטית
פרויקטים שבהם הוקצו משאבים ושירותים ספציפיים מופעלים, ולאחר מכן שימוש
שימוש ב-Terraform עם Firebase יכול להתאים לכם.
תהליך העבודה הבסיסי לשימוש ב-Terraform עם Firebase כולל את השלבים הבאים:
יצירת קובץ תצורה של Terraform (קובץ .tf) בהתאמה אישית, שמציין את התשתית שרוצים להקצות (כלומר, המשאבים שרוצים להקצות והשירותים שרוצים להפעיל).
שימוש בפקודות gcloud CLI שמתממשקות עם Terraform כדי
להקצות את התשתית שצוינה בקובץ .tf.
ניהול הגדרות ומשימות ספציפיות למוצר באמצעות Terraform, כמו:
מתבצעת הפעלה של Firebase Authentication ספקי כניסה.
יצירת Cloud Storage קטגוריות או מכונות של מסד נתונים ופריסה
Firebase Security Rules.
אתם יכולים להשתמש בקובצי תצורה רגילים ובפקודות של Terraform כדי לבצע את כל
למשימות סיווג. כדי לעזור לך בכך,
קובצי תצורה לדוגמה של Terraform לשימוש נפוץ
במקרים שונים.
תהליך עבודה כללי לשימוש ב-Terraform עם Firebase
דרישות מוקדמות
המדריך הזה הוא מבוא לשימוש ב-Terraform עם Firebase, ולכן הוא מבוסס על היכרות בסיסית עם Terraform. עליך לוודא שהשלמת את הפעולות הבאות
דרישות מוקדמות לפני התחלת תהליך העבודה הזה.
התקנת Terraform
להכיר את Terraform באמצעות המדריכים הרשמיים שלהם.
אם אתם משתמשים בחשבון משתמש, עליכם לאשר את התנאים של Firebase של
שירות (תנאים והגבלות של Firebase). אישרת את התנאים וההגבלות של Firebase, אם יש לך אפשרות לראות
לפרויקט Firebase
מסוף Firebase
כדי ש-Terraform יבצע פעולות מסוימות (לדוגמה, יצירה של פרויקטים), צריכים להתקיים התנאים הבאים:
למשתמש או לחשבון השירות צריכה להיות הרשאת גישה מתאימה ב-IAM עבור
לבצע את הפעולות האלה.
אם המשתמש או חשבון השירות שייכים לארגון Google Cloud,
מדיניות הארגון חייבת לאפשר לחשבון לבצע את הפעולות האלה.
שלב 1: יצירה והתאמה אישית של קובץ תצורה של Terraform
לקובץ תצורה של Terraform נדרשים שני קטעים עיקריים (המתוארים בפירוט
למטה):
צריך להגדיר את provider לא משנה אילו מוצרים או שירותים של Firebase
מעורבות.
יוצרים קובץ תצורה של Terraform (כמו קובץ main.tf) בקובץ המקומי
במדריך הזה נשתמש בקובץ התצורה הזה כדי לציין גם את provider
ואת כל התשתית שרוצים ליצור ב-Terraform. הערה:
אבל יש לך אפשרויות לכלול את ההגדרה של הספק.
הצגת אפשרויות
כדי לכלול את ההגדרה של provider
יש לך אפשרויות לכלול את ההגדרה של provider כדי:
שאר ההגדרות האישיות של Terraform:
אפשרות 1: לכלול אותו בחלק העליון של הגדרה אחת של .tf ב-Terraform
(כפי שמוצג במדריך הזה).
כדאי להשתמש באפשרות הזו אם אתם רק מתחילים להשתמש ב-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="~> 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}
ממשיכים לקטע הבא כדי להשלים את קובץ התצורה ולציין את התשתית שרוצים ליצור.
ציון איזו תשתית ליצור באמצעות בלוקים של resource
בקובץ התצורה של Terraform (למדריך הזה, קובץ ה-main.tf), צריך:
ולציין את כל התשתית שרוצים ליצור ב-Terraform (כלומר, כל
משאבים שרוצים להקצות וכל השירותים שרוצים להפעיל). לחשבון
במדריך הזה תמצאו רשימה מלאה של
מקורות מידע ב-Firebase שתומכים ב-Terraform.
פותחים את הקובץ main.tf.
בהגדרה של provider, כוללים את הגדרת הבלוק הבאה של resource.
הדוגמה הבסיסית הזו יוצרת פרויקט Firebase חדש ואז יוצרת
אפליקציית Firebase ל-Android בפרויקט הזה.
# 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 show
אפשרות שנייה:הצגת פרויקט Firebase בקטע
מסוף Firebase.
משאבים של Firebase עם תמיכה ב-Terraform
המשאבים הבאים של Firebase ו-Google כוללים תמיכה ב-Terraform. ואנחנו
יש עוד משאבים כל הזמן! לכן, אם המשאב שאתם רוצים לנהל באמצעות Terraform לא מופיע, כדאי לבדוק שוב בקרוב אם הוא זמין או לשלוח דיווח על בעיה במאגר GitHub.
google_identity_platform_config –
להפעיל את Google Cloud Identity Platform (GCIP) (זהו הקצה העורפי של Firebase Authentication)
ולספק הגדרות אימות ברמת הפרויקט
הפרויקט שבו Terraform תפעיל את GCIP ו/או Firebase Authentication
חייבים להיות בתוכנית התמחור והתשלומים של Blaze (כלומר, לפרויקט חייב להיות
חשבון Cloud Billing משויך). אפשר לעשות זאת באופן פרוגרמטי על ידי הגדרת המאפיין billing_account במשאב google_project.
המשאב הזה גם מאפשר הגדרות נוספות, כמו שיטות כניסה מקומיות,
כגון אנונימיות, אימות אימייל/סיסמה ואימות טלפון, וכן
של פונקציות חסימה ודומיינים מורשים.
קובצי תצורה לדוגמה ב-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" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# 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_project.auth.project_id # 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",] # Wait for identitytoolkit.googleapis.com to be enabled before initializing Authentication.depends_on=[google_project_service.auth,]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""auth"{provider=google-betaproject=google_project.auth.project_iddisplay_name="My Android app"package_name="android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.auth,]}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""auth"{provider=google-betaproject=google_project.auth.project_iddisplay_name="My Apple app"bundle_id="apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.auth,]}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""auth"{provider=google-betaproject=google_project.auth.project_iddisplay_name="My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility.deletion_policy="DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.auth,]}
הקצאת מכונה 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" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# 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_id}# Provisions the default Realtime Database default instance.resource"google_firebase_database_instance""database"{provider=google-betaproject=google_project.rtdb.project_id # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-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" # Wait for Firebase to be enabled in the Google Cloud project before initializing Realtime Database.depends_on=[google_firebase_project.rtdb,]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""rtdb"{provider=google-betaproject=google_project.rtdb.project_iddisplay_name="My Android app"package_name="android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.rtdb,]}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""rtdb"{provider=google-betaproject=google_project.rtdb.project_iddisplay_name="My Apple app"bundle_id="apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.rtdb,]}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""rtdb"{provider=google-betaproject=google_project.rtdb.project_iddisplay_name="My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility.deletion_policy="DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.rtdb,]}
ההגדרה הזו יוצרת פרויקט 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" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# 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_id}# Provisions the default Realtime Database default instance.resource"google_firebase_database_instance""database-default"{provider=google-betaproject=google_project.rtdb-multi.project_id # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-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" # Wait for Firebase to be enabled in the Google Cloud project before initializing Realtime Database.depends_on=[google_firebase_project.rtdb-multi,]}# Provisions an additional Realtime Database instance.resource"google_firebase_database_instance""database-additional"{provider=google-betaproject=google_project.rtdb-multi.project_id # 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" # Wait for Firebase to be enabled in the Google Cloud project before initializing Realtime Database.depends_on=[google_firebase_project.rtdb-multi,]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""rtdb-multi"{provider=google-betaproject=google_project.rtdb-multi.project_iddisplay_name="My Android app"package_name="android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.rtdb-multi,]}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""rtdb-multi"{provider=google-betaproject=google_project.rtdb-multi.project_iddisplay_name="My Apple app"bundle_id="apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.rtdb-multi,]}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""rtdb-multi"{provider=google-betaproject=google_project.rtdb-multi.project_iddisplay_name="My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility.deletion_policy="DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.rtdb-multi,]}
להקצות את
מופע אחד (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" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# 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_id}# Provisions the Firestore database instance.resource"google_firestore_database""firestore"{provider=google-betaproject=google_project.firestore.project_idname="(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" # Wait for Firebase to be enabled in the Google Cloud project before initializing Firestore.depends_on=[google_firebase_project.firestore,]}# Creates a ruleset of Firestore Security Rules from a local file.resource"google_firebaserules_ruleset""firestore"{provider=google-betaproject=google_project.firestore.project_idsource{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")}} # Wait for Firestore to be provisioned before creating this ruleset.depends_on=[google_firestore_database.firestore,]}# 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_project.firestore.project_id # Wait for Firestore to be provisioned before releasing the ruleset.depends_on=[google_firestore_database.firestore,]}# Adds a new Firestore index.resource"google_firestore_index""indexes"{provider=google-betaproject=google_project.firestore.project_idcollection="quiz"query_scope="COLLECTION"fields{field_path="question"order="ASCENDING"}fields{field_path="answer"order="ASCENDING"} # Wait for Firestore to be provisioned before adding this index.depends_on=[google_firestore_database.firestore,]}# 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_project.firestore.project_idcollection="quiz"document_id="question-1"fields="{\"question\":{\"stringValue\":\"Favorite Database\"},\"answer\":{\"stringValue\":\"Firestore\"}}" # Wait for Firestore to be provisioned before adding this document.depends_on=[google_firestore_database.firestore,]}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""firestore"{provider=google-betaproject=google_project.firestore.project_iddisplay_name="My Android app"package_name="android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.firestore,]}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""firestore"{provider=google-betaproject=google_project.firestore.project_iddisplay_name="My Apple app"bundle_id="apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.firestore,]}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""firestore"{provider=google-betaproject=google_project.firestore.project_iddisplay_name="My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility.deletion_policy="DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.firestore,]}
זו קבוצת הכללים של Cloud Firestore Security Rules שצריך להיות בקובץ מקומי
בשם firestore.rules.
ההגדרה הזו יוצרת פרויקט Google Cloud חדש,
מפעילה את שירותי Firebase בפרויקט,
מקצה את קטגוריית ברירת המחדל Cloud Storage של הפרויקט,
ורושמים בפרויקט שלושה סוגים שונים של אפליקציות.
הוא גם מקצה Firebase Security Rules לקטגוריה Cloud Storage,
ומעלה קובץ לקטגוריה.
# Creates a new Google Cloud project.resource"google_project""storage"{provider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""storage"{provider=google-beta.no_user_project_overrideproject=google_project.storage.project_idfor_each=toset(["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"{provider=google-betaproject=google_project.storage.project_id}# Provisions the default Cloud Storage bucket for the project via Google App Engine.resource"google_app_engine_application""default"{provider=google-betaproject=google_project.storage.project_id # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location # This will set the location for the default Storage bucket and the App Engine App.location_id="name-of-region-for-default-bucket" # If you use Firestore, uncomment this to make sure Firestore is provisioned first. # depends_on = [ # google_firestore_database.firestore # ]}# Makes the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""default-bucket"{provider=google-betaproject=google_project.storage.project_idbucket_id=google_app_engine_application.default.default_bucket}# Creates a ruleset of Cloud Storage Security Rules from a local file.resource"google_firebaserules_ruleset""storage"{provider=google-betaproject=google_project.storage.project_idsource{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")}} # Wait for the default Storage bucket to be provisioned before creating this ruleset.depends_on=[google_firebase_project.storage,]}# Releases the ruleset to the default Storage bucket.resource"google_firebaserules_release""default-bucket"{provider=google-betaname="firebase.storage/${google_app_engine_application.default.default_bucket}"ruleset_name="projects/${google_project.storage.project_id}/rulesets/${google_firebaserules_ruleset.storage.name}"project=google_project.storage.project_id}# Uploads a new file to the default Storage bucket.# Don't use real end-user or production data in this file.resource"google_storage_bucket_object""cat-picture"{provider=google-betaname="cat.png"source="path/to/cat.png"bucket=google_app_engine_application.default.default_bucket}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""storage"{provider=google-betaproject=google_project.storage.project_iddisplay_name="My Android app"package_name="android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.storage,]}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""storage"{provider=google-betaproject=google_project.storage.project_iddisplay_name="My Apple app"bundle_id="apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.storage,]}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""storage"{provider=google-betaproject=google_project.storage.project_iddisplay_name="My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility.deletion_policy="DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.storage,]}
זו קבוצת הכללים של Cloud Storage Security Rules שצריך להיות בקובץ מקומי
בשם storage.rules.
ההגדרה הזו יוצרת פרויקט Google Cloud חדש,
משייך את הפרויקט לחשבון Cloud Billing (תוכנית התמחור של Blaze
נדרש עבור מספר קטגוריות),
מפעילה את שירותי Firebase בפרויקט,
מקצה מספר קטגוריות Cloud Storage
(כולל קטגוריית ברירת המחדל 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" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# 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_id}# Provisions the default Cloud Storage bucket for the project via Google App Engine.resource"google_app_engine_application""default-multi"{provider=google-betaproject=google_project.storage-multi.project_id # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location # This will set the location for the default Storage bucket and the App Engine App.location_id="name-of-region-for-default-bucket" # If you use Firestore, uncomment this to make sure Firestore is provisioned first. # depends_on = [ # google_firestore_database.firestore # ]}# Provisions an additional Cloud Storage bucket.# Additional Cloud Storage buckets are not provisioned via App Engine.resource"google_storage_bucket""bucket-multi"{provider=google-betaproject=google_project.storage-multi.project_idname="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 default Storage bucket.location="name-of-region-for-additional-bucket"}# Makes the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""default-bucket-multi"{provider=google-betaproject=google_project.storage-multi.project_idbucket_id=google_app_engine_application.default-multi.default_bucket}# Makes the additional Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""bucket-multi"{provider=google-betaproject=google_project.storage-multi.project_idbucket_id=google_storage_bucket.bucket-multi.name}# Creates a ruleset of Firebase Security Rules from a local file.resource"google_firebaserules_ruleset""storage-multi"{provider=google-betaproject=google_project.storage-multi.project_idsource{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")}} # Wait for the Storage buckets to be provisioned before creating this ruleset.depends_on=[google_firebase_project.storage-multi,]}# Releases the ruleset to the default Storage bucket.resource"google_firebaserules_release""default-bucket-multi"{provider=google-betaname="firebase.storage/${google_app_engine_application.default-multi.default_bucket}"ruleset_name="projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}"project=google_project.storage-multi.project_id}# Releases the ruleset to the additional Storage bucket.resource"google_firebaserules_release""bucket-multi"{provider=google-betaname="firebase.storage/${google_storage_bucket.bucket-multi.name}"ruleset_name="projects/${google_project.storage-multi.project_id}/rulesets/${google_firebaserules_ruleset.storage-multi.name}"project=google_project.storage-multi.project_id}# Uploads a new file to the default 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_app_engine_application.default-multi.default_bucket}# Creates a Firebase Android App in the new project created above.resource"google_firebase_android_app""storage-multi"{provider=google-betaproject=google_project.storage-multi.project_iddisplay_name="My Android app"package_name="android.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.storage-multi,]}# Creates a Firebase Apple-platforms App in the new project created above.resource"google_firebase_apple_app""storage-multi"{provider=google-betaproject=google_project.storage-multi.project_iddisplay_name="My Apple app"bundle_id="apple.app.12345" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.storage-multi,]}# Creates a Firebase Web App in the new project created above.resource"google_firebase_web_app""storage-multi"{provider=google-betaproject=google_project.storage-multi.project_iddisplay_name="My Web app" # The other App types (Android and Apple) use "DELETE" by default. # Web apps don't use "DELETE" by default due to backward-compatibility.deletion_policy="DELETE" # Wait for Firebase to be enabled in the Google Cloud project before creating this App.depends_on=[google_firebase_project.storage-multi,]}
זוהי מערכת הכללים של Cloud Storage Security Rules, שצריכה להיות בקובץ מקומי בשם storage.rules.
להקצות את
מופע Cloud Firestore וקטגוריית ברירת המחדל Cloud Storage
ההגדרה הזו יוצרת פרויקט Google Cloud חדש,
מפעילה את שירותי Firebase בפרויקט,
שמקצה את המכונה Cloud Firestore,
ואז מקצה את קטגוריית ברירת המחדל Cloud Storage.
הוא גם מקצה Firebase Security Rules למכונה Cloud Firestore ולברירת המחדל
קטגוריה Cloud Storage.
# Creates a new Google Cloud project.resource"google_project""fs"{ # fs = Firestore + Storageprovider=google-beta.no_user_project_overridefolder_id="folder-id-for-new-project"name="Project Display Name"project_id="project-id-for-new-project" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# Enables required APIs.resource"google_project_service""fs"{provider=google-beta.no_user_project_overrideproject=google_project.fs.project_idfor_each=toset(["serviceusage.googleapis.com","cloudresourcemanager.googleapis.com","firebaserules.googleapis.com","firebasestorage.googleapis.com","storage.googleapis.com","firestore.googleapis.com",])service=each.key # Don't disable the service if the resource block is removed by accidentdisable_on_destroy=false}# Enables Firebase services for the new project created above.resource"google_firebase_project""fs"{provider=google-betaproject=google_project.fs.project_id}#### Set up Firestore before default Cloud Storage bucket ##### Provisions the Firestore database instance.resource"google_firestore_database""firestore-fs"{provider=google-betaproject=google_project.fs.project_idname="(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" # Wait for Firebase to be enabled in the Google Cloud project before initializing Firestore.depends_on=[google_firebase_project.fs,]}# Creates a ruleset of Firestore Security Rules from a local file.resource"google_firebaserules_ruleset""firestore-fs"{provider=google-betaproject=google_project.fs.project_idsource{files{ # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-startedname="firestore.rules"content=file("firestore.rules")}} # Wait for Firestore to be provisioned before creating this ruleset.depends_on=[google_firestore_database.firestore-fs]}# Releases the ruleset for the Firestore instance.resource"google_firebaserules_release""firestore-fs"{provider=google-betaname="cloud.firestore" # must be cloud.firestoreruleset_name=google_firebaserules_ruleset.firestore-fs.nameproject=google_project.fs.project_id # Wait for Firestore to be provisioned before releasing the ruleset.depends_on=[google_firestore_database.firestore-fs,]}#### Set up default Cloud Storage default bucket after Firestore ##### Provisions the default Cloud Storage bucket for the project via Google App Engine.resource"google_app_engine_application""default-bucket-fs"{provider=google-betaproject=google_project.fs.project_id # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location # This will set the location for the default Storage bucket and the App Engine App.location_id="name-of-region" # Must be in the same location as Firestore (above) # Wait for Firestore to be provisioned first. # Otherwise, the Firestore instance will be provisioned in Datastore mode (unusable by Firebase).depends_on=[google_firestore_database.firestore-fs,]}# Makes the default Storage bucket accessible for Firebase SDKs, authentication, and Firebase Security Rules.resource"google_firebase_storage_bucket""default-bucket-fs"{provider=google-betaproject=google_project.fs.project_idbucket_id=google_app_engine_application.default-bucket-fs.default_bucket}# Creates a ruleset of Cloud Storage Security Rules from a local file.resource"google_firebaserules_ruleset""default-bucket-fs"{provider=google-betaproject=google_project.fs.project_idsource{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")}} # Wait for the Cloud Storage bucket to be provisioned before creating this ruleset.depends_on=[google_firebase_project.fs,]}# Releases the ruleset to the default Storage bucket.resource"google_firebaserules_release""default-bucket-fs"{provider=google-betaname="firebase.storage/${google_app_engine_application.default-bucket-fs.default_bucket}"ruleset_name="projects/${google_project.fs.project_id}/rulesets/${google_firebaserules_ruleset.default-bucket-fs.name}"project=google_project.fs.project_id}
זו קבוצת הכללים של Cloud Firestore Security Rules שצריך להיות בקובץ מקומי
בשם firestore.rules.
ההגדרה הזו יוצרת פרויקט 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" # 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.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" # Wait for Firebase to be enabled in the Google Cloud project before initializing Firestore.depends_on=[google_firebase_project.appcheck,]}# 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]}# It takes a while for App Check to recognize the new app# If your app already exists, you don't have to wait 30 seconds.resource"time_sleep""wait_30s"{depends_on=[google_firebase_android_app.appcheck]create_duration="30s"}# 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=[time_sleep.wait_30s,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" # Required for the project to display in a list of Firebase projects.labels={"firebase"="enabled"}}# 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_project.extensions.project_idinstance_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"}}}
פתרון בעיות ושאלות נפוצות
אתם רוצים
לקבלת מידע נוסף על כל המאפיינים השונים שקשורים לפרויקט (כמו
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 (TOS של Firebase).
כדי לבצע את הבדיקה הזו, צריך להיכנס לחשבון המשתמש בדפדפן ולנסות להציג פרויקט Firebase קיים במסוף Firebase. אם אתם יכולים לראות פרויקט קיים ב-Firebase, סימן שחשבון המשתמש אישר את התנאים וההגבלות של Firebase.
אם אתם לא רואים אף פרויקט Firebase קיים, אז חשבון המשתמש שלכם.
עדיין לא אישרה את התנאים וההגבלות של Firebase. כדי לפתור את הבעיה, צריך ליצור
לפרויקט Firebase דרך
במסוף Firebase ומאשרים את
התנאים וההגבלות של Firebase כחלק מיצירת הפרויקט. אפשר למחוק את זה מיד
לפרויקט דרך Project Settings במסוף.
לאחר ההפעלה
terraform apply, תקבלו את השגיאה הבאה:
generic::permission_denied: IAM authority does not have the
permission.
צריך להמתין כמה דקות ואז לנסות שוב להריץ את terraform apply.
יצירת משאב נכשלה, אבל בעת הרצת terraform apply
שוב כתוב ALREADY_EXISTS.
הסיבה לכך יכולה להיות עיכוב בהפצה במערכות שונות. אפשר לנסות לפתור את הבעיה
לייבא את המשאב למצב של Terraform באמצעות הרצת
terraform import לאחר מכן מנסים להריץ שוב את terraform apply.
מידע על ייבוא כל משאב זמין בקטע 'ייבוא' בקטע שלו
מסמכי תיעוד של Terraform (לדוגמה,
"ייבוא" עבור Cloud Firestore).
כשעובדים עם
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
(ללא כינוי), שבדוגמאות של Firebase הוא google-beta.
כשיוצרים פרויקט Google Cloud חדש, מופיעה השגיאה שמזהה הפרויקט שצוין לפרויקט החדש כבר קיים.
אלה הסיבות האפשריות לכך שמזהה הפרויקט כבר קיים:
הפרויקט שמשויך למזהה הזה שייך למישהו אחר.
כדי לפתור את הבעיה: בוחרים מזהה פרויקט אחר.
הפרויקט שמשויך למזהה הזה נמחק לאחרונה (במחיקה עם יכולת שחזור
).
כדי לפתור את הבעיה: אם לדעתכם הפרויקט שמשויך למזהה שייך
לבדוק את מצב הפרויקט באמצעות
projects.get API ל-REST.
הפרויקט שמשויך למזהה הזה קיים כראוי אצל המשתמש הנוכחי. א'
סיבה אפשרית לשגיאה עשויה להיות שקבלת תג terraform apply קודם
הופסקה.
כדי לפתור את הבעיה: מריצים את הפקודות הבאות: terraform import google_project.default PROJECT_ID
ולאחר מכן terraform import google_firebase_project.default PROJECT_ID
מתי
מנסה לנהל את ההקצאות Cloud Firestore ואז Cloud Storage (באמצעות
google_app_engine_application), מתקבלת השגיאה הבאה:
Error: Error creating App Engine application: googleapi: Error 409:
Cannot create Firestore database resource <resource-name> since it
already exists at location <location-id>, alreadyExists
באפליקציה App Engine נדרש מופע של Cloud Firestore, אבל אפשר רק
כוללים מופע אחד של Cloud Firestore לכל פרויקט. אז, כמו שהודעת השגיאה רומזת,
אם כבר הוקצה Cloud Firestore למכונה של הפרויקט
מיקום, שגיאת App Engine אם תנסה להקצות Cloud Firestore
במיקום אחר. לדעת App Engine, ניסית
'ניהול תצורה מחדש' במופע של Cloud Firestore שכבר קיים.
כדי לפתור את השגיאה הזו, צריך להשתמש באותו המיקום גם עבור Cloud Firestore וגם עבור
אפליקציה App Engine. אם צריך קטגוריה של Cloud Storage
שונה מ-Cloud Firestore, ניתן להקצות עוד קטגוריות
(ניתן לעיין
הגדרה לדוגמה ליצירת כמה קובצי Cloud Storage
קטגוריות).
כשמנסים להקצות את 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).
אחרי שמקבלים הקצאה למכונה Cloud Firestore של הפרויקט, אי אפשר
'ניהול תצורה מחדש' או לשנות את המיקום שלו. כדי למנוע את השגיאה,
מסירים את בלוק המשאבים google_firestore_database מקובץ התצורה.
עם זאת, חשוב לזכור שאנחנו ממליצים להקצות את Cloud Firestore לפני הקטגוריה Cloud Storage שמוגדרת כברירת מחדל בפרויקט (הסיבה לכך מפורטת בהערה שבהמשך).
[[["התוכן קל להבנה","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"]],["עדכון אחרון: 2024-09-12 (שעון UTC)."],[],[]]