फायरबेस, टेराफॉर्म का समर्थन करना शुरू कर रहा है। यदि आप ऐसी टीम में हैं जो प्रावधानित विशिष्ट संसाधनों और सक्षम सेवाओं के साथ फायरबेस प्रोजेक्ट बनाने को स्वचालित और मानकीकृत करना चाहते हैं, तो फायरबेस के साथ टेराफॉर्म का उपयोग करना आपके लिए उपयुक्त हो सकता है।
फायरबेस के साथ टेराफॉर्म का उपयोग करने के लिए बुनियादी वर्कफ़्लो में निम्नलिखित शामिल हैं:
टेराफ़ॉर्म कॉन्फ़िगरेशन फ़ाइल (एक
.tf
फ़ाइल) बनाना और अनुकूलित करना जो उस बुनियादी ढांचे को निर्दिष्ट करता है जिसे आप प्रावधान करना चाहते हैं (अर्थात, संसाधन जिन्हें आप प्रावधान करना चाहते हैं और जिन सेवाओं को आप सक्षम करना चाहते हैं)।.tf
फ़ाइल में निर्दिष्ट बुनियादी ढांचे का प्रावधान करने के लिए gCloud CLI कमांड का उपयोग टेराफॉर्म के साथ इंटरफ़ेस को करता है।
आप टेराफॉर्म और फायरबेस के साथ क्या कर सकते हैं?
इस गाइड में उदाहरण सामान्यीकृत वर्कफ़्लो एक एंड्रॉइड ऐप के साथ एक नया फायरबेस प्रोजेक्ट बना रहा है। लेकिन आप टेराफ़ॉर्म के साथ और भी बहुत कुछ कर सकते हैं, जैसे:
टेराफॉर्म का उपयोग करके मौजूदा बुनियादी ढांचे को हटाएं और संशोधित करें।
टेराफ़ॉर्म का उपयोग करके उत्पाद-विशिष्ट कॉन्फ़िगरेशन और कार्यों को प्रबंधित करें, जैसे:
- फायरबेस प्रमाणीकरण साइन-इन प्रदाताओं को सक्षम करना।
- क्लाउड स्टोरेज बकेट या डेटाबेस इंस्टेंसेस बनाना और उनके लिए फायरबेस सुरक्षा नियम तैनात करना।
आप इन सभी कार्यों को पूरा करने के लिए मानक टेराफ़ॉर्म कॉन्फ़िगरेशन फ़ाइलों और कमांड का उपयोग कर सकते हैं। और इसमें आपकी मदद करने के लिए, हमने कई सामान्य उपयोग के मामलों के लिए नमूना टेराफ़ॉर्म कॉन्फ़िगरेशन फ़ाइलें प्रदान की हैं।
फायरबेस के साथ टेराफॉर्म का उपयोग करने के लिए सामान्यीकृत वर्कफ़्लो
आवश्यक शर्तें
यह गाइड फायरबेस के साथ टेराफॉर्म का उपयोग करने का एक परिचय है, इसलिए यह टेराफॉर्म के साथ बुनियादी दक्षता मानता है। सुनिश्चित करें कि आपने इस वर्कफ़्लो को शुरू करने से पहले निम्नलिखित आवश्यक शर्तें पूरी कर ली हैं।
टेराफॉर्म इंस्टॉल करें और उनके आधिकारिक ट्यूटोरियल का उपयोग करके टेराफॉर्म से खुद को परिचित करें।
Google क्लाउड CLI (gCloud CLI) इंस्टॉल करें । उपयोगकर्ता खाते या सेवा खाते का उपयोग करके लॉगिन करें।
- यदि उपयोगकर्ता खाते का उपयोग कर रहे हैं, तो आपको फायरबेस सेवा की शर्तों (फायरबेस टीओएस) को स्वीकार करना होगा। यदि आप फायरबेस कंसोल में फायरबेस प्रोजेक्ट देख सकते हैं तो आपने फायरबेस टीओएस स्वीकार कर लिया है
- टेराफ़ॉर्म के लिए कुछ कार्रवाई करने के लिए (उदाहरण के लिए, प्रोजेक्ट बनाना), निम्नलिखित सत्य होना चाहिए:
- उपयोगकर्ता या सेवा खाते के पास उन कार्यों के लिए लागू IAM पहुंच होनी चाहिए।
- यदि उपयोगकर्ता या सेवा खाता Google क्लाउड संगठन का हिस्सा है, तो संगठन नीतियों को खाते को वे कार्रवाई करने की अनुमति देनी चाहिए।
चरण 1: टेराफ़ॉर्म कॉन्फ़िग फ़ाइल बनाएं और कस्टमाइज़ करें
टेराफ़ॉर्म कॉन्फ़िगरेशन फ़ाइल को दो मुख्य अनुभागों की आवश्यकता होती है (जिनका वर्णन नीचे विस्तार से किया गया है):
- एक
provider
सेटअप अनुभाग जो निर्देशित करता है कि कौन से टेराफ़ॉर्म संसाधनों तक पहुँचा जा सकता है - व्यक्तिगत
resource
ब्लॉकों का एक अनुभाग जो निर्दिष्ट करता है कि किस बुनियादी ढांचे का निर्माण करना है
अपना provider
स्थापित करें
चाहे कोई भी फायरबेस उत्पाद या सेवाएँ शामिल हों, एक provider
सेटअप की आवश्यकता होती है।
अपनी स्थानीय निर्देशिका में एक टेराफ़ॉर्म कॉन्फ़िग फ़ाइल (जैसे
main.tf
फ़ाइल) बनाएँ।इस गाइड में, आप इस कॉन्फ़िगरेशन फ़ाइल का उपयोग
provider
सेटअप और सभी बुनियादी ढांचे को निर्दिष्ट करने के लिए करेंगे जिन्हें आप टेराफ़ॉर्म बनाना चाहते हैं। हालाँकि, ध्यान दें कि आपके पास प्रदाता सेटअप को शामिल करने के विकल्प हैं।आपके पास अपने शेष टेराफ़ॉर्म कॉन्फ़िगरेशन में
provider
सेटअप को शामिल करने के तरीके के लिए निम्नलिखित विकल्प हैं:विकल्प 1: इसे एकल टेराफ़ॉर्म
.tf
कॉन्फ़िगरेशन फ़ाइल के शीर्ष पर शामिल करें (जैसा कि इस गाइड में दिखाया गया है)।- यदि आप अभी टेराफॉर्म के साथ शुरुआत कर रहे हैं या फायरबेस के साथ टेराफॉर्म को आज़मा रहे हैं तो इस विकल्प का उपयोग करें।
विकल्प 2: इसे
.tf
.tf
(जैसे कि एकprovider.tf
फ़ाइल) में शामिल करें, जहाँ आप बनाने के लिए बुनियादी ढाँचा निर्दिष्ट करते हैं (जैसे कि एकmain.tf
फ़ाइल)।- यदि आप एक बड़ी टीम का हिस्सा हैं जिसे सेटअप को मानकीकृत करने की आवश्यकता है तो इस विकल्प का उपयोग करें।
- टेराफ़ॉर्म कमांड चलाते समय,
provider.tf
फ़ाइल औरmain.tf
फ़ाइल दोनों एक ही निर्देशिका में होनी चाहिए।
main.tf
फ़ाइल के शीर्ष पर निम्नलिखितprovider
सेटअप शामिल करें।आपको
google-beta
प्रदाता का उपयोग करना चाहिए क्योंकि यह टेराफॉर्म के साथ फायरबेस का उपयोग करने का बीटा रिलीज़ है। उत्पादन में उपयोग करते समय सावधानी बरतें।# Terraform configuration to set up providers by version. terraform { required_providers { google-beta = { source = "hashicorp/google-beta" version = "~> 4.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
ब्लॉकों का उपयोग करके कौन सा बुनियादी ढांचा तैयार किया जाए
आपकी टेराफ़ॉर्म कॉन्फ़िग फ़ाइल (इस गाइड के लिए, आपकी main.tf
फ़ाइल) में, आपको वह सभी बुनियादी ढाँचा निर्दिष्ट करना होगा जिसे आप टेराफ़ॉर्म बनाना चाहते हैं (मतलब वे सभी संसाधन जिन्हें आप प्रावधान करना चाहते हैं और वे सभी सेवाएँ जिन्हें आप सक्षम करना चाहते हैं)। इस गाइड में, टेराफॉर्म का समर्थन करने वाले सभी फायरबेस संसाधनों की पूरी सूची ढूंढें।
अपनी
main.tf
फ़ाइल खोलें.provider
सेटअप के अंतर्गत,resource
ब्लॉकों की निम्नलिखित कॉन्फ़िगरेशन शामिल करें।यह मूल उदाहरण एक नया फायरबेस प्रोजेक्ट बनाता है और फिर उस प्रोजेक्ट के भीतर एक फायरबेस एंड्रॉइड ऐप बनाता है।
# Terraform configuration to set up providers by version. ... # Configures the provider to use the resource block's specified project for quota checks. ... # Configures the provider to not use the resource block's specified project for quota checks. ... # Creates a new Google Cloud project. resource "google_project" "default" { provider = google-beta.no_user_project_override name = "Project Display Name" project_id = "project-id-for-new-project" # Required for any service that requires the Blaze pricing plan # (like Firebase Authentication with GCIP) billing_account = "000000-000000-000000" # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } } # Enables required APIs. resource "google_project_service" "default" { provider = google-beta.no_user_project_override project = google_project.default.project_id for_each = toset([ "cloudbilling.googleapis.com", "cloudresourcemanager.googleapis.com", "firebase.googleapis.com", # Enabling the ServiceUsage API allows the new project to be quota checked from now on. "serviceusage.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "default" { provider = google-beta project = google_project.default.project_id # Waits for the required APIs to be enabled. depends_on = [ google_project_service.default ] } # Creates a Firebase Android App in the new project created above. resource "google_firebase_android_app" "default" { provider = google-beta project = google_project.default.project_id display_name = "My Awesome Android app" package_name = "awesome.package.name" # Wait for Firebase to be enabled in the Google Cloud project before creating this App. depends_on = [ google_firebase_project.default, ] }
यदि आप संसाधनों के रूप में परियोजनाओं और ऐप्स के बुनियादी ढांचे से परिचित नहीं हैं, तो निम्नलिखित दस्तावेज़ की समीक्षा करें:
- फायरबेस परियोजनाओं को समझें
- फायरबेस परियोजना प्रबंधन के लिए संदर्भ दस्तावेज़
# 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 project provider = google-beta.no_user_project_override name = "Project Display Name" // learn more about the project name project_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 APIS provider = google-beta.no_user_project_override project = google_project.default.project_id for_each = toset([ "cloudbilling.googleapis.com", "cloudresourcemanager.googleapis.com", "firebase.googleapis.com", # Enabling the ServiceUsage API allows the new project to be quota checked from now on. "serviceusage.googleapis.com", ]) service = each.key # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enables Firebase services for the new project created above. # 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 on provider = google-beta project = google_project.default.project_id # Waits for the required APIs to be enabled. depends_on = [ google_project_service.default ] } # Creates a Firebase Android App in the new project created above. # Learn more about the relationship between Firebase Apps and Firebase projects. resource "google_firebase_android_app" "default" { provider = google-beta project = google_project.default.project_id display_name = "My Awesome Android app" # learn more about an app's display name package_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: निर्दिष्ट बुनियादी ढाँचा बनाने के लिए टेराफ़ॉर्म कमांड चलाएँ
संसाधनों का प्रावधान करने और अपनी main.tf
फ़ाइल में निर्दिष्ट सेवाओं को सक्षम करने के लिए, अपनी main.tf
फ़ाइल के समान निर्देशिका से निम्नलिखित कमांड चलाएँ। इन आदेशों के बारे में विस्तृत जानकारी के लिए, टेराफ़ॉर्म दस्तावेज़ देखें।
यदि यह पहली बार है कि आप निर्देशिका में टेराफ़ॉर्म कमांड चला रहे हैं, तो आपको कॉन्फ़िगरेशन निर्देशिका प्रारंभ करने और Google टेराफ़ॉर्म प्रदाता स्थापित करने की आवश्यकता है। निम्न आदेश चलाकर ऐसा करें:
terraform init
निम्नलिखित कमांड चलाकर अपनी
main.tf
फ़ाइल में निर्दिष्ट बुनियादी ढाँचा बनाएँ:terraform apply
पुष्टि करें कि सब कुछ अपेक्षा के अनुरूप प्रावधानित या सक्षम किया गया था:
विकल्प 1: निम्नलिखित कमांड चलाकर अपने टर्मिनल में मुद्रित कॉन्फ़िगरेशन देखें:
terraform show
विकल्प 2: फायरबेस कंसोल में अपना फायरबेस प्रोजेक्ट देखें।
टेराफॉर्म समर्थन के साथ फायरबेस संसाधन
निम्नलिखित फायरबेस और Google संसाधनों में टेराफॉर्म समर्थन है। और हम हर समय अधिक संसाधन जोड़ रहे हैं! इसलिए यदि आपको वह संसाधन नहीं दिख रहा है जिसे आप टेराफॉर्म के साथ प्रबंधित करना चाहते हैं, तो यह देखने के लिए जल्द ही वापस जांचें कि क्या यह उपलब्ध है या GitHub रेपो में एक समस्या दर्ज करके इसका अनुरोध करें।
फायरबेस प्रोजेक्ट और ऐप प्रबंधन
google_firebase_project
- मौजूदा Google क्लाउड प्रोजेक्ट पर Firebase सेवाओं को सक्षम करेंgoogle_firebase_project_location
- प्रोजेक्ट के डिफ़ॉल्ट Google क्लाउड संसाधनों के लिए स्थान निर्धारित करेंफायरबेस ऐप्स
-
google_firebase_apple_app
- एक Firebase Apple प्लेटफ़ॉर्म ऐप बनाएं या प्रबंधित करें -
google_firebase_android_app
- फायरबेस एंड्रॉइड ऐप बनाएं या प्रबंधित करें -
google_firebase_web_app
- फायरबेस वेब ऐप बनाएं या प्रबंधित करें
-
फायरबेस प्रमाणीकरण
google_identity_platform_config
- Google क्लाउड आइडेंटिटी प्लेटफ़ॉर्म (GCIP) सक्षम करें (जो फायरबेस प्रमाणीकरण के लिए बैकएंड है) और प्रोजेक्ट-स्तरीय प्रमाणीकरण सेटिंग्स प्रदान करेंटेराफॉर्म के माध्यम से फायरबेस प्रमाणीकरण को कॉन्फ़िगर करने के लिए जीसीआईपी को सक्षम करने की आवश्यकता है। फायरबेस प्रमाणीकरण कैसे सेट करें, इसके लिए नमूना
.tf
फ़ाइल की समीक्षा करना सुनिश्चित करें।जिस परियोजना में टेराफॉर्म जीसीआईपी और/या फायरबेस प्रमाणीकरण को सक्षम करेगा वह ब्लेज़ मूल्य निर्धारण योजना पर होना चाहिए (अर्थात, परियोजना में एक संबद्ध क्लाउड बिलिंग खाता होना चाहिए)। आप इसे
google_project
संसाधन मेंbilling_account
विशेषता सेट करके प्रोग्रामेटिक रूप से कर सकते हैं।यह संसाधन अधिक कॉन्फ़िगरेशन को भी सक्षम बनाता है, जैसे स्थानीय साइन-इन विधियां, जैसे अनाम, ईमेल/पासवर्ड, और फ़ोन प्रमाणीकरण, साथ ही फ़ंक्शंस और अधिकृत डोमेन को अवरुद्ध करना।
google_identity_platform_default_supported_idp_config
- Google, Facebook, या Apple जैसे सामान्य फ़ेडरेटेड पहचान प्रदाताओं को कॉन्फ़िगर करेंidentity_platform_oauth_idp_config
- मनमाने ढंग से OAuth पहचान प्रदाता (आईडीपी) स्रोतों को कॉन्फ़िगर करेंgoogle_identity_platform_inbound_saml_config
- SAML एकीकरण कॉन्फ़िगर करें
अभी तक समर्थित नहीं:
- टेराफॉर्म के माध्यम से बहु-कारक प्रमाणीकरण (एमएफए) को कॉन्फ़िगर करना
फायरबेस रीयलटाइम डेटाबेस
-
google_firebase_database_instance
- एक रीयलटाइम डेटाबेस इंस्टेंस बनाएं
अभी तक समर्थित नहीं:
- टेराफॉर्म के माध्यम से फायरबेस रीयलटाइम डेटाबेस सुरक्षा नियमों को तैनात करना (प्रोग्रामेटिक विकल्पों सहित अन्य टूलींग का उपयोग करके इन नियमों को तैनात करने का तरीका जानें)
क्लाउड फायरस्टोर
google_firestore_database
- एक क्लाउड फायरस्टोर इंस्टेंस बनाएंgoogle_firestore_index
- क्लाउड फायरस्टोर के लिए कुशल क्वेरी सक्षम करेंgoogle_firestore_document
- एक संग्रह में एक विशिष्ट दस्तावेज़ के साथ क्लाउड फायरस्टोर इंस्टेंस को सीड करेंमहत्वपूर्ण: इस बीज दस्तावेज़ में वास्तविक अंतिम-उपयोगकर्ता या उत्पादन डेटा का उपयोग न करें।
फायरबेस के लिए क्लाउड स्टोरेज
google_firebase_storage_bucket
- फायरबेस एसडीके, प्रमाणीकरण और फायरबेस सुरक्षा नियमों के लिए मौजूदा क्लाउड स्टोरेज बकेट को सुलभ बनाएं- फ़ायरबेस प्रोजेक्ट के लिए डिफ़ॉल्ट क्लाउड स्टोरेज बकेट सेट करने के लिए पहले
google_app_engine_application
प्रावधान करना आवश्यक है। क्लाउड स्टोरेज बकेट का प्रावधान कैसे करें, इसके लिए नमूना.tf
फ़ाइल की समीक्षा करना सुनिश्चित करें।
- फ़ायरबेस प्रोजेक्ट के लिए डिफ़ॉल्ट क्लाउड स्टोरेज बकेट सेट करने के लिए पहले
google_storage_bucket_object
- क्लाउड स्टोरेज बकेट में एक ऑब्जेक्ट जोड़ेंमहत्वपूर्ण: इस फ़ाइल में वास्तविक अंतिम-उपयोगकर्ता या उत्पादन डेटा का उपयोग न करें।
फायरबेस सुरक्षा नियम (क्लाउड फायरस्टोर और क्लाउड स्टोरेज के लिए)
ध्यान दें कि फायरबेस रीयलटाइम डेटाबेस अपने फायरबेस सुरक्षा नियमों के लिए एक अलग प्रावधान प्रणाली का उपयोग करता है।
google_firebaserules_ruleset
- फायरबेस सुरक्षा नियमों को परिभाषित करें जो क्लाउड फायरस्टोर इंस्टेंस या क्लाउड स्टोरेज बकेट पर लागू होते हैंgoogle_firebaserules_release
- क्लाउड फायरस्टोर इंस्टेंस या क्लाउड स्टोरेज बकेट में विशिष्ट नियम सेट तैनात करें
फायरबेस ऐप चेक
-
google_firebase_app_check_service_config
- किसी सेवा के लिए ऐप चेक प्रवर्तन सक्षम करें -
google_firebase_app_check_app_attest_config
- ऐप अटेस्ट प्रदाता के साथ एक ऐप्पल प्लेटफ़ॉर्म ऐप पंजीकृत करें -
google_firebase_app_check_device_check_config
- डिवाइसचेक प्रदाता के साथ एक Apple प्लेटफ़ॉर्म ऐप पंजीकृत करें -
google_firebase_app_check_play_integrity_config
- Play Integrity प्रदाता के साथ एक Android ऐप पंजीकृत करें -
google_firebase_app_check_recaptcha_enterprise_config
- reCAPTCHA एंटरप्राइज़ प्रदाता के साथ एक वेब ऐप पंजीकृत करें -
google_firebase_app_check_recaptcha_v3_config
- reCAPTCHA v3 प्रदाता के साथ एक वेब ऐप पंजीकृत करें -
google_firebase_app_check_debug_token
- परीक्षण के लिए डिबग टोकन का उपयोग करें
फायरबेस एक्सटेंशन
-
google_firebase_extensions_instance
- फायरबेस एक्सटेंशन का एक इंस्टेंस इंस्टॉल या अपडेट करें
सामान्य उपयोग के मामलों के लिए नमूना टेराफ़ॉर्म कॉन्फ़िगरेशन फ़ाइलें
यह कॉन्फ़िगरेशन एक नया Google क्लाउड प्रोजेक्ट बनाता है, प्रोजेक्ट को क्लाउड बिलिंग खाते से जोड़ता है (जीसीआईपी के साथ फायरबेस प्रमाणीकरण के लिए ब्लेज़ मूल्य निर्धारण योजना आवश्यक है), प्रोजेक्ट के लिए फायरबेस सेवाओं को सक्षम करता है, जीसीआईपी के साथ फायरबेस प्रमाणीकरण सेट करता है, और तीन अलग-अलग ऐप पंजीकृत करता है प्रोजेक्ट के साथ प्रकार।
ध्यान दें कि टेराफॉर्म के माध्यम से फायरबेस प्रमाणीकरण स्थापित करने के लिए जीसीआईपी को सक्षम करना आवश्यक है।
# Creates a new Google Cloud project. resource "google_project" "auth" { provider = google-beta.no_user_project_override folder_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_override project = google_project.auth.project_id for_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-beta project = google_project.auth.project_id depends_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-beta project = google_project.auth.project_id # Auto-deletes anonymous users autodelete_anonymous_users = true # Configures local sign-in methods, like anonymous, email/password, and phone authentication. sign_in { allow_duplicate_emails = true anonymous { enabled = true } email { enabled = true password_required = false } phone_number { enabled = true test_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 = true access_token = true id_token = true } } # Configures a temporary quota for new signups for anonymous, email/password, and phone number. quota { sign_up_quota_config { quota = 1000 start_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-beta project = google_project.auth.project_id display_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-beta project = google_project.auth.project_id display_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-beta project = google_project.auth.project_id display_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, ] }
यह कॉन्फ़िगरेशन एक नया Google क्लाउड प्रोजेक्ट बनाता है, प्रोजेक्ट के लिए फायरबेस सेवाओं को सक्षम करता है, प्रोजेक्ट के डिफ़ॉल्ट रीयलटाइम डेटाबेस इंस्टेंस का प्रावधान करता है, और प्रोजेक्ट के साथ तीन अलग-अलग ऐप प्रकारों को पंजीकृत करता है।
# Creates a new Google Cloud project. resource "google_project" "rtdb" { provider = google-beta.no_user_project_override folder_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_override project = google_project.rtdb.project_id for_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-beta project = google_project.rtdb.project_id } # Provisions the default Realtime Database default instance. resource "google_firebase_database_instance" "database" { provider = google-beta project = google_project.rtdb.project_id # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locations region = "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-beta project = google_project.rtdb.project_id display_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-beta project = google_project.rtdb.project_id display_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-beta project = google_project.rtdb.project_id display_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 क्लाउड प्रोजेक्ट बनाता है, प्रोजेक्ट को क्लाउड बिलिंग खाते से जोड़ता है (कई रीयलटाइम डेटाबेस इंस्टेंसेस के लिए ब्लेज़ मूल्य निर्धारण योजना आवश्यक है), प्रोजेक्ट के लिए फायरबेस सेवाओं को सक्षम करता है, कई रीयलटाइम डेटाबेस इंस्टेंसेस का प्रावधान करता है (प्रोजेक्ट के डिफ़ॉल्ट रीयलटाइम डेटाबेस सहित) उदाहरण), और प्रोजेक्ट के साथ तीन अलग-अलग ऐप प्रकार पंजीकृत करता है।
# Creates a new Google Cloud project. resource "google_project" "rtdb-multi" { provider = google-beta.no_user_project_override folder_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_override project = google_project.rtdb-multi.project_id for_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-beta project = google_project.rtdb-multi.project_id } # Provisions the default Realtime Database default instance. resource "google_firebase_database_instance" "database-default" { provider = google-beta project = google_project.rtdb-multi.project_id # See available locations: https://firebase.google.com/docs/projects/locations#rtdb-locations region = "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-beta project = 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-beta project = google_project.rtdb-multi.project_id display_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-beta project = google_project.rtdb-multi.project_id display_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-beta project = google_project.rtdb-multi.project_id display_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, ] }
यह कॉन्फ़िगरेशन एक नया Google क्लाउड प्रोजेक्ट बनाता है, प्रोजेक्ट के लिए फायरबेस सेवाओं को सक्षम करता है, प्रोजेक्ट के क्लाउड फायरस्टोर इंस्टेंस का प्रावधान करता है, और प्रोजेक्ट के साथ तीन अलग-अलग ऐप प्रकारों को पंजीकृत करता है।
यह क्लाउड फायरस्टोर उदाहरण के लिए फायरबेस सुरक्षा नियमों का भी प्रावधान करता है, क्लाउड फायरस्टोर इंडेक्स बनाता है, और बीज डेटा के साथ क्लाउड फायरस्टोर दस्तावेज़ जोड़ता है।
# Creates a new Google Cloud project. resource "google_project" "firestore" { provider = google-beta.no_user_project_override folder_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_override project = google_project.firestore.project_id for_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-beta project = google_project.firestore.project_id } # Provisions the Firestore database instance. resource "google_firestore_database" "firestore" { provider = google-beta project = google_project.firestore.project_id name = "(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location location_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-beta project = google_project.firestore.project_id source { files { name = "firestore.rules" # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-started content = 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-beta name = "cloud.firestore" # must be cloud.firestore ruleset_name = google_firebaserules_ruleset.firestore.name project = 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-beta project = google_project.firestore.project_id collection = "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-beta project = google_project.firestore.project_id collection = "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-beta project = google_project.firestore.project_id display_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-beta project = google_project.firestore.project_id display_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-beta project = google_project.firestore.project_id display_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, ] }
यह क्लाउड फायरस्टोर सुरक्षा नियमों का नियम है जो firestore.rules
नामक स्थानीय फ़ाइल में होना चाहिए।
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { allow read: if request.auth != null; allow create: if request.auth != null; allow update: if request.auth != null; } }
यह कॉन्फ़िगरेशन एक नया Google क्लाउड प्रोजेक्ट बनाता है, प्रोजेक्ट के लिए फायरबेस सेवाओं को सक्षम करता है, प्रोजेक्ट के डिफ़ॉल्ट क्लाउड स्टोरेज बकेट का प्रावधान करता है, और प्रोजेक्ट के साथ तीन अलग-अलग ऐप प्रकारों को पंजीकृत करता है।
यह क्लाउड स्टोरेज बकेट के लिए फायरबेस सुरक्षा नियमों का भी प्रावधान करता है, और बकेट में एक फ़ाइल अपलोड करता है।
# Creates a new Google Cloud project. resource "google_project" "storage" { provider = google-beta.no_user_project_override folder_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_override project = google_project.storage.project_id for_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-beta project = 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-beta project = 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-beta project = google_project.storage.project_id bucket_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-beta project = google_project.storage.project_id source { files { # Write security rules in a local file named "storage.rules". # Learn more: https://firebase.google.com/docs/storage/security/get-started name = "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-beta name = "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-beta name = "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-beta project = google_project.storage.project_id display_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-beta project = google_project.storage.project_id display_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-beta project = google_project.storage.project_id display_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, ] }
यह क्लाउड स्टोरेज सुरक्षा नियमों का नियम है जो storage.rules
नामक स्थानीय फ़ाइल में होना चाहिए।
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } }
यह कॉन्फ़िगरेशन एक नया Google क्लाउड प्रोजेक्ट बनाता है, प्रोजेक्ट को क्लाउड बिलिंग खाते से जोड़ता है (ब्लेज़ मूल्य निर्धारण योजना कई बकेट के लिए आवश्यक है), प्रोजेक्ट के लिए फायरबेस सेवाओं को सक्षम करता है, कई क्लाउड स्टोरेज बकेट का प्रावधान करता है (प्रोजेक्ट के डिफ़ॉल्ट क्लाउड स्टोरेज बकेट सहित) , और प्रोजेक्ट के साथ तीन अलग-अलग ऐप प्रकारों को पंजीकृत करता है।
यह क्लाउड स्टोरेज बकेट के लिए फायरबेस सुरक्षा नियमों का भी प्रावधान करता है, और एक फ़ाइल को डिफ़ॉल्ट क्लाउड स्टोरेज बकेट में अपलोड करता है।
# Creates a new Google Cloud project. resource "google_project" "storage-multi" { provider = google-beta.no_user_project_override folder_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_override project = google_project.storage-multi.project_id for_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-beta project = 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-beta project = 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-beta project = google_project.storage-multi.project_id name = "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-beta project = google_project.storage-multi.project_id bucket_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-beta project = google_project.storage-multi.project_id bucket_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-beta project = google_project.storage-multi.project_id source { files { # Write security rules in a local file named "storage.rules" # Learn more: https://firebase.google.com/docs/storage/security/get-started name = "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-beta name = "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-beta name = "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-beta name = "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-beta project = google_project.storage-multi.project_id display_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-beta project = google_project.storage-multi.project_id display_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-beta project = google_project.storage-multi.project_id display_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, ] }
यह क्लाउड स्टोरेज सुरक्षा नियमों का नियम है जो storage.rules
नामक स्थानीय फ़ाइल में होना चाहिए।
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } }
यह कॉन्फ़िगरेशन एक नया Google क्लाउड प्रोजेक्ट बनाता है, प्रोजेक्ट के लिए फायरबेस सेवाओं को सक्षम करता है, क्लाउड फायरस्टोर इंस्टेंस का प्रावधान करता है, और फिर डिफ़ॉल्ट क्लाउड स्टोरेज बकेट का प्रावधान करता है।
यह क्लाउड फायरस्टोर इंस्टेंस और डिफ़ॉल्ट क्लाउड स्टोरेज बकेट के लिए फायरबेस सुरक्षा नियमों का भी प्रावधान करता है।
# Creates a new Google Cloud project. resource "google_project" "fs" { # fs = Firestore + Storage provider = google-beta.no_user_project_override folder_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_override project = google_project.fs.project_id for_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 accident disable_on_destroy = false } # Enables Firebase services for the new project created above. resource "google_firebase_project" "fs" { provider = google-beta project = 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-beta project = google_project.fs.project_id name = "(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location location_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-beta project = google_project.fs.project_id source { files { # Write security rules in a local file named "firestore.rules". # Learn more: https://firebase.google.com/docs/firestore/security/get-started name = "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-beta name = "cloud.firestore" # must be cloud.firestore ruleset_name = google_firebaserules_ruleset.firestore-fs.name project = 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-beta project = 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-beta project = google_project.fs.project_id bucket_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-beta project = google_project.fs.project_id source { files { # Write security rules in a local file named "storage.rules". # Learn more: https://firebase.google.com/docs/storage/security/get-started name = "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-beta name = "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 }
यह क्लाउड फायरस्टोर सुरक्षा नियमों का नियम है जो firestore.rules
नामक स्थानीय फ़ाइल में होना चाहिए।
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { allow read: if request.auth != null; allow create: if request.auth != null; allow update: if request.auth != null; } }
यह क्लाउड स्टोरेज सुरक्षा नियमों का नियम है जो storage.rules
नामक स्थानीय फ़ाइल में होना चाहिए।
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } }
यह कॉन्फिगरेशन एक नया Google क्लाउड प्रोजेक्ट बनाता है, प्रोजेक्ट के लिए फायरबेस सेवाओं को सक्षम करता है, और क्लाउड फायरस्टोर के लिए फायरबेस ऐप चेक को सेट अप और लागू करने में सक्षम बनाता है ताकि इसे केवल आपके एंड्रॉइड ऐप से ही एक्सेस किया जा सके।
# Creates a new Google Cloud project. resource "google_project" "appcheck" { provider = google-beta.no_user_project_override folder_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_override project = google_project.appcheck.project_id for_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-beta project = google_project.appcheck.project_id depends_on = [google_project_service.services] } # Provisions the Firestore database instance. resource "google_firestore_database" "database" { provider = google-beta project = google_firebase_project.appcheck.project name = "(default)" # See available locations: https://firebase.google.com/docs/projects/locations#default-cloud-location location_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-beta project = google_firebase_project.appcheck.project display_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 provider resource "google_firebase_app_check_play_integrity_config" "appcheck" { provider = google-beta project = google_firebase_project.appcheck.project app_id = google_firebase_android_app.appcheck.app_id depends_on = [time_sleep.wait_30s, google_firestore_database.database] lifecycle { precondition { condition = length(google_firebase_android_app.appcheck.sha256_hashes) > 0 error_message = "Provide a SHA-256 certificate on the Android App to use App Check" } } } # Enable enforcement of App Check for Firestore resource "google_firebase_app_check_service_config" "firestore" { provider = google-beta project = google_firebase_project.appcheck.project service_id = "firestore.googleapis.com" depends_on = [google_project_service.services] }
यह कॉन्फ़िगरेशन एक नया Google क्लाउड प्रोजेक्ट बनाता है, प्रोजेक्ट के लिए फ़ायरबेस सेवाओं को सक्षम करता है, और प्रोजेक्ट में फ़ायरबेस एक्सटेंशन का एक नया उदाहरण स्थापित करता है। यदि उदाहरण पहले से मौजूद है, तो इसके पैरामीटर कॉन्फ़िगरेशन में दिए गए मानों के आधार पर अपडेट किए जाते हैं।
# Creates a new Google Cloud project. resource "google_project" "extensions" { provider = google-beta.no_user_project_override folder_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_override project = google_project.extensions.project_id for_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-beta project = google_project.extensions.project_id depends_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-beta project = google_project.extensions.project_id instance_id = "translate-text-in-firestore" config { extension_ref = "firebase/firestore-translate-text" params = { COLLECTION_PATH = "posts/comments/translations" DO_BACKFILL = true LANGUAGES = "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" } } }
समस्या निवारण और अक्सर पूछे जाने वाले प्रश्न
यह मार्गदर्शिका "प्रोजेक्ट्स" के साथ काम करते समय निम्नलिखित टेराफ़ॉर्म विशेषताओं का उपयोग करती है।
- एक
resource
ब्लॉक के भीतरproject
अनुशंसित: जब भी संभव हो, प्रत्येक
resource
ब्लॉक मेंproject
विशेषता शामिल करेंएक परियोजना विशेषता को शामिल करके, टेराफॉर्म निर्दिष्ट परियोजना के भीतर संसाधन ब्लॉक में निर्दिष्ट बुनियादी ढांचे का निर्माण करेगा। यह मार्गदर्शिका और हमारी नमूना कॉन्फ़िग फ़ाइलें सभी इस अभ्यास का उपयोग करती हैं।
project
के बारे में आधिकारिक टेराफ़ॉर्म दस्तावेज़ देखें।-
provider
ब्लॉक के भीतरuser_project_override
अधिकांश संसाधनों का प्रावधान करने के लिए, आपको
user_project_override = true
का उपयोग करना चाहिए, जिसका अर्थ है अपने स्वयं के फायरबेस प्रोजेक्ट के विरुद्ध कोटा की जाँच करना। हालाँकि, अपना नया प्रोजेक्ट सेट करने के लिए ताकि वह कोटा जाँच स्वीकार कर सके, आपको पहलेuser_project_override = false
का उपयोग करना होगा।user_project_override
के बारे में आधिकारिक टेराफ़ॉर्म दस्तावेज़ देखें।
सुनिश्चित करें कि जिस उपयोगकर्ता खाते का उपयोग आप gCloud CLI कमांड चलाने के लिए कर रहे हैं, उसने फायरबेस सेवा की शर्तों (फायरबेस टीओएस) को स्वीकार कर लिया है।
आप उपयोगकर्ता खाते में साइन इन ब्राउज़र का उपयोग करके और फायरबेस कंसोल में मौजूदा फायरबेस प्रोजेक्ट को देखने का प्रयास करके यह जांच कर सकते हैं। यदि आप किसी मौजूदा फायरबेस प्रोजेक्ट को देख सकते हैं, तो उपयोगकर्ता खाते ने फायरबेस टीओएस को स्वीकार कर लिया है।
यदि आप किसी मौजूदा फायरबेस प्रोजेक्ट को नहीं देख पा रहे हैं, तो संभवतः उपयोगकर्ता खाते ने फायरबेस टीओएस को स्वीकार नहीं किया है। इसे ठीक करने के लिए, फायरबेस कंसोल के माध्यम से एक नया फायरबेस प्रोजेक्ट बनाएं और प्रोजेक्ट निर्माण के हिस्से के रूप में फायरबेस टीओएस को स्वीकार करें। आप कंसोल में प्रोजेक्ट सेटिंग्स के माध्यम से इस प्रोजेक्ट को तुरंत हटा सकते हैं।
कुछ मिनट प्रतीक्षा करें, और फिर terraform apply
फिर से चलाने का प्रयास करें।
यह विभिन्न प्रणालियों में प्रसार विलंब के कारण हो सकता है। terraform import
चलाकर टेराफॉर्म स्थिति में संसाधन आयात करके इस समस्या को हल करने का प्रयास करें। फिर terraform apply
दोबारा चलाने का प्रयास करें।
आप सीख सकते हैं कि प्रत्येक संसाधन को उसके टेराफ़ॉर्म दस्तावेज़ के "आयात" अनुभाग में कैसे आयात किया जाए (उदाहरण के लिए, क्लाउड फायरस्टोर के लिए "आयात" दस्तावेज़ )।
जैसा कि त्रुटि से पता चलता है, हो सकता है कि टेराफ़ॉर्म एक ही समय में कई सूचकांकों को प्रावधानित करने और/या एक दस्तावेज़ बनाने का प्रयास कर रहा हो और एक समवर्ती त्रुटि का सामना करना पड़ा हो। terraform apply
फिर से चलाने का प्रयास करें।
इस त्रुटि का अर्थ है कि टेराफ़ॉर्म को नहीं पता कि किस प्रोजेक्ट के विरुद्ध कोटा की जाँच करनी है। समस्या निवारण के लिए, resource
ब्लॉक में निम्नलिखित की जाँच करें:
- सुनिश्चित करें कि आपने
project
विशेषता के लिए एक मान निर्दिष्ट किया है। - सुनिश्चित करें कि आप प्रदाता का उपयोग
user_project_override = true
(कोई उपनाम नहीं) के साथ कर रहे हैं, जो फायरबेस नमूनों मेंgoogle-beta
है।
प्रोजेक्ट आईडी पहले से मौजूद होने के संभावित कारण यहां दिए गए हैं:
उस आईडी से जुड़ा प्रोजेक्ट किसी और का है।
- समाधान के लिए: कोई अन्य प्रोजेक्ट आईडी चुनें।
उस आईडी से जुड़ा प्रोजेक्ट हाल ही में हटा दिया गया था (सॉफ्ट-डिलीट स्थिति में)।
- समाधान के लिए: यदि आपको लगता है कि आईडी से जुड़ा प्रोजेक्ट आपका है, तो
projects.get
REST API का उपयोग करके प्रोजेक्ट की स्थिति जांचें।
- समाधान के लिए: यदि आपको लगता है कि आईडी से जुड़ा प्रोजेक्ट आपका है, तो
उस आईडी से जुड़ा प्रोजेक्ट वर्तमान उपयोगकर्ता के अंतर्गत सही ढंग से मौजूद है। त्रुटि का संभावित कारण यह हो सकता है कि पिछला
terraform apply
बाधित हो गया हो।- हल करने के लिए: निम्नलिखित आदेश चलाएँ:
terraform import google_project.default PROJECT_ID
और तब
terraform import google_firebase_project.default PROJECT_ID
- हल करने के लिए: निम्नलिखित आदेश चलाएँ:
एक ऐप इंजन एप्लिकेशन के लिए क्लाउड फायरस्टोर इंस्टेंस की आवश्यकता होती है, लेकिन आपके पास प्रति प्रोजेक्ट केवल एक क्लाउड फायरस्टोर इंस्टेंस हो सकता है। इसलिए, जैसा कि त्रुटि संदेश से पता चलता है, यदि आपने पहले ही प्रोजेक्ट के क्लाउड फायरस्टोर इंस्टेंस को एक स्थान पर प्रावधानित कर दिया है, तो यदि आप क्लाउड फायरस्टोर इंस्टेंस को किसी भिन्न स्थान पर प्रावधान करने का प्रयास करेंगे तो ऐप इंजन त्रुटि करेगा। ऐप इंजन को लगता है कि आप पहले से मौजूद क्लाउड फायरस्टोर इंस्टेंस को "पुनः प्रावधानित" करने का प्रयास कर रहे हैं।
इस त्रुटि को हल करने के लिए, क्लाउड फायरस्टोर और ऐप इंजन एप्लिकेशन दोनों के लिए एक ही स्थान का उपयोग करें। यदि आपको क्लाउड फायरस्टोर से भिन्न स्थान पर क्लाउड स्टोरेज बकेट की आवश्यकता है, तो आप अतिरिक्त बकेट का प्रावधान कर सकते हैं ( एकाधिक क्लाउड स्टोरेज बकेट बनाने के लिए नमूना कॉन्फ़िगरेशन देखें)।
जब आप किसी प्रोजेक्ट के डिफ़ॉल्ट क्लाउड स्टोरेज बकेट ( google_app_engine_application
माध्यम से) का प्रावधान करते हैं और प्रोजेक्ट में अभी तक क्लाउड फायरस्टोर इंस्टेंस नहीं है, तो google_app_engine_application
स्वचालित रूप से प्रोजेक्ट के क्लाउड फायरस्टोर इंस्टेंस का प्रावधान करता है।
इसलिए, यदि आपके प्रोजेक्ट का क्लाउड फायरस्टोर इंस्टेंस पहले से ही प्रावधानित है, तो यदि आप क्लाउड फायरस्टोर इंस्टेंस को स्पष्ट रूप से प्रावधान करने का प्रयास करेंगे तो google_firestore_database
त्रुटि देगा।
एक बार प्रोजेक्ट के क्लाउड फायरस्टोर इंस्टेंस का प्रावधान हो जाने के बाद, आप इसे "पुनः प्रावधान" नहीं कर सकते या इसका स्थान नहीं बदल सकते। त्रुटि को होने से रोकने के लिए, अपनी कॉन्फ़िगरेशन फ़ाइल से google_firestore_database
संसाधन ब्लॉक को हटा दें। ध्यान दें, हालाँकि, हम प्रोजेक्ट के डिफ़ॉल्ट क्लाउड स्टोरेज बकेट से पहले क्लाउड फायरस्टोर का प्रावधान करने की सलाह देते हैं (क्यों के लिए नीचे एक तरफ देखें)।