Einbindung in Google Cloud

Cloud Storage for Firebase ist eng in Google Cloud eingebunden. Mit den Firebase SDKs für Cloud Storage werden Dateien direkt in Google Cloud Storage Buckets gespeichert. Wenn Ihre App wächst, können Sie andere Google Cloud Dienste einbinden, wie verwaltete Compute-Dienste wie App Engine oder Cloud Functions oder APIs für maschinelles Lernen wie Cloud Vision oder Google Übersetzer.

Ein Firebase-Projekt ist eigentlich nur ein Google Cloud Projekt, für das zusätzliche Firebase-spezifische Konfigurationen und Dienste aktiviert wurden. Das bedeutet, dass jeder Cloud Storage Bucket, den Sie mit Cloud Storage for Firebase verwenden, in Google Cloud zugänglich ist (einschließlich der Console und der APIs).

Hinweise zu Dienstkonten

Firebase verwendet Google Cloud Dienstkonten, um Dienste zu betreiben und zu verwalten ohne Nutzeranmeldedaten weiterzugeben. Wenn Sie ein Firebase-Projekt erstellen, das Cloud Storage verwendet, ist möglicherweise bereits ein entsprechendes Dienstkonto in Ihrem Projekt verfügbar: service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com. Weitere Informationen finden Sie unter Übersicht über Firebase-Dienstkonten.

Google Cloud Storage

Mit den Google Cloud Storage APIs können Sie auf Dateien zugreifen, die über die Firebase SDKs für Cloud Storage hochgeladen wurden. Dies ist besonders nützlich für komplexere Vorgänge wie das Kopieren oder Verschieben einer Datei oder das Auflisten aller Dateien, die über eine Referenz verfügbar sind.

Beachten Sie, dass für diese Anfragen die Google Cloud Storage Optionen zur Zugriffssteuerung und nicht Firebase Authentication und Cloud Storage Security Rules verwendet werden.

APIs

Neben den Firebase SDKs für Cloud Storage gibt es je nach gewünschter Aktion eine Reihe weiterer Möglichkeiten, auf Daten zuzugreifen, die in Ihrem Cloud Storage-Bucket gespeichert sind. Wenn Sie auf Daten auf einem Server zugreifen, bieten wir serverseitige Bibliotheken sowie eine JSON- und S3-kompatible XML-RESTful API. Wenn Sie Änderungen per Skript vornehmen oder andere Verwaltungsaufgaben ausführen müssen, ist ein Befehlszeilentool hilfreich.

Google Cloud Server-SDKs

Google Cloud bietet hochwertige Server-SDKs für eine Reihe von Cloud-Produkten, darunter 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 plattformspezifischen Dokumentation, die oben verlinkt ist.

Unten sehen Sie ein Beispiel für die Verwendung des Google Cloud Storage SDK:

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

Wenn Sie eine Sprache ohne Clientbibliothek verwenden, etwas tun möchten, was die Clientbibliotheken nicht können, oder einfach einen bevorzugten HTTP-Client verwenden möchten, Google Cloud Storage bietet APIs für sowohl JSON als auch XML.

Zusätzlich zu diesen APIs für den Zugriff auf Speicherdaten können Sie die Cloud Storage for Firebase API verwenden, um Cloud Storage-Buckets für die Verwendung in Firebase-Projekten zu verwalten.

gsutil

gsutil ist ein Befehls zeilentool, mit dem Sie direkt auf Cloud Storage zugreifen können. Sie können gsutil für verschiedenste Bucket- und Objektverwaltungsaufgaben verwenden, einschließlich:

  • Objekte hochladen, herunterladen und löschen
  • Buckets und Objekte auflisten
  • Objekte verschieben, kopieren und umbenennen
  • Objekt- und Bucket-ACLs bearbeiten

gsutil ermöglicht weitere erweiterte Vorgänge wie das Verschieben von Dateien von einem Verzeichnis in ein anderes oder das Löschen aller Dateien unter einem bestimmten Speicherort.

So verschieben Sie alle Dateien von einer Referenz zu einer anderen:

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

Das Löschen aller Dateien unter einer Referenz im Batch 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

Anforderungsraten

Google Cloud Storage ist ein in hohem Maße skalierbarer Dienst, der Technologie zur automatischen Skalierung verwendet, um sehr hohe Anforderungsraten zu erreichen.

Google Cloud Storage ist ein Multi-Tenant-Dienst, das heißt, die Nutzer teilen sich die gleichen zugrunde liegenden Ressourcen. Damit diese gemeinsam verwendeten Ressourcen optimal genutzt werden können, haben Buckets eine anfängliche Eingangs-/Ausgangskapazität.

Wenn Sie Cloud Storage for Firebase in Ihre App einbinden möchten, sollten Sie sich überlegen, welche Mindestanforderungsrate Ihre App für eine gute Leistung benötigt und wie Sie Anfragen effizient stellen können. Lesen Sie die Richtlinien zu Anforderungsraten, und insbesondere zum Erhöhen von Anforderungsraten.

Objektversionsverwaltung

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

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

Cloud Storage wählt immer die neueste Version aus. 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 das neueste festzulegen.

Verwaltung des Objektlebenszyklus

Die Möglichkeit, veraltete Dateien automatisch zu archivieren oder zu löschen, ist für viele Anwendungen nützlich. Glücklicherweise bietet Google Cloud Storage die Verwaltung des Objektlebenszyklus, mit der Sie Objekte nach einer bestimmten Zeit löschen oder archivieren können.

