Teleraform की मदद से, Firebase प्रोजेक्ट और प्रॉडक्ट सेट अप और मैनेज करें

1. शुरुआती जानकारी

लक्ष्य

Terraform का इस्तेमाल करके, कोई Firebase प्रोजेक्ट सेट अप और मैनेज किया जा सकता है. इसमें, इन्फ़्रास्ट्रक्चर और Firebase प्रॉडक्ट का प्रोग्रामैटिक कॉन्फ़िगरेशन भी शामिल है.

यह कोडलैब सबसे पहले यह बताता है कि नया Firebase प्रोजेक्ट बनाने के लिए, टेरेस की कॉन्फ़िगरेशन फ़ाइल कैसे बनाएं. इसके बाद, उन ऐप्लिकेशन और Firebase प्रॉडक्ट को कॉन्फ़िगर करने का तरीका भी बताया जाता है जिनका इस्तेमाल आपको उस प्रोजेक्ट में करना है. इसमें, टेरेस वाले कमांड लाइन की बुनियादी बातों के बारे में भी बताया गया है. जैसे, किए जाने वाले बदलावों की झलक देखना और फिर उन्हें लागू करना.

अगर आपको Turaform की मदद से Firebase प्रोजेक्ट और प्रॉडक्ट को सेट अप और मैनेज करने का तरीका जानना है, तो यह कोडलैब आपके लिए है!

आपको यह जानकारी मिलेगी

  • टेराफ़ॉर्म कॉन्फ़िगरेशन फ़ाइल बनाने का तरीका (*.tf)
  • अपना इन्फ़्रास्ट्रक्चर मैनेज करने के लिए, Terraform सीएलआई कमांड इस्तेमाल करने का तरीका
  • अपने संसाधनों और सेवाओं को अपडेट करने के लिए, कॉन्फ़िगरेशन में बदलाव करने का तरीका
  • किसी असली वेब ऐप्लिकेशन (जिसे फ़्रेंडली चैट कहा जाता है) पर अपना कॉन्फ़िगरेशन कैसे लागू करें
  • अलग-अलग एनवायरमेंट (प्रोडक्शन, स्टेजिंग वगैरह) में पैरलल और इन-सिंक कॉन्फ़िगरेशन के बारे में कैसे बताएं

आपको इन चीज़ों की ज़रूरत होगी

इस कोडलैब के साथ कामयाब होने के लिए, आपके पास Terraform की बुनियादी जानकारी होनी चाहिए. साथ ही, इसमें इस्तेमाल होने वाली शब्दावली की भी जानकारी होनी चाहिए. इस कोर्स में ये शर्तें भी शामिल हैं:

  • Terraform इंस्टॉल करें और Teraform के आधिकारिक ट्यूटोरियल की मदद से, इसे इस्तेमाल करने के बारे में जानें

इस कोडलैब के ज़रिए, आपको ऐप्लिकेशन के सैंपल के तौर पर एक असली नमूना मिलता है, ताकि आप टेराफ़ॉर्म के ज़रिए जो प्रावधान किया गया है उसकी जांच कर सकें और उससे इंटरैक्ट कर सकें. ऐसा करने के लिए, आपको नीचे दी गई जानकारी की ज़रूरत होगी:

  • वेब ऐप्लिकेशन के लिए सैंपल कोड - कोडलैब के अगले चरण में जाकर, इस कोड को डाउनलोड करें
  • पैकेज मैनेजर npm (जो आम तौर पर Node.js के साथ आता है) - इन टूल को इंस्टॉल करें
  • Firebase सीएलआई - इस सीएलआई को इंस्टॉल करके लॉग इन करें

2. शुरुआती कोड पाएं

इस कोडलैब में, यह जांच की जा सकती है कि वाकई किसी वेब ऐप्लिकेशन में, टेरेस पर आपने क्या-क्या प्रावधान किया है. हमारा सुझाव है कि ऐसा करें, ताकि आपको टेराफ़ॉर्म के प्रावधान किए गए संसाधनों को इस्तेमाल करने के सभी चरणों की जानकारी हो.

कमांड लाइन से, कोडलैब की GitHub रिपॉज़िटरी का क्लोन बनाएं:

git clone https://github.com/firebase/codelab-friendlychat-web

इसके अलावा, अगर आपने GitHub फ़ाइल इंस्टॉल नहीं की है, तो डेटा स्टोर करने की जगह को ZIP फ़ाइल के रूप में डाउनलोड करें.

3. टेराफ़ॉर्म कॉन्फ़िगरेशन बनाना

टेराफ़ॉर्म का सेट अप

  1. डाउनलोड किए गए सैंपल ऐप्लिकेशन के कोड बेस में, web डायरेक्ट्री के रूट पर जाएं.
  2. उस डायरेक्ट्री के रूट में, यहां दिए गए शुरुआती सेटअप के साथ, main.tf नाम की एक टेराफ़ॉर्म कॉन्फ़िगरेशन फ़ाइल बनाएं:

    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 का इस्तेमाल करना होगा, ताकि यह कोटा की जांच स्वीकार कर सके. टेराफ़ॉर्म alias सिंटैक्स की मदद से, इस कोडलैब के अगले चरणों में, सेवा देने वाले दो अलग-अलग सेटअप के बीच अंतर किया जा सकता है.

डायरेक्ट्री में टेराफ़ॉर्म को शुरू करें

पहली बार नया कॉन्फ़िगरेशन बनाने के लिए, कॉन्फ़िगरेशन में बताई गई कंपनी की जानकारी डाउनलोड करना ज़रूरी है.

यह प्रोसेस शुरू करने के लिए, उसी डायरेक्ट्री के रूट से नीचे दिए गए कमांड को चलाएं जो आपकी main.tf कॉन्फ़िगरेशन फ़ाइल है:

terraform init

4. टेराफ़ॉर्म की मदद से Firebase प्रोजेक्ट बनाना

"Firebase प्रोजेक्ट बनाने" के लिए, यह याद रखना ज़रूरी है कि हर Firebase प्रोजेक्ट असल में एक Google Cloud प्रोजेक्ट है और बस उसमें Firebase सेवाएं चालू की गई हैं.

