Integra con Google Cloud

Cloud Storage for Firebase è strettamente integrato con Google Cloud . Gli SDK Firebase per Cloud Storage archiviano i file direttamente nei bucket Google Cloud Storage e, man mano che la tua app cresce, puoi integrare facilmente altri servizi Google Cloud, come elaborazione gestita come App Engine o Cloud Functions o API di machine learning come Cloud Vision o Google Tradurre.

Firebase utilizza gli account del servizio Google Cloud per eseguire e gestire i servizi senza condividere le credenziali dell'utente. Quando crei un progetto Firebase che utilizza Cloud Storage, potresti notare che un account di servizio corrispondente è già disponibile nel tuo progetto: service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com . Consulta questa guida al supporto di Firebase per ulteriori informazioni.

Dietro le quinte, gli SDK Firebase per Cloud Storage utilizzano il bucket predefinito nel livello senza costi di App Engine . Ciò ti consente di diventare subito operativo con Cloud Storage, senza dover inserire una carta di credito o abilitare un account di fatturazione Cloud. Ti consente inoltre di condividere facilmente i dati tra Firebase e un progetto Google Cloud.

L'integrazione con Google Cloud, inclusa l'importazione dei bucket Cloud Storage esistenti, richiede un progetto Firebase sul piano Blaze. Scopri di più sui piani nella nostra pagina dei prezzi .

Archiviazione Google Cloud

Puoi utilizzare le API di Google Cloud Storage per accedere ai file caricati tramite gli SDK Firebase per Cloud Storage, in particolare per eseguire operazioni più complesse, come copiare o spostare un file o elencare tutti i file disponibili in un riferimento.

È importante notare che queste richieste utilizzano le opzioni di controllo dell'accesso di Google Cloud Storage anziché l'autenticazione Firebase e le regole di sicurezza di Cloud Storage.

API

Oltre agli SDK Firebase per Cloud Storage, esistono diversi altri modi per accedere ai dati archiviati nel bucket Cloud Storage, a seconda di cosa desideri fare. Se accedi ai dati su un server, offriamo librerie lato server, nonché un'API RESTful XML compatibile con JSON e S3, oppure se hai bisogno di creare script di modifiche o eseguire altre attività amministrative, abbiamo uno strumento da riga di comando che tornerà utile.

SDK del server Google Cloud

Google Cloud offre SDK server di alta qualità per una serie di prodotti cloud, incluso Cloud Storage. Queste librerie sono disponibili in Node.js , Java , go , Python , PHP e Ruby .

Per ulteriori informazioni, comprese le istruzioni di installazione, autenticazione e risoluzione dei problemi, consultare la documentazione specifica della piattaforma collegata sopra.

Di seguito è riportato un esempio di utilizzo dell'SDK di 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) {});
    

Giava

    // 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();
    

Andare

    // 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)
    }
    

Pitone

    # 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');
    

Rubino

    # 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

Se utilizzi un linguaggio senza libreria client, vuoi fare qualcosa che le librerie client non fanno o semplicemente hai un client HTTP preferito che preferiresti utilizzare, Google Cloud Storage offre API sia per JSON che per XML .

Oltre a queste API di accesso ai dati di archiviazione, per gestire i bucket Cloud Storage da utilizzare nei progetti Firebase, puoi utilizzare l' API Cloud Storage for Firebase .

gsutil

gsutil è uno strumento da riga di comando che ti dà accesso diretto a Cloud Storage. Puoi utilizzare gsutil per eseguire un'ampia gamma di attività di gestione di bucket e oggetti, tra cui:

  • Caricamento, download ed eliminazione di oggetti.
  • Elenco di bucket e oggetti.
  • Spostare, copiare e rinominare oggetti.
  • Modifica degli ACL di oggetti e bucket.

gsutil consente altre operazioni avanzate, come lo spostamento di file da una directory a un'altra o l'eliminazione di tutti i file sotto una determinata posizione.

Spostare tutti i file da un riferimento all'altro è facile come:

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

L'eliminazione in batch di tutti i file sotto un riferimento è altrettanto intuitiva:

# 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

Richiedi tariffe

Google Cloud Storage è un servizio altamente scalabile che utilizza la tecnologia di scalabilità automatica per raggiungere tassi di richiesta molto elevati.

Google Cloud Storage è un servizio multi-tenant, il che significa che gli utenti condividono lo stesso set di risorse sottostanti. Per utilizzare al meglio queste risorse condivise, i bucket hanno una capacità IO iniziale.

Quando prevedi di integrare Cloud Storage for Firebase nella tua app, pensa alla percentuale minima di richieste necessaria alla tua app per ottenere buone prestazioni e a come effettuare le richieste in modo efficiente. Esaminare le linee guida sui tassi di richiesta e in particolare sull'aumento dei tassi di richiesta .

Controllo delle versioni degli oggetti

Ti è mai capitato di cancellare qualcosa per sbaglio e di non avere un backup? Google Cloud Storage supporta il controllo delle versioni degli oggetti , che fornisce un modo automatico per eseguire il backup dei dati e ripristinarli da tali backup. Puoi abilitare il controllo delle versioni degli oggetti utilizzando il comando gsutil versioning set :

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

