Project Firebase sebenarnya adalah project Google Cloud yang memiliki konfigurasi dan layanan khusus Firebase tambahan yang diaktifkan. Artinya, setiap bucket Cloud Storage yang Anda gunakan dengan Cloud Storage for Firebase dapat diakses di Google Cloud (termasuk konsol dan API-nya).
Mengintegrasikan dengan Google Cloud, termasuk mengimpor bucket Cloud Storage yang ada, memerlukan project Firebase dengan paket harga Blaze bayar sesuai penggunaan.
Pertimbangan untuk akun layanan
Firebase menggunakan akun layanan Google Cloud untuk mengoperasikan dan mengelola layanan tanpa membagikan kredensial pengguna. Ketika membuat project Firebase yang menggunakan Cloud Storage, Anda mungkin melihat bahwa akun layanan yang sesuai sudah tersedia di project Anda:
.
Untuk mengetahui informasi selengkapnya, lihat
Ringkasan akun layanan Firebase.
Google Cloud Storage
Anda dapat menggunakan Google Cloud Storage API untuk mengakses file yang diupload melalui Firebase SDK untuk Cloud Storage, terutama untuk melakukan operasi yang lebih kompleks, seperti menyalin atau memindahkan file, atau mencantumkan semua file yang tersedia ke referensi.
Penting untuk diperhatikan bahwa permintaan ini menggunakan opsi kontrol akses Google Cloud Storage, bukan Firebase Authentication dan Cloud Storage Security Rules.
API
Selain Firebase SDK untuk Cloud Storage, ada sejumlah cara lain untuk mengakses data yang disimpan di bucket Cloud Storage, bergantung pada hal yang ingin Anda lakukan. Jika Anda mengakses data di server, kami menawarkan library sisi server, serta JSON
dan XML
RESTful API yang kompatibel dengan S3, atau jika Anda perlu membuat skrip perubahan atau melakukan tugas administratif lainnya, kami memiliki alat command line yang akan berguna.
SDK server Google Cloud
Google Cloud menawarkan SDK server berkualitas tinggi untuk sejumlah produk cloud, termasuk Cloud Storage. Library ini tersedia di Node.js, Java, go, Python, PHP, dan Ruby.
Untuk mengetahui informasi lebih lanjut, termasuk petunjuk instal, autentikasi, dan pemecahan masalah, baca dokumentasi khusus platform yang ditautkan di atas.
Contoh penggunaan untuk Google Cloud Storage SDK ditunjukkan di bawah ini:
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();
Go
// 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
Jika Anda menggunakan bahasa tanpa library klien, ingin melakukan sesuatu yang tidak dilakukan library klien, atau hanya memiliki klien HTTP favorit yang ingin Anda gunakan, Google Cloud Storage menawarkan API untuk JSON dan XML.
Selain API akses data penyimpanan ini, untuk mengelola bucket Cloud Storage yang akan digunakan dalam project Firebase, Anda dapat menggunakan Cloud Storage for Firebase API.
gsutil
gsutil
adalah alat command line yang memberi Anda akses langsung ke Cloud Storage. Anda dapat menggunakan gsutil
untuk melakukan berbagai tugas pengelolaan bucket dan objek, termasuk:
- Mengupload, mendownload, dan menghapus objek.
- Mencantumkan bucket dan objek.
- Memindahkan, menyalin, dan mengganti nama objek.
- Mengedit ACL objek dan bucket.
gsutil
dapat dipanggil untuk melakukan operasi lanjutan lain, seperti memindahkan file dari satu
direktori ke direktori lain, atau menghapus semua file di bawah lokasi tertentu.
Memindahkan semua file dari satu referensi ke referensi lain dapat dilakukan semudah:
gsutil mv gs://bucket/old/reference gs://bucket/new/reference
Menghapus sekaligus semua file di bawah referensi sama intuitifnya:
# 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
Rasio Permintaan
Google Cloud Storage adalah layanan yang sangat skalabel, yang menggunakan teknologi penskalaan otomatis untuk mencapai rasio permintaan yang sangat tinggi.
Google Cloud Storage adalah layanan multi-tenant, yang berarti pengguna memiliki set resource dasar yang sama. Untuk mengoptimalkan penggunaan resource bersama ini, bucket memiliki kapasitas IO awal.
Ketika berencana mengintegrasikan Cloud Storage for Firebase ke aplikasi, pikirkan rasio permintaan minimum yang diperlukan aplikasi untuk mendapatkan performa yang baik dan membuat permintaan secara efisien. Tinjau panduan tentang rasio permintaan, dan terutama meningkatkan rasio permintaan.
Pembuatan Versi Objek
Pernah menghapus sesuatu secara tidak disengaja dan tidak memiliki backup-nya?
Google Cloud Storage mendukung
Pembuatan Versi Objek,
yang menyediakan cara otomatis untuk mencadangkan data Anda, dan memulihkan data dari
cadangan tersebut. Anda dapat mengaktifkan Pembuatan Versi Objek menggunakan perintah gsutil
versioning set
:
gsutil versioning set on gs://<your-cloud-storage-bucket>
Cloud Storage selalu memilih versi terbaru. Jadi, jika ingin memulihkan objek, Anda harus menggunakan salah satu API lain atau alat di atas untuk menyetel objek yang diinginkan sebagai versi terbaru.
Object Lifecycle Management
Memiliki kemampuan mengarsipkan dan menghapus file usang secara otomatis adalah fitur yang berguna bagi banyak aplikasi. Untungnya, Google Cloud Storage menyediakan Object Lifecycle Management, yang dapat digunakan untuk menghapus atau mengarsipkan objek setelah waktu tertentu.
Bayangkan sebuah aplikasi berbagi foto, dan Anda ingin menghapus semua foto dalam sehari. Anda dapat menyiapkan kebijakan siklus proses objek sebagai berikut:
// lifecycle.json { "lifecycle": { "rule": [ { "action": {"type": "Delete"}, "condition": {"age": 1} } ] } }
Dan men-deploy-nya menggunakan perintah gsutil
lifecycle set
:
gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>
Perhatikan bahwa ini berlaku untuk semua file dalam bucket, sehingga jika
Anda menyimpan cadangan data pengguna penting yang ingin Anda simpan untuk waktu yang lama beserta foto, Anda dapat menggunakan dua bucket terpisah atau melakukan penghapusan secara manual dengan gsutil
atau server Anda sendiri.
Google Cloud Functions (Beta)
Google Cloud Functions adalah solusi komputasi ringan, berbasis peristiwa, dan bersifat asinkron yang dapat digunakan untuk membuat berbagai fungsi kecil bertujuan tunggal, yang merespons peristiwa tanpa perlu mengelola lingkungan server atau runtime. Fungsi-fungsi ini dapat digunakan untuk melakukan transcoding video, mengklasifikasikan gambar menggunakan machine learning, atau menyinkronkan metadata dengan Firebase Realtime Database. Dengan overhead yang lebih sedikit daripada App Engine, Cloud Functions adalah cara tercepat untuk bereaksi terhadap perubahan dalam Cloud Storage.
Google Cloud Vision API
Google Cloud Vision API dapat digunakan developer untuk memahami konten gambar dengan mencakup model machine learning yang ampuh secara mudah untuk menggunakan API. Google Cloud Vision API mengklasifikasikan gambar secara cepat ke dalam ribuan kategori, mendeteksi masing-masing objek dan wajah di dalam gambar, menemukan dan membaca kata-kata tercetak yang berada di dalam gambar, mengidentifikasi konten yang bersifat menyinggung, dan bahkan memberikan analisis sentimen gambar.
Google Cloud Speech API
Seperti halnya Vision API, Google Cloud Speech API dapat digunakan developer untuk mengekstrak teks dari file audio yang disimpan di Cloud Storage. API tersebut mengenali lebih dari 80 bahasa dan varian, untuk mendukung basis pengguna global Anda. Jika fitur ini dipadukan dengan Google Cloud Natural Language API, developer dapat mengekstrak teks mentah dan menyimpulkan arti teks tersebut. Dan jika diperlukan audiens global, sandingkan API ini dengan Google Translate API untuk menerjemahkan teks ke dalam lebih dari 90 bahasa.
Google App Engine
Google App Engine adalah "Platform as a Service" yang secara otomatis menskalakan logika backend sebagai respons terhadap jumlah traffic yang diterimanya. Cukup upload kode backend Anda dan Google akan mengelola ketersediaan aplikasi. Anda tidak perlu menyediakan atau memelihara server. App Engine adalah cara cepat dan mudah untuk menambahkan kemampuan pemrosesan atau eksekusi tepercaya tambahan ke aplikasi Firebase Anda.
Jika Anda memiliki bucket Cloud Storage default dengan format nama PROJECT_ID.appspot.com
Lingkungan standar Java, Python, dan Go untuk App Engine mencakup App Engine Images API (Java | Python | Go), yang dapat mengubah ukuran, memutar, membalik, dan memangkas gambar, serta menampilkan URL penyajian gambar. Dengan demikian, transformasi sisi klien dapat dilakukan, serupa dengan Cloudinary dan Imgix.
Saat mengimpor project Google Cloud yang ada ke Firebase, jika ingin objek App Engine ada di Firebase, Anda harus menyetel kontrol akses default pada objek Anda untuk mengizinkan Firebase mengaksesnya dengan menjalankan perintah berikut menggunakan
gsutil
:
gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
Pertimbangan untuk file Firebase Security Rules dan App Engine
Jika Anda memiliki bucket Cloud Storage default dengan format nama
*.appspot.com
Jika mengonfigurasi Firebase Security Rules untuk akses publik (tidak diautentikasi), Anda juga akan membuat file App Engine yang baru diupload dapat diakses secara publik.
Masalah umum untuk Cloud Storage dan App Engine
Ada dua masalah umum yang menyebabkan Anda tidak dapat mengimpor aplikasi App Engine:
- Project tersebut berisi aplikasi Master/Slave App Engine Datastore sebelumnya.
- Project tersebut memiliki project ID berawalan domain, misalnya:
domain.com:project-1234
.
Dalam salah satu kasus ini, project tidak akan mendukung Cloud Storage for Firebase, dan Anda harus membuat project Firebase baru agar dapat menggunakan Cloud Storage. Hubungi dukungan agar kami dapat membantu Anda.