একটি Firebase প্রজেক্ট আসলে একটি Google Cloud প্রজেক্ট, যার জন্য অতিরিক্ত Firebase-নির্দিষ্ট কনফিগারেশন এবং পরিষেবাগুলো সক্রিয় করা থাকে। এর মানে হলো, Cloud Storage for Firebase সাথে আপনি যে প্রতিটি Cloud Storage বাকেট ব্যবহার করেন, তা Google Cloud এ অ্যাক্সেসযোগ্য (এর কনসোল এবং API-গুলো সহ)।
পরিষেবা অ্যাকাউন্টের জন্য বিবেচ্য বিষয়সমূহ
ফায়ারবেস ব্যবহারকারীর পরিচয়পত্র শেয়ার না করেই পরিষেবাগুলি পরিচালনা ও ব্যবস্থাপনার জন্য Google Cloud পরিষেবা অ্যাকাউন্ট ব্যবহার করে। আপনি যখন Cloud Storage ব্যবহার করে এমন একটি ফায়ারবেস প্রজেক্ট তৈরি করেন, তখন আপনি লক্ষ্য করতে পারেন যে আপনার প্রজেক্টে একটি সংশ্লিষ্ট পরিষেবা অ্যাকাউন্ট আগে থেকেই উপলব্ধ আছে: আরও তথ্যের জন্য, ফায়ারবেস পরিষেবা অ্যাকাউন্টগুলির ওভারভিউ দেখুন।
Google Cloud Storage
আপনি Cloud Storage জন্য Firebase এসডিকে-এর মাধ্যমে আপলোড করা ফাইলগুলি অ্যাক্সেস করতে Google Cloud Storage এপিআই ব্যবহার করতে পারেন, বিশেষ করে আরও জটিল অপারেশন সম্পাদন করার জন্য, যেমন একটি ফাইল কপি বা মুভ করা, অথবা কোনো রেফারেন্সে উপলব্ধ সমস্ত ফাইলের তালিকা দেখা।
এটা মনে রাখা গুরুত্বপূর্ণ যে, এই অনুরোধগুলো Firebase Authentication এবং Cloud Storage Security Rules পরিবর্তে Google Cloud Storage অ্যাক্সেস কন্ট্রোল অপশন ব্যবহার করে।
এপিআই
Cloud Storage জন্য Firebase এসডিকে ছাড়াও, আপনি কী করতে চান তার উপর নির্ভর করে আপনার Cloud Storage বাকেটে সংরক্ষিত ডেটা অ্যাক্সেস করার আরও বেশ কিছু উপায় রয়েছে। আপনি যদি কোনো সার্ভারের ডেটা অ্যাক্সেস করেন, তাহলে আমরা সার্ভার সাইড লাইব্রেরি এবং একটি JSON ও S3 সামঞ্জস্যপূর্ণ XML RESTful API অফার করি। অথবা, আপনার যদি স্ক্রিপ্টের মাধ্যমে পরিবর্তন করা বা অন্যান্য প্রশাসনিক কাজ সম্পাদন করার প্রয়োজন হয়, তাহলে আমাদের কাছে একটি কমান্ড লাইন টুল রয়েছে যা বেশ কাজে আসবে।
Google Cloud সার্ভার এসডিকে
Google Cloud , Cloud Storage সহ বেশ কিছু ক্লাউড প্রোডাক্টের জন্য উন্নত মানের সার্ভার এসডিকে (SDK) প্রদান করে। এই লাইব্রেরিগুলো Node.js , Java , go , Python , PHP এবং Ruby- তে পাওয়া যায়।
ইনস্টলেশন নির্দেশাবলী, প্রমাণীকরণ এবং সমস্যা সমাধান সহ আরও তথ্যের জন্য, উপরে লিঙ্ক করা প্ল্যাটফর্ম-নির্দিষ্ট ডকুমেন্টেশনটি দেখুন।
Google Cloud Storage এসডিকে-এর ব্যবহারের একটি উদাহরণ নিচে দেখানো হলো:
নোড.জেএস
// 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) {});
জাভা
// 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) }
পাইথন
# 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()
পিএইচপি
// 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');
রুবি
# 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
যদি আপনি এমন কোনো ভাষা ব্যবহার করেন যার কোনো ক্লায়েন্ট লাইব্রেরি নেই, এমন কিছু করতে চান যা ক্লায়েন্ট লাইব্রেরিগুলো করতে পারে না, অথবা আপনার পছন্দের কোনো HTTP ক্লায়েন্ট থাকে যা আপনি ব্যবহার করতে চান, Google Cloud Storage JSON এবং XML উভয়ের জন্যই API প্রদান করে।
এই স্টোরেজ ডেটা অ্যাক্সেস API-গুলো ছাড়াও, Firebase প্রোজেক্টে ব্যবহারের জন্য ক্লাউড স্টোরেজ বাকেটগুলো পরিচালনা করতে আপনি Cloud Storage for Firebase 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 ক্যাপাসিটি থাকে।
আপনার অ্যাপে Cloud Storage for Firebase ইন্টিগ্রেট করার পরিকল্পনা করার সময়, ভালো পারফরম্যান্সের জন্য আপনার অ্যাপের প্রয়োজনীয় ন্যূনতম রিকোয়েস্ট রেট এবং দক্ষতার সাথে রিকোয়েস্ট পাঠানোর বিষয়ে চিন্তা করুন। রিকোয়েস্ট রেট , এবং বিশেষ করে রিকোয়েস্ট রেট ধীরে ধীরে বাড়ানোর বিষয়ে নির্দেশিকাগুলো পর্যালোচনা করুন।
অবজেক্ট ভার্সনিং
আপনি কি কখনও ভুলবশত কিছু ডিলিট করে ফেলেছেন এবং আপনার কাছে কোনো ব্যাকআপ ছিল না? Google Cloud Storage অবজেক্ট ভার্সনিং সমর্থন করে, যা আপনার ডেটার স্বয়ংক্রিয় ব্যাকআপ এবং সেই ব্যাকআপ থেকে তা পুনরুদ্ধার করার একটি উপায় প্রদান করে। আপনি gsutil versioning set কমান্ডটি ব্যবহার করে অবজেক্ট ভার্সনিং সক্রিয় করতে পারেন:
gsutil versioning set on gs://<your-cloud-storage-bucket>
Cloud Storage সর্বদা সর্বশেষ সংস্করণটি ব্যবহার করে, তাই আপনি যদি কোনো অবজেক্ট পুনরুদ্ধার করতে চান, তবে আপনাকে উপরের অন্য কোনো API বা টুল ব্যবহার করে কাঙ্ক্ষিত অবজেক্টটিকে সর্বশেষ হিসেবে সেট করতে হবে।
অবজেক্ট লাইফসাইকেল ম্যানেজমেন্ট
পুরোনো ফাইল স্বয়ংক্রিয়ভাবে আর্কাইভ বা ডিলিট করার ক্ষমতা অনেক অ্যাপ্লিকেশনের জন্য একটি দরকারি ফিচার। সৌভাগ্যবশত, 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 বা আপনার নিজের সার্ভার দিয়ে ম্যানুয়ালি ডিলিট করতে পারেন।
গুগল ক্লাউড ফাংশন (বিটা)
গুগল ক্লাউড ফাংশনস হলো একটি লাইটওয়েট, ইভেন্ট-ভিত্তিক, অ্যাসিঙ্ক্রোনাস কম্পিউট সলিউশন যা আপনাকে সার্ভার বা রানটাইম এনভায়রনমেন্ট পরিচালনার প্রয়োজন ছাড়াই ইভেন্টের প্রতিক্রিয়া জানাতে ছোট, একক-উদ্দেশ্যমূলক ফাংশন তৈরি করার সুযোগ দেয়। এই ফাংশনগুলো ভিডিও ট্রান্সকোডিং, মেশিন লার্নিং ব্যবহার করে ছবি শ্রেণীবদ্ধকরণ, অথবা Firebase Realtime Database সাথে মেটাডেটা সিঙ্ক করার জন্য ব্যবহার করা যেতে পারে। App Engine চেয়েও কম ওভারহেড থাকায়, Cloud Storage পরিবর্তনগুলোতে প্রতিক্রিয়া জানানোর জন্য ক্লাউড ফাংশনস হলো দ্রুততম উপায়।
গুগল ক্লাউড ভিশন এপিআই
গুগল ক্লাউড ভিশন এপিআই শক্তিশালী মেশিন লার্নিং মডেলগুলোকে একটি সহজে ব্যবহারযোগ্য এপিআই-এর মধ্যে অন্তর্ভুক্ত করে ডেভেলপারদের একটি ছবির বিষয়বস্তু বুঝতে সক্ষম করে। এটি দ্রুত ছবিকে হাজার হাজার ক্যাটাগরিতে ভাগ করে, ছবির মধ্যে থাকা স্বতন্ত্র বস্তু ও মুখমণ্ডল শনাক্ত করে, ছবির মধ্যে থাকা মুদ্রিত শব্দ খুঁজে বের করে ও পড়ে, আপত্তিকর বিষয়বস্তু শনাক্ত করে এবং এমনকি ছবির সেন্টিমেন্ট অ্যানালাইসিসও প্রদান করে।
গুগল ক্লাউড স্পিচ এপিআই
ভিশন এপিআই-এর মতোই, গুগল ক্লাউড স্পিচ এপিআই ডেভেলপারদের Cloud Storage সংরক্ষিত একটি অডিও ফাইল থেকে টেক্সট বের করতে সক্ষম করে। এই এপিআই আপনার বিশ্বব্যাপী ব্যবহারকারীদের সমর্থন করার জন্য ৮০টিরও বেশি ভাষা এবং এর বিভিন্ন রূপ শনাক্ত করতে পারে। গুগল ক্লাউড ন্যাচারাল ল্যাঙ্গুয়েজ এপিআই- এর সাথে একত্রিত করলে, ডেভেলপাররা মূল টেক্সট বের করার পাশাপাশি সেই টেক্সট থেকে অর্থও অনুমান করতে পারেন। আর যদি বিশ্বব্যাপী দর্শকের প্রয়োজন হয়, তবে টেক্সটটিকে ৯০টিরও বেশি ভাষায় অনুবাদ করার জন্য এটিকে গুগল ট্রান্সলেট এপিআই-এর সাথে যুক্ত করুন।
Google App Engine
Google App Engine হলো একটি "প্ল্যাটফর্ম অ্যাজ এ সার্ভিস" যা প্রাপ্ত ট্র্যাফিকের পরিমাণের প্রতিক্রিয়ায় স্বয়ংক্রিয়ভাবে ব্যাকএন্ড লজিককে স্কেল করে। শুধু আপনার ব্যাকএন্ড কোড আপলোড করুন এবং গুগল আপনার অ্যাপের প্রাপ্যতা পরিচালনা করবে; এর জন্য আপনাকে কোনো সার্ভার প্রোভিশন বা রক্ষণাবেক্ষণ করতে হবে না। আপনার ফায়ারবেস অ্যাপ্লিকেশনে অতিরিক্ত প্রসেসিং পাওয়ার বা ট্রাস্টেড এক্সিকিউশন যোগ করার জন্য App Engine একটি দ্রুত এবং সহজ উপায়।
আপনার যদি নামের ফরম্যাট সহ একটি ডিফল্ট Cloud Storage বাকেট থাকেPROJECT_ID .appspot.com হলে, এটি আপনার প্রোজেক্টের একটি App Engine অ্যাপের সাথে স্বয়ংক্রিয়ভাবে শেয়ার হয়ে যায়। এর মানে হলো, আপনি যদি একটি App Engine অ্যাপ বিল্ড করেন, তবে সেই বাকেট এবং App Engine মধ্যে ডেটা শেয়ার করার জন্য আপনি বিল্ট-ইন App Engine API-গুলো ব্যবহার করতে পারবেন। এটি অডিও এনকোডিং, ভিডিও ট্রান্সকোডিং, এবং ইমেজ ট্রান্সফরমেশনের পাশাপাশি অন্যান্য কম্পিউটেশন-ইনটেনসিভ ব্যাকগ্রাউন্ড প্রসেসিংয়ের জন্য উপযোগী।
App Engine জাভা, পাইথন এবং গো স্ট্যান্ডার্ড এনভায়রনমেন্টগুলোতে App Engine ইমেজ এপিআই ( জাভা | পাইথন | গো ) অন্তর্ভুক্ত রয়েছে, যা একটি ছবির আকার পরিবর্তন, ঘোরানো, ফ্লিপ এবং ক্রপ করতে পারে। এছাড়াও এটি একটি ইমেজ সার্ভিং ইউআরএল রিটার্ন করে, যা ক্লাউডিনারি এবং ইমজিক্সের মতো ক্লায়েন্ট-সাইড ট্রান্সফরমেশনের সুযোগ দেয়।
বিদ্যমান কোনো Google Cloud প্রজেক্ট ফায়ারবেসে ইম্পোর্ট করার সময়, যদি আপনি বিদ্যমান কোনো App Engine অবজেক্ট ফায়ারবেসে উপলব্ধ করতে চান, তাহলে gsutil ব্যবহার করে নিম্নলিখিত কমান্ডটি চালিয়ে আপনার অবজেক্টগুলিতে ডিফল্ট অ্যাক্সেস কন্ট্রোল সেট করতে হবে, যাতে ফায়ারবেস সেগুলি অ্যাক্সেস করতে পারে:
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 অ্যাপ ইম্পোর্ট করতে পারবেন না:
- প্রকল্পটিতে একটি প্রাক্তন App Engine Datastore মাস্টার/স্লেভ অ্যাপ রয়েছে।
- প্রকল্পটির একটি ডোমেইন প্রিফিক্সযুক্ত প্রজেক্ট আইডি রয়েছে, উদাহরণস্বরূপ:
domain.com:project-1234।
এই উভয় ক্ষেত্রেই, প্রজেক্টটি Cloud Storage for Firebase সাপোর্ট করবে না, এবং Cloud Storage ব্যবহার করার জন্য আপনাকে একটি নতুন ফায়ারবেস প্রজেক্ট তৈরি করতে হবে। সাহায্যের জন্য সাপোর্টে যোগাযোগ করুন ।