Google Cloud के साथ इंटिग्रेट करना

Cloud Storage for Firebase को Google Cloud के साथ बेहतरीन तरीके से इंटिग्रेट किया गया है. Firebase SDK टूल, Cloud Storage फ़ाइलों को सीधे Google Cloud Storage बकेट में सेव करते हैं. साथ ही, आपके ऐप्लिकेशन के बढ़ने पर, Google Cloud की अन्य Google Cloud सेवाओं को इंटिग्रेट किया जा सकता है. जैसे, मैनेज की गई कंप्यूटिंग सेवाएं (App Engine या Cloud Functions) या मशीन लर्निंग एपीआई (Cloud Vision या Google Translate).

Firebase प्रोजेक्ट, असल में Google Cloud प्रोजेक्ट होता है. इसमें Firebase के लिए खास कॉन्फ़िगरेशन और सेवाएं चालू होती हैं. इसका मतलब है कि Cloud Storage बकेट को Cloud Storage for Firebase के साथ इस्तेमाल करने पर, उसे Google Cloud में ऐक्सेस किया जा सकता है. इसमें उसका कंसोल और उसके एपीआई भी शामिल हैं.

सेवा खातों से जुड़ी ज़रूरी बातें

Firebase, Google Cloud सेवा खातों का इस्तेमाल करके, उपयोगकर्ता के क्रेडेंशियल शेयर किए बिना सेवाएं चलाता है और उन्हें मैनेज करता है. Cloud Storage का इस्तेमाल करने वाला Firebase प्रोजेक्ट बनाते समय, आपको दिख सकता है कि आपके प्रोजेक्ट में पहले से ही एक सेवा खाता मौजूद है:Cloud Storageservice-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com ज़्यादा जानकारी के लिए, Firebase के सेवा खातों की खास जानकारी देखें.

Google Cloud Storage

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

यह ध्यान रखना ज़रूरी है कि इन अनुरोधों में, Google Cloud Storage ऐक्सेस कंट्रोल के विकल्पों का इस्तेमाल किया जाता है, न कि Firebase Authentication और Cloud Storage Security Rules का.

API

Firebase SDK टूल के अलावाCloud Storage, Cloud Storage बकेट में सेव किए गए डेटा को ऐक्सेस करने के कई अन्य तरीके भी हैं. यह इस बात पर निर्भर करता है कि आपको क्या करना है. अगर किसी सर्वर पर डेटा ऐक्सेस किया जा रहा है, तो हम सर्वर साइड लाइब्रेरी के साथ-साथ, JSON और S3 के साथ काम करने वाला XML RESTful API उपलब्ध कराते हैं. इसके अलावा, अगर आपको स्क्रिप्ट में बदलाव करने हैं या अन्य एडमिन टास्क करने हैं, तो हमारे पास एक कमांड लाइन टूल है, जो आपके काम आएगा.

Google Cloud सर्वर एसडीके

Google Cloud कई क्लाउड प्रॉडक्ट के लिए, बेहतरीन क्वालिटी वाले सर्वर एसडीके उपलब्ध कराता है, जिनमें Cloud Storage शामिल है. ये लाइब्रेरी Node.js, Java, Go, Python, PHP, और Ruby में उपलब्ध हैं.

इंस्टॉल करने के निर्देश, पुष्टि करने की प्रोसेस, और समस्याओं को हल करने के बारे में ज़्यादा जानकारी पाने के लिए, ऊपर दिए गए प्लैटफ़ॉर्म के हिसाब से बने दस्तावेज़ देखें.

Google Cloud Storage SDK के इस्तेमाल का उदाहरण यहां दिया गया है:

Node.js

    // Require gcloud
    var gcloud = require('google-cloud');

    // Enable Cloud Storage
    var gcs = gcloud.storage({
      projectId: 'grape-spaceship-123',
      keyFilename: '/path/to/keyfile.json'
    });

    // Reference an existing bucket.
    var bucket = gcs.bucket('my-existing-bucket');

    // Upload a local file to a new file to be created in your bucket.
    bucket.upload('/photos/zoo/zebra.jpg', function(err, file) {
      if (!err) {
        // "zebra.jpg" is now in your bucket.
      }
    });

    // Download a file from your bucket.
    bucket.file('giraffe.jpg').download({
      destination: '/photos/zoo/giraffe.jpg'
    }, function(err) {});
    

