Integration mit Google Cloud

Cloud Storage für Firebase ist eng in Google Cloud integriert. Die Firebase SDKs für Cloud Storage speichern Dateien direkt in Google Cloud Storage-Buckets . Wenn Ihre App wächst, können Sie problemlos andere Google Cloud-Dienste integrieren, z. B. Managed Computing wie App Engine oder Cloud Functions oder APIs für maschinelles Lernen wie Cloud Vision oder Google Übersetzen.

Firebase verwendet Google Cloud-Dienstkonten, um Dienste zu betreiben und zu verwalten, ohne Benutzeranmeldeinformationen weiterzugeben. Wenn Sie ein Firebase-Projekt erstellen, das Cloud Storage verwendet, stellen Sie möglicherweise fest, dass in Ihrem Projekt bereits ein entsprechendes Dienstkonto verfügbar ist: service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com . Weitere Informationen finden Sie in diesem Firebase-Supportleitfaden .

Unter der Haube verwenden Firebase SDKs für Cloud Storage den Standard-Bucket im kostenlosen App Engine -Tarif. Dadurch können Sie Cloud Storage schnell nutzen, ohne eine Kreditkarte einzugeben oder ein Cloud-Rechnungskonto zu aktivieren. Außerdem können Sie damit problemlos Daten zwischen Firebase und einem Google Cloud-Projekt austauschen.

Für die Integration mit Google Cloud, einschließlich des Imports vorhandener Cloud Storage-Buckets, ist ein Firebase-Projekt im Blaze-Plan erforderlich. Erfahren Sie mehr über die Pläne auf unserer Preisseite .

Google Cloud-Speicher

Sie können die Google Cloud Storage-APIs verwenden, um auf Dateien zuzugreifen, die über die Firebase SDKs für Cloud Storage hochgeladen wurden, insbesondere um komplexere Vorgänge durchzuführen, wie das Kopieren oder Verschieben einer Datei oder das Auflisten aller in einer Referenz verfügbaren Dateien.

Es ist wichtig zu beachten, dass diese Anfragen die Zugriffskontrolloptionen von Google Cloud Storage und nicht die Firebase-Authentifizierung und Cloud Storage-Sicherheitsregeln verwenden.

APIs

Zusätzlich zu den Firebase SDKs für Cloud Storage gibt es eine Reihe weiterer Möglichkeiten, auf die in Ihrem Cloud Storage-Bucket gespeicherten Daten zuzugreifen, je nachdem, was Sie tun möchten. Wenn Sie auf Daten auf einem Server zugreifen, bieten wir serverseitige Bibliotheken sowie eine JSON und S3-kompatible XML RESTful-API an. Wenn Sie Skriptänderungen vornehmen oder andere Verwaltungsaufgaben ausführen müssen, haben wir ein Befehlszeilentool dafür wird sich als nützlich erweisen.

Google Cloud-Server-SDKs

Google Cloud bietet hochwertige Server-SDKs für eine Reihe von Cloud-Produkten, einschließlich Cloud Storage. Diese Bibliotheken sind in Node.js , Java , go , Python , PHP und Ruby verfügbar.

Weitere Informationen, einschließlich Installationsanweisungen, Authentifizierung und Fehlerbehebung, finden Sie in der oben verlinkten plattformspezifischen Dokumentation.

Ein Beispiel für die Verwendung des Google Cloud Storage SDK ist unten dargestellt:

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();
    

Gehen

    // 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');
    

Rubin

    # 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

Wenn Sie eine Sprache ohne Client-Bibliothek verwenden, etwas tun möchten, was die Client-Bibliotheken nicht können, oder einfach einen bevorzugten HTTP-Client haben, den Sie lieber verwenden würden, bietet Google Cloud Storage APIs für JSON und XML .

Zusätzlich zu diesen Speicherdatenzugriffs-APIs können Sie zum Verwalten von Cloud Storage-Buckets zur Verwendung in Firebase-Projekten die Cloud Storage for Firebase-API verwenden.

