Integra con Google Cloud

Cloud Storage per Firebase è strettamente integrato con Google Cloud . Gli SDK 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 API di machine learning come Cloud Vision o Google Tradurre.

Firebase utilizza gli account del servizio Google Cloud per operare 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 di supporto di Firebase per ulteriori informazioni.

Sotto il cofano, gli SDK Firebase per Cloud Storage utilizzano il bucket predefinito nel livello gratuito di App Engine . Ciò ti consente di iniziare rapidamente a utilizzare 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 di bucket Cloud Storage esistenti, richiede un progetto Firebase sul 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 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, ci sono molti altri modi per accedere ai dati archiviati nel tuo bucket Cloud Storage, a seconda di cosa vuoi fare. Se accedi ai dati su un server, offriamo librerie lato server, nonché un'API RESTful XML compatibile con JSON e S3, o se hai bisogno di modificare lo script o eseguire altre attività amministrative, abbiamo uno strumento da riga di comando che tornerà utile.

SDK del server Google Cloud

Google Cloud offre SDK per server di alta qualità per numerosi 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 per 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) {});
    

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 semplicemente avere un client HTTP preferito che preferisci utilizzare, Google Cloud Storage offre API sia per JSON che XML .

Oltre a queste API di accesso ai dati di archiviazione, per gestire i bucket di 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 secchi e oggetti.
  • Spostare, copiare e rinominare oggetti.
  • Modifica di ACL di oggetti e bucket.

gsutil consente altre operazioni avanzate, come lo spostamento di file da una directory all'altra o l'eliminazione di tutti i file in 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 ridimensionamento automatico per ottenere tassi di richiesta molto elevati.

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

Quando prevedi 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 fare richieste in modo efficiente. Rivedere 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 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 usando 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 Object Lifecycle Management , che ti consente di eliminare o archiviare oggetti dopo un certo periodo di tempo.

Prendi in considerazione un'applicazione di condivisione di foto in cui desideri che tutte le foto vengano eliminate entro un giorno. È possibile impostare una policy del ciclo di vita degli oggetti 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 vale per tutti i file nel bucket, quindi se stai archiviando backup utente importanti che desideri archiviare a lungo 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 per app

App Engine è una "Piattaforma come servizio" che ridimensiona automaticamente la logica di back-end in risposta alla quantità di traffico che riceve. Basta caricare 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 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 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 delle immagini di App Engine ( Java , Python , che può ridimensionare, ruotare, capovolgere e ritagliare un'immagine, oltre a restituire un URL di pubblicazione delle 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 comando seguente 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 prefisso di dominio, ad esempio: domain.com:project-1234 .

In nessuno di questi casi, il progetto non supporterà Cloud Storage per Firebase ed è necessario creare un nuovo progetto Firebase per utilizzare Cloud Storage. Contatta l'assistenza in modo che possiamo aiutarti.

Funzioni Google Cloud (beta)

Google Cloud Functions è una soluzione di calcolo asincrona leggera, basata su eventi che 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 la transcodifica di video, la classificazione delle immagini tramite l'apprendimento automatico o la sincronizzazione dei metadati con il database Firebase Realtime. 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 di Google Cloud Vision consente agli sviluppatori di comprendere il contenuto di un'immagine incapsulando potenti modelli di machine learning in un'API facile da usare. Classifica rapidamente le immagini in migliaia di categorie, rileva i singoli oggetti e volti all'interno delle immagini, trova e legge le parole stampate contenute nelle immagini, identifica i contenuti offensivi e fornisce persino l'analisi del sentimento dell'immagine.

API vocale di Google Cloud

Simile 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 di utenti globale. In combinazione con l' API Google Cloud Natural Language , gli sviluppatori possono sia estrarre il testo non elaborato sia dedurre il significato di quel testo. E se è richiesto un pubblico globale, abbinalo all'API di Google Translate per tradurre il testo in oltre 90 lingue.