Nehmen wir an, Sie haben eine App zum Teilen von Fotos, bei der alle Fotos innerhalb eines Tages gelöscht werden sollen. Sie können eine Richtlinie für den Objektlebenszyklus so einrichten:

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

Und mit dem Befehl gsutil lifecycle set bereitstellen:

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

Diese Richtlinie gilt für alle Dateien im Bucket. Wenn Sie also wichtige Nutzersicherungen, die Sie lange aufbewahren möchten, zusammen mit Fotos speichern, die täglich gelöscht werden sollen, sollten Sie zwei separate Buckets verwenden oder Löschungen manuell mit gsutil oder Ihrem eigenen Server durchführen.

Google Cloud Functions (Beta)

Google Cloud Functions ist eine unkomplizierte, ereignisbasierte, asynchrone Computing-Lösung. Sie können damit einfache Funktionen erstellen, die auf Ereignisse reagieren und auf einen einzelnen Zweck ausgerichtet sind. Dabei braucht keine Server- oder Laufzeitumgebung verwaltet zu werden. Diese Funktionen können zum Transcodieren von Videos, zum Klassifizieren von Bildern mit maschinellem Lernen oder zum Synchronisieren von Metadaten mit der Firebase Realtime Database. Cloud Functions ist noch weniger aufwendig als App Engine und bietet die schnellste Möglichkeit, auf Änderungen in Cloud Storage zu reagieren.

Google Cloud Vision API

Mit der Google Cloud Vision API können Entwickler den Inhalt eines Bildes mithilfe leistungsstarker Modelle für maschinelles Lernen analysieren. Dazu werden diese Modelle in einer nutzerfreundlichen API bereitgestellt. Die API ordnet Bilder schnell Tausenden von Kategorien zu, erkennt einzelne Objekte und Gesichter in den Bildern, findet und liest gedruckte Wörter in den Bildern, identifiziert anstößige Inhalte und bietet sogar eine Sentimentanalyse von Bildern.

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 Sprachvarianten und unterstützt damit Nutzer auf der ganzen Welt. In Kombination mit der Google Cloud Natural Language API, können Entwickler sowohl den Rohtext extrahieren als auch die Bedeutung dieses Texts ableiten. Wenn Sie ein globales Publikum erreichen möchten, kombinieren Sie die Speech API mit der Google Translate API, um den Text in über 90 Sprachen zu übersetzen.

Google App Engine

Cloud Storage for Firebase verwendet je nach Erstellungsdatum des Buckets zwei verschiedene Namensformate für Standard-Buckets:

  • Standard-Bucket, der nach September 2024: *.firebasestorage.app-Standard-Buckets sind unabhängig von Google App Engine.
  • Ältere Standard-Buckets: *.appspot.com-Standard-Buckets werden mit Google App Engine geteilt.

Google App Engine ist eine "Platform as a Service", die die Backend-Logik automatisch an den eingehenden Traffic anpasst. Sie laden einfach Ihren Backend-Code hoch und Google kümmert sich um die Verfügbarkeit Ihrer App. Sie müssen keine Server bereitstellen oder verwalten. App Engine ist eine schnelle und unkomplizierte Möglichkeit, Ihrer Firebase-Anwendung zusätzliche Rechenleistung oder vertrauenswürdige Ausführung hinzuzufügen.

Ältere App Engine Integration

Wenn Sie einen älteren *.appspot.com-Standard-Bucket haben, wird er automatisch für eine App Engine-App in Ihrem Projekt freigegeben. Das bedeutet, dass Sie die integrierten App Engine APIs verwenden können, um Daten zwischen diesem Bucket und App Engine freizugeben. Dies ist nützlich für die Audiocodierung, die Videotranscodierung und die Bildtransformation sowie für andere rechenintensive Hintergrundverarbeitungen.

Die Standardumgebungen für Java, Python und Go für App Engine enthalten die App Engine Images API (Java | Python | Go), mit der Sie die Größe eines Bildes ändern, es drehen, spiegeln und zuschneiden sowie eine URL für die Bildbereitstellung zurückgeben können, die clientseitige Transformationen ermöglicht, ähnlich wie bei Cloudinary und Imgix.

Hinweise zu freigegebenen Buckets

Wenn Sie den älteren *.appspot.com-Standard-Bucket verwenden, gilt Folgendes:

  • Firebase Security Rules und App Engine Dateien: Dateien, die mit App Engine hochgeladen wurden, verwenden denselben Bucket und unterliegen denselben Sicherheitskonfigurationen. Wenn Sie Ihre Firebase Security Rules für den öffentlichen Zugriff konfigurieren, sind auch neu hochgeladene App Engine Dateien öffentlich zugänglich.

  • Berechtigungen festlegen: Wenn Sie ein vorhandenes Google Cloud Projekt in Firebase importieren, müssen Sie möglicherweise die Standardzugriffssteuerung für Ihre Objekte festlegen, damit Firebase darauf zugreifen kann. Führen Sie dazu den folgenden Befehl mit gsutil aus:

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

Bekannte Probleme für Cloud Storage und App Engine

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

  • Das Projekt enthält eine frühere App Engine Datastore Master/Slave App.

  • Das Projekt hat eine Projekt-ID mit Domainpräfix, z. B. domain.com:project-1234.

In beiden Fällen unterstützt das Projekt Cloud Storage for Firebase, nicht. Sie sollten ein neues Firebase-Projekt erstellen, um Cloud Storage zu verwenden. Wenn Sie Fragen haben, wenden Sie sich an den Firebase-Support.