Java

    // Enable Cloud Storage
    Storage storage = StorageOptions.builder()
      .authCredentials(AuthCredentials.createForJson(new FileInputStream("/path/to/my/key.json"))
      .build()
      .service();

    // Upload a local file to a new file to be created in your bucket.
    InputStream uploadContent = ...
    BlobId blobId = BlobId.of("my-existing-bucket", "zebra.jpg");
    BlobInfo blobInfo = BlobInfo.builder(blobId).contentType("text/plain").build();
    Blob zebraBlob = storage.create(blobInfo, content);

    // Download a file from your bucket.
    Blob giraffeBlob = storage.get("my-existing-bucket", "giraffe.jpg", null);
    InputStream downloadContent = giraffeBlob.getInputStream();
    

Go

    // Enable Cloud Storage
    client, err := storage.NewClient(ctx, option.WithServiceAccountFile("path/to/keyfile.json"))
    if err != nil {
        log.Fatal(err)
    }

    // Download a file from your bucket.
    rc, err := client.Bucket("my-existing-bucket").Object("giraffe.jpg").NewReader(ctx)
    if err != nil {
        log.Fatal(err)
    }
    defer rc.Close()
    body, err := ioutil.ReadAll(rc)
    if err != nil {
        log.Fatal(err)
    }
    

Python

    # Import gcloud
    from google.cloud import storage

    # Enable Cloud Storage
    client = storage.Client()

    # Reference an existing bucket.
    bucket = client.get_bucket('my-existing-bucket')

    # Upload a local file to a new file to be created in your bucket.
    zebraBlob = bucket.get_blob('zebra.jpg')
    zebraBlob.upload_from_filename(filename='/photos/zoo/zebra.jpg')

    # Download a file from your bucket.
    giraffeBlob = bucket.get_blob('giraffe.jpg')
    giraffeBlob.download_as_string()
    

PHP

    // Require gcloud
    require 'vendor/autoload.php';
    use Google\Cloud\Storage\StorageClient;

    // Enable Cloud Storage
    $storage = new StorageClient([
        'projectId' => 'grape-spaceship-123'
    ]);

    // Reference an existing bucket.
    $bucket = $storage->bucket('my-existing-bucket');

    // Upload a file to the bucket.
    $bucket->upload(
        fopen('/photos/zoo/zebra.jpg', 'r')
    );

    // Download a file from your bucket.
    $object = $bucket->object('giraffe.jpg');
    $object->downloadToFile('/photos/zoo/giraffe.jpg');
    

Ruby

    # Require gcloud
    require "google/cloud"

    # Enable Cloud Storage
    gcloud = Google::Cloud.new "grape-spaceship-123", "/path/to/keyfile.json"
    storage = gcloud.storage

    # Reference an existing bucket.
    bucket = storage.bucket "my-existing-bucket"

    # Upload a file to the bucket.
    bucket.create_file "/photos/zoo/zebra.jpg", "zebra.jpg"

    # Download a file from your bucket.
    file = bucket.file "giraffe.jpg"
    file.download "/photos/zoo/#{file.name}"
    

REST API

अगर ऐसी भाषा का इस्तेमाल किया जा रहा है जिसके लिए क्लाइंट लाइब्रेरी उपलब्ध नहीं है, आपको ऐसा काम करना है जो क्लाइंट लाइब्रेरी नहीं करती हैं या आपके पास कोई पसंदीदा एचटीटीपी क्लाइंट है जिसका इस्तेमाल करना है, तो Google Cloud Storage दोनों के लिए एपीआई उपलब्ध कराता है: JSON और XML.

स्टोरेज डेटा ऐक्सेस करने वाले इन एपीआई के अलावा, Firebase प्रोजेक्ट में इस्तेमाल के लिए Cloud Storage बकेट को मैनेज करने के लिए, Cloud Storage for Firebase API का इस्तेमाल किया जा सकता है.

gsutil

gsutil एक कमांड लाइन टूल है, जो आपको Cloud Storage को सीधे ऐक्सेस करने की सुविधा देता है. gsutil का इस्तेमाल, बकेट और ऑब्जेक्ट मैनेजमेंट से जुड़े कई टास्क करने के लिए किया जा सकता है. जैसे:

  • ऑब्जेक्ट अपलोड करना, डाउनलोड करना, और मिटाना.
  • बकेट और ऑब्जेक्ट की सूची बनाना.
  • ऑब्जेक्ट को दूसरी जगह ले जाना, कॉपी करना, और उनका नाम बदलना.
  • ऑब्जेक्ट और बकेट के एसीएल में बदलाव करना.

gsutil की मदद से, अन्य बेहतर कार्रवाइयां भी की जा सकती हैं. जैसे, फ़ाइलों को एक डायरेक्ट्री से दूसरी डायरेक्ट्री में ले जाना या किसी खास जगह के नीचे मौजूद सभी फ़ाइलों को मिटाना.

सभी फ़ाइलों को एक रेफ़रंस से दूसरे रेफ़रंस में ले जाना उतना ही आसान है जितना कि:

gsutil mv gs://bucket/old/reference gs://bucket/new/reference

किसी रेफ़रंस के नीचे मौजूद सभी फ़ाइलों को बैच में मिटाना भी उतना ही आसान है:

# Delete all files under a path
gsutil rm -r gs://bucket/reference/to/delete

# Delete all the files in a bucket but not the bucket gsutil rm -r gs://bucket/**

# Delete all the files AND the bucket # Removing the default bucket will break the Firebase SDKs for Cloud Storage and is strongly discouraged gsutil rm -r gs://bucket

अनुरोध की दरें

Google Cloud Storage बहुत ज़्यादा स्केल की जा सकने वाली सेवा है. यह बहुत ज़्यादा अनुरोध की दरें हासिल करने के लिए, ऑटो-स्केलिंग टेक्नोलॉजी का इस्तेमाल करती है.

Google Cloud Storage मल्टी-टेनेंट सेवा है. इसका मतलब है कि उपयोगकर्ता, एक ही तरह के बुनियादी संसाधनों को शेयर करते हैं. इन शेयर किए गए संसाधनों का बेहतर तरीके से इस्तेमाल करने के लिए, बकेट की शुरुआती आई/ओ क्षमता होती है.

अपने ऐप्लिकेशन में Cloud Storage for Firebase को इंटिग्रेट करने की योजना बनाते समय, इस बारे में सोचें कि आपके ऐप्लिकेशन को अच्छी परफ़ॉर्मेंस के लिए, अनुरोध की कम से कम कितनी दर की ज़रूरत है. साथ ही, अनुरोधों को बेहतर तरीके से कैसे किया जाए. अनुरोध की दरों के बारे में दिशा-निर्देश देखें. खास तौर पर, अनुरोध की दरों को बढ़ाने के बारे में दिशा-निर्देश.

ऑब्जेक्ट वर्शनिंग

क्या आपने कभी गलती से कुछ मिटाया है और उसका बैकअप नहीं लिया है? Google Cloud Storage ऑब्जेक्ट वर्शनिंग की सुविधा देता है. इससे आपके डेटा का बैकअप अपने-आप लिया जाता है और उन बैकअप से डेटा को वापस लाया जा सकता है. ऑब्जेक्ट वर्शनिंग को चालू करने के लिए, gsutil versioning set कमांड का इस्तेमाल किया जा सकता है:

gsutil versioning set on gs://<your-cloud-storage-bucket>

Cloud Storage हमेशा सबसे नए वर्शन को चुनता है. इसलिए, अगर आपको किसी ऑब्जेक्ट को वापस लाना है, तो आपको ऊपर दिए गए किसी अन्य एपीआई या टूल का इस्तेमाल करके, मनचाहे ऑब्जेक्ट को सबसे नया वर्शन के तौर पर सेट करना होगा.

ऑब्जेक्ट लाइफसाइकल मैनेजमेंट

कई ऐप्लिकेशन के लिए, पुरानी फ़ाइलों को अपने-आप संग्रहित या मिटाने की सुविधा काम की होती है. अच्छी बात यह है कि Google Cloud Storage की मदद से ऑब्जेक्ट लाइफ़साइकल मैनेजमेंट की सुविधा मिलती है, जिससे, तय समय के बाद ऑब्जेक्ट को मिटाया या संग्रहित किया जा सकता है.

मान लें कि आपके पास फ़ोटो शेयर करने का कोई ऐप्लिकेशन है और आपको सभी फ़ोटो एक दिन के अंदर मिटाने हैं. ऑब्जेक्ट लाइफसाइकल की नीति इस तरह सेट अप की जा सकती है:

// lifecycle.json
{
  "lifecycle": {
    "rule":
    [
      {
        "action": {"type": "Delete"},
        "condition": {"age": 1}
      }
    ]
  }
}

इसे gsutil lifecycle set कमांड का इस्तेमाल करके डिप्लॉय करें:

gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>

ध्यान दें कि यह बकेट में मौजूद सभी फ़ाइलों पर लागू होता है. इसलिए, अगर आपको उपयोगकर्ताओं के अहम बैकअप को लंबे समय तक सेव करना है और रोज़ाना मिटाई जाने वाली फ़ोटो को भी सेव करना है, तो आपके पास दो अलग-अलग बकेट का इस्तेमाल करने या gsutil या अपने सर्वर की मदद से, फ़ाइलों को मैन्युअल तरीके से मिटाने का विकल्प है.

Google Cloud Functions (बीटा वर्शन)

Google Cloud Functions, इवेंट पर आधारित, एसिंक्रोनस कंप्यूटिंग का एक हल्का-फुल्का समाधान है. इसकी मदद से, छोटे-छोटे, एक ही मकसद के लिए बनाए गए फ़ंक्शन बनाए जा सकते हैं. ये फ़ंक्शन, सर्वर या रनटाइम एनवायरमेंट को मैनेज किए बिना, इवेंट के हिसाब से काम करते हैं. इन फ़ंक्शन का इस्तेमाल, वीडियो को ट्रांसकोड करने, मशीन लर्निंग का इस्तेमाल करके इमेज को कैटगरी में बांटने या Firebase Realtime Database के साथ मेटाडेटा सिंक करने के लिए किया जा सकता है. App Engine की तुलना में, Cloud Functions में कम ओवरहेड होता है. इसलिए, Cloud Storage में होने वाले बदलावों पर तुरंत प्रतिक्रिया देने के लिए, Cloud Functions सबसे तेज़ तरीका है.

Google Cloud Vision API

Google Cloud Vision API की मदद से, डेवलपर किसी इमेज के कॉन्टेंट को समझ सकते हैं. इसके लिए, मशीन लर्निंग के बेहतर मॉडल को इस्तेमाल में आसान एपीआई में शामिल किया जाता है. यह इमेज को हज़ारों कैटगरी में बांटता है, इमेज में मौजूद अलग-अलग ऑब्जेक्ट और चेहरों का पता लगाता है, इमेज में मौजूद प्रिंट किए गए शब्दों को ढूंढता है और उन्हें पढ़ता है, आपत्तिजनक कॉन्टेंट की पहचान करता है, और इमेज के सेंटीमेंट का विश्लेषण भी करता है.

Google Cloud Speech API

Vision API की तरह, Google Cloud Speech API की मदद से, डेवलपर Cloud Storage में सेव की गई किसी ऑडियो फ़ाइल से टेक्स्ट निकाल सकते हैं. यह एपीआई, 80 से ज़्यादा भाषाओं और उनके अलग-अलग वर्शन को पहचानता है, ताकि दुनिया भर के उपयोगकर्ताओं को मदद मिल सके. Google Cloud Natural Language API के साथ मिलकर, डेवलपर रॉ टेक्स्ट निकाल सकते हैं और उस टेक्स्ट का मतलब समझ सकते हैं. अगर दुनिया भर के दर्शकों के लिए कॉन्टेंट उपलब्ध कराना है, तो इसे Google Translate API के साथ जोड़कर, टेक्स्ट को 90 से ज़्यादा भाषाओं में अनुवाद किया जा सकता है.

Google App Engine

Cloud Storage for Firebase डिफ़ॉल्ट बकेट के लिए दो अलग-अलग नेमिंग फ़ॉर्मैट का इस्तेमाल करता है यह इस बात पर निर्भर करता है कि आपने बकेट कब बनाई:

  • सितंबर 2024 के बाद बनाई गई डिफ़ॉल्ट बकेट: *.firebasestorage.app डिफ़ॉल्ट बकेट, Google App Engine से अलग होती हैं.
  • विरासत में मिली डिफ़ॉल्ट बकेट: *.appspot.com डिफ़ॉल्ट बकेट, Google App Engine के साथ शेयर की जाती हैं.

Google App Engine एक "प्लेटफ़ॉर्म ऐज़ अ सर्विस" है. यह मिलने वाले ट्रैफ़िक के हिसाब से, बैकएंड लॉजिक को अपने-आप स्केल करता है. सिर्फ़ अपना बैकएंड कोड अपलोड करें और Google आपके ऐप्लिकेशन की उपलब्धता को मैनेज करेगा. आपको सर्वर को प्रोविज़न या मेंटेन करने की ज़रूरत नहीं है. App Engine आपके Firebase ऐप्लिकेशन में प्रोसेसिंग पावर या भरोसेमंद एक्ज़ीक्यूशन जोड़ने का एक तेज़ और आसान तरीका है.

विरासत में मिला App Engine इंटिग्रेशन

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

App Engine के Java, Python, और Go स्टैंडर्ड एनवायरमेंट में, App Engine App Engine Images API (Java | Python | Go) शामिल है. इसकी मदद से, इमेज का साइज़ बदला जा सकता है, उसे रोटेट किया जा सकता है, फ़्लिप किया जा सकता है, और क्रॉप किया जा सकता है. साथ ही, इमेज सर्विंग यूआरएल भी वापस लाया जा सकता है. इससे क्लाइंट साइड ट्रांसफ़ॉर्मेशन किया जा सकता है. यह Cloudinary और Imgix की तरह काम करता है.

शेयर की गई बकेट से जुड़ी ज़रूरी बातें

अगर विरासत में मिली *.appspot.com डिफ़ॉल्ट बकेट का इस्तेमाल किया जा रहा है, तो:

  • Firebase Security Rules और App Engine फ़ाइलें: App Engine का इस्तेमाल करके अपलोड की गई फ़ाइलें, एक ही बकेट शेयर करती हैं और उन पर सुरक्षा से जुड़े एक ही कॉन्फ़िगरेशन लागू होते हैं. अगर Firebase Security Rules को सार्वजनिक ऐक्सेस के लिए कॉन्फ़िगर किया जाता है, तो नई अपलोड की गई App Engine फ़ाइलें भी सार्वजनिक तौर पर ऐक्सेस की जा सकेंगी.

  • अनुमतियां सेट करना: Firebase में मौजूदा Google Cloud प्रोजेक्ट इंपोर्ट करते समय, आपको अपने ऑब्जेक्ट पर डिफ़ॉल्ट ऐक्सेस कंट्रोल सेट करना पड़ सकता है, ताकि Firebase उन्हें ऐक्सेस कर सके. gsutil का इस्तेमाल करके, यह कमांड चलाएं:

    gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME

Cloud Storage और App Engine से जुड़ी समस्याएं

दो ऐसे मामले हैं जिनमें App Engine ऐप्लिकेशन को इंपोर्ट नहीं किया जा सकता:

  • प्रोजेक्ट में, पहले App Engine Datastore Master/Slave ऐप्लिकेशन मौजूद था.

  • प्रोजेक्ट में, डोमेन प्रीफ़िक्स वाला प्रोजेक्ट आईडी है. उदाहरण के लिए: domain.com:project-1234.

इनमें से किसी भी मामले में, प्रोजेक्ट में Cloud Storage for Firebase का इस्तेमाल नहीं किया जा सकेगा. इसलिए, का इस्तेमाल करने के लिए, आपको नया Firebase प्रोजेक्ट बनाना चाहिए. Cloud Storage. अगर आपके कोई सवाल हैं, तो Firebase की सहायता टीम से संपर्क करें.