gsutil

gsutil ist ein Befehlszeilentool, das Ihnen direkten Zugriff auf Cloud Storage ermöglicht. Mit gsutil können Sie eine Vielzahl von Bucket- und Objektverwaltungsaufgaben erledigen, darunter:

  • Hochladen, Herunterladen und Löschen von Objekten.
  • Auflisten von Eimern und Objekten.
  • Objekte verschieben, kopieren und umbenennen.
  • Bearbeiten von Objekt- und Bucket-ACLs.

gsutil ermöglicht andere erweiterte Vorgänge, z. B. das Verschieben von Dateien von einem Verzeichnis in ein anderes oder das Löschen aller Dateien unterhalb eines bestimmten Speicherorts.

Das Verschieben aller Dateien von einer Referenz zu einer anderen ist so einfach wie:

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

Das Stapellöschen aller Dateien unterhalb einer Referenz ist ähnlich intuitiv:

# 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

Preise anfordern

Google Cloud Storage ist ein hoch skalierbarer Dienst, der mithilfe der Autoscaling-Technologie sehr hohe Anfrageraten erreicht.

Google Cloud Storage ist ein mandantenfähiger Dienst, was bedeutet, dass Benutzer denselben Satz zugrunde liegender Ressourcen gemeinsam nutzen. Um diese gemeinsam genutzten Ressourcen optimal zu nutzen, verfügen Buckets über eine anfängliche IO-Kapazität.

Wenn Sie planen, Cloud Storage für Firebase in Ihre App zu integrieren, denken Sie über die Mindestanfragerate nach, die Ihre App für eine gute Leistung benötigt, und darüber, wie Anfragen effizient gestellt werden können. Lesen Sie die Richtlinien zu Anfrageraten und insbesondere zur Erhöhung der Anfrageraten .

Objektversionierung

Haben Sie jemals versehentlich etwas gelöscht und kein Backup gehabt? Google Cloud Storage unterstützt die Objektversionierung , die eine automatische Möglichkeit zum Sichern Ihrer Daten und zum Wiederherstellen aus diesen Sicherungen bietet. Sie können die Objektversionierung mit dem Befehl gsutil versioning set aktivieren:

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

Cloud Storage ruft immer die aktuellste Version ab. Wenn Sie also ein Objekt wiederherstellen möchten, müssen Sie eine der anderen oben genannten APIs oder Tools verwenden, um das gewünschte Objekt als aktuellste Version festzulegen.

Objektlebenszyklusmanagement

Die Möglichkeit, veraltete Dateien automatisch zu archivieren oder zu löschen, ist für viele Anwendungen eine nützliche Funktion. Glücklicherweise bietet Google Cloud Storage Object Lifecycle Management , mit dem Sie Objekte nach einer bestimmten Zeit löschen oder archivieren können.

Erwägen Sie eine Foto-Sharing-Anwendung, bei der alle Fotos innerhalb eines Tages gelöscht werden sollen. Sie können eine Objektlebenszyklusrichtlinie wie folgt einrichten:

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

Und stellen Sie es mit dem Befehl gsutil lifecycle set bereit:

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

Beachten Sie, dass dies für alle Dateien im Bucket gilt. Wenn Sie also neben Fotos, die Sie täglich löschen möchten, wichtige Benutzersicherungen speichern, die Sie über einen längeren Zeitraum aufbewahren möchten, möchten Sie möglicherweise zwei separate Buckets verwenden oder Löschvorgänge manuell durchführen mit gsutil oder Ihrem eigenen Server.

App Engine

App Engine ist eine „Platform as a Service“, die die Backend-Logik automatisch als Reaktion auf die Menge des empfangenen Datenverkehrs skaliert. Laden Sie einfach Ihren Backend-Code hoch und Google verwaltet die Verfügbarkeit Ihrer App. Sie müssen keine Server bereitstellen oder warten. App Engine ist eine schnelle und einfache Möglichkeit, Ihrer Firebase-Anwendung zusätzliche Rechenleistung oder vertrauenswürdige Ausführung hinzuzufügen.