बुनियादी तौर पर, Google Cloud प्रोजेक्ट और एपीआई के लिए ब्लॉक जोड़ना

  1. सबसे पहले, मौजूदा 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"
      }
    }
    
  2. इसके बाद, आपको ज़रूरी एपीआई चालू करने होंगे: सेवा उपयोग एपीआई और Firebase प्रबंधन एपीआई.

    जब आप Firebase प्रोजेक्ट बनाने के लिए Firebase कंसोल का इस्तेमाल करते हैं, तब इस एपीआई को चालू करने के तरीके को आम तौर पर पर्दे के पीछे से हैंडल किया जाता है, लेकिन इस सुविधा को चालू करने के लिए टेरेस को साफ़ तौर पर बताना ज़रूरी है.

    अपनी main.tf कॉन्फ़िगरेशन फ़ाइल में (नया क्लाउड प्रोजेक्ट बनाने वाले ब्लॉक के नीचे), नीचे दिया गया संसाधन ब्लॉक जोड़ें:

    main.tf
    ...
    
    # 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
    }
    
    ServiceUse API चालू करने पर, आपका नया प्रोजेक्ट कोटा की जांच स्वीकार कर पाएगा! इसलिए, बाद के सभी रिसॉर्स प्रावधान और सेवा को चालू करने के लिए, आपको प्रोवाइडर का इस्तेमाल user_project_override के साथ करना चाहिए (किसी उपनाम की ज़रूरत नहीं है).

Firebase सेवाएं चालू करने के लिए ब्लॉक जोड़ें

"Firebase प्रोजेक्ट बनाने" के लिए ज़रूरी सबसे आखिर में प्रोजेक्ट पर Firebase सेवाएं चालू कर रहा है.

अपनी main.tf कॉन्फ़िगरेशन फ़ाइल में, इन रिसॉर्स ब्लॉक को जोड़ें.

जैसा कि ऊपर बताया गया है, ध्यान दें कि यह रिसॉर्स ब्लॉक, प्रोवाइडर के साथ 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 को डिपेंडेंसी के बारे में पता नहीं चल पाता. साथ ही, संसाधनों को साथ में प्रावधान करते समय गड़बड़ी हो सकती है.

कॉन्फ़िगरेशन लागू करें

  1. नए रिसॉर्स का प्रावधान करने और अपनी कॉन्फ़िगरेशन फ़ाइल में दिए गए एपीआई को चालू करने के लिए, उसी डायरेक्ट्री के रूट से नीचे दिए गए कमांड को चलाएं जिसमें आपकी main.tf फ़ाइल होनी चाहिए (जो web होनी चाहिए):
    terraform apply
    
  2. टर्मिनल में,terraform, की जाने वाली कार्रवाइयों का प्लान प्रिंट करता है.

    अगर सब कुछ उम्मीद के मुताबिक दिखता है, तो yes डालकर कार्रवाइयों को मंज़ूरी दें.

    main.tf
    Terraform 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 कमांड का इस्तेमाल किया जा सकता है.

बदलावों की पुष्टि करें

Teleraform का काम पूरा हो जाने के बाद, नीचे दिए गए निर्देश की मदद से Teraform के प्रावधान किए गए सभी संसाधनों और सेवाओं की स्थिति की जांच की जा सकती है:

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 कंसोल में देखकर यह पुष्टि की जा सकती है कि प्रोजेक्ट बनाया गया है या नहीं.

Firebase कंसोल पर, Tenraform AdaptiveChat कोडलैब (कोड बनाना सीखना) के लिए प्रोजेक्ट चुना गया

5. Turaform के ज़रिए अपना Firebase ऐप्लिकेशन रजिस्टर करें

Firebase का इस्तेमाल करने के लिए, आपको अपने ऐप्लिकेशन के हर प्लैटफ़ॉर्म के वैरिएंट को Firebase प्रोजेक्ट में रजिस्टर करना होगा. इस कोडलैब में, टेराफ़ॉर्म के ज़रिए प्रावधान किए गए कॉन्टेंट की जांच करने और उससे इंटरैक्ट करने के लिए, किसी असली ऐप्लिकेशन का इस्तेमाल किया जा सकता है. यह ऐप्लिकेशन एक वेब ऐप्लिकेशन है. इसलिए, आपको Tenraform को बताना होगा कि वह आपके नए बनाए गए 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"
}

कॉन्फ़िगरेशन लागू करें

  1. नए रिसॉर्स का प्रावधान करने के लिए, नीचे दिए गए कमांड को उसी डायरेक्ट्री के रूट से चलाएं जिसमें आपकी main.tf फ़ाइल है (जो web होनी चाहिए).
    terraform apply
    
    ध्यान दें कि इस निर्देश से, नया Google Cloud प्रोजेक्ट फिर से नहीं बनेगा. टेराफ़ॉर्म यह पता लगाएगा कि इस प्रोजेक्ट आईडी वाला प्रोजेक्ट पहले से मौजूद है. इसके बाद, यह प्रोजेक्ट की मौजूदा स्थिति की तुलना, .tf फ़ाइल में मौजूद प्रोजेक्ट से करेगा और उसे मिलने वाले किसी भी तरह के बदलाव करेगा.
  2. प्रिंट की गई कार्रवाइयों के प्लान की समीक्षा करें. अगर सब कुछ उम्मीद के मुताबिक लग रहा हो, तो yes टाइप करें और कार्रवाइयों को मंज़ूरी देने के लिए Enter दबाएं.

बदलावों की पुष्टि करें

नीचे दिए गए निर्देश की मदद से, प्रावधान किए गए नए संसाधन की स्थिति की जांच की जा सकती है:

terraform show

इसके अलावा, आप Firebase कंसोल में ऐप्लिकेशन को देखकर यह पुष्टि कर सकते हैं कि वह आपके प्रोजेक्ट में रजिस्टर हो गया है. प्रोजेक्ट सेटिंग पर जाएं और फिर नीचे की ओर स्क्रोल करके, आपके ऐप्लिकेशन सेक्शन पर जाएं.

6. Firebase से पुष्टि करने की सुविधा सेट अप करें

