Ein Firebase-Projekt ist eigentlich nur ein Google Cloud-Projekt, für das zusätzliche Firebase-spezifische Konfigurationen und Dienste aktiviert sind. Das bedeutet, dass jeder Cloud Storage-Bucket, den Sie mit Cloud Storage for Firebase verwenden, in Google Cloud zugänglich ist (einschließlich der zugehörigen Console und APIs).
Für die Integration mit Google Cloud, einschließlich des Imports vorhandener Cloud Storage-Buckets, ist ein Firebase-Projekt mit dem Blaze-Tarif (Pay as you go) erforderlich.
Hinweise zu Dienstkonten
Firebase verwendet Google Cloud-Dienstkonten, um Dienste zu betreiben und zu verwalten, ohne Anmeldedaten von Nutzern weiterzugeben. Wenn Sie ein Firebase-Projekt erstellen, in dem Cloud Storage verwendet wird, ist möglicherweise bereits ein entsprechendes Dienstkonto in Ihrem Projekt verfügbar:
.
Weitere Informationen finden Sie unter 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. Das ist besonders nützlich für komplexere Vorgänge wie das Kopieren oder Verschieben einer Datei oder das Auflisten aller Dateien, die an einer Referenz verfügbar sind.
Wichtig: Bei diesen Anfragen werden Google Cloud Storage-Optionen für die Zugriffssteuerung anstelle von Firebase Authentication und Cloud Storage Security Rules verwendet.
APIs
Zusätzlich zu den Firebase-SDKs für Cloud Storage gibt es je nach Bedarf 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 an. Wenn Sie Änderungen per Script vornehmen oder andere administrative Aufgaben 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 Installationsanleitung, Authentifizierung und Fehlerbehebung, finden Sie in der oben verlinkten plattformspezifischen Dokumentation.
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 leisten, 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 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 Befehlszeilentool, 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öglichen andere erweiterte Vorgänge, z. B. 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 in eine andere:
gsutil mv gs://bucket/old/reference gs://bucket/new/reference
Das Batch-Löschen aller Dateien unter 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
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 genutzten Ressourcen optimal genutzt werden können, haben Buckets eine anfängliche E/A-Kapazität.
Wenn Sie planen, Cloud Storage for Firebase in Ihre App einzubinden, sollten Sie überlegen, welche Mindestanfragerate Ihre App für eine gute Leistung benötigt und wie Sie Anfragen effizient stellen können. Richtlinien zu Anforderungsraten und insbesondere Richtlinien zum Erhöhen von Anforderungsraten
Objektversionsverwaltung
Haben Sie schon einmal versehentlich etwas gelöscht und hatten keine Sicherung?
Google Cloud Storage unterstützt die Objektversionsverwaltung, 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 wählt immer die neueste Version aus. Wenn Sie 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, alte 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.
Stellen Sie sich eine App zum Teilen von Fotos vor, in der alle Fotos innerhalb eines Tages gelöscht werden sollen. So richten Sie eine Richtlinie für den Objektlebenszyklus ein:
// lifecycle.json { "lifecycle": { "rule": [ { "action": {"type": "Delete"}, "condition": {"age": 1} } ] } }
Stellen Sie sie mit dem Befehl gsutil
lifecycle set
bereit:
gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>
Das gilt für alle Dateien im Bucket. Wenn Sie also wichtige Nutzer-Back-ups, die Sie lange speichern möchten, zusammen mit Fotos speichern, die Sie täglich löschen möchten, sollten Sie zwei separate Buckets verwenden oder Löschungen manuell mit gsutil
oder Ihrem eigenen Server vornehmen.
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 muss keine Server- oder Laufzeitumgebung verwaltet werden. Diese Funktionen können zum Transcodieren von Videos, zum Klassifizieren von Bildern mithilfe von maschinellem Lernen oder zum Synchronisieren von Metadaten mit Firebase Realtime Database verwendet werden. Cloud Functions bietet noch weniger Overhead als App Engine und ist 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 analysieren, indem sie leistungsstarke Modelle für maschinelles Lernen in einer nutzerfreundlichen API verwenden. Sie ordnet Bilder schnell anhand von Tausenden von Kategorien zu, erkennt einzelne Objekte und Gesichter in Bildern, findet und liest gedruckte Wörter in Bildern, identifiziert anstößige Inhalte und bietet sogar eine Sentimentanalyse von Bildern.
Google Cloud Speech API
Ähnlich wie bei der Vision API können Entwickler mit der Google Cloud Speech API Text aus einer Audiodatei extrahieren, die in Cloud Storage gespeichert ist. 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 Roh- als auch den abgeleiteten Text extrahieren. Wenn Sie ein globales Publikum erreichen möchten, können Sie die Google Translate API verwenden, um den Text in über 90 Sprachen zu übersetzen.
Google App Engine
Google App Engine ist eine „Platform as a Service“, die die Back-End-Logik automatisch an den empfangenen 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 eine vertrauenswürdige Ausführung hinzuzufügen.
Wenn Sie einen Standard-Cloud Storage-Bucket mit dem Namensformat PROJECT_ID.appspot.com
Die Standardumgebungen für Java, Python und Go für App Engine enthalten die App Engine Images API (Java | Python | Go). Mit dieser API können Sie die Größe von Bildern ändern, sie drehen, spiegeln und zuschneiden. Außerdem können Sie eine URL für die Bereitstellung von Bildern zurückgeben, die clientseitige Transformationen ermöglicht, ähnlich wie bei Cloudinary und Imgix.
Wenn Sie ein vorhandenes Google Cloud-Projekt in Firebase importieren und vorhandene App Engine-Objekte in Firebase verfügbar machen möchten, müssen Sie die Standardzugriffssteuerung für Ihre Objekte so festlegen, dass 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
Hinweise zu Firebase Security Rules- und App Engine-Dateien
Wenn Sie einen Standard-Cloud Storage-Bucket mit dem Namensformat *.appspot.com
Wenn Sie Ihre Firebase Security Rules für öffentlichen (nicht authentifizierten) Zugriff konfigurieren, sind auch neu hochgeladene App Engine-Dateien öffentlich zugänglich.
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 ehemalige 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 wird Cloud Storage for Firebase im Projekt nicht unterstützt. Sie sollten ein neues Firebase-Projekt erstellen, um Cloud Storage verwenden zu können. Wenden Sie sich an den Support, damit wir Ihnen helfen können.