Teraform और Firebase का इस्तेमाल शुरू करना
संग्रह की मदद से व्यवस्थित रहें
अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.
Firebase अब Terraform के साथ काम करता है.
अगर आपकी टीम को Firebase प्रोजेक्ट बनाने की प्रोसेस को ऑटोमेट और स्टैंडर्डाइज़ करना है, तो Firebase के साथ Terraform का इस्तेमाल करना आपके लिए एक अच्छा विकल्प हो सकता है. इससे, आपको खास संसाधनों और सेवाओं को चालू करने में मदद मिलेगी.
Firebase के साथ Terraform का इस्तेमाल करने के बुनियादी वर्कफ़्लो में ये शामिल हैं:
Terraform कॉन्फ़िगरेशन फ़ाइल (.tf फ़ाइल) बनाना और उसे पसंद के मुताबिक बनाना. इस फ़ाइल में, उस इन्फ़्रास्ट्रक्चर की जानकारी दी जाती है जिसे आपको उपलब्ध कराना है. जैसे, वे संसाधन जिन्हें आपको उपलब्ध कराना है और वे सेवाएं जिन्हें आपको चालू करना है.
gcloud CLI कमांड का इस्तेमाल करके, Terraform के साथ इंटरफ़ेस किया जाता है, ताकि .tf फ़ाइल में बताए गए इन्फ़्रास्ट्रक्चर को उपलब्ध कराया जा सके.
Terraform और Firebase की मदद से क्या-क्या किया जा सकता है?
इस गाइड में दिए गए सामान्य वर्कफ़्लो के उदाहरण में, Android ऐप्लिकेशन के साथ एक नया Firebase प्रोजेक्ट बनाया जा रहा है. हालांकि, Terraform की मदद से और भी बहुत कुछ किया जा सकता है. जैसे:
Terraform का इस्तेमाल करके, मौजूदा इन्फ़्रास्ट्रक्चर को मिटाना और उसमें बदलाव करना.
Terraform का इस्तेमाल करके, प्रॉडक्ट के हिसाब से कॉन्फ़िगरेशन और टास्क मैनेज करना. जैसे:
Firebase Authentication साइन-इन की सुविधा देने वाली कंपनियों को चालू करना.
Cloud Storage बकेट या डेटाबेस इंस्टेंस बनाना और उनके लिए Firebase Security Rules को डिप्लॉय करना.
Firebase App Hosting बैकएंड, बिल्ड, और अन्य
संसाधन बनाए जा रहे हैं.
इन सभी टास्क को पूरा करने के लिए, स्टैंडर्ड Terraform कॉन्फ़िगरेशन फ़ाइलों और कमांड का इस्तेमाल किया जा सकता है. इस काम में आपकी मदद करने के लिए, हमने कई सामान्य इस्तेमाल के उदाहरणों के लिए, Terraform कॉन्फ़िगरेशन फ़ाइलों के सैंपल उपलब्ध कराए हैं.
Firebase के साथ Terraform का इस्तेमाल करने के लिए सामान्य वर्कफ़्लो
ज़रूरी शर्तें
इस गाइड में, Firebase के साथ Terraform का इस्तेमाल करने के बारे में बताया गया है. इसलिए, यह माना जाता है कि आपको Terraform के बारे में बुनियादी जानकारी है. इस वर्कफ़्लो को शुरू करने से पहले, पक्का करें कि आपने ये ज़रूरी शर्तें पूरी कर ली हों.
Terraform इंस्टॉल करें
और इसके आधिकारिक ट्यूटोरियल की मदद से, Terraform के बारे में जानें.
उपयोगकर्ता खातों और सेवा खातों के लिए ज़रूरी शर्तें देखना
अगर उपयोगकर्ता खाते का इस्तेमाल किया जा रहा है, तो आपने Firebase की सेवा की शर्तें (Firebase ToS) स्वीकार की हों. अगर आपको Firebase कंसोल में कोई Firebase प्रोजेक्ट दिखता है, तो इसका मतलब है कि आपने Firebase की सेवा की शर्तें स्वीकार कर ली हैं
Terraform को कुछ कार्रवाइयां (उदाहरण के लिए, प्रोजेक्ट बनाना) करने के लिए, इन शर्तों को पूरा करना ज़रूरी है:
उपयोगकर्ता या सेवा खाते के पास, उन कार्रवाइयों के लिए ज़रूरी आईएएम ऐक्सेस होना चाहिए.
अगर उपयोगकर्ता या सेवा खाता किसी Google Cloud संगठन का हिस्सा है, तो संगठन की नीतियों के तहत खाते को वे कार्रवाइयां करने की अनुमति होनी चाहिए.
पहला चरण: Terraform कॉन्फ़िगरेशन फ़ाइल बनाना और उसे पसंद के मुताबिक बनाना
Terraform कॉन्फ़िगरेशन फ़ाइल में दो मुख्य सेक्शन होने चाहिए. इनके बारे में यहां विस्तार से बताया गया है:
Firebase के किसी भी प्रॉडक्ट या सेवा का इस्तेमाल करने के लिए, provider सेटअप करना ज़रूरी है.
अपनी लोकल डायरेक्ट्री में Terraform कॉन्फ़िगरेशन फ़ाइल (जैसे, main.tf फ़ाइल) बनाएं.
इस गाइड में, इस कॉन्फ़िगरेशन फ़ाइल का इस्तेमाल करके, provider सेटअप और वह पूरा इन्फ़्रास्ट्रक्चर तय किया जाएगा जिसे Terraform से बनाना है. हालांकि, ध्यान दें कि आपके पास सेवा देने वाली कंपनी के सेटअप को शामिल करने के विकल्प हैं.
provider सेटअप को शामिल करने के तरीके के विकल्प देखें
आपके पास अपने Terraform कॉन्फ़िगरेशन के बाकी हिस्से में provider सेटअप को शामिल करने के लिए, ये विकल्प हैं:
पहला विकल्प: इसे किसी एक Terraform .tf कॉन्फ़िगरेशन फ़ाइल के सबसे ऊपर शामिल करें (जैसा कि इस गाइड में दिखाया गया है).
अगर आपने Terraform का इस्तेमाल अभी-अभी शुरू किया है या Firebase के साथ Terraform को आज़माया जा रहा है, तो इस विकल्प का इस्तेमाल करें.
दूसरा विकल्प: इसे किसी अलग .tf फ़ाइल (जैसे, provider.tf फ़ाइल) में शामिल करें. यह उस .tf फ़ाइल से अलग होनी चाहिए जिसमें आपने इन्फ़्रास्ट्रक्चर बनाने के लिए जानकारी दी है (जैसे, main.tf फ़ाइल).
इस विकल्प का इस्तेमाल तब करें, जब आप किसी ऐसी बड़ी टीम का हिस्सा हों जिसे सेटअप को स्टैंडर्ड बनाना हो.
Terraform कमांड चलाते समय, provider.tf फ़ाइल और main.tf फ़ाइल, दोनों एक ही डायरेक्ट्री में होनी चाहिए.
main.tf फ़ाइल के सबसे ऊपर, यह provider सेटअप शामिल करें.
आपको google-beta प्रोवाइडर का इस्तेमाल करना होगा, क्योंकि Terraform के साथ Firebase का इस्तेमाल करने की सुविधा बीटा वर्शन में उपलब्ध है. प्रोडक्शन में इस्तेमाल करते समय सावधानी बरतें.
# 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 से बनाना है. इसका मतलब है कि आपको वे सभी संसाधन बताने होंगे जिन्हें आपको उपलब्ध कराना है और वे सभी सेवाएं बतानी होंगी जिन्हें आपको चालू करना है. इस गाइड में, Terraform के साथ काम करने वाले सभी Firebase संसाधनों की पूरी सूची देखें.
अपनी 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,]}
दूसरा चरण: Terraform कमांड चलाकर, तय किया गया इन्फ़्रास्ट्रक्चर बनाएं
संसाधनों का प्रावधान करने और अपनी main.tf फ़ाइल में बताई गई सेवाओं को चालू करने के लिए, अपनी main.tf फ़ाइल वाली डायरेक्ट्री से ये कमांड चलाएं.
इन कमांड के बारे में ज़्यादा जानकारी के लिए, Terraform का दस्तावेज़ देखें.
अगर डायरेक्ट्री में पहली बार Terraform कमांड चलाए जा रहे हैं, तो आपको कॉन्फ़िगरेशन डायरेक्ट्री को शुरू करना होगा. साथ ही, Google Terraform प्रोवाइडर को इंस्टॉल करना होगा. इसके लिए, यह कमांड चलाएं:
terraform init
यहां दिया गया कमांड चलाकर, अपनी main.tf फ़ाइल में बताया गया इन्फ़्रास्ट्रक्चर बनाएं:
terraform apply
पुष्टि करें कि सब कुछ उम्मीद के मुताबिक उपलब्ध कराया गया है या चालू किया गया है:
पहला विकल्प: अपने टर्मिनल में प्रिंट किया गया कॉन्फ़िगरेशन देखने के लिए, यह कमांड चलाएं:
terraform show
दूसरा विकल्प:Firebase कंसोल में अपना Firebase प्रोजेक्ट देखें.
Terraform की सुविधा वाले Firebase संसाधन
Firebase और Google के इन संसाधनों के लिए, Terraform का इस्तेमाल किया जा सकता है. हम इसमें लगातार नए संसाधन जोड़ रहे हैं! इसलिए, अगर आपको वह संसाधन नहीं दिखता है जिसे आपको Terraform की मदद से मैनेज करना है, तो कुछ समय बाद फिर से देखें कि वह उपलब्ध है या नहीं. इसके अलावा, GitHub रिपॉज़िटरी में समस्या की शिकायत करके उसका अनुरोध करें.
Firebase प्रोजेक्ट और ऐप्लिकेशन मैनेजमेंट
google_firebase_project —
किसी मौजूदा Google Cloud प्रोजेक्ट पर Firebase की सेवाएं चालू करें
google_identity_platform_config —
Google Cloud Identity Platform (GCIP) को चालू करें (यह Firebase Authentication का बैकएंड है)
और प्रोजेक्ट-लेवल पर पुष्टि करने की सेटिंग उपलब्ध कराएं
जिस प्रोजेक्ट में Terraform, GCIP और/या Firebase Authentication को चालू करेगा वह ब्लेज़ प्लान की बिलिंग की जानकारी के तहत होना चाहिए. इसका मतलब है कि प्रोजेक्ट के साथ कोई Cloud Billing खाता जुड़ा होना चाहिए. प्रोग्राम के हिसाब से ऐसा करने के लिए, google_project रिसॉर्स में billing_account एट्रिब्यूट को सेट करें.
इस रिसॉर्स की मदद से, अन्य कॉन्फ़िगरेशन भी किए जा सकते हैं. जैसे, साइन-इन करने के स्थानीय तरीके. इनमें बिना नाम बताए, ईमेल/पासवर्ड, और फ़ोन नंबर की मदद से पुष्टि करने के तरीके शामिल हैं. साथ ही, ब्लॉक करने वाले फ़ंक्शन और अनुमति वाले डोमेन भी शामिल हैं.
Terraform की मदद से, कई चरणों में पुष्टि (एमएफ़ए) करने की सुविधा को कॉन्फ़िगर करना
Firebase App Hosting
google_firebase_app_hosting_backend
— Firebase App Hosting बैकएंड बनाएं और मैनेज करें. इसमें GitHub रिपॉज़िटरी कनेक्शन और लगातार डिप्लॉयमेंट के लिए लाइव ब्रांच शामिल है.
Terraform की मदद से Firebase Realtime Database Security Rules को डिप्लॉय करना (प्रोग्राम के हिसाब से उपलब्ध विकल्पों के साथ-साथ अन्य टूल का इस्तेमाल करके, इन Security Rules को डिप्लॉय करने का तरीका जानें)
google_firestore_document —
कलेक्शन में मौजूद किसी दस्तावेज़ की मदद से, Cloud Firestore इंस्टेंस को सीड करना
अहम जानकारी: इस सीड दस्तावेज़ में, असली उपयोगकर्ता या प्रोडक्शन डेटा का इस्तेमाल न करें.
Cloud Storage for Firebase
google_firebase_storage_bucket —
किसी मौजूदा Cloud Storage बकेट को Firebase SDK टूल,
पुष्टि करने की सुविधा, और Firebase Security Rules के लिए ऐक्सेस करने लायक बनाएं
इस्तेमाल के सामान्य उदाहरणों के लिए, Terraform की कॉन्फ़िगरेशन फ़ाइलों के सैंपल
GCIP की मदद से Firebase Authentication सेट अप करना
यह कॉन्फ़िगरेशन, एक नया Google Cloud प्रोजेक्ट बनाता है और उसे Cloud Billing खाते से जोड़ता है. GCIP के साथ Firebase Authentication का इस्तेमाल करने के लिए, ब्लेज़ प्लान की बिलिंग की जानकारी ज़रूरी है. साथ ही, यह कॉन्फ़िगरेशन प्रोजेक्ट के लिए Firebase की सेवाएं चालू करता है, GCIP के साथ Firebase Authentication सेट अप करता है, और प्रोजेक्ट के साथ तीन अलग-अलग तरह के ऐप्लिकेशन रजिस्टर करता है.
ध्यान दें कि Terraform की मदद से Firebase Authentication सेट अप करने के लिए, GCIP को चालू करना ज़रूरी है.
# 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 SQL Connect सेवा उपलब्ध कराना
यह कॉन्फ़िगरेशन, एक नया Google Cloud प्रोजेक्ट बनाता है. साथ ही, प्रोजेक्ट के लिए Firebase की सेवाएं चालू करता है और SQL 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 खाते से जोड़ता है (एक से ज़्यादा 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 इंस्टेंस का प्रावधान करता है और प्रोजेक्ट के साथ तीन अलग-अलग तरह के ऐप्लिकेशन रजिस्टर करता है.
यह डिफ़ॉल्ट Cloud Firestore इंस्टेंस के लिए Firebase Security Rules को भी प्रावधान करता है,
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 नाम की लोकल फ़ाइल में होना चाहिए.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /some_collection/{document} {
allow read, create, update: if request.auth != null;
}
}
}
डिफ़ॉल्ट Cloud Storage बकेट को
प्रोविज़न करें
अतिरिक्त Cloud Storage बकेट का प्रावधान करें
इस कॉन्फ़िगरेशन से एक नया Google Cloud प्रोजेक्ट बनता है.
साथ ही, प्रोजेक्ट को Cloud Billing खाते से जोड़ा जाता है. अतिरिक्त बकेट के लिए, ब्लेज़ प्लान की बिलिंग की जानकारी ज़रूरी है.
इसके अलावा, प्रोजेक्ट के लिए Firebase की सेवाएं चालू की जाती हैं, अतिरिक्त और डिफ़ॉल्ट के अलावा अन्य Cloud Storage बकेट उपलब्ध कराई जाती हैं,
और प्रोजेक्ट के साथ तीन अलग-अलग तरह के ऐप्लिकेशन रजिस्टर किए जाते हैं.
यह हर Cloud Storage बकेट के लिए Firebase Security Rules का भी प्रावधान करता है. साथ ही, किसी एक 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 नाम की लोकल फ़ाइल में होना चाहिए.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /some_folder/{fileName} {
allow read, write: if request.auth != null;
}
}
}
Firebase App Check की मदद से, एपीआई रिसॉर्स को सुरक्षित करना
यह कॉन्फ़िगरेशन, एक नया Google Cloud प्रोजेक्ट बनाता है. साथ ही, प्रोजेक्ट के लिए Firebase की सेवाएं चालू करता है. इसके अलावा, यह Cloud Firestore के लिए Firebase App Check को सेट अप करता है और उसे लागू करता है, ताकि इसे सिर्फ़ आपके 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 AI Logic के लिए Firebase App Check को सेट अप और लागू किया जाता है, ताकि इसे सिर्फ़ आपके ऐप्लिकेशन से ऐक्सेस किया जा सके.
# 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 बैकएंड को मैन्युअल तरीके से सेट अप करना
इस कॉन्फ़िगरेशन में, Terraform का इस्तेमाल करके 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",])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"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}}}
GitHub का इस्तेमाल करके, App Hosting बैकएंड को सेट अप करना
इस कॉन्फ़िगरेशन से पता चलता है कि GitHub रिपॉज़िटरी में सेव किए गए ऐप्लिकेशन कोड का इस्तेमाल करके, App Hosting बैकएंड को कैसे उपलब्ध कराया जाए. इस तरीके से, GitHub के पुल अनुरोधों और सीआई/सीडी पाइपलाइन के ज़रिए, अपने इन्फ़्रास्ट्रक्चर को मैनेज और अपडेट किया जा सकता है. यह 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"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 के इन एट्रिब्यूट का इस्तेमाल किया जाता है.
resource ब्लॉक में project
सुझाव: जब भी मुमकिन हो, हर resource ब्लॉक में project एट्रिब्यूट शामिल करें
प्रोजेक्ट एट्रिब्यूट को शामिल करने पर, Terraform तय किए गए प्रोजेक्ट में, रिसॉर्स ब्लॉक में बताया गया इन्फ़्रास्ट्रक्चर बनाएगा. इस गाइड और हमारी सैंपल कॉन्फ़िगरेशन फ़ाइलों में, इसी तरीके का इस्तेमाल किया जाता है.
project के बारे में, Terraform का आधिकारिक दस्तावेज़ देखें.
provider ब्लॉक में user_project_override
ज़्यादातर संसाधनों को उपलब्ध कराने के लिए, आपको user_project_override = true का इस्तेमाल करना चाहिए. इसका मतलब है कि आपको अपने Firebase प्रोजेक्ट के हिसाब से कोटा देखना चाहिए. हालांकि, अपने नए प्रोजेक्ट को सेट अप करने के लिए, ताकि वह कोटा की जांच स्वीकार कर सके, आपको पहले user_project_override = false का इस्तेमाल करना होगा.
आपको यह गड़बड़ी दिखती है:
generic::permission_denied: Firebase Tos Not Accepted.
पक्का करें कि gcloud CLI कमांड चलाने के लिए इस्तेमाल किए जा रहे उपयोगकर्ता खाते ने, Firebase की सेवा की शर्तें (Firebase ToS) स्वीकार की हों.
इसकी जांच करने के लिए, उपयोगकर्ता खाते में साइन इन किए गए ब्राउज़र का इस्तेमाल करें. इसके बाद, Firebase कंसोल में जाकर, किसी मौजूदा Firebase प्रोजेक्ट को देखने की कोशिश करें. अगर आपको कोई मौजूदा Firebase प्रोजेक्ट दिख रहा है, तो इसका मतलब है कि उपयोगकर्ता खाते ने Firebase की सेवा की शर्तें स्वीकार कर ली हैं.
अगर आपको कोई मौजूदा Firebase प्रोजेक्ट नहीं दिख रहा है, तो हो सकता है कि उपयोगकर्ता खाते ने Firebase की सेवा की शर्तें स्वीकार न की हों. इस समस्या को ठीक करने के लिए, Firebase कंसोल की मदद से नया Firebase प्रोजेक्ट बनाएं. साथ ही, प्रोजेक्ट बनाते समय Firebase की सेवा की शर्तें स्वीकार करें. कंसोल में प्रोजेक्ट सेटिंग में जाकर, इस प्रोजेक्ट को तुरंत मिटाया जा सकता है.
terraform apply को चलाने के बाद, आपको यह गड़बड़ी मिलती है:
generic::permission_denied: IAM authority does not have the
permission.
कुछ मिनट इंतज़ार करें और फिर से terraform apply को चलाने की कोशिश करें.
संसाधन नहीं बनाया जा सका, लेकिन terraform apply को फिर से चलाने पर, ALREADY_EXISTS दिखता है.
ऐसा अलग-अलग सिस्टम में प्रोपेगेशन डिले की वजह से हो सकता है. इस समस्या को हल करने के लिए, terraform import को चलाकर संसाधन को Terraform स्टेट में इंपोर्ट करें. इसके बाद, 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 (कोई उपनाम नहीं) के साथ प्रोवाइडर का इस्तेमाल किया हो. Firebase के सैंपल में यह google-beta है.
नया Google Cloud प्रोजेक्ट बनाते समय, आपको गड़बड़ी का यह मैसेज मिलता है कि नए प्रोजेक्ट के लिए तय किया गया प्रोजेक्ट आईडी पहले से मौजूद है.
प्रोजेक्ट आईडी पहले से मौजूद होने की ये वजहें हो सकती हैं:
उस आईडी से जुड़ा प्रोजेक्ट किसी और का है.
समस्या हल करने के लिए: कोई दूसरा प्रोजेक्ट आईडी चुनें.
उस आईडी से जुड़ा प्रोजेक्ट हाल ही में मिटाया गया हो (सॉफ़्ट-डिलीट की स्थिति में).
समस्या हल करने के लिए: अगर आपको लगता है कि आईडी से जुड़ा प्रोजेक्ट आपका है, तो projects.get REST API का इस्तेमाल करके प्रोजेक्ट की स्थिति देखें.
उस आईडी से जुड़ा प्रोजेक्ट, मौजूदा उपयोगकर्ता के खाते में मौजूद हो. इस गड़बड़ी की एक वजह यह हो सकती है कि पिछले terraform apply में रुकावट आई हो.
समस्या हल करने के लिए: ये कमांड दें: terraform import google_project.default PROJECT_ID
इसके बाद terraform import google_firebase_project.default PROJECT_ID
डिफ़ॉल्ट Cloud Storage बकेट से पहले, डिफ़ॉल्ट Cloud Firestore इंस्टेंस को प्रोविज़न करना क्यों ज़रूरी है?
अगर आपने डिफ़ॉल्ट Cloud Firestore इंस्टेंस को सेट अप करने की कोशिश करने से पहले, google_app_engine_application के ज़रिए डिफ़ॉल्ट Cloud Storage बकेट को सेट अप किया है, तो आपको दिखेगा कि आपका डिफ़ॉल्ट Cloud Firestore इंस्टेंस पहले ही सेट अप हो चुका है. ध्यान दें कि उपलब्ध कराया गया डेटाबेस इंस्टेंस, Datastore मोड में है. इसका मतलब है कि इसे Firebase SDK टूल, पुष्टि करने की सुविधा या Firebase Security Rules से ऐक्सेस नहीं किया जा सकता. अगर आपको Firebase की इन सेवाओं के साथ Cloud Firestore का इस्तेमाल करना है, तो आपको डेटाबेस को खाली करना होगा. इसके बाद, Google Cloud कंसोल में जाकर, डेटाबेस का टाइप बदलना होगा.
google_app_engine_application के ज़रिए Cloud Storage और फिर डिफ़ॉल्ट 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 मोड में है. इसका मतलब है कि इसे Firebase SDK टूल, पुष्टि करने की सुविधा या Firebase Security Rules से ऐक्सेस नहीं किया जा सकता. अगर आपको Firebase की इन सेवाओं के साथ Cloud Firestore का इस्तेमाल करना है, तो आपको डेटाबेस को खाली करना होगा. इसके बाद, Google Cloud कंसोल में जाकर, डेटाबेस का टाइप बदलना होगा.