पुष्टि करना किसी भी ऐप्लिकेशन का एक अहम हिस्सा होता है. असली उपयोगकर्ताओं को उनके Google खातों से अपने वेब ऐप्लिकेशन में साइन इन करने की अनुमति देने के लिए, Firebase से पुष्टि करने की सुविधा चालू की जा सकती है. साथ ही, 'Google से साइन इन करें' तरीके को सेट अप किया जा सकता है.

ध्यान दें कि इस कोडलैब में, Firebase से पुष्टि करने की सुविधा सेट अप करने के लिए दो अलग-अलग विकल्प हैं:

  • पहला विकल्प (सुझाया गया): कंसोल में, Firebase से पुष्टि करने की सुविधा सेट अप करें. इसके लिए, GCIP की ज़रूरत नहीं होती.
    • इस विकल्प का इस्तेमाल करने का मतलब है कि आपको अपने नए प्रोजेक्ट को किसी क्लाउड बिलिंग खाते से जोड़ने की ज़रूरत नहीं है.
  • दूसरा विकल्प: Google Cloud Identity Platform (GCIP) APIs का इस्तेमाल करके,terraform के ज़रिए Firebase से पुष्टि करने की सुविधा सेट अप करें.
    • इस विकल्प का इस्तेमाल करने का मतलब है कि आपको अपने नए प्रोजेक्ट को क्लाउड बिलिंग खाते से जोड़ना होगा, क्योंकि GCIP के लिए यह ज़रूरी है कि प्रोजेक्ट ब्लेज़ प्राइसिंग प्लान के हिसाब से हो.

पहला विकल्प: Firebase कंसोल का इस्तेमाल करके पुष्टि करने की सुविधा सेट अप करना

Firebase कंसोल का इस्तेमाल करके Firebase से पुष्टि करने की सुविधा सेट अप करने के लिए, यह ज़रूरी नहीं है कि आपका प्रोजेक्ट ब्लेज़ प्राइसिंग प्लान पर हो.

यहां Firebase से पुष्टि करने की सुविधा सेट अप करने और Google से साइन-इन करने का तरीका बताया गया है:

  1. Firebase कंसोल में, बाएं पैनल में बिल्ड सेक्शन पर जाएं.
  2. पुष्टि करें पर क्लिक करें. इसके बाद, शुरू करें पर क्लिक करें. इसके बाद, साइन इन करने का तरीका टैब पर क्लिक करें या सीधे तौर पर साइन इन करने के लिए यहां क्लिक करें.
  3. सेवा देने वाली नई कंपनी जोड़ें पर क्लिक करें और दूसरी सेवाएं देने वाली कंपनियां सेक्शन में जाकर, Google चुनें.
  4. चालू करें टॉगल को चालू करें.
  5. अपने ऐप्लिकेशन के लिए, सार्वजनिक तौर पर दिखने वाला नाम कुछ इस तरह सेट करें: FriendlyChat (यह ज़रूरी नहीं है कि यह सभी ऐप्लिकेशन के लिए अलग हो).
  6. ड्रॉपडाउन मेन्यू से, प्रोजेक्ट सहायता ईमेल चुनें. इसके बाद, सेव करें पर क्लिक करें.Firebase कंसोल पर, Firebase पुष्टि करने की सुविधा कॉन्फ़िगर करना
  7. आपको Google को साइन-इन की सेवा देने वाली चालू कंपनी के तौर पर देखना चाहिए.Firebase कंसोल की पुष्टि करने वाला पेज: &#39;Google साइन इन&#39; चालू किया गया

दूसरा विकल्प: Google Cloud Identity Platform (GCIP) एपीआई का इस्तेमाल करके, Tenraform से पुष्टि करने की सुविधा सेट अप करना

Teleraform की मदद से Firebase से पुष्टि करने की सुविधा को सेट अप करने के लिए, आपको GCIP API का इस्तेमाल करना होगा. इसका मतलब है कि प्रोजेक्ट, Blaze प्राइसिंग प्लान पर होना चाहिए. आप एक क्लाउड बिलिंग खाते को इस प्रोजेक्ट से जोड़कर अपने Firebase प्रोजेक्ट को ब्लेज़ प्लान का इस्तेमाल करने के लिए अपग्रेड करते हैं.

Teraform से बिलिंग की सुविधा चालू करें

  1. अगर आपके पास पहले से क्लाउड बिलिंग खाता नहीं है, तो सबसे पहले Google Cloud Console में एक नया खाता बनाएं. ऐसा करते समय, उसका बिलिंग खाता आईडी नोट कर लें. बिलिंग खाता आईडी, आपके प्रोजेक्ट से जुड़े बिलिंग खाता आईडी में बिलिंग पेज पर देखा जा सकता है.Google Cloud Console का इस्तेमाल करके बिलिंग खाते की सुविधा चालू करना
  2. Turaform की मदद से अपने प्रोजेक्ट में बिलिंग की सुविधा चालू करने के लिए, अपनी 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"
      }
    }
    
    ...
    

