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:
.
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 : -Standard-Buckets sind unabhängig von Google App Engine.*.firebasestorage.app - Ältere Standard-Buckets:
-Standard-Buckets werden mit Google App Engine geteilt.*.appspot.com
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
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
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
gsutilaus: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.