Un progetto Firebase è in realtà solo un progetto Google Cloud per il quale sono stati attivati configurazioni e servizi aggiuntivi specifici di Firebase. Ciò significa che ogni bucket Cloud Storage che utilizzi con Cloud Storage for Firebase è accessibile in Google Cloud (incluse la console e le API).
L'integrazione con Google Cloud, inclusa l'importazione dei bucket Cloud Storageesistenti, richiede un progetto Firebase con il piano tariffario Blaze con pagamento a consumo.
Considerazioni per gli account di servizio
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:
.
Per saperne di più, consulta la panoramica degli account di servizio Firebase.
Google Cloud Storage
Puoi utilizzare le API 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 oppure elencare tutti i file disponibili in un riferimento.
È importante notare che queste richieste utilizzano le Google Cloud Storage opzioni di controllo dell'accesso, anziché Firebase Authentication e Cloud Storage Security Rules.
API
Oltre agli SDK Firebase per Cloud Storage, esistono molti altri modi per accedere ai dati archiviati nel bucket Cloud Storage, a seconda di ciò che vuoi fare. Se accedi ai dati su un server, offriamo librerie lato server e un'API RESTful XML
compatibile con JSON
e S3 oppure se devi modificare uno script o eseguire altre attività amministrative, puoi utilizzare uno strumento a riga di comando molto utile.
SDK server Google Cloud
Google Cloud offre SDK di 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, tra cui istruzioni di installazione, autenticazione e risoluzione dei problemi, consulta la documentazione specifica della piattaforma disponibile al link sopra.
Di seguito è riportato un esempio di utilizzo dell'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
Se utilizzi un linguaggio senza una libreria client, vuoi eseguire un'operazione non supportata dalle librerie client o preferisci utilizzare un client HTTP preferito, Google Cloud Storage offre API sia per JSON sia 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 per Firebase.
gsutil
gsutil
è uno strumento a riga di comando che ti consente di accedere direttamente a Cloud Storage. Puoi utilizzare gsutil
per eseguire una vasta gamma di attività di gestione di bucket e oggetti, tra cui:
- Caricamento, download ed eliminazione di oggetti.
- Elenco di bucket e oggetti.
- Spostamento, copia e ridenominazione di oggetti.
- Modifica degli ACL di oggetti e bucket.
gsutil
consentono altre operazioni avanzate, come lo spostamento di file da una directory all'altra o l'eliminazione di tutti i file sotto una determinata posizione.
Per spostare tutti i file da un riferimento all'altro, è sufficiente:
gsutil mv gs://bucket/old/reference gs://bucket/new/reference
L'eliminazione collettiva 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
Tariffe per le richieste
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 insieme di risorse di base. 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, tieni conto della frequenza minima di richieste di cui ha bisogno la tua app per un buon rendimento e di come effettuare le richieste in modo efficiente. Consulta le linee guida sulle percentuali di richieste, e in particolare sull'aumento del tasso di richieste.
Controllo delle versioni degli oggetti
Hai mai eliminato qualcosa per errore e non avevi un backup?
Google Cloud Storage supporta il controllo delle versioni degli oggetti, che fornisce un modo automatico per eseguire il backup dei dati e il ripristino da questi backup. Puoi attivare il controllo delle versioni degli oggetti utilizzando il comando gsutil
versioning set
:
gsutil versioning set on gs://<your-cloud-storage-bucket>
Cloud Storage sceglie sempre la versione più recente, quindi se vuoi ripristinare un oggetto, devi utilizzare una delle altre API o degli altri strumenti indicati sopra per impostare l'oggetto desiderato come più recente.
Gestione del ciclo di vita degli oggetti
La possibilità di archiviare o eliminare automaticamente i file obsoleti è una funzionalità utile per molte applicazioni. Fortunatamente, Google Cloud Storage offre la gestione del ciclo di vita degli oggetti, che ti consente di eliminare o archiviare gli oggetti dopo un determinato periodo di tempo.
Considera un'applicazione di condivisione di foto per la quale vuoi che tutte le foto vengano eliminate entro un giorno. Puoi configurare un criterio del ciclo di vita degli oggetti come segue:
// lifecycle.json { "lifecycle": { "rule": [ { "action": {"type": "Delete"}, "condition": {"age": 1} } ] } }
ed esegui il deployment utilizzando il comando lifecycle set
gsutil
:
gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>
Tieni presente che questo vale per tutti i file del bucket, quindi se accanto ai backup utente importanti che vuoi conservare per molto tempo memorizzi foto che vuoi eliminare ogni giorno, ti consigliamo di utilizzare due bucket distinti o di eseguire le eliminazioni manualmente con gsutil
o con il tuo server.
Google Cloud Functions (beta)
Google Cloud Functions è una soluzione di calcolo asincrona e 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 di runtime. Queste funzioni possono essere utilizzate per transcodificare i video, classificare le immagini utilizzando il machine learning o sincronizzare i metadati con Firebase Realtime Database. Con un overhead ancora inferiore rispetto a App Engine, Cloud Functions è il modo più rapido per reagire alle modifiche in Cloud Storage.
Google Cloud Vision API
L'API Google Cloud Vision consente agli sviluppatori di comprendere i contenuti di un'immagine integrando efficaci modelli di machine learning in un'API facile da usare. Classifica rapidamente le immagini in migliaia di categorie, rileva singoli oggetti e volti all'interno delle immagini, trova e legge le parole stampate all'interno delle 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 il 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 combinata con l'API Google Cloud Natural Language, consente agli sviluppatori di estrarre il testo non elaborato e di dedurre il relativo significato. Se hai bisogno di un pubblico globale, abbina questa funzionalità all'API Google Traduttore per tradurre il testo in oltre 90 lingue.
Google App Engine
Google App Engine è una "piattaforma come servizio" che scala automaticamente la logica di backend in risposta alla quantità di traffico che riceve. Basta caricare il codice di backend e Google gestirà la disponibilità della tua app. Non dovrai eseguire il provisioning o la manutenzione di server. App Engine è un modo rapido e semplice per aggiungere potenza di elaborazione o esecuzione attendibile alla tua applicazione Firebase.
Se hai un bucket Cloud Storage predefinito con il formato del nome PROJECT_ID.appspot.com
Gli ambienti standard Java, Python e Go per App Engine includono l'API Images App Engine (Java | Python | Go), che può ridimensionare, ruotare, capovolgere e ritagliare un'immagine, nonché restituire un URL di pubblicazione delle immagini che consente trasformazioni lato client simili a Cloudinary e Imgix.
Quando importi un progetto Google Cloud esistente in Firebase, se vuoi
rendere disponibili in Firebase gli oggetti App Engine esistenti, devi 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@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
Considerazioni sui file Firebase Security Rules e App Engine
Se hai un bucket Cloud Storage predefinito con un formato del nome di
*.appspot.com
Se configuri Firebase Security Rules per l'accesso pubblico (non autenticato), renderai pubblicamente accessibili anche i file App Engine appena caricati.
Problemi noti di Cloud Storage e App Engine
Esistono due casi noti in cui non puoi importare l'app App Engine:
- Il progetto contiene una precedente app App Engine Datastore Master/Slave.
- Il progetto ha un ID progetto con un dominio predefinito, ad esempio:
domain.com:project-1234
.
In entrambi i casi, il progetto non supporterà Cloud Storage for Firebase e dovrai creare un nuovo progetto Firebase per poter utilizzare Cloud Storage. Contatta l'assistenza per consentirci di aiutarti.