Integrasi dengan Google Cloud

Cloud Storage for Firebase terintegrasi erat dengan Google Cloud. Firebase SDK untuk Cloud Storage menyimpan file langsung di bucket Google Cloud Storage, dan seiring dengan perkembangan aplikasi, Anda dapat mengintegrasikan layanan Google Cloud lainnya dengan mudah, misalnya komputasi terkelola seperti App Engine atau Cloud Functions, atau API machine learning seperti Cloud Vision atau Google Terjemahan.

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: service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com. Lihat panduan dukungan Firebase ini untuk informasi selengkapnya.

Pada prinsipnya, Firebase SDK untuk Cloud Storage menggunakan bucket default di paket tanpa biaya App Engine. Dengan demikian, Anda dapat menyiapkan dan menjalankan Cloud Storage dengan cepat, tanpa harus memasukkan kartu kredit atau mengaktifkan akun Penagihan Cloud. Selain itu, Anda juga dapat menggunakan data yang sama antara Firebase dan project Google Cloud.

Integrasi dengan Google Cloud, termasuk mengimpor bucket Cloud Storage yang ada, memerlukan project Firebase dengan paket Blaze. Pelajari paketnya lebih lanjut di halaman harga.

Google Cloud Storage

Anda dapat menggunakan API Google Cloud Storage 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 diketahui bahwa permintaan ini menggunakan opsi kontrol akses Google Cloud Storage, bukan Aturan Keamanan Firebase Authentication dan Cloud Storage.

API

Selain Firebase SDK untuk Cloud Storage, ada sejumlah cara lain untuk mengakses data yang disimpan di bucket Cloud Storage Anda, bergantung pada apa yang ingin Anda lakukan. Jika Anda mengakses data di server, kami menawarkan library sisi server, serta JSON dan RESTful API XML yang kompatibel dengan S3, atau jika Anda perlu menuliskan 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 API Cloud Storage for Firebase.

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 serangkaian 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.

App Engine

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 daya pemrosesan atau eksekusi tepercaya tambahan ke aplikasi Firebase Anda.

Firebase SDK untuk Cloud Storage menggunakan bucket default App Engine, artinya jika Anda mem-build aplikasi App Engine, Anda dapat menggunakan App Engine API bawaan untuk membagi data antara Firebase dan App Engine. Hal ini berguna untuk melakukan encoding audio, transcoding video, dan transformasi gambar, serta pemrosesan latar belakang intensif komputasi lainnya.

Lingkungan standar Java, Python, dan Go untuk App Engine mencakup App Engine Images API (Java, Python), 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.

Ketika 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;gt@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://<your-cloud-storage-bucket>

Masalah Umum

Ada dua masalah umum yang menyebabkan Anda tidak dapat mengimpor aplikasi App Engine:

  1. Project tersebut berisi aplikasi App Engine Datastore Master/Slave sebelumnya.
  2. 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.

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 audience global, sandingkan API ini dengan API Google Terjemahan untuk menerjemahkan teks ke dalam lebih dari 90 bahasa.