Firebase से पुष्टि करने की सुविधा चालू करें और Tenraform के ज़रिए Google से साइन-इन करें

  1. GCIP के साथ Firebase से पुष्टि करने की सुविधा का प्रावधान करने के लिए, अपनी 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,
      ]
    }
    
  2. Google से साइन-इन करने की सुविधा चालू करने के लिए, आपके पास OAuth क्लाइंट होना चाहिए. API और 'सेवाएं' सेक्शन पर जाएं.
  3. इस प्रोजेक्ट के लिए पहली बार क्लाइंट आईडी बनाया जा रहा है. इसलिए, आपको उस स्क्रीन को कॉन्फ़िगर करना होगा जहां OAuth के लिए सहमति दी जाती है.
    1. OAuth का इस्तेमाल करने के लिए सहमति देने वाली स्क्रीन पेज खोलें. इसके बाद, वह प्रोजेक्ट चुनें जिसे आपने अभी-अभी बनाया है.
    2. उपयोगकर्ता टाइप को एक्सटर्नल पर सेट करें और बनाएं पर क्लिक करें.
    3. अगली स्क्रीन में, इन्हें पूरा करें. इसके बाद, सेव करें और जारी रखें पर क्लिक करें.
      • अपने ऐप्लिकेशन के सार्वजनिक तौर पर दिखने वाले ऐप्लिकेशन के नाम को FriendlyChat की तरह सेट करें. यह ज़रूरी नहीं है कि यह सभी ऐप्लिकेशन के लिए अलग हो.
      • ड्रॉपडाउन मेन्यू से, उपयोगकर्ता सहायता का ईमेल पता चुनें.
      • डेवलपर की संपर्क जानकारी के लिए ईमेल पता डालें.
    4. अगली स्क्रीन पर, इन्हें पूरा करें:
      • स्कोप वाले पेज पर जाकर डिफ़ॉल्ट सेटिंग को स्वीकार करें. इसके बाद, सेव करें और जारी रखें पर क्लिक करें.
      • उपयोगकर्ताओं की जांच करें पेज पर जाकर डिफ़ॉल्ट को स्वीकार करें. इसके बाद, सेव करें और जारी रखें पर क्लिक करें.
      • खास जानकारी की समीक्षा करें और फिर डैशबोर्ड पर वापस जाएं पर क्लिक करें.
      Google Cloud Console का इस्तेमाल करके OAuth2 क्लाइंट को कॉन्फ़िगर करना
  4. क्रेडेंशियल पेज पर जाकर, OAuth क्लाइंट सेट अप करें. इसके लिए, यह तरीका अपनाएं:
    1. क्रेडेंशियल बनाएं पर क्लिक करें और OAuth क्लाइंट आईडी चुनें.
    2. ऐप्लिकेशन टाइप ड्रॉप-डाउन से वेब ऐप्लिकेशन चुनें.
    3. नाम फ़ील्ड में, अपने ऐप्लिकेशन का नाम डालें. उदाहरण के लिए, FriendlyChat (यह ज़रूरी नहीं है कि यह हर जगह से अलग हो).
    4. ये सेटिंग सेट करके, अपने ऐप्लिकेशन के यूआरएल को इस OAuth क्लाइंट का इस्तेमाल करने की अनुमति दें:
      • अनुमति वाले JavaScript ऑरिजिन में जाकर, यूआरआई जोड़ें पर क्लिक करें और
        https://<PROJECT_ID>.firebaseapp.com डालें. यहां <PROJECT_ID> वह प्रोजेक्ट आईडी है जिसे आपने main.tf में सेट किया है.
      • अनुमति वाले रीडायरेक्ट यूआरआई में जाकर, यूआरआई जोड़ें पर क्लिक करें और
        https://<PROJECT_ID>.firebaseapp.com/__/auth/handler डालें. यहां <PROJECT_ID> वह प्रोजेक्ट आईडी है जिसे आपने main.tf में सेट किया है.
    5. सेव करें पर क्लिक करें.
    Google Cloud Console के क्रेडेंशियल वाले पेज से OAuth2 क्लाइंट आईडी और सीक्रेट पाना
  5. अपने 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
      ]
    }
    

कॉन्फ़िगरेशन लागू करें

  1. अपने कॉन्फ़िगरेशन के हिसाब से पुष्टि करने की सुविधा सेट अप करने के लिए, उसी डायरेक्ट्री के रूट से इन कमांड को चलाएं जिसमें आपकी main.tf फ़ाइल (जो web होनी चाहिए) है:
    export TF_VAR_oauth_client_secret="<YOUR_OAUTH_CLIENT_SECRET>"
    
    terraform apply
    
    ध्यान दें कि terraform apply को चलाने से, नया Google Cloud प्रोजेक्ट फिर से नहीं बनेगा. टेराफ़ॉर्म यह पता लगाएगा कि इस प्रोजेक्ट आईडी वाला प्रोजेक्ट पहले से मौजूद है. साथ ही, यह प्रोजेक्ट की मौजूदा स्थिति की तुलना, .tf फ़ाइल में मौजूद प्रोजेक्ट से करेगा. इसके बाद, वह किसी भी तरह के बदलाव कर पाएगा.
  2. प्रिंट की गई कार्रवाइयों के प्लान की समीक्षा करें. अगर सब कुछ उम्मीद के मुताबिक लग रहा हो, तो yes टाइप करें और कार्रवाइयों को मंज़ूरी देने के लिए Enter दबाएं.

बदलावों की पुष्टि करें

  1. Firebase कंसोल में, बाएं पैनल में बिल्ड सेक्शन पर जाएं.
  2. पुष्टि करने पर क्लिक करें. इसके बाद, साइन इन करने का तरीका टैब पर क्लिक करें या सीधे वहां जाने के लिए यहां क्लिक करें.
  3. आपको Google को साइन-इन की सेवा देने वाली चालू कंपनी के तौर पर देखना चाहिए.Firebase कंसोल की पुष्टि करने वाला पेज: &#39;Google साइन इन&#39; चालू किया गया

7. Firestore डेटाबेस और उसके सुरक्षा नियम सेट अप करें

इस कोडलैब के वेब ऐप्लिकेशन के लिए, आप Firestore डेटाबेस में असली उपयोगकर्ताओं के बीच मैसेज सेव कर सकते हैं.

  1. ज़रूरी एपीआई चालू करने और डेटाबेस इंस्टेंस का प्रावधान करने के लिए, अपनी 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
      ]
    }
    
  2. <NAME_OF_DESIRED_REGION> को उस जगह से बदलें जहां आपको डेटाबेस को सेव रखना है.

    प्रोडक्शन ऐप्लिकेशन डेवलप करते समय, आपको इसे ज़्यादातर उपयोगकर्ताओं के आस-पास वाले इलाके में रखना चाहिए. साथ ही, आपको Cloud Functions जैसी अन्य Firebase सेवाओं के लिए भी ऐसा करना चाहिए. इस कोडलैब के लिए, आप us-east1 (दक्षिण कैरोलाइना) का इस्तेमाल कर सकते हैं या अपने सबसे नज़दीकी इलाके का इस्तेमाल कर सकते हैं (Cloud Firestore की जगहें देखें).
  3. Firebase से ऐक्सेस किए जा सकने वाले हर Firestore डेटाबेस इंस्टेंस को Firebase सुरक्षा नियमों से सुरक्षित किया जाना चाहिए.

    इस कोडलैब का सैंपल कोड, firestore.rules फ़ाइल में सुरक्षित Firestore नियमों का एक सेट उपलब्ध कराता है. इन नियमों को web डायरेक्ट्री के रूट में देखा जा सकता है.
  4. ये काम करने के लिए, अपनी main.tf फ़ाइल में इन रिसॉर्स ब्लॉक को जोड़ें:
    • लोकल firestore.rules फ़ाइल से, Firebase के सुरक्षा नियमों के एक नियमसेट बनाएं.
    • Firestore इंस्टेंस के लिए रूलसेट रिलीज़ करें.
    ध्यान दें कि ये रिसॉर्स ब्लॉक, Firebase कंसोल में पब्लिश करें बटन पर क्लिक करने या 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
        ]
      }
    }
    
  5. Firestore डेटाबेस का प्रावधान करने और इसके सुरक्षा नियमों को लागू करने के लिए terraform apply चलाएं.
  6. पुष्टि करें कि डेटाबेस को कॉन्फ़िगर किया गया है और इसके सुरक्षा नियमों को डिप्लॉय किया गया है:
    1. Firebase कंसोल में, बाएं पैनल में बिल्ड सेक्शन पर जाएं.
    2. Firestore Database सेक्शन में जाएं और फिर नियम टैब पर क्लिक करें.
    Firebase कंसोल का इस्तेमाल करके, Cloud Firestore के नियमों की पुष्टि करना

