Intégration à Google Cloud

Cloud Storage for Firebase est étroitement intégré à Google Cloud. Les SDK Firebase pour Cloud Storage stockent les fichiers directement dans les buckets Google Cloud Storage. À mesure que votre application se développe, vous pouvez intégrer d'autres services Google Cloud, tels que le calcul géré comme App Engine ou Cloud Functions, ou les API de machine learning comme Cloud Vision ou Google Translate.

Un projet Firebase est en fait un projet Google Cloud pour lequel des configurations et services Firebase supplémentaires 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.

Points à prendre en compte pour les comptes de service

Firebase utilise des comptes de service Google Cloud pour faire fonctionner et gérer les services sans partager les identifiants des utilisateurs. Lorsque vous créez un projet Firebase qui utilise Cloud Storage, vous remarquerez peut-être qu'un compte de service correspondant est déjà disponible dans votre projet : service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com. Pour en savoir plus, consultez 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 lister tous les fichiers disponibles à 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 façons d'accéder aux données stockées dans votre bucket Cloud Storage, selon 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. Si vous avez besoin de créer des scripts pour apporter des modifications ou effectuer d'autres tâches administratives, nous avons un outil de ligne de commande qui vous sera utile.

SDK de serveur Google Cloud

Google Cloud propose des SDK serveur de haute qualité pour un certain nombre de produits cloud, y compris Cloud Storage. Ces bibliothèques sont disponibles dans 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 dont le lien est fourni 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 permettent pas ou que vous avez simplement un client HTTP préféré que vous souhaitez utiliser, 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 afin de 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 un large éventail de tâches de gestion des buckets et des objets, y compris :

  • 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 permettent d'effectuer d'autres opérations avancées, comme déplacer des fichiers d'un répertoire vers un autre ou supprimer tous les fichiers situés sous un certain emplacement.

Pour déplacer tous les fichiers d'une référence vers une autre, il vous suffit de procéder comme suit :

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

La suppression par lot de tous les fichiers situés 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 ultra évolutif qui exploite la technologie d'autoscaling pour atteindre des taux de demandes très élevés.

Google Cloud Storage est un service mutualisé, ce qui signifie que les utilisateurs partagent le même ensemble de ressources sous-jacentes. Afin d'optimiser l'utilisation de ces ressources partagées, les buckets ont une capacité d'E/S initiale.

Lorsque vous prévoyez d'intégrer Cloud Storage for Firebase à votre application, réfléchissez au taux de requête minimal dont votre application a besoin pour de bonnes performances et à la manière d'effectuer des requêtes de manière efficace. Consultez les consignes concernant les taux de requêtes, et en particulier l'augmentation progressive des taux de requêtes.

Gestion des versions des objets

Vous est-il déjà arrivé de supprimer un élément par erreur et de ne pas 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 d'objets à l'aide de la commande gsutil versioning set :

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

Cloud Storage sélectionne 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 l'un 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 la 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 dans laquelle vous souhaitez que toutes les photos soient supprimées sous un jour. 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 gsutil lifecycle set :

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 longtemps à côté de photos que vous souhaitez supprimer quotidiennement, vous pouvez utiliser deux buckets distincts ou effectuer les suppressions manuellement avec gsutil ou votre propre serveur.

Google Cloud Functions (bêta)

Google Cloud Functions est une solution de calcul légère, asynchrone et basée sur les événements. Elle vous permet de créer de petites fonctions à usage unique qui répondent aux é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 surcharge que App Engine, Cloud Functions est le moyen le plus rapide de réagir aux modifications apportées à Cloud Storage.

Google Cloud Vision API

L'API Google Cloud Vision permet aux développeurs de comprendre le contenu d'une image en encapsulant de puissants modèles de machine learning dans une API facile à utiliser. Elle classe rapidement les images dans des milliers de catégories, détecte les objets et les visages dans les images, trouve 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. Combinée à l'API Google Cloud Natural Language, elle permet aux développeurs d'extraire le texte brut et d'en déduire la signification. Si vous avez besoin d'une audience mondiale, associez cette fonctionnalité à l'API Google Translate pour traduire le texte dans plus de 90 langues.

Google App Engine

Google App Engine est une plate-forme en tant que service qui met automatiquement à l'échelle la logique de backend en fonction du volume de trafic qu'elle reçoit. Importez simplement votre code de backend, et Google gère la disponibilité de votre application. Vous n'avez pas besoin de provisionner ni de gérer de serveur. App Engine est un moyen rapide et simple d'ajouter de la puissance de traitement ou une exécution de confiance à votre application Firebase.

Si vous disposez d'un bucket Cloud Storage par défaut dont le nom est au format PROJECT_ID.appspot.com, il est automatiquement partagé avec une application App Engine de votre projet. Cela signifie que si vous créez une application App Engine, vous pouvez utiliser les API App Engine intégrées pour partager des données entre ce bucket et App Engine. Cela s'avère utile pour effectuer l'encodage audio, le transcodage vidéo et les transformations d'images, ainsi que d'autres traitements en arrière-plan nécessitant beaucoup de ressources de calcul.

Les environnements standards Java, Python et Go pour App Engine incluent l'API Images App Engine (Java | Python | Go), qui peut redimensionner, faire pivoter, inverser et recadrer une image, ainsi que renvoyer une URL de diffusion d'image permettant des transformations côté client, semblables à Cloudinary et Imgix.

Lorsque vous importez un projet Google Cloud existant dans Firebase, si vous souhaitez rendre des objets App Engine existants disponibles dans Firebase, vous devez définir le contrôle d'accès par défaut sur vos objets pour permettre à Firebase d'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 dont le nom est au format *.appspot.com, votre projet possède également une application App Engine qui partage ce bucket.

Si vous configurez votre Firebase Security Rules pour un accès public (non authentifié), les fichiers App Engine que vous importerez seront également accessibles au public.

Problèmes connus concernant Cloud Storage et App Engine

Il existe deux cas connus dans lesquels vous ne pouvez pas importer votre application App Engine :

  1. Le projet contient une ancienne application App Engine Datastore maître/esclave.
  2. L'ID du projet est préfixé par un domaine, par exemple : domain.com:project-1234.

Dans l'un ou l'autre de ces cas, le projet ne sera pas compatible avec Cloud Storage for Firebase. Vous devrez donc créer un projet Firebase pour utiliser Cloud Storage. Contactez l'assistance pour que nous puissions vous aider.