Die Firebase SDKs für Cloud Storage verwenden den App Engine-Standard-Bucket. Wenn Sie also eine App Engine-App erstellen, können Sie die integrierten App Engine-APIs verwenden, um Daten zwischen Firebase und App Engine auszutauschen. Dies ist nützlich für die Durchführung von Audiokodierung, Videotranskodierung und Bildtransformationen sowie für andere rechenintensive Hintergrundverarbeitungen.

Zu den Java-, Python- und go- Standardumgebungen für App Engine gehört die App Engine Images API ( Java , Python ), mit der ein Bild in der Größe geändert, gedreht, gespiegelt und zugeschnitten werden kann sowie eine Bildbereitstellungs-URL zurückgegeben werden kann, die clientseitige Transformationen ermöglicht , ähnlich wie Cloudinary und Imgix.

Wenn Sie beim Importieren eines vorhandenen Google Cloud-Projekts in Firebase alle vorhandenen App Engine-Objekte in Firebase verfügbar machen möchten, müssen Sie die Standardzugriffskontrolle für Ihre Objekte festlegen, damit Firebase darauf zugreifen kann, indem Sie den folgenden Befehl mit gsutil ausführen :

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

Bekannte Probleme

Es gibt zwei bekannte Fälle, in denen Sie Ihre App Engine-App nicht importieren können:

  1. Das Projekt enthält eine ehemalige App Engine Datastore Master/Slave-App.
  2. Das Projekt hat eine Domänen-Projekt-ID mit Präfix, zum Beispiel: domain.com:project-1234 .

In beiden Fällen unterstützt das Projekt Cloud Storage für Firebase nicht und Sie sollten ein neues Firebase-Projekt erstellen, um Cloud Storage zu verwenden. Kontaktieren Sie den Support , damit wir Ihnen weiterhelfen können.

Google Cloud-Funktionen (Beta)

Google Cloud Functions ist eine schlanke, ereignisbasierte, asynchrone Rechenlösung, mit der Sie kleine Einzweckfunktionen erstellen können, die auf Ereignisse reagieren, ohne dass ein Server oder eine Laufzeitumgebung verwaltet werden muss. Diese Funktionen können zum Transkodieren von Videos, zum Klassifizieren von Bildern mithilfe von maschinellem Lernen oder zum Synchronisieren von Metadaten mit der Firebase-Echtzeitdatenbank verwendet werden. Mit noch weniger Overhead als App Engine ist Cloud Functions die schnellste Möglichkeit, auf Änderungen im Cloud Storage zu reagieren.

Google Cloud Vision-API

Mit der Google Cloud Vision API können Entwickler den Inhalt eines Bildes verstehen, indem sie leistungsstarke Modelle für maschinelles Lernen in einer benutzerfreundlichen API kapseln. Es klassifiziert Bilder schnell in Tausende von Kategorien, erkennt einzelne Objekte und Gesichter in Bildern, findet und liest in Bildern enthaltene gedruckte Wörter, identifiziert anstößige Inhalte und bietet sogar eine Analyse der Bildstimmung.

Google Cloud Speech-API

Ähnlich wie die Vision API ermöglicht die Google Cloud Speech API Entwicklern, Text aus einer im Cloud Storage gespeicherten Audiodatei zu extrahieren. Die API erkennt über 80 Sprachen und Varianten, um Ihre globale Benutzerbasis zu unterstützen. In Kombination mit der Google Cloud Natural Language API können Entwickler sowohl den Rohtext extrahieren als auch die Bedeutung dieses Textes ableiten. Und wenn ein globales Publikum benötigt wird, koppeln Sie dies mit der Google Translate API , um den Text in über 90 Sprachen zu übersetzen.