Un projet Firebase n'est en réalité qu'un projet Google Cloud pour lequel des configurations et des services spécifiques à Firebase sont activés. Cela signifie que chaque bucket Cloud Storage que vous utilisez avec Cloud Storage for Firebase est accessible dans Google Cloud (y compris sa console et ses API).
L'intégration à Google Cloud, y compris l'importation de buckets Cloud Storage existants, nécessite un projet Firebase avec le forfait Blaze avec paiement à l'usage.
Remarques concernant les comptes de service
Firebase utilise des comptes de service Google Cloud pour exploiter et gérer des services sans partager les identifiants utilisateur. Lorsque vous créez un projet Firebase qui utilise Cloud Storage, vous pouvez remarquer qu'un compte de service correspondant est déjà disponible dans votre projet :
.
Pour en savoir plus, consultez la section Présentation des comptes de service Firebase.
Google Cloud Storage
Vous pouvez utiliser les API Google Cloud Storage pour accéder aux fichiers importés via les SDK Firebase pour Cloud Storage, en particulier pour effectuer des opérations plus complexes, comme copier ou déplacer un fichier, ou répertorier tous les fichiers disponibles dans une référence.
Il est important de noter que ces requêtes utilisent les options de contrôle des accès Google Cloud Storage plutôt que Firebase Authentication et Cloud Storage Security Rules.
API
En plus des SDK Firebase pour Cloud Storage, il existe plusieurs autres moyens d'accéder aux données stockées dans votre bucket Cloud Storage, en fonction de ce que vous souhaitez faire. Si vous accédez aux données sur un serveur, nous proposons des bibliothèques côté serveur, ainsi qu'une API RESTful XML
compatible avec JSON
et S3. Si vous devez modifier un script ou effectuer d'autres tâches d'administration, nous mettons à votre disposition un outil de ligne de commande très pratique.
SDK de serveur Google Cloud
Google Cloud propose des SDK de serveur de haute qualité pour un certain nombre de produits cloud, y compris Cloud Storage. Ces bibliothèques sont disponibles en Node.js, Java, Go, Python, PHP et Ruby.
Pour en savoir plus, y compris sur les instructions d'installation, l'authentification et le dépannage, consultez la documentation spécifique à la plate-forme indiquée ci-dessus.
Vous trouverez ci-dessous un exemple d'utilisation du SDK Google Cloud Storage:
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}"
API REST
Si vous utilisez un langage sans bibliothèque cliente, que vous souhaitez effectuer une action que les bibliothèques clientes ne font pas ou simplement utiliser votre client HTTP préféré, Google Cloud Storage propose des API pour JSON et XML.
En plus de ces API d'accès aux données de stockage, vous pouvez utiliser l'API Cloud Storage pour Firebase pour gérer les buckets Cloud Storage à utiliser dans les projets Firebase.
gsutil
gsutil
est un outil de ligne de commande qui vous donne un accès direct à Cloud Storage. Vous pouvez utiliser gsutil
pour effectuer un large éventail de tâches de gestion des buckets et des objets, y compris les suivantes:
- importer, télécharger et supprimer des objets ;
- répertorier des buckets et des objets ;
- déplacer, copier et renommer des objets ;
- modifier les listes de contrôle d'accès (LCA) des objets et des buckets.
gsutil
permet d'effectuer d'autres opérations avancées, telles que le déplacement de fichiers d'un répertoire à un autre ou la suppression de tous les fichiers situés en dessous d'un emplacement donné.
Pour déplacer tous les fichiers d'une référence à une autre, procédez comme suit:
gsutil mv gs://bucket/old/reference gs://bucket/new/reference
La suppression groupée de tous les fichiers sous une référence est tout aussi intuitive:
# 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
Taux de requêtes
Google Cloud Storage est un service hautement évolutif qui exploite la technologie d'autoscaling pour atteindre des taux de demandes très élevés.
Google Cloud Storage est un service multi-tenant, ce qui signifie que les utilisateurs partagent le même ensemble de ressources sous-jacentes. Afin d'utiliser au mieux ces ressources partagées, les buckets disposent d'une capacité d'E/S initiale.
Lorsque vous prévoyez d'intégrer Cloud Storage for Firebase à votre application, réfléchissez au débit de requêtes minimal dont votre application a besoin pour de bonnes performances et à la façon de formuler des requêtes de manière efficace. Consultez les consignes sur les taux de requêtes, en particulier sur l'augmentation des taux de requêtes.
Gestion des versions des objets
Avez-vous déjà supprimé quelque chose par accident sans avoir de sauvegarde ?
Google Cloud Storage est compatible avec la gestion des versions des objets, qui permet de sauvegarder automatiquement vos données et de les restaurer à partir de ces sauvegardes. Vous pouvez activer la gestion des versions des objets à l'aide de la commande gsutil
versioning set
:
gsutil versioning set on gs://<your-cloud-storage-bucket>
Cloud Storage récupère toujours la version la plus récente. Par conséquent, si vous souhaitez restaurer un objet, vous devez utiliser l'une des autres API ou des autres outils ci-dessus pour définir l'objet souhaité comme le plus récent.
Gestion du cycle de vie des objets
La possibilité d'archiver ou de supprimer automatiquement les fichiers obsolètes est une fonctionnalité utile pour de nombreuses applications. Heureusement, Google Cloud Storage fournit une gestion du cycle de vie des objets, qui vous permet de supprimer ou d'archiver des objets après un certain temps.
Prenons l'exemple d'une application de partage de photos dont vous souhaitez que toutes les photos soient supprimées dans un délai d'une journée. Vous pouvez configurer une règle de cycle de vie des objets comme suit:
// lifecycle.json { "lifecycle": { "rule": [ { "action": {"type": "Delete"}, "condition": {"age": 1} } ] } }
Déployez-le à l'aide de la commande lifecycle set
gsutil
:
gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>
Notez que cela s'applique à tous les fichiers du bucket. Par conséquent, si vous stockez des sauvegardes utilisateur importantes que vous souhaitez conserver pendant une longue période, ainsi que des photos que vous souhaitez supprimer quotidiennement, vous pouvez utiliser deux buckets distincts ou effectuer des suppressions manuellement avec gsutil
ou votre propre serveur.
Google Cloud Functions (bêta)
Google Cloud Functions est une solution de calcul légère et asynchrone basée sur les événements. Elle vous permet de créer de petites fonctions à application unique en réponse à des événements, sans avoir à gérer de serveur ni d'environnement d'exécution. Ces fonctions peuvent être utilisées pour transcoder des vidéos, classer des images à l'aide du machine learning ou synchroniser des métadonnées avec Firebase Realtime Database. Avec encore moins de frais généraux que App Engine, Cloud Functions est le moyen le plus rapide de réagir aux modifications de Cloud Storage.
Google Cloud Vision API
L'API Google Cloud Vision permet aux développeurs de comprendre le contenu d'une image en encapsulant des modèles de machine learning performants dans une API facile à utiliser. Il classe rapidement les images en milliers de catégories, détecte les objets et les visages individuels dans les images, recherche et lit les mots imprimés contenus dans les images, identifie les contenus offensants et fournit même une analyse des sentiments des images.
Google Cloud Speech API
Comme l'API Vision, l'API Google Cloud Speech permet aux développeurs d'extraire du texte à partir d'un fichier audio stocké dans Cloud Storage. L'API reconnaît plus de 80 langues et variantes pour s'adapter à votre base mondiale d'utilisateurs. En combinaison avec l'API Google Cloud Natural Language, les développeurs peuvent à la fois extraire le texte brut et en inférer la signification. Si vous souhaitez toucher une audience mondiale, associez-la à l'API Google Translate pour traduire le texte dans plus de 90 langues.
Google App Engine
Google App Engine est une solution Platform as a Service qui ajuste automatiquement la logique du backend en fonction du volume de trafic qu'il reçoit. Il vous suffit d'importer votre code backend, et Google gère la disponibilité de votre application. Vous n'avez pas besoin de provisionner ni de gérer de serveurs. App Engine est un moyen rapide et simple d'ajouter de la puissance de traitement ou une exécution fiable à votre application Firebase.
Si vous disposez d'un bucket Cloud Storage par défaut avec le format de nom PROJECT_ID.appspot.com
Les environnements standards Java, Python et Go pour App Engine incluent l'API App Engine Images (Java | Python | Go), qui peut redimensionner, faire pivoter, retourner et recadrer une image, ainsi que renvoyer une URL de diffusion d'image permettant des transformations côté client, comme Cloudinary et Imgix.
Lorsque vous importez un projet Google Cloud existant dans Firebase, si vous souhaitez mettre à disposition des objets App Engine existants dans Firebase, vous devez définir le contrôle d'accès par défaut sur vos objets pour autoriser Firebase à y accéder en exécutant la commande suivante à l'aide de gsutil
:
gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
Remarques concernant les fichiers Firebase Security Rules et App Engine
Si vous disposez d'un bucket Cloud Storage par défaut au format de nom *.appspot.com
Si vous configurez votre Firebase Security Rules pour un accès public (non authentifié), les fichiers App Engine nouvellement importés seront également accessibles au public.
Problèmes connus pour Cloud Storage et App Engine
Il existe deux cas connus où vous ne pouvez pas importer votre application App Engine:
- Le projet contient une ancienne application maître/esclave App Engine Datastore.
- Le projet comporte un ID de projet préfixé par un domaine, par exemple :
domain.com:project-1234
.
Dans les deux cas, le projet n'est pas compatible avec Cloud Storage for Firebase. Vous devez créer un projet Firebase pour utiliser Cloud Storage. Contactez l'assistance pour que nous puissions vous aider.