8. Cloud Storage बकेट और उसके सुरक्षा नियमों को सेट अप करना

इस कोडलैब के वेब ऐप्लिकेशन के लिए, असली उपयोगकर्ताओं के बीच शेयर की गई इमेज को Cloud Storage बकेट में सेव किया जा सकता है.

  1. ज़रूरी एपीआई चालू करने और अपने 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
    }
    
  2. Firebase से ऐक्सेस किए जा सकने वाले हर Cloud Storage बकेट को Firebase के सुरक्षा नियमों से सुरक्षित किया जाना चाहिए.

    इस कोडलैब का सैंपल कोड, storage.rules फ़ाइल में सुरक्षित Firestore नियमों का एक सेट उपलब्ध कराता है. इन नियमों को web डायरेक्ट्री के रूट में देखा जा सकता है.
  3. ये काम करने के लिए, अपनी main.tf फ़ाइल में इन रिसॉर्स ब्लॉक को जोड़ें:
    • लोकल फ़ाइल से, Firebase के सुरक्षा नियमों के एक नियमसेट बनाएं.
    • स्टोरेज बकेट के लिए नियमों कासेट रिलीज़ करें.
    ध्यान दें कि ये रिसॉर्स ब्लॉक, 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
        ]
      }
    }
    
  4. डिफ़ॉल्ट Cloud Storage बकेट का प्रावधान करने और इसके सुरक्षा नियमों को डिप्लॉय करने के लिए, terraform apply चलाएं.
  5. पुष्टि करें कि बकेट का प्रावधान किया गया है और इसके सुरक्षा नियम लागू किए गए हैं:
    1. Firebase कंसोल में, बाएं पैनल में बिल्ड सेक्शन पर जाएं.
    2. स्टोरेज सेक्शन में जाएं. इसके बाद, नियम टैब पर क्लिक करें.
    Firebase कंसोल का इस्तेमाल करके, सुरक्षा के नियमों की पुष्टि करना

9. ऐप्लिकेशन को डिवाइस पर चलाएं

अब आप पहली बार अपना वेब ऐप्लिकेशन चलाने के लिए तैयार हैं! अपने ऐप्लिकेशन को स्थानीय तौर पर उपलब्ध कराने के लिए, आपको Firebase होस्टिंग एम्युलेटर का इस्तेमाल करना होगा.

  1. नई टर्मिनल विंडो खोलें और एम्युलेटर को शुरू करने के लिए, web डायरेक्ट्री से यह Firebase सीएलआई कमांड चलाएं:
    firebase emulators:start --project=<PROJECT_ID>
    
  2. अपने ब्राउज़र में, सीएलआई (आम तौर पर http://localhost:5000) से मिले लोकल यूआरएल पर अपना वेब ऐप्लिकेशन खोलें.

आपको अपने फ़्रेंडली चैट ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) दिखना चाहिए, जो (अभी तक!) काम नहीं कर रहा है. ऐप्लिकेशन अभी तक Firebase से कनेक्ट नहीं हुआ है. हालांकि, इस कोडलैब के अगले चरणों को पूरा करने पर,

ध्यान दें कि जब भी आप अपने वेब ऐप्लिकेशन में बदलाव करें (जैसा कि आप इस कोडलैब के नीचे दिए गए चरणों में करेंगे), तो उन बदलावों के साथ लोकल यूआरएल को अपडेट करने के लिए अपना ब्राउज़र रीफ़्रेश करें.

10. Firebase को इंस्टॉल, कॉन्फ़िगर, और शुरू करें

किसी ऐप्लिकेशन को Firebase के साथ काम करने के लिए, आपके ऐप्लिकेशन को आपके Firebase प्रोजेक्ट के लिए Firebase SDK टूल और Firebase कॉन्फ़िगरेशन की ज़रूरत होगी.

इस कोडलैब का सैंपल कोड, पहले से ही काम कर रहा ऐप्लिकेशन है. इसमें अलग-अलग Firebase प्रॉडक्ट का इस्तेमाल करने के लिए सभी डिपेंडेंसी और ज़रूरी फ़ंक्शन मौजूद हैं. यह जानने के लिए कि क्या काम हो चुका है web/package.json और web/src/index.js देखें.

सैंपल कोड करीब-करीब पूरा हो गया है, फिर भी आपको अपने ऐप्लिकेशन को चलाने के लिए कुछ काम करने होंगे. इनमें ये शामिल हैं: Firebase SDK टूल इंस्टॉल करना, अपना बिल्ड शुरू करना, अपने ऐप्लिकेशन में Firebase कॉन्फ़िगरेशन जोड़ना, और आखिर में Firebase शुरू करना.

Firebase SDK टूल इंस्टॉल करें और अपना वेबपैक बिल्ड शुरू करें

