Check out what’s new from Firebase at Google I/O 2022. Learn more

Integration mit Google Cloud

Cloud Storage for Firebase ist eng in Google Cloud integriert. Die Firebase SDKs für Cloud Storage speichern Dateien direkt in Google Cloud Storage-Buckets , und 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 in der kostenlosen Ebene von App Engine . Auf diese Weise können Sie Cloud Storage schnell in Betrieb nehmen, ohne eine Kreditkarte einlegen oder ein Cloud-Rechnungskonto aktivieren zu müssen. Außerdem können Sie damit problemlos Daten zwischen Firebase und einem Google Cloud-Projekt austauschen.

Die Integration mit Google Cloud, einschließlich des Imports vorhandener Cloud Storage-Buckets, erfordert ein Firebase-Projekt im Blaze-Plan. 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 auszuführen, z. B. das Kopieren oder Verschieben einer Datei oder das Auflisten aller verfügbaren Dateien in einer Referenz.

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

APIs

Zusätzlich zu den Firebase SDKs für Cloud Storage gibt es eine Reihe anderer 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, oder 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.

Die Beispielnutzung für das 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 Clientbibliothek verwenden, etwas tun möchten, was die Clientbibliotheken nicht tun, oder einfach einen bevorzugten HTTP-Client haben, den Sie lieber verwenden möchten, bietet Google Cloud Storage APIs für JSON und XML .

Zusätzlich zu diesen Speicherdatenzugriffs-APIs können Sie zur Verwaltung 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. Sie können gsutil verwenden, um eine Vielzahl von Bucket- und Objektverwaltungsaufgaben auszuführen, darunter:

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

gsutil ermöglicht andere erweiterte Vorgänge, wie 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 hochgradig skalierbarer Dienst, der die Auto-Scaling-Technologie verwendet, um sehr hohe Anforderungsraten zu erreichen.

Google Cloud Storage ist ein mandantenfähiger Dienst, was bedeutet, dass Benutzer dieselben zugrunde liegenden Ressourcen gemeinsam nutzen. Um diese gemeinsam genutzten Ressourcen optimal zu nutzen, haben Buckets eine anfängliche E/A-Kapazität.

Wenn Sie planen, Cloud Storage for Firebase in Ihre App zu integrieren, denken Sie an eine Mindestanforderungsrate, die Ihre App für eine gute Leistung benötigt, und um Anforderungen effizient zu stellen. Lesen Sie die Richtlinien zu Anforderungsraten und insbesondere zur Erhöhung der Anforderungsraten .

Objektversionierung

Haben Sie schon einmal versehentlich etwas gelöscht und kein Backup gehabt? Google Cloud Storage unterstützt die Objektversionierung , die eine automatische Möglichkeit bietet, Ihre Daten zu sichern und aus diesen Sicherungen wiederherzustellen. Sie können die Objektversionierung mit dem Befehl gsutil versioning set aktivieren:

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

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

Verwaltung des Objektlebenszyklus

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

Betrachten Sie eine Anwendung zum Teilen von Fotos, 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 wichtige Benutzersicherungen, die Sie für längere Zeit aufbewahren möchten, zusammen mit Fotos speichern, die Sie täglich löschen möchten, sollten 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 Back-End-Logik automatisch in 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 Standard-Bucket von App Engine. Wenn Sie also eine App Engine-Anwendung erstellen, können Sie die integrierten App Engine-APIs verwenden, um Daten zwischen Firebase und App Engine auszutauschen. Dies ist nützlich, um Audiocodierung, Videotranscodierung und Bildtransformationen sowie andere rechenintensive Hintergrundverarbeitungen durchzuführen.

Die Java-, Python- und go- Standardumgebungen für App Engine umfassen die App Engine Images API ( Java , Python , die ein Bild in der Größe ändern, drehen, spiegeln und zuschneiden sowie eine URL für die Bereitstellung von Bildern zurückgeben kann, die clientseitige Transformationen ermöglicht , ähnlich wie Cloudinary und Imgix.

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

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-Anwendung nicht importieren können:

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

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

Google Cloud-Funktionen (Beta)

Google Cloud Functions ist eine einfache, ereignisbasierte, asynchrone Rechenlösung, mit der Sie kleine, zweckgebundene Funktionen erstellen können, die auf Ereignisse reagieren, ohne dass Sie einen Server oder eine Laufzeitumgebung verwalten müssen. 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 in Cloud Storage zu reagieren.

Google Cloud Vision-API

Die Google Cloud Vision API ermöglicht es Entwicklern, den Inhalt eines Bildes zu verstehen, indem leistungsstarke Modelle für maschinelles Lernen in einer benutzerfreundlichen API gekapselt werden. Es klassifiziert Bilder schnell in Tausende von Kategorien, erkennt einzelne Objekte und Gesichter in Bildern, findet und liest gedruckte Wörter in Bildern, identifiziert anstößige Inhalte und bietet sogar eine Bildstimmungsanalyse.

Google Cloud Speech-API

Ähnlich wie die Vision API ermöglicht die Google Cloud Speech API Entwicklern, Text aus einer in 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 erforderlich ist, koppeln Sie dies mit der Google Translate API , um den Text in über 90 Sprachen zu übersetzen.