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

Cloud Storage for Firebase को Google Cloud के साथ पूरी तरह इंटिग्रेट किया गया है. Cloud Storage के लिए Firebase SDK टूल, फ़ाइलों को सीधे 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 प्रोजेक्ट बनाना होगा. सहायता टीम से संपर्क करें ताकि हम आपकी मदद कर सकें.