अपना ऐप्लिकेशन बनाना शुरू करने के लिए, आपको कुछ निर्देश देने होंगे.

  1. नई टर्मिनल विंडो खोलें.
  2. पक्का करें कि आप web डायरेक्ट्री के रूट पर हों.
  3. Firebase SDK टूल डाउनलोड करने के लिए, npm install चलाएं.
  4. किसी भी डिपेंडेंसी को अपडेट करने के लिए, npm update चलाएं.
  5. वेबपैक शुरू करने के लिए npm run start चलाएं.

बाकी कोडलैब के लिए, Webpack आपके सोर्स कोड को अब लगातार फिर से बनाएगा.

अपने ऐप्लिकेशन में Firebase कॉन्फ़िगरेशन जोड़ें

आपको अपने ऐप्लिकेशन में Firebase कॉन्फ़िगरेशन जोड़ना होगा, ताकि Firebase SDK टूल को यह पता चल सके कि वे किस Firebase प्रोजेक्ट का इस्तेमाल करना चाहते हैं.

इस कोडलैब के लिए, आपके पास Firebase कॉन्फ़िगरेशन पाने के दो अलग-अलग विकल्प हैं:

  • पहला विकल्प: Firebase कंसोल से, अपना Firebase कॉन्फ़िगरेशन पाएं.
  • दूसरा विकल्प: terraform से अपना Firebase कॉन्फ़िगरेशन हासिल करें.

पहला विकल्प: Firebase कंसोल से कॉन्फ़िगरेशन हासिल करना और उसे अपने कोड बेस में जोड़ना

  1. Firebase कंसोल में, प्रोजेक्ट सेटिंग पर जाएं.
  2. नीचे आपके ऐप्लिकेशन कार्ड तक स्क्रोल करें और फिर अपना वेब ऐप्लिकेशन चुनें.
  3. Firebase SDK टूल के स्निपेट पैनल से कॉन्फ़िगरेशन चुनें. इसके बाद, कॉन्फ़िगरेशन स्निपेट को कॉपी करें.
  4. अपने ऐप्लिकेशन की 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>",
    };
    
    ...
    

दूसरा विकल्प: Tenraform से कॉन्फ़िगरेशन पाना और उसे अपने कोड बेस में जोड़ना

इसके अलावा, सीएलआई में आउटपुट वैल्यू के तौर पर, टेराफ़ॉर्म की मदद से Firebase कॉन्फ़िगरेशन को हासिल किया जा सकता है.

  1. अपनी main.tf फ़ाइल में, google_firebase_web_app रिसॉर्स ब्लॉक को ढूंढें (वह ब्लॉक जिसने आपके प्रोजेक्ट के साथ वेब ऐप्लिकेशन रजिस्टर किया है).
  2. उस ब्लॉक के तुरंत बाद, इन ब्लॉक को जोड़ें:

    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", "")
      }
    }
    
    ...
    
  3. data और output ब्लॉक को, किसी भी तरह से इन्फ़्रास्ट्रक्चर में बदलाव करने के लिए नहीं बनाया गया है. इसलिए, आपको सिर्फ़ नीचे दिए गए कमांड चलाने होंगे.
    1. अपने वेब ऐप्लिकेशन के Firebase कॉन्फ़िगरेशन को, अपनी डायरेक्ट्री की टेरेस की स्थिति में लोड करने के लिए, यह कमांड चलाएं:
      terraform refresh
      
    2. 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"
          }
        }
      }
      
  4. value मैप में वैल्यू कॉपी करें.
  5. इन वैल्यू (आपका कॉन्फ़िगरेशन) को अपने ऐप्लिकेशन की 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 फ़ाइल को इनके साथ जोड़ें:

index.js का इस्तेमाल करें

...

const firebaseAppConfig = getFirebaseConfig();
initializeApp(firebaseAppConfig);

अपना ऐप्लिकेशन आज़माएं

अब जब सब कुछ Firebase के लिए कॉन्फ़िगर हो गया है, तो आप अपने फ़ंक्शनल वेब ऐप्लिकेशन को आज़मा सकते हैं.

  1. आपके ऐप्लिकेशन को दिखाने वाले ब्राउज़र को रीफ़्रेश करें.
  2. अब Google से साइन इन करके, चैट में मैसेज पोस्ट किए जा सकते हैं. अगर आपके पास इमेज फ़ाइलें हैं, तो उन्हें अपलोड भी किया जा सकता है!

11. सभी एनवायरमेंट में अपने कॉन्फ़िगरेशन को दोहराएं

टेराफ़ॉर्म, एक जैसे कॉन्फ़िगर किए गए कई इन्फ़्रास्ट्रक्चर को मैनेज करने में माहिर है. उदाहरण के लिए, ऐसा स्टेजिंग Firebase प्रोजेक्ट सेट अप करना जो किसी प्रोडक्शन प्रोजेक्ट से मिलता-जुलता हो.

इस कोडलैब में, स्टेजिंग एनवायरमेंट के तौर पर दूसरा Firebase प्रोजेक्ट बनाया जा सकता है.

इस स्टेजिंग प्रोजेक्ट को बनाने के लिए किसी मौजूदा कॉन्फ़िगरेशन की कॉपी बनाने के लिए, आपके पास दो विकल्प हैं:

  • पहला विकल्प: टेरेस पर मौजूद कॉन्फ़िगरेशन की कॉपी बनाएं.
    इस विकल्प से यह पता चलता है कि कॉपी किया गया प्रोजेक्ट, सोर्स प्रोजेक्ट से कितना अलग हो सकता है.
  • दूसरा विकल्प: for_each की मदद से कॉन्फ़िगरेशन का फिर से इस्तेमाल करें.
    अगर हर प्रोजेक्ट के लिए अलग-अलग कोई खास तरीका न हो और आपको सभी प्रोजेक्ट में एक साथ बदलाव करने हों, तो इस विकल्प की मदद से कोड को फिर से इस्तेमाल किया जा सकता है.

पहला विकल्प: Terraform कॉन्फ़िगरेशन की कॉपी बनाना