Cloud Storage preleva sempre la versione più recente, quindi se desideri ripristinare un oggetto, devi utilizzare una delle altre API o strumenti sopra indicati per impostare l'oggetto desiderato come il più recente.

Gestione del ciclo di vita degli oggetti

Avere la possibilità di archiviare o eliminare automaticamente i file obsoleti è una funzionalità utile per molte applicazioni. Fortunatamente, Google Cloud Storage fornisce la gestione del ciclo di vita degli oggetti , che consente di eliminare o archiviare gli oggetti dopo un certo periodo di tempo.

Considera un'applicazione di condivisione di foto con cui desideri che tutte le foto vengano eliminate entro un giorno. È possibile impostare una policy del ciclo di vita dell'oggetto come segue:

// lifecycle.json
{
  "lifecycle": {
    "rule":
    [
      {
        "action": {"type": "Delete"},
        "condition": {"age": 1}
      }
    ]
  }
}

E distribuiscilo utilizzando il comando gsutil lifecycle set :

gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>

Tieni presente che questo si applica a tutti i file nel bucket, quindi se stai archiviando importanti backup utente che desideri archiviare per lungo tempo insieme alle foto laterali che desideri eliminare quotidianamente, potresti voler utilizzare due bucket separati o eseguire le eliminazioni manualmente con gsutil o il tuo server.

Motore dell'applicazione

App Engine è una "Platform as a Service" che ridimensiona automaticamente la logica di backend in risposta alla quantità di traffico che riceve. Carica semplicemente il tuo codice backend e Google gestirà la disponibilità della tua app; non ci sono server da fornire o mantenere. App Engine è un modo semplice e veloce per aggiungere ulteriore potenza di elaborazione o esecuzione affidabile alla tua applicazione Firebase.

Gli SDK Firebase per Cloud Storage utilizzano il bucket predefinito di App Engine, il che significa che se crei un'app App Engine, puoi utilizzare le API App Engine integrate per condividere dati tra Firebase e App Engine. Ciò è utile per eseguire la codifica audio, la transcodifica video e le trasformazioni di immagini, nonché altre elaborazioni in background ad alta intensità di calcolo.

Gli ambienti Java, Python e go Standard per App Engine includono l'API Immagini di App Engine ( Java , Python , che può ridimensionare, ruotare, capovolgere e ritagliare un'immagine, nonché restituire un URL di servizio immagine che consente trasformazioni lato client , simile a Cloudinary e Imgix.

Quando importi un progetto Google Cloud esistente in Firebase, se desideri rendere disponibili in Firebase eventuali oggetti App Engine esistenti, dovrai impostare il controllo di accesso predefinito sui tuoi oggetti per consentire a Firebase di accedervi eseguendo il seguente comando utilizzando gsutil :

gsutil -m acl ch -r -u service-<project number;gt@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://<your-cloud-storage-bucket>

Problemi noti

Esistono due casi noti in cui non puoi importare la tua app App Engine:

  1. Il progetto contiene una precedente app App Engine Datastore Master/Slave.
  2. Il progetto ha un ID progetto con prefisso dominio, ad esempio: domain.com:project-1234 .

In entrambi i casi, il progetto non supporterà Cloud Storage for Firebase e dovresti creare un nuovo progetto Firebase per poter utilizzare Cloud Storage. Contatta l'assistenza in modo che possiamo aiutarti.

Funzioni Google Cloud (Beta)

Google Cloud Functions è una soluzione di elaborazione asincrona leggera, basata su eventi che ti consente di creare piccole funzioni monouso che rispondono agli eventi senza la necessità di gestire un server o un ambiente runtime. Queste funzioni possono essere utilizzate per la transcodifica di video, la classificazione di immagini utilizzando l'apprendimento automatico o la sincronizzazione dei metadati con Firebase Realtime Database. Con un sovraccarico ancora inferiore rispetto ad App Engine, Cloud Functions è il modo più veloce per reagire ai cambiamenti in Cloud Storage.

API di Google Cloud Vision

L' API Google Cloud Vision consente agli sviluppatori di comprendere il contenuto di un'immagine incapsulando potenti modelli di machine learning in un'API facile da utilizzare. Classifica rapidamente le immagini in migliaia di categorie, rileva singoli oggetti e volti all'interno delle immagini, trova e legge le parole stampate contenute nelle immagini, identifica contenuti offensivi e fornisce persino l'analisi del sentiment delle immagini.

API Google Cloud Speech

Analogamente all'API Vision, l' API Google Cloud Speech consente agli sviluppatori di estrarre testo da un file audio archiviato in Cloud Storage. L'API riconosce oltre 80 lingue e varianti, per supportare la tua base utenti globale. Se combinati con l' API Google Cloud Natural Language , gli sviluppatori possono estrarre il testo non elaborato e dedurre il significato di quel testo. E se è necessario un pubblico globale, abbinalo all'API di Google Translate per tradurre il testo in oltre 90 lingue.