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

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

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

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

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

Google Cloud Storage

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

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

API

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

Google Cloud सर्वर SDK

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 और एक्सएमएल, दोनों के लिए एपीआई की सुविधा देता है.

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

gsutil

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

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

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 एक मल्टी-टेनेंट सेवा है, जिसका मतलब है कि उपयोगकर्ता बुनियादी संसाधनों का एक ही सेट शेयर करते हैं. इन शेयर किए गए संसाधनों का सबसे अच्छा इस्तेमाल करने के लिए, बकेट की शुरुआती IO क्षमता होती है.

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

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

क्या आपने कभी गलती से कुछ मिटा दिया है और उसका बैकअप नहीं लिया है? 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 या अपने सर्वर की मदद से मैन्युअल तरीके से डेटा मिटाना चाहें.

App Engine

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

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

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

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

gsutil -m acl ch -r -u service-<project number;gt@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://<your-cloud-storage-bucket>

ज्ञात समस्याएं

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

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

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

Google Cloud Functions (बीटा)

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

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 के साथ जोड़ें.