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

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

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

Google Cloud के साथ इंटिग्रेट करने के लिए, पे-ऐज़-यू-गो ब्लेज़ प्लान पर Firebase प्रोजेक्ट होना ज़रूरी है. साथ ही, मौजूदा Google Cloud बकेट इंपोर्ट करने के लिए भी यह ज़रूरी है.Cloud Storage

सेवा खातों के लिए ज़रूरी बातें

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

Google Cloud Storage

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

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

API

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

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

Google Cloud, कई क्लाउड प्रॉडक्ट के लिए अच्छी क्वालिटी वाले सर्वर SDK टूल उपलब्ध कराता है. इनमें 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();
    

शुरू करें

    // 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 के साथ मेटाडेटा सिंक करने के लिए किया जा सकता है. Cloud Functions, App Engine की तुलना में कम ओवरहेड के साथ काम करता है. साथ ही, Cloud Storage में होने वाले बदलावों पर तुरंत प्रतिक्रिया देने का सबसे तेज़ तरीका है.

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

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

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

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

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

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

Firebase Security Rules और App Engine फ़ाइलों के लिए ज़रूरी बातें

अगर आपके पास Cloud Storage बकेट है और उसका नाम *.appspot.com फ़ॉर्मैट में है, तो आपके प्रोजेक्ट में एक App Engine ऐप्लिकेशन भी होगा. यह ऐप्लिकेशन, उस बकेट को शेयर करता है.

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

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

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

  1. इस प्रोजेक्ट में, पहले इस्तेमाल किया गया App Engine Datastore मास्टर/स्लेव ऐप्लिकेशन है.
  2. प्रोजेक्ट में, डोमेन के नाम से शुरू होने वाला प्रोजेक्ट आईडी है. उदाहरण के लिए: domain.com:project-1234.

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