Catch up on highlights from Firebase at Google I/O 2023. Learn more

Integra con Google Cloud

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

Firebase utilizza gli account di servizio Google Cloud per operare e gestire i servizi senza condividere le credenziali 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 di supporto di Firebase per ulteriori informazioni.

Sotto il cofano, gli SDK Firebase per Cloud Storage utilizzano il bucket predefinito nel livello senza costi di App Engine . Ciò ti consente di iniziare rapidamente a utilizzare Cloud Storage, senza dover inserire una carta di credito o abilitare un account Cloud Billing. Ti consente inoltre di condividere facilmente i dati tra Firebase e un progetto Google Cloud.

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

Archiviazione cloud di Google

Puoi utilizzare le API di Google Cloud Storage per accedere ai file caricati tramite gli SDK di 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 tuo bucket Cloud Storage, a seconda di cosa desideri fare. Se stai accedendo ai dati su un server, offriamo librerie lato server, nonché un'API RESTful XML compatibile con JSON e S3, oppure se hai bisogno di apportare modifiche allo script o eseguire altre attività amministrative, abbiamo uno strumento a 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, tra cui Cloud Storage. Queste librerie sono disponibili in Node.js , Java , go , Python , PHP e Ruby .

Per ulteriori informazioni, comprese le istruzioni di installazione, l'autenticazione e la 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 stai utilizzando una lingua senza una libreria client, vuoi fare qualcosa che le librerie client non fanno o hai semplicemente un client HTTP preferito che preferiresti usare, 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 a 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 al di sotto di 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 ottenere 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à di I/O iniziale.

Quando pianifichi di integrare Cloud Storage per Firebase nella tua app, pensa a una percentuale di richieste minima di cui la tua app ha bisogno 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

Hai mai cancellato qualcosa per sbaglio e non hai avuto un backup? Google Cloud Storage supporta Object Versioning , che fornisce un modo automatico per eseguire il backup dei dati e ripristinare da tali backup. Puoi abilitare Object Versioning 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 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 caratteristica utile per molte applicazioni. Fortunatamente, Google Cloud Storage fornisce la gestione del ciclo di vita degli oggetti , che ti consente di eliminare o archiviare gli oggetti dopo un certo periodo di tempo.

Considera un'applicazione di condivisione di foto che desideri eliminare tutte le foto entro un giorno. È possibile configurare una policy del ciclo di vita dell'oggetto come segue:

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

E distribuiscilo usando 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 backup utente importanti 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'app

App Engine è una "piattaforma come servizio" che ridimensiona automaticamente la logica di backend in risposta alla quantità di traffico che riceve. Carica il tuo codice di backend e Google gestirà la disponibilità della tua app; non ci sono server da fornire o mantenere. App Engine è un modo rapido e semplice per aggiungere ulteriore potenza di elaborazione o un'esecuzione attendibile alla tua applicazione Firebase.

Gli SDK di Firebase per Cloud Storage utilizzano il bucket predefinito di App Engine, il che significa che se crei un'app di App Engine, puoi utilizzare le API di App Engine integrate per condividere i 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 App Engine Images ( Java , Python , che può ridimensionare, ruotare, capovolgere e ritagliare un'immagine, nonché restituire un URL di pubblicazione di immagini che consente trasformazioni lato client , simile a Cloudinary e Imgix.

Quando importi un progetto Google Cloud esistente in Firebase, se desideri rendere disponibili oggetti App Engine esistenti in Firebase, 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 di dominio, ad esempio: domain.com:project-1234 .

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

Funzioni di Google Cloud (beta)

Google Cloud Functions è una soluzione di calcolo asincrona leggera, basata sugli eventi che ti consente di creare piccole funzioni monouso che rispondono agli eventi senza la necessità di gestire un server o un ambiente di runtime. Queste funzioni possono essere utilizzate per transcodificare video, classificare le immagini utilizzando l'apprendimento automatico o sincronizzare i 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 visione di Google Cloud

L' API Google Cloud Vision consente agli sviluppatori di comprendere il contenuto di un'immagine incapsulando potenti modelli di machine learning in un'API di facile utilizzo. 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 i contenuti offensivi e fornisce persino un'analisi del sentiment dell'immagine.

API vocale di Google Cloud

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