Ein Firebase-Projekt ist im Grunde nur ein Google Cloud-Projekt, für das zusätzliche Firebase-spezifische Konfigurationen und Dienste aktiviert sind. Das bedeutet, dass auf jeden Cloud Storage-Bucket, den Sie mit Cloud Storage for Firebase verwenden, in Google Cloud zugegriffen werden kann (einschließlich der Console und der APIs).
Für die Einbindung in Google Cloud, einschließlich des Imports vorhandener Cloud Storage-Buckets, ist ein Firebase-Projekt mit dem Pay-as-you-go-Tarif „Blaze“ erforderlich.
Hinweise zu Dienstkonten
Firebase verwendet Google Cloud-Dienstkonten, um Dienste zu betreiben und zu verwalten, ohne Nutzeranmeldedaten weiterzugeben. Wenn Sie ein Firebase-Projekt erstellen, für das Cloud Storage verwendet wird, ist möglicherweise bereits ein entsprechendes Dienstkonto in Ihrem Projekt verfügbar:
.
Weitere Informationen finden Sie unter Firebase-Dienstkonten – Übersicht.
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, um komplexere Vorgänge auszuführen, z. B. das Kopieren oder Verschieben einer Datei oder das Auflisten aller Dateien, die unter einer Referenz verfügbar sind.
Beachten Sie, dass für diese Anfragen die Zugriffssteuerungsoptionen Google Cloud Storage anstelle von Firebase Authentication und Cloud Storage Security Rules verwendet werden.
APIs
Zusätzlich zu den Firebase SDKs für Cloud Storage gibt es je nach gewünschter Aktion noch eine Reihe anderer Möglichkeiten, auf in Ihrem Cloud Storage-Bucket gespeicherte Daten zuzugreifen. 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 scripten oder andere administrative Aufgaben ausführen müssen, haben wir ein praktisches Befehlszeilentool für Sie.
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 Installationsanleitungen, Authentifizierung und Fehlerbehebung, finden Sie in der oben verlinkten plattformspezifischen Dokumentation.
Hier ein Anwendungsbeispiel für das 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, das die Clientbibliotheken nicht tun, oder einfach einen bevorzugten HTTP-Client haben, den Sie lieber verwenden möchten, bietet Google Cloud Storage APIs sowohl für JSON als auch für 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 weitere erweiterte Vorgänge, z. B. das Verschieben von Dateien von einem Verzeichnis in ein anderes oder das Löschen aller Dateien an einem bestimmten Speicherort.
Das Verschieben aller Dateien von einer Referenz in eine andere ist ganz einfach:
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
Preise anfragen
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 mehrmandantenfähiger Dienst. Das bedeutet, dass Nutzer die gleichen zugrunde liegenden Ressourcen teilen. Damit diese gemeinsam genutzten Ressourcen optimal genutzt werden können, haben Buckets eine anfängliche Eingangs-/Ausgangskapazität.
Wenn Sie Cloud Storage for Firebase in Ihre Anwendung einbinden möchten, sollten Sie eine Mindestanforderungsrate berücksichtigen, die Ihre Anwendung benötigt, um eine gute Leistung zu erzielen und Anfragen effizient zu senden. Lesen Sie die Richtlinien zu Anfrageraten und insbesondere zum Erhöhen der Anfrageraten.
Objektversionsverwaltung
Haben Sie schon einmal etwas versehentlich gelöscht und kein Back-up erstellt?
Google Cloud Storage unterstützt die Objektversionsverwaltung, mit der Ihre Daten automatisch gesichert und aus diesen Sicherungen wiederhergestellt werden können. 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 neueste Version ab. 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 zu setzen.
Verwaltung des Objektlebenszyklus
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 die Verwaltung des Objektlebenszyklus, mit der Sie Objekte nach einer bestimmten Zeit löschen oder archivieren können.
Angenommen, Sie verwenden eine Foto-Teilen-App, 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} } ] } }
Und mit dem Befehl gsutil
lifecycle set
bereitstellen:
gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>
Hinweis: Das gilt für alle Dateien im Bucket. Wenn Sie also wichtige Nutzersicherungen, die Sie langfristig aufbewahren möchten, zusammen mit Fotos speichern, die Sie täglich löschen möchten, sollten Sie zwei separate Buckets verwenden oder das Löschen manuell mit gsutil
oder Ihrem eigenen Server ausführen.
Google Cloud Functions (Beta)
Google Cloud Functions ist eine unkomplizierte, ereignisbasierte, asynchrone Computing-Lösung. Sie können damit kleine 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 Machine Learning oder zum Synchronisieren von Metadaten mit der Firebase Realtime Database 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
Mit der Google Cloud Vision API erhalten Entwickler Informationen über den Inhalt eines Bildes, indem sie leistungsstarke Modelle für maschinelles Lernen in einer nutzerfreundlichen API verwenden. Es ordnet Bilder schnell in Tausenden von Kategorien zu, erkennt einzelne Objekte und Gesichter in Bildern, findet und liest gedruckte Wörter in Bildern, identifiziert anstößige Inhalte und führt sogar eine Sentimentanalyse für Bilder durch.
Google Cloud Speech API
Ähnlich wie bei der Vision API können Entwickler mit der Google Cloud Speech API Text aus einer in Cloud Storage gespeicherten Audiodatei 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 eine globale Zielgruppe ansprechen 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 als Reaktion auf die Menge des empfangenen Traffics skaliert. 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 Prozessorleistung oder vertrauenswürdige Ausführung hinzuzufügen.
Wenn Sie einen Standard-Cloud Storage-Bucket mit dem Namensformat PROJECT_ID.appspot.com
Die Standardumgebungen für App Engine in Java, Python und Go umfassen die App Engine Images API (Java | Python | Go), mit der Bilder verkleinert, gedreht, gespiegelt und zugeschnitten werden können. Außerdem kann eine URL für die Bildbereitstellung zurückgegeben werden, 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 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
Hinweise zu Firebase Security Rules- und App Engine-Dateien
Wenn Sie einen Standard-Cloud Storage-Bucket mit dem Namensformat *.appspot.com
Wenn Sie Firebase Security Rules für den öffentlichen (nicht authentifizierten) Zugriff konfigurieren, werden auch neu hochgeladene App Engine-Dateien öffentlich zugänglich gemacht.
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 vom Projekt nicht unterstützt. Sie sollten ein neues Firebase-Projekt erstellen, um Cloud Storage for Firebase verwenden zu können.Cloud Storage Wenden Sie sich an den Support, damit wir Ihnen weiterhelfen können.