संग्रह की मदद से व्यवस्थित रहें
अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.
Firebase अब Google Analytics के साथ काम करना शुरू कर देगा
टेराफ़ॉर्म.
अगर आप किसी ऐसी टीम में हैं जो Firebase बनाने की प्रोसेस को ऑटोमेट और स्टैंडर्ड बनाना चाहती है
खास संसाधनों के साथ प्रोजेक्ट और सेवाओं को चालू किया हो, फिर इनका इस्तेमाल किया जा रहा हो
Firebase के साथ टेराफ़ॉर्म इस्तेमाल करना आपके लिए सही हो सकता है.
Firebase के साथ Turaform का इस्तेमाल करने के लिए बुनियादी वर्कफ़्लो में ये शामिल हैं:
ऐसी टेरेस कॉन्फ़िगरेशन फ़ाइल (.tf फ़ाइल) बनाना और उसे पसंद के मुताबिक बनाना जो
वह इन्फ़्रास्ट्रक्चर तय करता है जिसे आपको प्रावधान करना है (यानी, ऐसे संसाधन
जिन सेवाओं को आप चालू करना चाहते हैं.
gcloud सीएलआई कमांड इस्तेमाल करना जो टेराफ़ॉर्म के साथ इंटरफ़ेस करने के लिए
.tf फ़ाइल में दी गई इन्फ़्रास्ट्रक्चर का प्रावधान करें.
टेरेस और Firebase की मदद से क्या-क्या किया जा सकता है?
इस गाइड में सामान्य वर्कफ़्लो का उदाहरण
Android ऐप्लिकेशन के साथ एक नया Firebase प्रोजेक्ट बना रहा है. हालाँकि, आपको बहुत कुछ किया जा सकता है
टेराफ़ॉर्म के और भी कई वर्शन, जैसे:
terraform का इस्तेमाल करके मौजूदा इन्फ़्रास्ट्रक्चर मिटाएं और उसमें बदलाव करें.
टेराफ़ॉर्म का इस्तेमाल करके, प्रॉडक्ट के हिसाब से कॉन्फ़िगरेशन और टास्क मैनेज करना, जैसे कि:
Firebase से पुष्टि करने की सुविधा में साइन इन करने वाली कंपनियों को चालू करना.
Cloud Storage बकेट या डेटाबेस इंस्टेंस बनाना और डिप्लॉय करना
Firebase के सुरक्षा नियम बनाए जा सकते हैं.
इन सभी कामों को पूरा करने के लिए, स्टैंडर्ड टेराफ़ॉर्म कॉन्फ़िगरेशन फ़ाइलों और कमांड का इस्तेमाल किया जा सकता है
टास्क. इसमें आपकी मदद करने के लिए, हमने
कई सामान्य इस्तेमाल के लिए, Terraform कॉन्फ़िगरेशन फ़ाइलों का सैंपल
मामले.
Firebase के साथ Turaform का इस्तेमाल करने के लिए, सामान्य वर्कफ़्लो
ज़रूरी शर्तें
इस गाइड में, Firebase के साथ Turaform का इस्तेमाल करने के बारे में जानकारी दी गई है. इसलिए, इसे
टेराफ़ॉर्म के साथ बुनियादी कुशलता. पक्का करें कि आपने ये टास्क पूरे कर लिए हों
इस वर्कफ़्लो को शुरू करने से पहले ज़रूरी शर्तें देखें.
Terraform इंस्टॉल करें
टेराफ़ॉर्म के आधिकारिक ट्यूटोरियल की मदद से, इसके बारे में जानें.
उपयोगकर्ता खातों और सेवा खातों के लिए ज़रूरी शर्तें देखें
अगर किसी उपयोगकर्ता खाते का इस्तेमाल किया जा रहा है, तो आपको Firebase की शर्तें स्वीकार करनी होंगी
सेवा (Firebase की सेवा की शर्तें). अगर आपको लगता है कि आपने Firebase की सेवा की शर्तों को स्वीकार कर लिया है, तो
Firebase प्रोजेक्ट
Firebase कंसोल
टेरेस पर कुछ कार्रवाइयां करने (जैसे, प्रोजेक्ट बनाना) के लिए,
निम्नलिखित सही होना चाहिए:
उपयोगकर्ता या सेवा खाते के पास
कार्रवाई नहीं करनी होगी.
अगर उपयोगकर्ता या सेवा खाता, Google Cloud संगठन का हिस्सा है,
तो संगठन की नीतियों को खाते को ये कार्रवाइयां करने की अनुमति देनी होगी.
पहला चरण: Terraform कॉन्फ़िगरेशन फ़ाइल बनाना और उसे पसंद के मुताबिक बनाना
टेराफ़ॉर्म कॉन्फ़िगरेशन फ़ाइल के लिए दो मुख्य सेक्शन की ज़रूरत होती है (इन सेक्शन के बारे में पूरी जानकारी दी गई है)
नीचे दिया गया है):
provider सेटअप करना ज़रूरी है, भले ही कोई भी Firebase प्रॉडक्ट या सेवा हो
शामिल हैं.
अपने डिवाइस में, कोई टेरेस कॉन्फ़िगरेशन फ़ाइल बनाएं (जैसे, main.tf फ़ाइल)
डायरेक्ट्री.
इस गाइड में, आपको provider, दोनों के बारे में बताने के लिए इस कॉन्फ़िगरेशन फ़ाइल का इस्तेमाल करना होगा
सेटअप और वह सभी इन्फ़्रास्ट्रक्चर शामिल हैं जिसे आपकोterraform को बनाना है. ध्यान दें,
हालांकि, आपके पास प्रोवाइडर सेटअप को शामिल करने के विकल्प होते हैं.
इसके लिए विकल्प देखें
provider सेटअप शामिल करने के लिए
provider सेटअप को शामिल करने के लिए, आपके पास ये विकल्प हैं
आपके Teraform का बाकी कॉन्फ़िगरेशन:
पहला विकल्प: इसे किसी एक टेराफ़ॉर्म .tf कॉन्फ़िगरेशन के सबसे ऊपर शामिल करें
फ़ाइल (जैसा कि इस गाइड में दिखाया गया है).
इस विकल्प का इस्तेमाल तब करें, जब आपने Turaform का इस्तेमाल शुरू किया हो या बस
Firebase के साथ टेराफ़ॉर्म इस्तेमाल करके देखें.
दूसरा विकल्प: इसे किसी अलग .tf फ़ाइल में शामिल करें. जैसे, provider.tf
फ़ाइल से अलग है, जहां आप .tf फ़ाइल के अलावा
बनाएं (जैसे main.tf फ़ाइल).
अगर आप किसी ऐसी बड़ी टीम का हिस्सा हैं जिसे
सेटअप के लिए स्टैंडर्ड तय करते हैं.
टेराफ़ॉर्म के निर्देशों को चलाते समय, provider.tf फ़ाइल और
main.tf फ़ाइल उसी डायरेक्ट्री में होनी चाहिए.
main.tf फ़ाइल के सबसे ऊपर, यह provider सेटअप शामिल करें.
यह बीटा वर्शन में रिलीज़ है, इसलिए आपको google-beta की सेवा देने वाली कंपनी का इस्तेमाल करना होगा
टेराफ़ॉर्म के साथ Firebase का इस्तेमाल करके. प्रोडक्शन में इस्तेमाल करते समय सावधानी बरतें.
# 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
}
ज़्यादा जानने के लिए,
प्रोजेक्ट से जुड़े अलग-अलग टाइप के एट्रिब्यूट
(इसमें यह जानकारी भी शामिल है कि इस गाइड में "कोटे की जांच वाला प्रोजेक्ट" क्या है) का इस्तेमाल करते समय
Firebase के साथ टेराफ़ॉर्म.
अपनी कॉन्फ़िगरेशन फ़ाइल को पूरा करने के लिए, अगले सेक्शन पर जाएं और यह तय करें कि
बनाया जा सकता है.
यह बताएं कि resource ब्लॉक का इस्तेमाल करके कौनसा इन्फ़्रास्ट्रक्चर बनाना है
आपकी टेराफ़ॉर्म कॉन्फ़िगरेशन फ़ाइल में (इस गाइड, आपकी main.tf फ़ाइल के लिए), आपको ये काम करने होंगे
उस सभी इंफ़्रास्ट्रक्चर के बारे में बताएं जो आपको Tenraform बनाने के लिए चाहिए (यानी सभी
जिन संसाधनों का आपको प्रावधान करना है और वे सभी सेवाएं जिन्हें आपको चालू करना है). तय सीमा में
इस गाइड में, सभी लिंक की पूरी सूची देखें
Terraform के साथ काम करने वाले Firebase के संसाधन.
अपनी main.tf फ़ाइल खोलें.
provider के सेटअप में, resource के लिए यह कॉन्फ़िगरेशन शामिल करें
ब्लॉक.
इस बुनियादी उदाहरण से एक नया Firebase प्रोजेक्ट बनता है और यह एक नया 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_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,
]
}
दूसरा चरण: बताए गए इन्फ़्रास्ट्रक्चर को बनाने के लिए, Terraform कमांड चलाना
संसाधनों का प्रावधान करने और अपने main.tf में बताई गई सेवाएं चालू करने के लिए
फ़ाइल अपलोड करने के लिए, उसी डायरेक्ट्री से इन कमांड को चलाएं जो आपकी main.tf फ़ाइल है.
इन निर्देशों के बारे में ज़्यादा जानने के लिए,
टेराफ़ॉर्म से जुड़े दस्तावेज़.
अगर आप पहली बार
डायरेक्ट्री के तौर पर, आपको कॉन्फ़िगरेशन डायरेक्ट्री शुरू करनी होगी और
Google टेराफ़ॉर्म कंपनी है. इसके लिए, नीचे दिया गया निर्देश देखें:
terraform init
फ़ाइल को रन करके, अपनी main.tf फ़ाइल में इन्फ़्रास्ट्रक्चर बनाएं
निम्न आदेश:
terraform apply
पुष्टि करें कि सब कुछ उम्मीद के मुताबिक प्रावधान या चालू किया गया था:
विकल्प 1:
निम्न आदेश:
terraform show
दूसरा विकल्प: यहां अपना Firebase प्रोजेक्ट देखें
Firebase कंसोल.
Teraform सहायता वाले Firebase के संसाधन
नीचे दिए गए Firebase और Google के संसाधनों में, टेरेस पर काम करने की सुविधा उपलब्ध है. और हम
हम ज़्यादा संसाधन जोड़ते हैं! इसलिए, अगर आपको वह संसाधन नहीं दिखता है
टेराफ़ॉर्म की मदद से मैनेज करना है, तो कुछ समय बाद फिर से देखें कि क्या वह उपलब्ध है या
इसके लिए अनुरोध करें
GitHub के रेपो में समस्या दर्ज करना.
google_identity_platform_config —
Google Cloud Identity Platform (GCIP) (जो Firebase से पुष्टि करने के लिए बैकएंड है) चालू करें
और प्रोजेक्ट-लेवल पर पुष्टि करने की सेटिंग उपलब्ध कराएं
वह प्रोजेक्ट जिसमें Teleraform GCIP और/या Firebase से पुष्टि करने की सुविधा चालू करेगा
ब्लेज़ कीमत के प्लान पर होना चाहिए (यानी कि प्रोजेक्ट में
क्लाउड बिलिंग खाता). इसे प्रोग्राम के हिसाब से, अपने-आप प्रोसेस होने की सुविधा के ज़रिए किया जा सकता है
सेट कर रही हूँ
billing_account
एट्रिब्यूट की वैल्यू सबमिट करें.google_project
इस संसाधन से कई और कॉन्फ़िगरेशन भी चालू किए जा सकते हैं. जैसे, स्थानीय साइन-इन के तरीके,
जैसे कि पहचान छिपाकर ईमेल/पासवर्ड, और फ़ोन की पुष्टि करने की सुविधा.
और अनुमति वाले डोमेन को ब्लॉक करने वाले फ़ंक्शन और अनुमति वाले डोमेन.
Turaform की मदद से, Firebase रीयल टाइम डेटाबेस के सुरक्षा नियमों को डिप्लॉय करना (ऐसा करने का तरीका जानें
इन नियमों को लागू करें
दूसरे टूल का इस्तेमाल करना, जिनमें प्रोग्रामैटिक विकल्प भी शामिल हैं)
इस्तेमाल के सामान्य उदाहरणों के लिए, Tenraform कॉन्फ़िगरेशन फ़ाइलों का सैंपल
इसकी मदद से Firebase पुष्टि करने की सुविधा सेट अप करें
जीसीआईपी
यह कॉन्फ़िगरेशन, नया Google Cloud प्रोजेक्ट बनाता है,
प्रोजेक्ट को क्लाउड बिलिंग खाते (ब्लेज़ प्राइसिंग प्लान) से जोड़ता है
GCIP के साथ Firebase से पुष्टि करने के लिए ज़रूरी है),
प्रोजेक्ट के लिए Firebase सेवाओं को चालू करता है,
GCIP के साथ Firebase से पुष्टि करने की सुविधा सेट अप करता है,
और प्रोजेक्ट के साथ तीन अलग-अलग तरह के ऐप्लिकेशन रजिस्टर करता है.
ध्यान दें कि टेरेस की मदद से Firebase से पुष्टि करने की सुविधा को सेट अप करने के लिए, जीसीआईपी (GCIP) को चालू करना ज़रूरी है.
# 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,
]
}
डिफ़ॉल्ट Firebase रीयल टाइम डेटाबेस इंस्टेंस
यह कॉन्फ़िगरेशन, नया Google Cloud प्रोजेक्ट बनाता है,
प्रोजेक्ट के लिए Firebase सेवाओं को चालू करता है,
प्रोजेक्ट के डिफ़ॉल्ट रीयल टाइम डेटाबेस इंस्टेंस का प्रावधान करता है,
और प्रोजेक्ट के साथ तीन अलग-अलग तरह के ऐप्लिकेशन रजिस्टर करता है.
# 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,
]
}
एक से ज़्यादा डिवाइसों का प्रावधान करें
Firebase रीयल टाइम डेटाबेस के इंस्टेंस
यह कॉन्फ़िगरेशन, नया Google Cloud प्रोजेक्ट बनाता है,
प्रोजेक्ट को क्लाउड बिलिंग खाते (ब्लेज़ प्राइसिंग प्लान) से जोड़ता है
कई रीयलटाइम डेटाबेस इंस्टेंस के लिए ज़रूरी है)
प्रोजेक्ट के लिए Firebase सेवाओं को चालू करता है,
कई रीयल टाइम डेटाबेस इंस्टेंस का प्रावधान करता है
(इसमें प्रोजेक्ट के डिफ़ॉल्ट रीयल टाइम डेटाबेस इंस्टेंस शामिल है),
और प्रोजेक्ट के साथ तीन अलग-अलग तरह के ऐप्लिकेशन रजिस्टर करता है.
# 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,
]
}
Cloud Firestore इंस्टेंस
यह कॉन्फ़िगरेशन, नया Google Cloud प्रोजेक्ट बनाता है,
प्रोजेक्ट के लिए Firebase सेवाओं को चालू करता है,
प्रोजेक्ट के Cloud Firestore इंस्टेंस का प्रावधान करता है,
और प्रोजेक्ट के साथ तीन अलग-अलग तरह के ऐप्लिकेशन रजिस्टर करता है.
इसमें Cloud Firestore इंस्टेंस के लिए, Firebase के सुरक्षा नियमों का भी प्रावधान है,
एक Cloud Firestore इंडेक्स बनाता है,
और सीड डेटा के साथ Cloud Firestore दस्तावेज़ जोड़ता है.
# 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,
]
}
यह Cloud 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;
}
}
डिफ़ॉल्ट Cloud Storage बकेट
यह कॉन्फ़िगरेशन, नया Google Cloud प्रोजेक्ट बनाता है,
प्रोजेक्ट के लिए Firebase सेवाओं को चालू करता है,
प्रोजेक्ट की डिफ़ॉल्ट Cloud Storage बकेट का प्रावधान करती है,
और प्रोजेक्ट के साथ तीन अलग-अलग तरह के ऐप्लिकेशन रजिस्टर करता है.
यह Cloud Storage बकेट के लिए, Firebase के सुरक्षा नियमों का भी प्रावधान करता है,
और बकेट में एक फ़ाइल अपलोड करता है.
# 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,
]
}
यह Cloud Storage के सुरक्षा नियमों का नियमसेट है, जिसे लोकल फ़ाइल में होना चाहिए
storage.rules नाम दिया गया.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
प्रॉविज़न
एक से ज़्यादा Cloud Storage बकेट
यह कॉन्फ़िगरेशन, नया Google Cloud प्रोजेक्ट बनाता है,
प्रोजेक्ट को क्लाउड बिलिंग खाते (ब्लेज़ प्राइसिंग प्लान) से जोड़ता है
एक से ज़्यादा बकेट के लिए ज़रूरी है),
प्रोजेक्ट के लिए Firebase सेवाओं को चालू करता है,
कई Cloud Storage बकेट उपलब्ध कराता है
(प्रोजेक्ट के डिफ़ॉल्ट Cloud Storage बकेट के साथ),
और प्रोजेक्ट के साथ तीन अलग-अलग तरह के ऐप्लिकेशन रजिस्टर करता है.
इसमें Cloud Storage बकेट के लिए, Firebase के सुरक्षा नियमों का भी प्रावधान किया जाता है,
और फ़ाइल को डिफ़ॉल्ट Cloud Storage बकेट में अपलोड करता है.
# 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,
]
}
यह Cloud Storage के सुरक्षा नियमों का नियमसेट है, जिसे लोकल फ़ाइल में होना चाहिए
storage.rules नाम दिया गया.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
Cloud Firestore इंस्टेंस और डिफ़ॉल्ट Cloud Storage बकेट
यह कॉन्फ़िगरेशन, नया Google Cloud प्रोजेक्ट बनाता है,
प्रोजेक्ट के लिए Firebase सेवाओं को चालू करता है,
Cloud Firestore इंस्टेंस के प्रावधान के साथ होता है और
इसके बाद, डिफ़ॉल्ट Cloud Storage बकेट उपलब्ध कराता है.
यह Cloud Firestore इंस्टेंस के लिए, Firebase के सुरक्षा नियमों और डिफ़ॉल्ट के तौर पर भी प्रावधान करता है
Cloud Storage बकेट.
# 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
}
यह Cloud 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;
}
}
यह Cloud Storage के सुरक्षा नियमों का नियमसेट है, जिसे लोकल फ़ाइल में होना चाहिए
storage.rules नाम दिया गया.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
किसी एपीआई रिसॉर्स को सुरक्षित रखना
की मदद से,
यह कॉन्फ़िगरेशन, नया Google Cloud प्रोजेक्ट बनाता है,
प्रोजेक्ट के लिए Firebase सेवाओं को चालू करता है और
Cloud Firestore के लिए Firebase ऐप्लिकेशन की जांच को सेट अप और चालू करता है
ताकि इसे सिर्फ़ आपके Android ऐप्लिकेशन से ऐक्सेस किया जा सके.
# 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]
}
किसी विज्ञापन को
Firebase एक्सटेंशन का इंस्टेंस
यह कॉन्फ़िगरेशन, नया Google Cloud प्रोजेक्ट बनाता है,
प्रोजेक्ट के लिए Firebase सेवाओं को चालू करता है और
Firebase एक्सटेंशन का नया इंस्टेंस इंस्टॉल करता है
प्रोजेक्ट में शामिल हैं. अगर इंस्टेंस पहले से मौजूद है, तो
इसके पैरामीटर, कॉन्फ़िगरेशन में दी गई वैल्यू के हिसाब से अपडेट होते हैं.
# 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"
}
}
}
समस्या का हल और अक्सर पूछे जाने वाले सवाल
क्या आपको
प्रोजेक्ट से जुड़े सभी अलग-अलग एट्रिब्यूट के बारे में ज़्यादा जानें. उदाहरण के लिए,
project और user_project_override)
"प्रोजेक्ट" के साथ काम करते समय, यह गाइड इन टेराफ़ॉर्म एट्रिब्यूट का इस्तेमाल करती है.
resource ब्लॉक में project
इसका सुझाव दिया जाता है: जब भी हो सके, हर एट्रिब्यूट में project एट्रिब्यूट शामिल करें
resource ब्लॉक
प्रोजेक्ट एट्रिब्यूट को शामिल करने पर, Tenraform इन्फ़्रास्ट्रक्चर बनाएगा
बताए गए प्रोजेक्ट में संसाधन ब्लॉक में तय किया गया हो. इस गाइड और
हमारी सैंपल कॉन्फ़िगरेशन फ़ाइलें इस तरीके का इस्तेमाल करती हैं.
इसके बारे में आधिकारिक Teraform दस्तावेज़ देखें
project.
provider ब्लॉक में user_project_override
ज़्यादातर संसाधनों के प्रावधान के लिए, आपको
user_project_override = true, जिसका मतलब है कि अपने हिसाब से कोटा की जांच करना
Firebase प्रोजेक्ट. हालांकि, अपने नए प्रोजेक्ट को सेट अप करें, ताकि यह
कोटा चेक करने के लिए, आपको पहले user_project_override = false का इस्तेमाल करना होगा.
आपको गड़बड़ी का यह मैसेज दिखता है:
generic::permission_denied: Firebase Tos Not Accepted.
पक्का करें कि gcloud सीएलआई को चलाने के लिए इस्तेमाल किया जा रहा उपयोगकर्ता खाता
कमांड ने 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 लिखा है.
ऐसा कई सिस्टम में, ब्रॉडकास्ट में देरी की वजह से हो सकता है. इस समस्या को हल करने की कोशिश करें
इसे चलाकर, Tenraform स्टेट में रिसॉर्स को इंपोर्ट करके समस्या
terraform import. इसके बाद, terraform apply को फिर से चलाकर देखें.
इनके साथ काम करते समय
Cloud Firestore, आपको यह गड़बड़ी मिली: Error creating Index: googleapi:
Error 409;...Concurrent access -- try again
जैसा कि गड़बड़ी से पता चलता है, टेराफ़ॉर्म शायद एक से ज़्यादा इंडेक्स का प्रावधान करने की कोशिश कर रहा है
और/या एक ही समय में दस्तावेज़ बनाते समय कोई गड़बड़ी हुई.
terraform apply को फिर से चलाने की कोशिश करें.
आपको मिले हैं
यह गड़बड़ी:
"you may need to specify 'X-Goog-User-Project' HTTP header for quota and
billing purposes".
इस गड़बड़ी का मतलब है कि Tenraform को यह नहीं पता कि किस प्रोजेक्ट के कोटा की जांच करनी है
टीम में हुए हैं. समस्या हल करने के लिए, 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 Firestore और फिर Cloud Storage के प्रावधान के लिए (इसके ज़रिए
google_app_engine_application), तो आपको यह गड़बड़ी दिखती है:
Error: Error creating App Engine application: googleapi: Error 409:
Cannot create Firestore database resource <resource-name> since it
already exists at location <location-id>, alreadyExists.
App Engine ऐप्लिकेशन के लिए Cloud Firestore इंस्टेंस की ज़रूरत होती है, लेकिन आप सिर्फ़
हर प्रोजेक्ट के लिए, Cloud Firestore का एक इंस्टेंस होना चाहिए. इसलिए, जैसा कि गड़बड़ी के मैसेज से पता चलता है,
अगर आपने प्रोजेक्ट के Cloud Firestore इंस्टेंस का प्रावधान
जगह है, तो Cloud Firestore का प्रावधान करने की कोशिश करने पर App Engine गड़बड़ी करेगा
इंस्टेंस को किसी दूसरी जगह पर रखें. App Engine को लगता है कि आप
"फिर से प्रावधान करना" पहले से मौजूद Cloud Firestore इंस्टेंस.
टास्क कब शुरू होगा
Cloud Storage का प्रावधान करने की कोशिश कर रहा है (इसके ज़रिए
google_app_engine_application) और फिर Cloud Firestore,
यह गड़बड़ी:
Error: Error creating Database: googleapi: Error 409: Database already
exists. Please use another database_id.
जब आप किसी प्रोजेक्ट के डिफ़ॉल्ट Cloud Storage बकेट का प्रावधान करते हैं (इसके लिए,
google_app_engine_application) और प्रोजेक्ट में अब तक
Cloud Firestore इंस्टेंस, इसके बाद अपने-आप google_app_engine_application
प्रोजेक्ट के Cloud Firestore इंस्टेंस का प्रावधान करता है.
इसलिए, अगर आपके प्रोजेक्ट के Cloud Firestore इंस्टेंस का प्रावधान पहले ही किया जा चुका है,
अगर आप साफ़ तौर पर किसी उपयोगकर्ता के लिए,google_firestore_database
Cloud Firestore इंस्टेंस.
प्रोजेक्ट के Cloud Firestore इंस्टेंस का प्रावधान हो जाने के बाद, आप ये काम नहीं कर सकते
"फिर से प्रावधान करना" उसे या उसकी जगह को बदला जा सकता है. गड़बड़ी को रोकने के लिए,
अपनी कॉन्फ़िगरेशन फ़ाइल से google_firestore_database रिसॉर्स ब्लॉक को हटाएं.
हालांकि, हमारा सुझाव है कि
प्रोजेक्ट का डिफ़ॉल्ट Cloud Storage बकेट (इसकी वजह जानने के लिए नीचे दिया गया हिस्सा देखें).