Google Cloud ile entegrasyon

Cloud Storage for Firebase, Google Cloud ile sıkı bir şekilde entegre edilmiştir. Cloud Storage için Firebase SDK'ları, dosyaları doğrudan Google Cloud Storage paketlerinde depolar. Uygulamanız büyüdükçe App Engine veya Cloud Functions gibi yönetilen hesaplama ya da Cloud Vision veya Google Translate gibi makine öğrenimi API'leri gibi diğer Google Cloud hizmetlerini entegre edebilirsiniz.

Firebase projesi, aslında Firebase'e özgü ek yapılandırmalar ve hizmetler etkinleştirilmiş bir Google Cloud projesidir. Bu, Cloud Storage for Firebase ile kullandığınız her Cloud Storage paketine Google Cloud'den (konsol ve API'leri dahil) erişilebildiği anlamına gelir.

Mevcut Cloud Storage paketlerini içe aktarma da dahil olmak üzere Google Cloud ile entegrasyon için kullandıkça öde Blaze fiyatlandırma planında bir Firebase projesi gerekir.

Hizmet hesaplarıyla ilgili dikkat edilmesi gereken noktalar

Firebase, kullanıcı kimlik bilgilerini paylaşmadan hizmetleri çalıştırmak ve yönetmek için Google Cloud hizmet hesaplarını kullanır. Cloud Storage kullanan bir Firebase projesi oluşturduğunuzda, projenizde ilgili bir hizmet hesabının zaten mevcut olduğunu fark edebilirsiniz: service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com. Daha fazla bilgi için Firebase hizmet hesaplarına genel bakış başlıklı makaleyi inceleyin.

Google Cloud Storage

Cloud Storage için Firebase SDK'ları aracılığıyla yüklenen dosyalara erişmek amacıyla, özellikle de dosya kopyalama veya taşıma ya da bir referanstaki tüm dosyaları listeleme gibi daha karmaşık işlemler yapmak için Google Cloud Storage API'lerini kullanabilirsiniz.

Bu isteklerin Firebase Authentication ve Cloud Storage Security Rules yerine Google Cloud Storage erişim denetimi seçeneklerini kullandığını unutmayın.

API'ler

Cloud Storage için Firebase SDK'larına ek olarak, yapmak istediğinize bağlı olarak Cloud Storage paketinizde depolanan verilere erişmenin başka yolları da vardır. Bir sunucudaki verilere erişiyorsanız sunucu tarafı kitaplıkların yanı sıra JSON ve S3 uyumlu bir XML RESTful API sunuyoruz. Değişiklik komut dosyası oluşturmanız veya diğer yönetim görevlerini gerçekleştirmeniz gerekiyorsa işinize yarayacak bir komut satırı aracımız da vardır.

Google Cloud sunucu SDK'ları

Google Cloud, Cloud Storage dahil olmak üzere çeşitli bulut ürünleri için yüksek kaliteli sunucu SDK'ları sunar. Bu kitaplıklar Node.js, Java, Go, Python, PHP ve Ruby'de kullanılabilir.

Yükleme talimatları, kimlik doğrulama ve sorun giderme dahil olmak üzere daha fazla bilgi için yukarıdaki bağlantıya giderek platforma özel dokümanlara göz atın.

Google Cloud Storage SDK'sının örnek kullanımı aşağıda gösterilmiştir:

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

İstemci kitaplığı olmayan bir dil kullanıyorsanız, istemci kitaplıklarının yapmadığı bir şey yapmak istiyorsanız veya kullanmak istediğiniz favori bir HTTP istemciniz varsa Google Cloud Storage hem JSON hem de XML için API'ler sunar.

Bu depolama alanı veri erişimi API'lerine ek olarak, Firebase projelerinde kullanılmak üzere Cloud Storage paketlerini yönetmek için Cloud Storage for Firebase API'yi kullanabilirsiniz.

gsutil

gsutil, Cloud Storage'e doğrudan erişim sağlayan bir komut satırı aracıdır. Aşağıdakiler dahil olmak üzere çok çeşitli paket ve nesne yönetimi görevlerini yapmak için gsutil'ü kullanabilirsiniz:

  • Nesneleri yükleme, indirme ve silme.
  • Paketleri ve nesneleri listeleme.
  • Nesneleri taşıma, kopyalama ve yeniden adlandırma
  • Nesne ve paket EKL'lerini düzenleme

gsutil Dosyaları bir dizinden diğerine taşıma veya belirli bir konumun altındaki tüm dosyaları silme gibi diğer gelişmiş işlemleri yapmanıza olanak tanır.

Tüm dosyaları bir referanstan diğerine taşımak için:

gsutil mv gs://bucket/old/reference gs://bucket/new/reference

Bir referansın altındaki tüm dosyaları toplu olarak silmek de benzer şekilde sezgiseldir:

# 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

İstek Oranları

Google Cloud Storage, çok yüksek istek hızlarına ulaşmak için otomatik ölçeklendirme teknolojisini kullanan, yüksek düzeyde ölçeklenebilir bir hizmettir.

Google Cloud Storage, çok kiracılı bir hizmettir. Yani kullanıcılar aynı temel kaynak grubunu paylaşır. Bu paylaşılan kaynaklardan en iyi şekilde yararlanmak için paketlerin başlangıç IO kapasitesi vardır.

Cloud Storage for Firebase'ü uygulamanıza entegre etmeyi planlarken, uygulamanızın iyi performans göstermesi için ihtiyaç duyduğu minimum istek hızını ve isteklerin verimli bir şekilde yapılmasını göz önünde bulundurun. İstek oranları ve özellikle istek oranlarını artırma ile ilgili kuralları inceleyin.

Nesnede Sürüm Oluşturma

Yedeği olmayan bir öğeyi yanlışlıkla sildiniz mi? Google Cloud Storage, verilerinizi yedekleme ve bu yedeklerden geri yükleme için otomatik bir yöntem sunan nesne sürümlendirmesini destekler. Nesnede sürüm oluşturmayı gsutil versioning set komutunu kullanarak etkinleştirebilirsiniz:

gsutil versioning set on gs://<your-cloud-storage-bucket>

Cloud Storage her zaman en son sürümü alır. Bu nedenle, bir nesneyi geri yüklemek istiyorsanız istediğiniz nesneyi en son olarak ayarlamak için yukarıdaki diğer API'lerden veya araçlardan birini kullanmanız gerekir.

Nesne Yaşam Döngüsü Yönetimi

Eski dosyaları otomatik olarak arşivleme veya silme özelliği birçok uygulama için kullanışlı bir özelliktir. Neyse ki Google Cloud Storage, belirli bir sürenin ardından nesneleri silmenize veya arşivlemenize olanak tanıyan Nesne Yaşam Döngüsü Yönetimi sunar.

Tüm fotoğrafların bir gün içinde silinmesini istediğiniz bir fotoğraf paylaşım uygulaması düşünün. Nesne yaşam döngüsü politikasını aşağıdaki şekilde ayarlayabilirsiniz:

// lifecycle.json
{
  "lifecycle": {
    "rule":
    [
      {
        "action": {"type": "Delete"},
        "condition": {"age": 1}
      }
    ]
  }
}

Ardından gsutil lifecycle set komutunu kullanarak dağıtın:

gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>

Bu durumun paketteki tüm dosyalar için geçerli olduğunu unutmayın. Bu nedenle, günlük olarak silmek istediğiniz fotoğrafların yanı sıra uzun süre saklamak istediğiniz önemli kullanıcı yedeklerini de depolıyorsanız iki ayrı paket kullanabilir veya gsutil ile kendi sunucunuzu kullanarak manuel olarak silme işlemi yapabilirsiniz.

Google Cloud Functions (Beta)

Google Cloud Functions, bir sunucuyu veya çalışma zamanı ortamını yönetme gereği olmadan olaylara yanıt veren küçük, tek amaçlı işlevler oluşturmanızı sağlayan hafif, olay tabanlı, zaman uyumsuz bir bilgi işlem çözümüdür. Bu işlevler, videoları kod dönüştürmek, makine öğrenimini kullanarak resimleri sınıflandırmak veya meta verileri Firebase Realtime Database ile senkronize etmek için kullanılabilir. App Engine'ten daha az ek maliyet sunan Cloud Functions, Cloud Storage'teki değişikliklere en hızlı şekilde yanıt vermenizi sağlar.

Google Cloud Vision API

Google Cloud Vision API, güçlü makine öğrenimi modellerini kullanımı kolay bir API'de kapsayarak geliştiricilerin bir görüntünün içeriğini anlamasını sağlar. Görüntüleri hızla binlerce kategoriye göre sınıflandırır, görüntülerdeki nesneleri ve yüzleri tek tek algılar, görüntülerdeki yazılı metinleri bulup okur, rahatsız edici içerikleri tanımlar ve hatta görüntünün duygusal analizini sağlar.

Google Cloud Speech API

Vision API'ye benzer şekilde Google Cloud Speech API, geliştiricilerin Cloud Storage'de depolanan bir ses dosyasından metin çıkarmasına olanak tanır. API, küresel kullanıcı tabanınızı desteklemek için 80'den fazla dili ve lehçeyi tanır. Google Cloud Natural Language API ile birlikte kullanıldığında geliştiriciler hem ham metni ayıklayabilir hem de bu metnin anlamını çıkarabilir. Ayrıca, global bir kitleye ulaşmak istiyorsanız metni 90'dan fazla dile çevirmek için bu özelliği Google Translate API ile birlikte kullanın.

Google App Engine

Google App Engine, arka uç mantığını aldığı trafik miktarına göre otomatik olarak ölçeklendiren bir "Platform Hizmeti"dir. Arka uç kodunuzu yüklemeniz yeterlidir. Google, uygulamanızın kullanılabilirliğini yönetir. Hazırlamanız veya sürdürmeniz gereken sunucu yoktur. App Engine, Firebase uygulamanıza ek işlem gücü veya güvenilir yürütme eklemenin hızlı ve basit bir yoludur.

PROJECT_ID.appspot.com ad biçimine sahip varsayılan bir Cloud Storage paketiniz varsa bu paket, projenizdeki bir App Engine uygulamasıyla otomatik olarak paylaşılır. Bu, bir App Engine uygulaması oluşturursanız bu paket ile App Engine arasında veri paylaşmak için yerleşik App Engine API'lerini kullanabileceğiniz anlamına gelir. Bu, ses kodlama, video kod dönüştürme ve resim dönüşümlerinin yanı sıra yoğun hesaplama gerektiren diğer arka plan işlemlerini gerçekleştirmek için kullanışlıdır.

App Engine için Java, Python ve Go standart ortamları, bir resmi yeniden boyutlandırabilen, döndürebilen, çevirebilen ve kırpabilen ve Cloudinary ile Imgix'e benzer şekilde istemci taraflı dönüşümlere olanak tanıyan bir resim yayınlama URL'si döndürebilen App Engine Resimler API'sini (Java | Python | Go) içerir.

Mevcut bir Google Cloud projesini Firebase'e aktarırken mevcut App Engine nesnelerini Firebase'de kullanılabilir hale getirmek istiyorsanız gsutil kullanarak aşağıdaki komutu çalıştırarak Firebase'in nesnelerinize erişmesine izin vermek için nesnelerinizde varsayılan erişim denetimini ayarlamanız gerekir:

gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME

Firebase Security Rules ve App Engine dosyalarıyla ilgili dikkat edilmesi gereken noktalar

*.appspot.com ad biçimine sahip varsayılan bir Cloud Storage paketiniz varsa projenizde bu paketi paylaşan bir App Engine uygulaması da vardır.

Firebase Security Rules dosyanızı herkese açık (kimliği doğrulanmamış) erişim için yapılandırırsanız yeni yüklenen App Engine dosyalarına da herkes erişebilir.

Cloud Storage ve App Engine ile ilgili bilinen sorunlar

App Engine uygulamanızı içe aktaramadığınız iki bilinen durum vardır:

  1. Projede eski bir App Engine Datastore Master/Slave uygulaması bulunuyor.
  2. Projenin alan adı önekli bir proje kimliği vardır (ör. domain.com:project-1234).

Bu iki durumda da proje Cloud Storage for Firebase'ü desteklemez ve Cloud Storage'ü kullanmak için yeni bir Firebase projesi oluşturmanız gerekir. Size yardımcı olabilmemiz için destek ekibiyle iletişime geçin.