1. शुरुआती जानकारी
लक्ष्य
Terraform का इस्तेमाल करके, Firebase प्रोजेक्ट को सेट अप और मैनेज किया जा सकता है. इसमें प्रोग्राम के हिसाब से इन्फ़्रास्ट्रक्चर और Firebase प्रॉडक्ट का कॉन्फ़िगरेशन भी शामिल है.
इस कोडलैब में, सबसे पहले नया Firebase प्रोजेक्ट बनाने के लिए Terraform कॉन्फ़िगरेशन फ़ाइल बनाने का तरीका बताया गया है. इसके बाद, उन ऐप्लिकेशन और Firebase प्रॉडक्ट को कॉन्फ़िगर करने का तरीका बताया गया है जिनका इस्तेमाल आपको उस प्रोजेक्ट में करना है. हमने Terraform कमांड लाइन के बारे में बुनियादी जानकारी भी दी है. जैसे, किए जाने वाले बदलावों की झलक देखना और फिर उन्हें लागू करना.
अगर आपको Terraform की मदद से, Firebase प्रोजेक्ट और प्रॉडक्ट सेट अप और मैनेज करने का तरीका जानना है, तो यह कोडलैब आपके लिए है!
आपको क्या सीखने को मिलेगा
- Terraform कॉन्फ़िगरेशन फ़ाइल बनाने का तरीका (
*.tf
) - अपने इन्फ़्रास्ट्रक्चर को मैनेज करने के लिए, Terraform CLI कमांड का इस्तेमाल कैसे करें
- अपने संसाधनों और सेवाओं को अपडेट करने के लिए, कॉन्फ़िगरेशन में बदलाव करने का तरीका
- अपने कॉन्फ़िगरेशन को किसी असली वेब ऐप्लिकेशन (जिसे Friendly Chat कहा जाता है) पर लागू करने का तरीका
- अलग-अलग एनवायरमेंट (प्रोडक्शन, स्टेजिंग वगैरह) में पैरलल (और सिंक किए गए) कॉन्फ़िगरेशन को कैसे तय करें
आपको इनकी ज़रूरत होगी
- टर्मिनल/कंसोल
- अपनी पसंद का आईडीई/टेक्स्ट एडिटर, जैसे कि WebStorm, Atom, Sublime या VS Code
- अपनी पसंद का ब्राउज़र, जैसे कि Chrome
- Google Cloud CLI (gcloud सीएलआई) - इस सीएलआई को इंस्टॉल करें और उपयोगकर्ता खाते या सेवा खाते का इस्तेमाल करके लॉग इन करें
इस कोडलैब को पूरा करने के लिए, आपको Terraform और इसकी शब्दावली की बुनियादी जानकारी होनी चाहिए. साथ ही, आपको इन ज़रूरी शर्तों के बारे में भी पता होना चाहिए:
- Terraform इंस्टॉल करें और उनके आधिकारिक ट्यूटोरियल का इस्तेमाल करके, Terraform के बारे में जानें
इस कोडलैब में, एक असली सैंपल ऐप्लिकेशन दिया गया है. इससे Terraform के ज़रिए उपलब्ध कराई गई सुविधाओं को टेस्ट किया जा सकता है और उनके साथ इंटरैक्ट किया जा सकता है. इसके लिए, आपको इनकी ज़रूरत होगी:
- वेब ऐप्लिकेशन के लिए सैंपल कोड - कोडलैब के अगले चरण में इस कोड को डाउनलोड करें
- पैकेज मैनेजर npm (जो आम तौर पर Node.js के साथ आता है) - इन टूल को इंस्टॉल करें
- Firebase CLI - इस सीएलआई को इंस्टॉल करें और लॉग इन करें
2. स्टार्टिंग कोड पाना
इस कोडलैब में, Terraform के ज़रिए उपलब्ध कराई गई सुविधाओं को किसी असली वेब ऐप्लिकेशन के साथ टेस्ट किया जा सकता है. हमारा सुझाव है कि आप ऐसा करें, ताकि आपको Terraform के ज़रिए उपलब्ध कराए गए संसाधनों को इस्तेमाल करने के लिए ज़रूरी सभी चरणों के बारे में पता चल सके.
कमांड लाइन से, कोडलैब की GitHub रिपॉज़िटरी को क्लोन करें:
git clone https://github.com/firebase/codelab-friendlychat-web
इसके अलावा, अगर आपने git इंस्टॉल नहीं किया है, तो रिपॉज़िटरी को ZIP फ़ाइल के तौर पर डाउनलोड किया जा सकता है.
3. Terraform कॉन्फ़िगरेशन बनाना
Terraform सेट अप करना
- डाउनलोड किए गए सैंपल ऐप्लिकेशन के कोडबेस में,
web
डायरेक्ट्री के रूट पर जाएं. - उस डायरेक्ट्री के रूट में,
main.tf
नाम की Terraform कॉन्फ़िगरेशन फ़ाइल बनाएं. इसमें यह शुरुआती सेटअप शामिल करें:
main.tf# Terraform configuration to set up providers by version. terraform { required_providers { google-beta = { source = "hashicorp/google-beta" version = "~> 4.0" } } } # Configure the provider not to use the specified project for quota check. # This provider should only be used during project creation and initializing services. provider "google-beta" { alias = "no_user_project_override" user_project_override = false } # Configure the provider that uses the new project's quota. provider "google-beta" { user_project_override = true }
google-beta
सेवा देने वाली हर कंपनी के पास user_project_override
नाम का एक एट्रिब्यूट होता है. इससे यह तय होता है कि Terraform से किए जाने वाले ऑपरेशन की कोटा जांच कैसे की जाएगी. ज़्यादातर संसाधनों को उपलब्ध कराने के लिए, आपको user_project_override = true
का इस्तेमाल करना चाहिए. इसका मतलब है कि आपको अपने Firebase प्रोजेक्ट के लिए कोटे की जांच करनी चाहिए. हालांकि, अपने नए प्रोजेक्ट को इस तरह से सेट अप करने के लिए कि वह कोटे की जांच कर सके, आपको पहले user_project_override=false
का इस्तेमाल करना होगा. Terraform alias
सिंटैक्स की मदद से, इस कोडलैब के अगले चरणों में, दोनों प्रोवाइडर सेटअप के बीच अंतर किया जा सकता है.
डायरेक्ट्री में Terraform शुरू करना
पहली बार नया कॉन्फ़िगरेशन बनाने के लिए, कॉन्फ़िगरेशन में बताए गए प्रोवाइडर को डाउनलोड करना ज़रूरी है.
इस इनिशियलाइज़ेशन को करने के लिए, अपनी main.tf
कॉन्फ़िगरेशन फ़ाइल की रूट डायरेक्ट्री से यह कमांड चलाएं:
terraform init
4. Terraform की मदद से Firebase प्रोजेक्ट बनाना
"Firebase प्रोजेक्ट बनाने" के लिए, यह याद रखना ज़रूरी है कि हर Firebase प्रोजेक्ट, असल में एक Google Cloud प्रोजेक्ट होता है. इसमें सिर्फ़ Firebase सेवाएं चालू होती हैं.
Google Cloud प्रोजेक्ट और एपीआई के लिए ब्लॉक जोड़ना
- सबसे पहले, Google Cloud प्रोजेक्ट को चालू करें.
अपनीmain.tf
कॉन्फ़िगरेशन फ़ाइल में, यह रिसॉर्स ब्लॉक जोड़ें.
आपको अपना प्रोजेक्ट का नाम (जैसे कि"Terraform FriendlyChat Codelab"
) और प्रोजेक्ट आईडी (जैसे कि"terraform-codelab-your-initials"
) डालना होगा. ध्यान दें किname
वैल्यू का इस्तेमाल सिर्फ़ Firebase इंटरफ़ेस में किया जाता है. यह उपयोगकर्ताओं को नहीं दिखती. हालांकि,project_id
वैल्यू से Google को आपके प्रोजेक्ट की पहचान करने में मदद मिलती है. इसलिए, पक्का करें कि आपने कोई यूनीक वैल्यू दी हो. main.tf... # Create a new Google Cloud project. resource "google_project" "default" { provider = google-beta.no_user_project_override name = "<PROJECT_NAME_OF_YOUR_PROJECT>" project_id = "<PROJECT_ID_OF_YOUR_PROJECT>" # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } }
- इसके बाद, आपको ज़रूरी एपीआई चालू करने होंगे: Service Usage API और Firebase Management API.
Firebase कंसोल का इस्तेमाल करके Firebase प्रोजेक्ट बनाते समय, एपीआई चालू करने का काम आम तौर पर बैकग्राउंड में होता है. हालांकि, Terraform को यह काम करने के लिए साफ़ तौर पर निर्देश देना होता है.
अपनीmain.tf
कॉन्फ़िगरेशन फ़ाइल में (नए Cloud प्रोजेक्ट को बनाने वाले ब्लॉक के ठीक नीचे), यह संसाधन ब्लॉक जोड़ें:
main.tf Service Usage API को चालू करने पर, आपका नया प्रोजेक्ट कोटे की जांच कर पाएगा! इसलिए, इसके बाद संसाधन उपलब्ध कराने और सेवा चालू करने के लिए, आपको... # Enable the required underlying Service Usage API. resource "google_project_service" "serviceusage" { provider = google-beta.no_user_project_override project = google_project.default.project_id service = "serviceusage.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable the required underlying Firebase Management API. resource "google_project_service" "firebase" { provider = google-beta.no_user_project_override project = google_project.default.project_id service = "firebase.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false }
user_project_override
के साथ सेवा देने वाली कंपनी का इस्तेमाल करना चाहिए. इसके लिए, किसी अन्य नाम की ज़रूरत नहीं है.
Firebase की सेवाएं चालू करने के लिए, कोई ब्लॉक जोड़ना
"Firebase प्रोजेक्ट बनाने" के लिए, सबसे आखिर में प्रोजेक्ट पर Firebase सेवाएं चालू करना ज़रूरी है.
अपनी main.tf
कॉन्फ़िगरेशन फ़ाइल में, यहां दिया गया रिसॉर्स ब्लॉक जोड़ें.
जैसा कि ऊपर बताया गया है, ध्यान दें कि यह संसाधन ब्लॉक, with user_project_override
प्रोवाइडर का इस्तेमाल कर रहा है. इसके लिए, किसी उपनाम की ज़रूरत नहीं है.
main.tf
...
# Enable Firebase services for the new project created above.
resource "google_firebase_project" "default" {
provider = google-beta
project = google_project.default.project_id
# Wait until the required APIs are enabled.
depends_on = [
google_project_service.firebase,
google_project_service.serviceusage,
]
}
ऊपर दिए गए संसाधन ब्लॉक में, आपको depends_on
क्लॉज़ दिख सकता है. इससे Terraform को यह पता चलता है कि उसे एपीआई के चालू होने का इंतज़ार करना है. इस क्लॉज़ के बिना, Terraform को डिपेंडेंसी के बारे में पता नहीं चलता. साथ ही, एक साथ कई रिसॉर्स उपलब्ध कराते समय गड़बड़ियां हो सकती हैं.
कॉन्फ़िगरेशन लागू करना
- नए संसाधन उपलब्ध कराने और कॉन्फ़िगरेशन फ़ाइल में बताए गए एपीआई चालू करने के लिए, उसी डायरेक्ट्री के रूट से यह कमांड चलाएं जिसमें आपकी
main.tf
फ़ाइल मौजूद है. यह फ़ाइलweb
होनी चाहिए:terraform apply
- टर्मिनल में, Terraform उन कार्रवाइयों का प्लान प्रिंट करता है जिन्हें वह पूरा करेगा.
अगर सब कुछ आपकी उम्मीद के मुताबिक है, तोyes
डालकर कार्रवाइयों को मंज़ूरी दें.
main.tfTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # google_firebase_project.default will be created + resource "google_firebase_project" "default" { + display_name = (known after apply) + id = (known after apply) + project = "terraform-friendlychat-codelab" + project_number = (known after apply) } # google_project.default will be created + resource "google_project" "default" { + auto_create_network = true + id = (known after apply) + labels = { + "firebase" = "enabled" } + name = "Terraform FriendlyChat Codelab" + number = (known after apply) + project_id = "terraform-friendlychat-codelab" + skip_delete = (known after apply) } # google_project_service.firebase will be created + resource "google_project_service" "firebase" { + disable_on_destroy = false + id = (known after apply) + project = "terraform-friendlychat-codelab" + service = "firebase.googleapis.com" } # google_project_service.serviceusage will be created + resource "google_project_service" "serviceusage" { + disable_on_destroy = false + id = (known after apply) + project = "terraform-friendlychat-codelab" + service = "serviceusage.googleapis.com" } Plan: 4 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes # <----
ध्यान दें कि अगर आपको बदलावों को लागू किए बिना सिर्फ़ उनकी झलक देखनी है, तो terraform plan
कमांड का इस्तेमाल करें.
बदलावों की पुष्टि करना
Terraform के चलने के बाद, Terraform की मदद से उपलब्ध कराई गई सभी सेवाओं और संसाधनों की स्थिति की जांच की जा सकती है. इसके लिए, यह कमांड चलाएं:
terraform show
यहां एक उदाहरण दिया गया है, जिससे पता चलता है कि आपको प्रिंट किए गए दस्तावेज़ में क्या दिखेगा. आपकी स्थिति में, आपके प्रोजेक्ट के हिसाब से वैल्यू शामिल होंगी.
# google_firebase_project.default:
resource "google_firebase_project" "default" {
display_name = "Terraform FriendlyChat Codelab"
id = "projects/terraform-friendlychat-codelab"
project = "terraform-friendlychat-codelab"
project_number = "000000000"
}
# google_project.default:
resource "google_project" "default" {
auto_create_network = true
id = "projects/terraform-friendlychat-codelab"
labels = {
"firebase" = "enabled"
}
name = "Terraform FriendlyChat Codelab"
number = "000000000"
project_id = "terraform-friendlychat-codelab"
}
# google_project_service.firebase:
resource "google_project_service" "firebase" {
disable_on_destroy = false
id = "terraform-friendlychat-codelab/firebase.googleapis.com"
project = "terraform-friendlychat-codelab"
service = "firebase.googleapis.com"
}
# google_project_service.serviceusage:
resource "google_project_service" "serviceusage" {
disable_on_destroy = false
id = "terraform-friendlychat-codelab/serviceusage.googleapis.com"
project = "terraform-friendlychat-codelab"
service = "serviceusage.googleapis.com"
}
इसके अलावा, Firebase कंसोल में जाकर, यह पुष्टि की जा सकती है कि प्रोजेक्ट बनाया गया है.
5. Terraform की मदद से, Firebase ऐप्लिकेशन रजिस्टर करना
Firebase का इस्तेमाल करने के लिए, आपको अपने ऐप्लिकेशन के हर प्लैटफ़ॉर्म-वेरिएंट को Firebase प्रोजेक्ट में रजिस्टर करना होगा. इस कोडलैब में, Terraform के ज़रिए उपलब्ध कराई गई चीज़ों को टेस्ट करने और उनसे इंटरैक्ट करने के लिए, किसी असली ऐप्लिकेशन का इस्तेमाल किया जाएगा. यह ऐप्लिकेशन एक वेब ऐप्लिकेशन है. इसलिए, आपको Terraform को यह बताना होगा कि वह आपके नए Firebase प्रोजेक्ट में एक Firebase वेब ऐप्लिकेशन रजिस्टर करे.
वेब ऐप्लिकेशन रजिस्टर करने के लिए ब्लॉक जोड़ना
अपने वेब ऐप्लिकेशन को Firebase प्रोजेक्ट में रजिस्टर करने के लिए, अपनी main.tf
फ़ाइल में यह रिसॉर्स ब्लॉक जोड़ें.
आपको अपने वेब ऐप्लिकेशन के लिए, खुद का display_name
तय करना होगा. ध्यान दें कि इस नाम का इस्तेमाल सिर्फ़ Firebase इंटरफ़ेस में किया जाता है. यह असली उपयोगकर्ताओं को नहीं दिखता.
main.tf
...
# Create a Firebase Web App in the new project created above.
resource "google_firebase_web_app" "default" {
provider = google-beta
project = google_firebase_project.default.project
display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>"
deletion_policy = "DELETE"
}
कॉन्फ़िगरेशन लागू करना
- नई संसाधन फ़ाइल बनाने के लिए, उसी डायरेक्ट्री के रूट से यह कमांड चलाएं जिसमें आपकी
main.tf
फ़ाइल मौजूद है. आपकीmain.tf
फ़ाइल का नामweb
होना चाहिए. ध्यान दें कि इस कमांड से, नया Google Cloud प्रोजेक्ट फिर से नहीं बनाया जाएगा. Terraform को पता चल जाएगा कि इस प्रोजेक्ट आईडी वाला प्रोजेक्ट पहले से मौजूद है. इसके बाद, वह प्रोजेक्ट की मौजूदा स्थिति की तुलनाterraform apply
.tf
फ़ाइल में मौजूद जानकारी से करेगा. साथ ही, जो भी बदलाव ज़रूरी होंगे उन्हें लागू करेगा. - कार्रवाइयों के प्रिंट किए गए प्लान की समीक्षा करें. अगर सब कुछ आपकी उम्मीद के मुताबिक है, तो कार्रवाइयों को मंज़ूरी देने के लिए
yes
टाइप करें और Enter दबाएं.
बदलावों की पुष्टि करना
नई प्रोविज़न की गई संसाधन की स्थिति की जांच करने के लिए, यह कमांड चलाएं:
terraform show
इसके अलावा, Firebase कंसोल में जाकर यह पुष्टि की जा सकती है कि ऐप्लिकेशन आपके प्रोजेक्ट में रजिस्टर हुआ है या नहीं. प्रोजेक्ट की सेटिंग पर जाएं. इसके बाद, नीचे की ओर स्क्रोल करके आपके ऐप्लिकेशन सेक्शन पर जाएं.
6. Firebase Authentication सेट अप करना
किसी भी ऐप्लिकेशन के लिए पुष्टि करना एक ज़रूरी प्रोसेस है. अगर आपको अपने वेब ऐप्लिकेशन में, उपयोगकर्ताओं को उनके Google खातों से साइन इन करने की अनुमति देनी है, तो Firebase Authentication को चालू करें. इसके बाद, 'Google से साइन इन करें' सुविधा को सेट अप करें.
ध्यान दें कि इस कोडलैब में, Firebase Authentication को सेट अप करने के लिए दो अलग-अलग विकल्प दिए गए हैं:
- पहला विकल्प (सुझाया गया): कंसोल में Firebase Authentication सेट अप करें. इसके लिए, GCIP की ज़रूरत नहीं होती.
- इस विकल्प का इस्तेमाल करने का मतलब है कि आपको अपने नए प्रोजेक्ट को किसी Cloud Billing खाते से लिंक करने की ज़रूरत नहीं है.
- दूसरा विकल्प: Google Cloud Identity Platform (GCIP) API का इस्तेमाल करके, Terraform के ज़रिए Firebase Authentication सेट अप करें.
- इस विकल्प का इस्तेमाल करने का मतलब है कि आपको अपने नए प्रोजेक्ट को Cloud Billing खाते से जोड़ना होगा. ऐसा इसलिए, क्योंकि GCIP के लिए ज़रूरी है कि प्रोजेक्ट, Blaze प्लान पर हो.
पहला विकल्प: Firebase कंसोल का इस्तेमाल करके, पुष्टि करने की सुविधा सेट अप करना
Firebase कंसोल का इस्तेमाल करके Firebase Authentication सेट अप करने के लिए, आपके प्रोजेक्ट का Blaze प्राइसिंग प्लान पर होना ज़रूरी नहीं है.
Firebase Authentication सेट अप करने और Google से साइन-इन करने का तरीका यहां बताया गया है:
- Firebase कंसोल में, बाएं पैनल में मौजूद Build सेक्शन पर जाएं.
- पुष्टि पर क्लिक करें. इसके बाद, शुरू करें पर क्लिक करें. इसके बाद, साइन-इन करने का तरीका टैब पर क्लिक करें. इसके अलावा, सीधे इस टैब पर जाने के लिए, यहां क्लिक करें.
- नई कंपनी जोड़ें पर क्लिक करें. इसके बाद, अन्य कंपनियां सेक्शन में जाकर, Google को चुनें.
- चालू करें टॉगल को चालू करें.
- अपने ऐप्लिकेशन का सार्वजनिक नाम,
FriendlyChat
जैसा कुछ सेट करें. यह ज़रूरी नहीं है कि यह नाम दुनिया भर में यूनीक हो. - ड्रॉपडाउन मेन्यू से, प्रोजेक्ट से जुड़ी सहायता के लिए ईमेल पता चुनें. इसके बाद, सेव करें पर क्लिक करें.
- आपको Google को साइन इन करने की सुविधा देने वाली कंपनी के तौर पर चालू किया गया दिखेगा.
दूसरा विकल्प: Google Cloud Identity Platform (GCIP) API का इस्तेमाल करके, Terraform के ज़रिए पुष्टि करने की सुविधा सेट अप करना
Terraform के ज़रिए Firebase Authentication सेट अप करने के लिए, आपको GCIP API का इस्तेमाल करना होगा. इसका मतलब है कि प्रोजेक्ट को ब्लेज़ प्राइसिंग प्लान पर होना चाहिए. अपने Firebase प्रोजेक्ट को Blaze प्लान पर अपग्रेड करने के लिए, प्रोजेक्ट को Cloud Billing खाते से जोड़ें.
Terraform के ज़रिए बिलिंग की सुविधा चालू करना
- अगर आपके पास पहले से Cloud Billing खाता नहीं है, तो सबसे पहले Google Cloud Console में एक नया खाता बनाएं. ऐसा करते समय, इसके बिलिंग खाते के आईडी को नोट कर लें. बिलिंग खाता आईडी, आपके प्रोजेक्ट से जुड़े बिलिंग खाता आईडी के बिलिंग पेज पर मौजूद होता है.
- Terraform के ज़रिए अपने प्रोजेक्ट में बिलिंग चालू करने के लिए, अपनी
main.tf
फ़ाइल में मौजूदgoogle_project
रिसॉर्स मेंbilling_account
एट्रिब्यूट जोड़ें:
main.tf... # Create a new Google Cloud project. resource "google_project" "default" { provider = google-beta.no_user_project_override name = "<PROJECT_NAME_OF_YOUR_PROJECT>" project_id = "<PROJECT_ID_OF_YOUR_PROJECT>" billing_account = "<YOUR_BILLING_ACCOUNT_ID>" # Add this line with your Cloud Billing account ID # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } } ...
Terraform की मदद से, Firebase Authentication और 'Google से साइन इन करें' सुविधा चालू करना
- GCIP के साथ Firebase Authentication को प्रोविज़न करने के लिए, अपनी
main.tf
फ़ाइल में ये संसाधन ब्लॉक जोड़ें:
main.tf... # Enable the Identity Toolkit API. resource "google_project_service" "auth" { provider = google-beta project = google_firebase_project.default.project service = "identitytoolkit.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Create an Identity Platform config. # Also, enable Firebase Authentication using Identity Platform (if Authentication isn't yet enabled). resource "google_identity_platform_config" "auth" { provider = google-beta project = google_firebase_project.default.project # For example, you can configure to auto-delete anonymous users. autodelete_anonymous_users = true # Wait for identitytoolkit.googleapis.com to be enabled before initializing Authentication. depends_on = [ google_project_service.auth, ] }
- 'Google से साइन इन करें' सुविधा चालू करने के लिए, आपके पास OAuth क्लाइंट होना चाहिए. यह सेटअप करने के लिए, Google Cloud Console के एपीआई और सेवाएं सेक्शन पर जाएं.
- इस प्रोजेक्ट के लिए पहली बार क्लाइंट आईडी बनाया जा रहा है. इसलिए, आपको उस स्क्रीन को कॉन्फ़िगर करना होगा जहां OAuth को सहमति दी जाती है.
- OAuth सहमति स्क्रीन पेज खोलें. इसके बाद, अभी-अभी बनाया गया प्रोजेक्ट चुनें.
- उपयोगकर्ता का टाइप को बाहरी पर सेट करें. इसके बाद, बनाएं पर क्लिक करें.
- अगली स्क्रीन पर, यह जानकारी भरें. इसके बाद, सेव करें और जारी रखें पर क्लिक करें.
- अपने ऐप्लिकेशन का ऐप्लिकेशन का नाम,
FriendlyChat
जैसा कुछ सेट करें. यह नाम दुनिया भर में यूनीक होना ज़रूरी नहीं है. - ड्रॉपडाउन मेन्यू से, उपयोगकर्ता सहायता के लिए ईमेल पता चुनें.
- डेवलपर की संपर्क जानकारी के लिए ईमेल पता डालें.
- अपने ऐप्लिकेशन का ऐप्लिकेशन का नाम,
- अगली स्क्रीन पर, यह जानकारी भरें:
- स्कोप पेज पर डिफ़ॉल्ट सेटिंग स्वीकार करें. इसके बाद, सेव करें और जारी रखें पर क्लिक करें.
- टेस्ट यूज़र पेज पर डिफ़ॉल्ट सेटिंग स्वीकार करें. इसके बाद, सेव करें और जारी रखें पर क्लिक करें.
- खास जानकारी देखें. इसके बाद, डैशबोर्ड पर वापस जाएं पर क्लिक करें.
- क्रेडेंशियल पेज पर जाकर, OAuth क्लाइंट सेट अप करें. इसके लिए, यह तरीका अपनाएं:
- क्रेडेंशियल बनाएं पर क्लिक करें. इसके बाद, OAuth क्लाइंट आईडी चुनें.
- ऐप्लिकेशन टाइप ड्रॉप-डाउन से, वेब ऐप्लिकेशन चुनें.
- नाम फ़ील्ड में, अपने ऐप्लिकेशन का नाम डालें. उदाहरण के लिए,
FriendlyChat
(यह नाम, ग्लोबल लेवल पर यूनीक होना ज़रूरी नहीं है). - अपने ऐप्लिकेशन के यूआरएल को इस OAuth क्लाइंट का इस्तेमाल करने की अनुमति दें. इसके लिए, यह तरीका अपनाएं:
- अनुमति वाले JavaScript ऑरिजिन में जाकर, यूआरआई जोड़ें पर क्लिक करें. इसके बाद,
https://<PROJECT_ID>.firebaseapp.com
डालें. यहां<PROJECT_ID>
वह प्रोजेक्ट आईडी है जिसे आपनेmain.tf
में सेट किया है. - रीडायरेक्ट करने के लिए अनुमति वाले यूआरआई में जाकर, यूआरआई जोड़ें पर क्लिक करें. इसके बाद,
https://<PROJECT_ID>.firebaseapp.com/__/auth/handler
डालें. यहां<PROJECT_ID>
वह प्रोजेक्ट आईडी है जिसे आपनेmain.tf
में सेट किया है.
- अनुमति वाले JavaScript ऑरिजिन में जाकर, यूआरआई जोड़ें पर क्लिक करें. इसके बाद,
- सेव करें पर क्लिक करें.
- अपने OAuth क्लाइंट आईडी और क्लाइंट सीक्रेट का इस्तेमाल करके, 'Google से साइन इन करें' सुविधा चालू करने के लिए, अपनी
main.tf
फ़ाइल में यह ब्लॉक जोड़ें:
main.tf... variable "oauth_client_secret" { type = string description = "OAuth client secret. For this codelab, you can pass in this secret through the environment variable TF_VAR_oauth_client_secret. In a real app, you should use a secret manager service." sensitive = true } resource "google_identity_platform_default_supported_idp_config" "google_sign_in" { provider = google-beta project = google_firebase_project.default.project enabled = true idp_id = "google.com" client_id = "<YOUR_OAUTH_CLIENT_ID>" client_secret = var.oauth_client_secret depends_on = [ google_identity_platform_config.auth ] }
कॉन्फ़िगरेशन लागू करना
- अपनी कॉन्फ़िगरेशन फ़ाइल के हिसाब से पुष्टि करने की सुविधा सेट अप करने के लिए, उसी डायरेक्ट्री के रूट से ये कमांड चलाएं जिसमें आपकी
main.tf
फ़ाइल मौजूद है. यह फ़ाइलweb
होनी चाहिए:export TF_VAR_oauth_client_secret="<YOUR_OAUTH_CLIENT_SECRET>"
ध्यान दें किterraform apply
terraform apply
को चलाने से, नया Google Cloud प्रोजेक्ट नहीं बनेगा. Terraform को पता चल जाएगा कि इस प्रोजेक्ट आईडी वाला प्रोजेक्ट पहले से मौजूद है. इसके बाद, वह प्रोजेक्ट की मौजूदा स्थिति की तुलना.tf
फ़ाइल में मौजूद जानकारी से करेगा. इसके बाद, यह उन बदलावों को लागू करेगा जो इसे मिलेंगे. - कार्रवाइयों के प्रिंट किए गए प्लान की समीक्षा करें. अगर सब कुछ आपकी उम्मीद के मुताबिक है, तो कार्रवाइयों को मंज़ूरी देने के लिए
yes
टाइप करें और Enter दबाएं.
बदलावों की पुष्टि करना
- Firebase कंसोल में, बाएं पैनल में मौजूद Build सेक्शन पर जाएं.
- पुष्टि पर क्लिक करें. इसके बाद, साइन-इन करने का तरीका टैब पर क्लिक करें. सीधे इस टैब पर जाने के लिए, यहां क्लिक करें.
- आपको Google को साइन इन करने की सुविधा देने वाली कंपनी के तौर पर चालू किया गया दिखेगा.
7. Firestore डेटाबेस और उसके सुरक्षा नियम सेट अप करना
इस कोडलैब के वेब ऐप्लिकेशन के लिए, आपको Firestore डेटाबेस में असली उपयोगकर्ताओं के बीच के मैसेज सेव करने होंगे.
- ज़रूरी एपीआई चालू करने और डेटाबेस इंस्टेंस उपलब्ध कराने के लिए, अपनी
main.tf
फ़ाइल में ये संसाधन ब्लॉक जोड़ें:
main.tf... # Enable required APIs for Cloud Firestore. resource "google_project_service" "firestore" { provider = google-beta project = google_firebase_project.default.project for_each = toset([ "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 } # Provision the Firestore database instance. resource "google_firestore_database" "default" { provider = google-beta project = google_firebase_project.default.project name = "(default)" # See available locations: # https://firebase.google.com/docs/firestore/locations location_id = "<NAME_OF_DESIRED_REGION>" # "FIRESTORE_NATIVE" is required to use Firestore with Firebase SDKs, # authentication, and Firebase Security Rules. type = "FIRESTORE_NATIVE" concurrency_mode = "OPTIMISTIC" depends_on = [ google_project_service.firestore ] }
<NAME_OF_DESIRED_REGION>
को उस इलाके में बदलें जहां आपको डेटाबेस रखना है.
प्रोडक्शन ऐप्लिकेशन डेवलप करते समय, आपको इसे ज़्यादातर उपयोगकर्ताओं के आस-पास के इलाके में रखना होगा. साथ ही, इसे Cloud Functions जैसी अन्य Firebase सेवाओं के साथ इस्तेमाल करना होगा. इस कोडलैब के लिए,us-east1
(साउथ कैरोलिना) का इस्तेमाल किया जा सकता है. इसके अलावा, अपने आस-पास के किसी क्षेत्र का इस्तेमाल भी किया जा सकता है. इसके लिए, Cloud Firestore की लोकेशन देखें.- Firebase से ऐक्सेस किए जा सकने वाले हर Firestore डेटाबेस इंस्टेंस को Firebase के सुरक्षा नियमों के तहत सुरक्षित किया जाना चाहिए.
इस कोडलैब के सैंपल कोड में,firestore.rules
फ़ाइल में Firestore के लिए सुरक्षित नियमों का एक सेट दिया गया है. इसेweb
डायरेक्ट्री के रूट में देखा जा सकता है. - नीचे दिए गए संसाधन ब्लॉक को अपनी
main.tf
फ़ाइल में जोड़ें, ताकि ये काम किए जा सकें:- लोकल
firestore.rules
फ़ाइल से, Firebase के सुरक्षा नियमों का कोई नियम सेट बनाएं. - Firestore इंस्टेंस के लिए नियमों का सेट रिलीज़ करें.
firebase deploy --only firestore:rules
.
main.tf चलाने जैसा ही काम होता है... # Create a ruleset of Firestore Security Rules from a local file. resource "google_firebaserules_ruleset" "firestore" { provider = google-beta project = google_firebase_project.default.project 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.default, ] } # Release 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_firebase_project.default.project # Wait for Firestore to be provisioned before releasing the ruleset. depends_on = [ google_firestore_database.default, ] lifecycle { replace_triggered_by = [ google_firebaserules_ruleset.firestore ] } }
- लोकल
- Firestore डेटाबेस को चालू करने और उसके सुरक्षा नियमों को डिप्लॉय करने के लिए,
terraform apply
चलाएं. - पुष्टि करें कि डेटाबेस चालू हो और उसके सुरक्षा नियम लागू किए गए हों:
- Firebase कंसोल में, बाएं पैनल में मौजूद Build सेक्शन पर जाएं.
- Firestore डेटाबेस सेक्शन पर जाएं. इसके बाद, नियम टैब पर क्लिक करें.
8. Cloud Storage बकेट और उसके सुरक्षा नियम सेट अप करना
इस कोडलैब के वेब ऐप्लिकेशन के लिए, आपको Cloud Storage बकेट में उन इमेज को सेव करना होगा जिन्हें उपयोगकर्ताओं के बीच शेयर किया जाता है.
- ज़रूरी एपीआई चालू करने और Cloud Storage की डिफ़ॉल्ट बकेट उपलब्ध कराने के लिए, अपनी
main.tf
फ़ाइल में ये संसाधन ब्लॉक जोड़ें.
ध्यान दें कि आपके प्रोजेक्ट के लिए Cloud Storage की डिफ़ॉल्ट बकेट, Google App Engine के ज़रिए उपलब्ध कराई जाती है. साथ ही, इसकी जगह वही होनी चाहिए जो आपके Firestore डेटाबेस की है. ज़्यादा जानकारी के लिए, App Engine की लोकेशन देखें.
अगर आपको अपने प्रोजेक्ट में एक से ज़्यादा बकेट चाहिए, तोgoogle_storage_bucket
संसाधन का इस्तेमाल करके उन्हें उपलब्ध कराएं. यह इस कोडलैब में नहीं दिखाया गया है.
main.tf... # Enable required APIs for Cloud Storage for Firebase. resource "google_project_service" "storage" { provider = google-beta project = google_firebase_project.default.project for_each = toset([ "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 } # Provision the default Cloud Storage bucket for the project via Google App Engine. resource "google_app_engine_application" "default" { provider = google-beta project = google_firebase_project.default.project # 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_DESIRED_REGION_FOR_DEFAULT_BUCKET>" # Must be in the same location as Firestore (above) # Wait until Firestore is provisioned first. depends_on = [ google_firestore_database.default ] } # Make 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_firebase_project.default.project bucket_id = google_app_engine_application.default.default_bucket }
- Firebase के लिए ऐक्सेस किए जा सकने वाले हर Cloud Storage बकेट को Firebase के सुरक्षा नियमों के तहत सुरक्षित किया जाना चाहिए.
इस कोडलैब के सैंपल कोड में,storage.rules
फ़ाइल में Firestore के लिए सुरक्षित नियमों का एक सेट दिया गया है. इसेweb
डायरेक्ट्री के रूट में देखा जा सकता है. - नीचे दिए गए संसाधन ब्लॉक को अपनी
main.tf
फ़ाइल में जोड़ें, ताकि ये काम किए जा सकें:- लोकल फ़ाइल से, Firebase के सुरक्षा नियमों का कोई नियम सेट बनाएं.
- स्टोरेज बकेट के लिए नियमों का सेट रिलीज़ करें.
firebase deploy --only storage
.
main.tf चलाने जैसा ही काम होता है... # Create a ruleset of Cloud Storage Security Rules from a local file. resource "google_firebaserules_ruleset" "storage" { provider = google-beta project = google_firebase_project.default.project 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_storage_bucket.default-bucket, ] } # Release 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_firebase_project.default.project}/rulesets/${google_firebaserules_ruleset.storage.name}" project = google_firebase_project.default.project lifecycle { replace_triggered_by = [ google_firebaserules_ruleset.storage ] } }
- डिफ़ॉल्ट Cloud Storage बकेट को चालू करने और उसके सुरक्षा नियमों को डिप्लॉय करने के लिए,
terraform apply
चलाएं. - पुष्टि करें कि बकेट उपलब्ध कराई गई हो और उसके सुरक्षा नियमों को लागू किया गया हो:
- Firebase कंसोल में, बाएं पैनल में मौजूद Build सेक्शन पर जाएं.
- स्टोरेज सेक्शन पर जाएं. इसके बाद, नियम टैब पर क्लिक करें.
9. अपने ऐप्लिकेशन को स्थानीय तौर पर चलाना
अब आप अपने वेब ऐप्लिकेशन को पहली बार चलाने के लिए तैयार हैं! अपने ऐप्लिकेशन को स्थानीय तौर पर चलाने के लिए, Firebase होस्टिंग एम्युलेटर का इस्तेमाल करें.
- एक नई टर्मिनल विंडो खोलें. इसके बाद, एम्युलेटर शुरू करने के लिए,
web
डायरेक्ट्री से यह Firebase CLI कमांड चलाएं:firebase emulators:start --project=<PROJECT_ID>
- अपने ब्राउज़र में, सीएलआई से मिले लोकल यूआरएल (आम तौर पर
http://localhost:5000
) पर अपना वेब ऐप्लिकेशन खोलें.
आपको FriendlyChat ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) दिखेगा. हालांकि, यह अभी काम नहीं कर रहा है. ऐप्लिकेशन को अब तक Firebase से कनेक्ट नहीं किया गया है. हालांकि, इस कोडलैब के अगले चरण पूरे करने के बाद, इसे कनेक्ट कर दिया जाएगा!
ध्यान दें कि जब भी अपने वेब ऐप्लिकेशन में बदलाव करें (जैसे, इस कोडलैब के अगले चरणों में किया जाएगा), तो अपने ब्राउज़र को रीफ़्रेश करें, ताकि स्थानीय यूआरएल उन बदलावों के साथ अपडेट हो जाए.
10. Firebase को इंस्टॉल, कॉन्फ़िगर, और चालू करना
किसी ऐप्लिकेशन को Firebase के साथ काम करने के लिए, आपके ऐप्लिकेशन में Firebase SDK टूल और Firebase प्रोजेक्ट के लिए Firebase कॉन्फ़िगरेशन होना ज़रूरी है.
इस कोडलैब के लिए सैंपल कोड, पहले से ही एक वर्किंग ऐप्लिकेशन है. इसमें सभी डिपेंडेंसी और ऐप्लिकेशन में अलग-अलग Firebase प्रॉडक्ट इस्तेमाल करने के लिए ज़रूरी फ़ंक्शन शामिल हैं. अगर आपको यह देखना है कि पहले से क्या किया गया है, तो web/package.json
और web/src/index.js
में जाकर देखें.
सैंपल कोड ज़्यादातर पूरा होता है. हालांकि, ऐप्लिकेशन को चलाने के लिए आपको कुछ काम करने होंगे. जैसे: Firebase SDK टूल इंस्टॉल करना, बिल्ड शुरू करना, अपने ऐप्लिकेशन में Firebase कॉन्फ़िगरेशन जोड़ना, और आखिर में Firebase को शुरू करना.
Firebase SDK टूल इंस्टॉल करना और webpack बिल्ड शुरू करना
ऐप्लिकेशन का बिल्ड शुरू करने के लिए, आपको कुछ कमांड चलाने होंगे.
- नई टर्मिनल विंडो खोलें.
- पक्का करें कि आप
web
डायरेक्ट्री के रूट पर हों. - Firebase SDK टूल डाउनलोड करने के लिए,
npm install
चलाएं. - किसी भी डिपेंडेंसी को अपडेट करने के लिए,
npm update
चलाएं. - webpack शुरू करने के लिए,
npm run start
चलाएं.
कोडलैब के बाकी बचे हिस्से के लिए, webpack अब आपके सोर्स कोड को लगातार फिर से बनाएगा.
अपने ऐप्लिकेशन में Firebase कॉन्फ़िगरेशन जोड़ना
आपको अपने ऐप्लिकेशन में Firebase कॉन्फ़िगरेशन भी जोड़ना होगा, ताकि Firebase SDK टूल को पता चल सके कि आपको किस Firebase प्रोजेक्ट का इस्तेमाल करना है.
इस कोडलैब के लिए, Firebase कॉन्फ़िगरेशन पाने के दो अलग-अलग विकल्प हैं:
- पहला विकल्प: Firebase कंसोल से Firebase कॉन्फ़िगरेशन पाएं.
- दूसरा विकल्प: Terraform की मदद से, Firebase कॉन्फ़िगरेशन पाएं.
पहला विकल्प: Firebase कंसोल से कॉन्फ़िगरेशन फ़ाइल पाएं और उसे अपने कोडबेस में जोड़ें
- Firebase कंसोल में, प्रोजेक्ट सेटिंग पर जाएं.
- नीचे की ओर स्क्रोल करके, आपके ऐप्लिकेशन कार्ड पर जाएं. इसके बाद, अपना वेब ऐप्लिकेशन चुनें.
- Firebase SDK स्निपेट पैन से Config चुनें. इसके बाद, कॉन्फ़िगरेशन स्निपेट कॉपी करें.
- अपने ऐप्लिकेशन की
web/src/firebase-config.js
फ़ाइल में कॉन्फ़िगरेशन चिपकाएं. जैसे:
firebase-config.js... const config = { apiKey: "<API_KEY>", authDomain: "<PROJECT_ID>.firebaseapp.com", projectId: "<PROJECT_ID>", storageBucket: "<PROJECT_ID>.appspot.com", messagingSenderId: "<SENDER_ID>", appId: "<APP_ID>", measurementId: "<G-MEASUREMENT_ID>", }; ...
दूसरा विकल्प: Terraform की मदद से कॉन्फ़िगरेशन पाना और उसे अपने कोडबेस में जोड़ना
इसके अलावा, सीएलआई में आउटपुट वैल्यू के तौर पर, Terraform के ज़रिए Firebase कॉन्फ़िगरेशन पाया जा सकता है.
- अपनी
main.tf
फ़ाइल में,google_firebase_web_app
रिसॉर्स ब्लॉक ढूंढें. यह वह ब्लॉक होता है जिसने आपके प्रोजेक्ट के साथ वेब ऐप्लिकेशन रजिस्टर किया था. - उस ब्लॉक के तुरंत बाद, ये ब्लॉक जोड़ें:
main.tf... data "google_firebase_web_app_config" "default" { provider = google-beta project = google_firebase_project.default.project web_app_id = google_firebase_web_app.default.app_id } output "friendlychat_web_app_config" { value = { projectId = google_firebase_project.default.project appId = google_firebase_web_app.default.app_id apiKey = data.google_firebase_web_app_config.default.api_key authDomain = data.google_firebase_web_app_config.default.auth_domain storageBucket = lookup(data.google_firebase_web_app_config.default, "storage_bucket", "") messagingSenderId = lookup(data.google_firebase_web_app_config.default, "messaging_sender_id", "") measurementId = lookup(data.google_firebase_web_app_config.default, "measurement_id", "") } } ...
data
ब्लॉक औरoutput
ब्लॉक का इस्तेमाल, किसी भी तरह से इन्फ़्रास्ट्रक्चर में बदलाव करने के लिए नहीं किया जाता है. इसलिए, आपको सिर्फ़ ये कमांड चलाने की ज़रूरत है.- अपने वेब ऐप्लिकेशन के Firebase कॉन्फ़िगरेशन को अपनी डायरेक्ट्री के Terraform स्टेट में लोड करने के लिए, यह कमांड चलाएं:
terraform refresh
- Firebase कॉन्फ़िगरेशन की वैल्यू प्रिंट करने के लिए, यह कमांड चलाएं:
यहां कॉन्फ़िगरेशन के आउटपुट का एक उदाहरण दिया गया है. प्रिंट किए गए आउटपुट में, आपके प्रोजेक्ट और ऐप्लिकेशन की वैल्यू शामिल होंगी.terraform output –json
{ "friendlychat_web_app_config": { "sensitive": false, "type": [ "object", { "apiKey": "string", "appId": "string", "authDomain": "string", "measurementId": "string", "messagingSenderId": "string", "projectId": "string", "storageBucket": "string" } ], "value": { "apiKey": "<API_KEY>", "appId": "<APP_ID>", "authDomain": "<PROJECT_ID>.firebaseapp.com", "measurementId": "<G-MEASUREMENT_ID>", "messagingSenderId": "<SENDER_ID>", "projectId": "<PROJECT_ID>", "storageBucket": "<PROJECT_ID>.appspot.com" } } }
- अपने वेब ऐप्लिकेशन के Firebase कॉन्फ़िगरेशन को अपनी डायरेक्ट्री के Terraform स्टेट में लोड करने के लिए, यह कमांड चलाएं:
value
मैप से वैल्यू कॉपी करें.- इन वैल्यू (आपका कॉन्फ़िगरेशन) को अपने ऐप्लिकेशन की
web/src/firebase-config.js
फ़ाइल में इस तरह चिपकाएं:
firebase-config.js... const config = { apiKey: "<API_KEY>", appId: "<APP_ID>", authDomain: "<PROJECT_ID>.firebaseapp.com", measurementId: "<G-MEASUREMENT_ID>", messagingSenderId: "<SENDER_ID>", projectId: "<PROJECT_ID>", storageBucket: "<PROJECT_ID>.appspot.com", }; ...
अपने ऐप्लिकेशन में Firebase को चालू करना
आखिर में, Firebase को शुरू करने के लिए, अपने ऐप्लिकेशन की web/src/index.js
फ़ाइल में यह कोड जोड़ें:
...
const firebaseAppConfig = getFirebaseConfig();
initializeApp(firebaseAppConfig);
अपने ऐप्लिकेशन को आज़माना
Firebase के लिए सब कुछ कॉन्फ़िगर हो जाने के बाद, अब अपने वेब ऐप्लिकेशन को आज़माया जा सकता है.
- ऐप्लिकेशन दिखाने वाले ब्राउज़र को रीफ़्रेश करें.
- अब आपको Google खाते से साइन इन करने और चैट में मैसेज पोस्ट करने की सुविधा मिल जाएगी. अगर आपके पास इमेज फ़ाइलें हैं, तो उन्हें भी अपलोड किया जा सकता है!
11. सभी एनवायरमेंट में एक जैसा कॉन्फ़िगरेशन लागू करना
Terraform, एक जैसे कॉन्फ़िगरेशन वाले कई इन्फ़्रास्ट्रक्चर को मैनेज करने में बेहतर है. उदाहरण के लिए, ऐसा स्टेजिंग Firebase प्रोजेक्ट सेट अप करना जो प्रोडक्शन प्रोजेक्ट जैसा हो.
इस कोडलैब में, आपको एक दूसरा Firebase प्रोजेक्ट बनाना होगा. यह प्रोजेक्ट, स्टेजिंग एनवायरमेंट के तौर पर काम करेगा.
इस स्टेजिंग प्रोजेक्ट को बनाने के लिए, मौजूदा कॉन्फ़िगरेशन को कॉपी करने के लिए, आपके पास दो विकल्प हैं:
- पहला विकल्प: Terraform कॉन्फ़िगरेशन की कॉपी बनाएं.
इस विकल्प में, यह तय करने की सबसे ज़्यादा सुविधा मिलती है कि डुप्लीकेट किया गया प्रोजेक्ट, सोर्स प्रोजेक्ट से कितना अलग हो सकता है. - दूसरा विकल्प:
for_each
की मदद से कॉन्फ़िगरेशन का फिर से इस्तेमाल करें.
अगर हर प्रोजेक्ट में ज़्यादा अंतर नहीं होना चाहिए और आपको सभी प्रोजेक्ट में एक साथ बदलाव करने हैं, तो इस विकल्प से कोड को ज़्यादा बार इस्तेमाल किया जा सकता है.
पहला विकल्प: Terraform कॉन्फ़िगरेशन की कॉपी बनाना
इस विकल्प में, रेप्लिका प्रोजेक्ट को सोर्स प्रोजेक्ट से अलग रखने के लिए सबसे ज़्यादा विकल्प मिलते हैं. जैसे, अलग-अलग डिसप्ले नेम वाले ऐप्लिकेशन और स्टेज किए गए रोलआउट.
- अपनी
web
डायरेक्ट्री के रूट में,main_staging.tf
नाम की नई Terraform कॉन्फ़िगरेशन फ़ाइल बनाएं. - अपनी
main.tf
फ़ाइल से सभी संसाधन ब्लॉक कॉपी करें. हालांकि,terraform
औरprovider
ब्लॉक को छोड़कर बाकी सभी ब्लॉक कॉपी करें. इसके बाद, उन्हें अपनीmain_staging.tf
फ़ाइल में चिपकाएं. - इसके बाद, आपको
main_staging.tf
में मौजूद अपने हर डुप्लीकेट संसाधन ब्लॉक में बदलाव करना होगा, ताकि वे आपके स्टेजिंग प्रोजेक्ट के साथ काम कर सकें:- संसाधन के लेबल: कॉन्फ़्लिक्ट से बचने के लिए, नए नाम का इस्तेमाल करें. उदाहरण के लिए,
resource "google_project" "default"
का नाम बदलकरresource "google_project" "staging"
करें. - संसाधन के रेफ़रंस: हर रेफ़रंस को अपडेट करें. उदाहरण के लिए,
google_firebase_project.default.project
कोgoogle_firebase_project.staging.project
में अपडेट करें.
main_staging.tf
फ़ाइल का पूरा कॉन्फ़िगरेशन मिल सकता है:web/terraform-checkpoints/replicate-config/main_staging-copypaste.tf
अगर आपको इस कॉन्फ़िगरेशन का इस्तेमाल करना है, तो पक्का करें कि आपने ये काम किए हों:main_staging-copypaste.tf
से कॉन्फ़िगरेशन कॉपी करें. इसके बाद, इसे अपनीmain_staging.tf
फ़ाइल में चिपकाएं.- अपनी
main_staging.tf
फ़ाइल में, यह तरीका अपनाएं:google_project
रिसॉर्स ब्लॉक में,name
एट्रिब्यूट,project-id
एट्रिब्यूट, और (अगर आपने Terraform के ज़रिए पुष्टि करने की सुविधा सेट अप की है)billing_account
एट्रिब्यूट को अपनी वैल्यू के साथ अपडेट करें.google_firebase_web_app
रिसॉर्स ब्लॉक में,display_name
एट्रिब्यूट को अपनी वैल्यू के साथ अपडेट करें.google_firestore_database
औरgoogle_app_engine_application
रिसॉर्स ब्लॉक में,location_id
एट्रिब्यूट को अपनी वैल्यू के साथ अपडेट करें.
# Create a new Google Cloud project. resource "google_project" "staging" { provider = google-beta.no_user_project_override name = "<PROJECT_NAME_OF_STAGING_PROJECT>" project_id = "<PROJECT_ID_OF_STAGING_PROJECT" # Required if you want to set up Authentication via Terraform billing_account = "<YOUR_BILLING_ACCOUNT_ID>" # Required for the project to display in any list of Firebase projects. labels = { "firebase" = "enabled" } } # Enable the required underlying Service Usage API. resource "google_project_service" "staging_serviceusage" { provider = google-beta.no_user_project_override project = google_project.staging.project_id service = "serviceusage.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable the required underlying Firebase Management API. resource "google_project_service" "staging_firebase" { provider = google-beta.no_user_project_override project = google_project.staging.project_id service = "firebase.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable Firebase services for the new project created above. resource "google_firebase_project" "staging" { provider = google-beta project = google_project.staging.project_id # Wait until the required APIs are enabled. depends_on = [ google_project_service.staging_serviceusage, google_project_service.staging_firebase, ] } # Create a Firebase Web App in the new project created above. resource "google_firebase_web_app" "staging" { provider = google-beta project = google_firebase_project.staging.project display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>" deletion_policy = "DELETE" }
- संसाधन के लेबल: कॉन्फ़्लिक्ट से बचने के लिए, नए नाम का इस्तेमाल करें. उदाहरण के लिए,
- अपने नए "स्टेजिंग" Firebase प्रोजेक्ट और उसके सभी संसाधनों को चालू करने के लिए,
terraform apply
चलाएं. साथ ही, उसकी सेवाओं को चालू करें. - Firebase कंसोल में जाकर, पुष्टि करें कि सब कुछ उम्मीद के मुताबिक चालू किया गया है.
दूसरा विकल्प: for_each
की मदद से कॉन्फ़िगरेशन का फिर से इस्तेमाल करना
अगर हर प्रोजेक्ट में ज़्यादा अंतर नहीं होना चाहिए और आपको सभी प्रोजेक्ट में एक साथ बदलाव करने हैं, तो इस विकल्प से कोड को ज़्यादा बार इस्तेमाल किया जा सकता है. यह Terraform की भाषा में for_each
मेटा-आर्ग्युमेंट का इस्तेमाल करता है.
- अपनी
main.tf
फ़ाइल खोलें. - आपको जिस भी संसाधन ब्लॉक को डुप्लीकेट करना है उसमें
for_each
मेटा-आर्ग्युमेंट जोड़ें. जैसे:
main.tf आपको इस कोडलैब की GitHub रिपॉज़िटरी में,# Create new Google Cloud projects. resource "google_project" "default" { provider = google-beta.no_user_project_override name = each.value # Create a unique project ID for each project, with each ID starting with <PROJECT_ID>. project_id = "<PROJECT_ID>-${each.key}" # Required if you want to set up Authentication via Terraform billing_account = "<YOUR_BILLING_ACCOUNT_ID>" # Required for the projects to display in any list of Firebase projects. labels = { "firebase" = "enabled" } for_each = { prod = "<PROJECT_NAME_OF_PROD_PROJECT>" staging = "<PROJECT_NAME_OF_STAGING_PROJECT>" } } # Enable the required underlying Service Usage API. resource "google_project_service" "serviceusage" { provider = google-beta.no_user_project_override for_each = google_project.default project = each.value.project_id service = "serviceusage.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable the required underlying Firebase Management API. resource "google_project_service" "firebase" { provider = google-beta.no_user_project_override for_each = google_project.default project = each.value.project_id service = "firebase.googleapis.com" # Don't disable the service if the resource block is removed by accident. disable_on_destroy = false } # Enable Firebase services for each of the new projects created above. resource "google_firebase_project" "default" { provider = google-beta for_each = google_project.default project = each.value.project_id depends_on = [ google_project_service.serviceusage, google_project_service.firebase, ] } # Create a Firebase Web App in each of the new projects created above. resource "google_firebase_web_app" "default" { provider = google-beta for_each = google_firebase_project.default project = each.value.project # The Firebase Web App created in each project will have the same display name. display_name = "<DISPLAY_NAME_OF_YOUR_WEB_APP>" deletion_policy = "DELETE" } # NOTE: For this codelab, we recommend setting up Firebase Authentication # using the Firebase console. However, if you set up Firebase Authentication # using Terraform, copy-paste from your main.tf the applicable blocks. # Make sure to add the `for_each` meta-argument into each block. # Copy-paste from your main.tf file the applicable resource blocks # for setting up Cloud Firestore (including rules) and # for setting up Cloud Storage for Firebase (including rules). # Make sure to add the `for_each` meta-argument into each block.
for_each
मेटा-आर्ग्युमेंट का इस्तेमाल करने वालीmain.tf
फ़ाइल का पूरा कॉन्फ़िगरेशन मिल सकता है:web/terraform-checkpoints/replicate-config/main-foreach.tf
अगर आपको इस कॉन्फ़िगरेशन का इस्तेमाल करना है, तो पक्का करें कि आपने ये काम किए हों:main-foreach.tf
से कॉन्फ़िगरेशन कॉपी करें. इसके बाद, इसे अपनीmain.tf
फ़ाइल में चिपकाएं.- अपनी
main.tf
फ़ाइल में, यह तरीका अपनाएं:google_project
रिसॉर्स ब्लॉक में,name
एट्रिब्यूट,project-id
एट्रिब्यूट, और (अगर आपने Terraform के ज़रिए पुष्टि करने की सुविधा सेट अप की है)billing_account
एट्रिब्यूट को अपनी वैल्यू के साथ अपडेट करें.google_firebase_web_app
रिसॉर्स ब्लॉक में,display_name
एट्रिब्यूट को अपनी वैल्यू के साथ अपडेट करें.google_firestore_database
औरgoogle_app_engine_application
रिसॉर्स ब्लॉक में,location_id
एट्रिब्यूट को अपनी वैल्यू के साथ अपडेट करें.
- इस कॉन्फ़िगरेशन को तुरंत लागू करने के बजाय, यह समझना ज़रूरी है कि Terraform, मौजूदा इन्फ़्रास्ट्रक्चर की तुलना में इस कॉन्फ़िगरेशन को कैसे समझता है. साथ ही, इससे जुड़ी कुछ समस्याओं को ठीक करना भी ज़रूरी है.
- फ़िलहाल, अगर आपने
for_each
का इस्तेमाल करने वाला यह कॉन्फ़िगरेशन लागू किया है, तो संसाधन के पते कुछ इस तरह दिखेंगे: हालांकि, इस कोडलैब के पहले हिस्से में बनाए गए मौजूदा प्रोजेक्ट को Terraform, इस तरह से पहचानता है:google_project.default["prod"] google_project.default["staging"] google_firebase_project.default["prod"] google_firebase_project.default["staging"] google_firebase_web_app.default["prod"] google_firebase_web_app.default["staging"]
google_project.default google_firebase_project.default google_firebase_android_app.default
- मौजूदा स्थिति के हिसाब से Terraform क्या कार्रवाइयां करेगा, यह देखने के लिए
terraform plan
चलाएं.
आउटपुट में यह दिखना चाहिए कि Terraform, इस कोडलैब के पहले हिस्से में बनाए गए प्रोजेक्ट को मिटा देगा और दो नए प्रोजेक्ट बनाएगा. ऐसा इसलिए है, क्योंकि Terraform को यह नहीं पता किgoogle_project.default
पते पर मौजूद प्रोजेक्ट को नए पतेgoogle_project.default["prod"]
पर ले जाया गया है. - इसे ठीक करने के लिए,
terraform state mv
कमांड चलाएं:terraform state mv "google_project.default" "google_project.default[\"prod\"]"
- इसी तरह, अन्य सभी संसाधन ब्लॉक ठीक करने के लिए, अपनी
main.tf
फ़ाइल में मौजूदgoogle_firebase_project
,google_firebase_web_app
, और अन्य सभी संसाधन ब्लॉक के लिएterraform state mv
कमांड चलाएं. - अब अगर
terraform plan
फिर से चलाया जाता है, तो यह नहीं दिखना चाहिए कि Terraform, इस कोडलैब के पहले हिस्से में बनाए गए प्रोजेक्ट को मिटा देगा.
- फ़िलहाल, अगर आपने
- अपने नए "स्टेजिंग" Firebase प्रोजेक्ट और उसके सभी संसाधनों को चालू करने के लिए,
terraform apply
चलाएं. साथ ही, उसकी सेवाओं को चालू करें. - Firebase कंसोल में जाकर, पुष्टि करें कि सब कुछ उम्मीद के मुताबिक चालू किया गया है.
12. बोनस चरण: अपने स्टेजिंग और प्रोडक्शन ऐप्लिकेशन डिप्लॉय करना
- अपने ऐप्लिकेशन के कोडबेस में,
firebase-config.js
को बदलकर, अपने स्टेजिंग प्रोजेक्ट से Firebase कॉन्फ़िगरेशन का इस्तेमाल करें.
अपने ऐप्लिकेशन में Firebase कॉन्फ़िगरेशन पाने और उसे जोड़ने का तरीका याद रखने के लिए, इस कोडलैब का पिछला चरण देखें: अपने ऐप्लिकेशन में Firebase कॉन्फ़िगरेशन जोड़ना. - अपने ऐप्लिकेशन को स्टेजिंग Firebase प्रोजेक्ट पर डिप्लॉय करने के लिए, अपनी
web
डायरेक्ट्री के रूट में यह कमांड चलाएं.firebase deploy --only hosting --project=<STAGING_PROJECT_ID>
firebase deploy
के आउटपुट में प्रिंट किए गए यूआरएल के ज़रिए, ब्राउज़र में अपना स्टेजिंग ऐप्लिकेशन खोलें. साइन इन करें, मैसेज भेजें, और इमेज अपलोड करें.
किसी ऐप्लिकेशन को Firebase प्रोजेक्ट में डिप्लॉय करने पर, यह नकली संसाधनों के बजाय असली Firebase संसाधनों का इस्तेमाल करता है. स्टेजिंग ऐप्लिकेशन का इस्तेमाल करने के दौरान, आपको Firebase कंसोल में अपने स्टेजिंग प्रोजेक्ट में डेटा और इमेज दिखनी चाहिए.- स्टेजिंग में अपने ऐप्लिकेशन की जांच करने के बाद,
firebase-config.js
को वापस prod प्रोजेक्ट के Firebase कॉन्फ़िगरेशन का इस्तेमाल करने के लिए बदलें. यह वह पहला प्रोजेक्ट है जिसे आपने इस कोडलैब में बनाया था. - अपने ऐप्लिकेशन को प्रोडक्शन Firebase प्रोजेक्ट पर डिप्लॉय करने के लिए, अपनी
web
डायरेक्ट्री के रूट में जाकर यह कमांड चलाएं.firebase deploy --only hosting --project=<PRODUCTION_PROJECT_ID>
firebase deploy
के आउटपुट में प्रिंट किए गए यूआरएल के ज़रिए, ब्राउज़र में अपना प्रोडक्शन ऐप्लिकेशन खोलें. साइन इन करें, मैसेज भेजें, और इमेज अपलोड करें.
आपको Firebase कंसोल में अपने प्रोडक्शन प्रोजेक्ट में डेटा और इमेज दिखनी चाहिए.- इस कोडलैब के लिए, दोनों ऐप्लिकेशन का इस्तेमाल करने के बाद, Firebase को इन ऐप्लिकेशन के लिए सेवाएं देने से रोका जा सकता है. अपने हर प्रोजेक्ट के लिए, यह कमांड चलाएं:
firebase hosting:disable --project=<STAGING_PROJECT_ID>
firebase hosting:disable --project=<PRODUCTION_PROJECT_ID>
13. बधाई हो!
आपने रीयल-टाइम में चैट करने वाले वेब ऐप्लिकेशन को कॉन्फ़िगर करने के लिए, Terraform का इस्तेमाल किया है! साथ ही, आपने डेवलपमेंट एनवायरमेंट के लिए सबसे सही तरीकों का पालन किया हो. इसके लिए, आपने स्टेजिंग और प्रोडक्शन के लिए अलग-अलग Firebase प्रोजेक्ट बनाए हों.
हमने क्या-क्या कवर किया है
- क्लाउड संसाधनों को मैनेज करने के लिए, Terraform CLI का इस्तेमाल करना
- Firebase प्रॉडक्ट (Authentication, Firestore, Cloud Storage, और Security Rules) को कॉन्फ़िगर करने के लिए Terraform का इस्तेमाल करना
- Firebase Local Emulator Suite का इस्तेमाल करके, वेब ऐप्लिकेशन को स्थानीय तौर पर चलाना और उसकी जांच करना
- वेब ऐप्लिकेशन में Firebase को इंपोर्ट करना
- एक से ज़्यादा एनवायरमेंट में कॉन्फ़िगरेशन को कॉपी करने के लिए Terraform का इस्तेमाल करना
Firebase और Terraform के बारे में ज़्यादा जानने के लिए, हमारे दस्तावेज़ पर जाएं. आपको Terraform के साथ काम करने वाले सभी Firebase प्रॉडक्ट की सूची, इस्तेमाल के सामान्य उदाहरणों के लिए Terraform के सैंपल कॉन्फ़िगरेशन, और समस्या हल करने से जुड़ी जानकारी और अक्सर पूछे जाने वाले सवाल मिल सकते हैं.