इस विकल्प की मदद से, यह पता चलता है कि कॉपी किया गया प्रोजेक्ट, सोर्स प्रोजेक्ट से कितना अलग हो सकता है. जैसे, अलग-अलग डिसप्ले नेम वाले ऐप्लिकेशन और कुछ लोगों के लिए रिलीज़ करना.

  1. अपनी web डायरेक्ट्री के रूट में, टेराफ़ॉर्म की एक नई कॉन्फ़िगरेशन फ़ाइल बनाएं. इसका नाम main_staging.tf है.
  2. अपनी main.tf फ़ाइल से सभी रिसॉर्स ब्लॉक कॉपी करें (terraform और provider ब्लॉक को छोड़कर). इसके बाद, उन्हें अपनी main_staging.tf फ़ाइल में चिपकाएं.
  3. इसके बाद, आपको main_staging.tf में कॉपी किए गए हर रिसॉर्स ब्लॉक में बदलाव करना होगा, ताकि वे आपके स्टेजिंग प्रोजेक्ट के साथ काम कर सकें:
    • संसाधन लेबल: आपस में मेल न खाने के लिए, नया नाम इस्तेमाल करें. उदाहरण के लिए, resource "google_project" "default" का नाम बदलकर resource "google_project" "staging" करें.
    • संसाधन के रेफ़रंस: हर एक को अपडेट करें. उदाहरण के लिए, google_firebase_project.default.project को google_firebase_project.staging.project में अपडेट करें.
    आपको इस कोडलैब के GitHub रिपॉज़िटरी में main_staging.tf फ़ाइल का पूरा कॉन्फ़िगरेशन मिल सकता है:

    web/terraform-checkpoints/replicate-config/main_staging-copypaste.tf

    अगर आपको इस कॉन्फ़िगरेशन का इस्तेमाल करना है, तो ये काम ज़रूर करें:
    1. main_staging-copypaste.tf से कॉन्फ़िगरेशन कॉपी करें और उसे अपनी main_staging.tf फ़ाइल में चिपकाएं.
    2. अपनी main_staging.tf फ़ाइल में, ये काम करें:
      • google_project रिसॉर्स ब्लॉक में, name एट्रिब्यूट, project-id एट्रिब्यूट, और (अगर आपनेTraform से पुष्टि करने की सुविधा सेट अप की है) billing_account एट्रिब्यूट को अपनी वैल्यू के साथ अपडेट करें.
      • google_firebase_web_app रिसॉर्स ब्लॉक में, display_name एट्रिब्यूट को अपनी वैल्यू से अपडेट करें.
      • google_firestore_database और google_app_engine_application रिसॉर्स ब्लॉक में, location_id एट्रिब्यूट को अपनी वैल्यू से अपडेट करें.
    main_staging.tf
    # 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"
    }
    
  4. नई "स्टेजिंग" सुविधा का प्रावधान करने के लिए, terraform apply चलाएं Firebase प्रोजेक्ट और इसके सभी संसाधन. साथ ही, इसकी सेवाएं चालू करती हैं.
  5. Firebase कंसोल में पहले की तरह जांच करके पुष्टि करें कि सब कुछ उम्मीद के मुताबिक प्रावधान और चालू किया गया है.

दूसरा विकल्प: for_each की मदद से कॉन्फ़िगरेशन का फिर से इस्तेमाल करना

अगर हर प्रोजेक्ट को किसी खास तरीके से अलग नहीं करना चाहिए और आपको सभी प्रोजेक्ट में एक साथ बदलाव करने हैं, तो इस विकल्प की मदद से कोड को फिर से इस्तेमाल किया जा सकता है. यह टेराफ़ॉर्म भाषा में, for_each मेटा-आर्ग्युमेंट का इस्तेमाल करता है.

  1. अपनी main.tf फ़ाइल खोलें.
  2. हर रिसॉर्स ब्लॉक में, जिसे कॉपी करना है उसमें for_each मेटा-आर्ग्यूमेंट जोड़ें. जैसे:

    main.tf
    # 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.
    
    आपको कोडलैब के इस कोडलैब के GitHub रिपॉज़िटरी में for_each मेटा-अर्गमेंट का इस्तेमाल करने वाली main.tf फ़ाइल का पूरा कॉन्फ़िगरेशन मिल सकता है:

    web/terraform-checkpoints/replicate-config/main-foreach.tf

    अगर आपको इस कॉन्फ़िगरेशन का इस्तेमाल करना है, तो पक्का करें कि ये काम किए जा रहे हों:
    1. main-foreach.tf से कॉन्फ़िगरेशन कॉपी करें और उसे अपनी main.tf फ़ाइल में चिपकाएं.
    2. अपनी main.tf फ़ाइल में, ये काम करें:
      • google_project रिसॉर्स ब्लॉक में, name एट्रिब्यूट, project-id एट्रिब्यूट, और (अगर आपनेTraform से पुष्टि करने की सुविधा सेट अप की है) billing_account एट्रिब्यूट को अपनी वैल्यू के साथ अपडेट करें.
      • google_firebase_web_app रिसॉर्स ब्लॉक में, display_name एट्रिब्यूट को अपनी वैल्यू से अपडेट करें.
      • google_firestore_database और google_app_engine_application रिसॉर्स ब्लॉक में, location_id एट्रिब्यूट को अपनी वैल्यू से अपडेट करें.
  3. इस कॉन्फ़िगरेशन को तुरंत लागू करने के बजाय, यहां दी गई कुछ चीज़ों को समझना और उन्हें ठीक करना ज़रूरी है. इसकी मदद से, यह जाना जा सकता है कि टेरेस मौजूदा इन्फ़्रास्ट्रक्चर के मुकाबले इस कॉन्फ़िगरेशन को कैसे समझता है.
    1. अगर आपने for_each का इस्तेमाल करने वाले इस कॉन्फ़िगरेशन को लागू किया है, तो संसाधन पते कुछ इस तरह दिखेंगे:
      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
      
    2. यह देखने के लिए terraform plan चलाएं कि मौजूदा स्थिति होने पर Turaform क्या कार्रवाई करेगा.

      आउटपुट में यह दिखाया जाना चाहिए कि टेराफ़ॉर्म, इस कोडलैब के पहले हिस्से में बनाया गया प्रोजेक्ट मिटा देगा और दो नए प्रोजेक्ट बनाएगा. ऐसा इसलिए होता है, क्योंकि Terraform को यह नहीं पता है कि google_project.default पते पर मौजूद प्रोजेक्ट, नए पते google_project.default["prod"] पर ले जाया गया है.
    3. इसे ठीक करने के लिए, terraform state mv निर्देश चलाएं:
      terraform state mv "google_project.default" "google_project.default[\"prod\"]"
      
    4. इसी तरह, अन्य सभी रिसॉर्स ब्लॉक को ठीक करने के लिए, अपनी main.tf फ़ाइल में google_firebase_project, google_firebase_web_app, और अन्य सभी रिसॉर्स ब्लॉक के लिए terraform state mv चलाएं.
    5. अब, अगर terraform plan को फिर से चलाया जाता है, तो इसे नहीं दिखाना चाहिए कि Teleraform, इस कोडलैब के पहले हिस्से में बनाया गया प्रोजेक्ट मिटा देगा.
  4. नई "स्टेजिंग" सुविधा का प्रावधान करने के लिए, terraform apply चलाएं Firebase प्रोजेक्ट और इसके सभी संसाधन. साथ ही, इसकी सेवाएं चालू करती हैं.
  5. Firebase कंसोल में पहले की तरह जांच करके पुष्टि करें कि सब कुछ उम्मीद के मुताबिक प्रावधान और चालू किया गया है.

