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

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

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

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

सेवा खातों के लिए ध्यान रखने वाली बातें

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

Google Cloud Storage

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

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

API

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

Google Cloud सर्वर SDK टूल

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

स्टोरेज डेटा ऐक्सेस करने वाले इन एपीआई के अलावा, 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 में होने वाले बदलावों पर तेज़ी से प्रतिक्रिया देने का सबसे अच्छा तरीका है.

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 के साथ इस्तेमाल करने पर, डेवलपर रॉ टेक्स्ट को निकाल सकते हैं और उस टेक्स्ट का मतलब समझ सकते हैं. अगर आपको दुनिया भर के दर्शकों तक पहुंचना है, तो टेक्स्ट को 90 से ज़्यादा भाषाओं में अनुवाद करने के लिए, इसे Google Translate API के साथ जोड़ें.

Google App Engine

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

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

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

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

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

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

अगर आपके पास नाम के फ़ॉर्मैट के तौर पर *.appspot.com वाली डिफ़ॉल्ट Cloud Storage बकेट है, तो आपके प्रोजेक्ट में एक ऐसा 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 का इस्तेमाल करने के लिए, आपको नया Firebase प्रोजेक्ट बनाना होगा. सहायता टीम से संपर्क करें, ताकि हम आपकी मदद कर सकें.