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

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

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

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

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

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

  • प्रोजेक्ट में, App Engine Datastore मास्टर/स्लेव ऐप्लिकेशन शामिल है.

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

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