12. बोनस स्टेप: अपने स्टेजिंग और प्रोडक्शन ऐप्लिकेशन डिप्लॉय करें

  1. अपने ऐप्लिकेशन के कोड बेस में, firebase-config.js को बदलें, ताकि आप अपने स्टेजिंग प्रोजेक्ट से Firebase कॉन्फ़िगरेशन का इस्तेमाल कर सकें.

    अपने Firebase कॉन्फ़िगरेशन को पाने और उसे अपने ऐप्लिकेशन में जोड़ने का तरीका याद रखने के लिए, इस कोडलैब का शुरुआती चरण देखें. इसके अलावा, अपने ऐप्लिकेशन में Firebase कॉन्फ़िगरेशन जोड़ें.
  2. अपने web डायरेक्ट्री के रूट में, अपने ऐप्लिकेशन को स्टेजिंग Firebase प्रोजेक्ट में डिप्लॉय करने के लिए, नीचे दिया गया कमांड चलाएं.
    firebase deploy --only hosting --project=<STAGING_PROJECT_ID>
    
  3. firebase deploy के आउटपुट में प्रिंट किए गए यूआरएल की मदद से, अपने स्टेजिंग ऐप्लिकेशन को ब्राउज़र में खोलें. साइन इन करने, मैसेज भेजने, और इमेज अपलोड करने की कोशिश करें.

    जब किसी Firebase प्रोजेक्ट में कोई ऐप्लिकेशन डिप्लॉय किया जाता है, तो वह Firebase के असली संसाधनों का इस्तेमाल करता है, न कि एम्युलेट किए गए संसाधनों का. अपने स्टेजिंग ऐप्लिकेशन के साथ इंटरैक्ट करने पर, आपको Firebase कंसोल के स्टेजिंग प्रोजेक्ट में डेटा और इमेज दिखेंगी.
  4. स्टेजिंग में अपने ऐप्लिकेशन की जांच करने के बाद, प्रोडक्शन प्रोजेक्ट के Firebase कॉन्फ़िगरेशन (इस कोडलैब में बनाया गया आपका पहला प्रोजेक्ट) का इस्तेमाल करने के लिए firebase-config.js को वापस बदलें.
  5. अपने ऐप्लिकेशन को अपने प्रोडक्शन Firebase प्रोजेक्ट पर डिप्लॉय करने के लिए, अपनी web डायरेक्ट्री के रूट में नीचे दिया गया कमांड चलाएं.
    firebase deploy --only hosting --project=<PRODUCTION_PROJECT_ID>
    
  6. firebase deploy के आउटपुट में प्रिंट किए गए यूआरएल से, अपना प्रोडक्शन ऐप्लिकेशन ब्राउज़र में खोलें. साइन इन करने, मैसेज भेजने, और इमेज अपलोड करने की कोशिश करें.

    आपको Firebase कंसोल में, अपने प्रोडक्शन प्रोजेक्ट में डेटा और इमेज दिखेंगी.
  7. इस कोडलैब के लिए दोनों ऐप्लिकेशन के साथ इंटरैक्ट करने के बाद, आपके पास Firebase को ऐप्लिकेशन इस्तेमाल करने से रोकने का विकल्प होता है. अपने हर प्रोजेक्ट के लिए यह कमांड चलाएं:
    firebase hosting:disable --project=<STAGING_PROJECT_ID>
    
    firebase hosting:disable --project=<PRODUCTION_PROJECT_ID>
    

13. बधाई हो!

आपने रीयल-टाइम चैट वेब ऐप्लिकेशन कॉन्फ़िगर करने के लिए Turaform का उपयोग किया है! इसके अलावा, आपने स्टेजिंग और प्रोडक्शन के लिए अलग-अलग Firebase प्रोजेक्ट बनाकर, डेवलपमेंट एनवायरमेंट के सबसे सही तरीके अपनाए हैं.

हमने इन विषयों के बारे में बताया

  • क्लाउड के संसाधनों को मैनेज करने के लिए, Teraform सीएलआई (CLI) का इस्तेमाल करना
  • Firebase प्रॉडक्ट को कॉन्फ़िगर करने के लिए Teleraform का इस्तेमाल करना (पुष्टि करना, Firestore, Cloud Storage, और सुरक्षा के नियम)
  • Firebase लोकल एम्युलेटर सुइट का इस्तेमाल करके, वेब ऐप्लिकेशन को स्थानीय तौर पर चलाना और उसकी जांच करना
  • वेब ऐप्लिकेशन में Firebase को इंपोर्ट करना
  • कई एनवायरमेंट में कॉन्फ़िगरेशन को कॉपी करने के लिए, टेरेस का इस्तेमाल करना

Firebase और Teraform के बारे में ज़्यादा जानकारी के लिए, हमारे दस्तावेज़ देखें. यहां आपको Tenraform सहायता वाले सभी Firebase प्रॉडक्ट की सूची और इस्तेमाल के सामान्य उदाहरणों के लिए, Tenraform कॉन्फ़िगरेशन के सैंपल के साथ-साथ समस्या का हल करने और अक्सर पूछे जाने वाले सवाल मिल सकते हैं.