Firebase usa cuentas de servicio de Google Cloud para operar y administrar servicios
sin compartir credenciales de usuario. Cuando crees un proyecto de Firebase que use
Cloud Storage, podrías observar que una cuenta de servicio correspondiente
ya está disponible en tu proyecto:
service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com
. Consulta
esta guía de asistencia de Firebase para obtener más
información.
De forma interna, los SDK de Firebase para Cloud Storage usan el bucket predeterminado en el nivel sin costo de App Engine. Esto te permite comenzar a utilizar Cloud Storage rápidamente, sin necesidad de ingresar una tarjeta de crédito ni habilitar una cuenta de Facturación de Cloud. También te permite compartir datos fácilmente entre Firebase y un proyecto de Google Cloud.
La integración a Google Cloud, incluida la importación de buckets existentes de Cloud Storage, requiere un proyecto de Firebase que tenga el plan Blaze. Obtén más información acerca de los planes en nuestra página de precios.
Google Cloud Storage
Puedes usar las APIs de Google Cloud Storage para acceder a archivos subidos mediante los SDK de Firebase para Cloud Storage, en especial para ejecutar operaciones más complejas, como copiar o trasladar un archivo, o crear una lista de todos los archivos disponibles en una referencia.
Es importante que tengas en cuenta que estas solicitudes usan las opciones de control de acceso de Google Cloud Storage en lugar de Firebase Authentication y las reglas de seguridad de Cloud Storage.
API
Además de los SDK de Firebase para Cloud Storage, existen otras formas
de acceder a los datos almacenados en tu bucket de Cloud Storage, según lo que desees
hacer. Si accedes a los datos en un servidor, te ofrecemos bibliotecas
del servidor, al igual que una API de RESTful XML
compatible con JSON
y S3. Si necesitas
ejecutar secuencias de comandos de cambios o realizar otras tareas administrativas, tenemos una
herramienta de línea de comandos que te será útil.
SDK de servidores de Google Cloud
Google Cloud ofrece SDK de servidores de alta calidad para diversos productos de nube, incluido Cloud Storage. Estas bibliotecas se encuentran disponibles en Node.js, Java, Go, Python, PHP y Ruby.
Para obtener más información, incluidas las instrucciones de instalación, autenticación y solución de problemas, consulta la documentación específica de la plataforma vinculada anteriormente.
Aquí encontrarás ejemplos de uso del SDK de 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 de REST
Si usas un lenguaje sin una biblioteca cliente, quieres hacer algo que las bibliotecas cliente no admiten o simplemente tienes un cliente HTTP favorito que prefieres usar, Google Cloud Storage ofrece API para JSON y XML
Además de estas API de acceso a datos de almacenamiento, puedes usar la API de Cloud Storage para Firebase a fin de administrar los buckets de Cloud Storage para usarlos en proyectos de Firebase.
gsutil
gsutil
es una herramienta
de línea de comandos que te da acceso directo a Cloud Storage. Puedes usar gsutil
para realizar una gran variedad de tareas de administración de objetos y buckets, como las siguientes:
- Subir, descargar y borrar objetos
- Crear listas de depósitos y objetos
- Mover, copiar y cambiar nombres de objetos
- Editar LCA de objetos y depósitos
gsutil
permite otras operaciones avanzadas, como mover archivos de un directorio a otro o borrar todos los archivos en una ubicación determinada.
Mover todos los archivos de una referencia a otra es tan fácil como se muestra a continuación:
gsutil mv gs://bucket/old/reference gs://bucket/new/reference
Borrar todos los archivos en una referencia por lote es un proceso casi igual de intuitivo:
# 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
Porcentajes de solicitudes
Google Cloud Storage es un servicio con alta escalabilidad que usa tecnología de ajuste de escala automático para lograr porcentajes de solicitudes muy altos.
Google Cloud Storage es un servicio multiusuario, lo que significa que los usuarios comparten el mismo conjunto de recursos subyacentes. Para aprovechar al máximo estos recursos compartidos, los buckets tienen una capacidad inicial de E/S.
Cuando planees integrar Cloud Storage para Firebase en tu app, considera un porcentaje de solicitudes mínimo que necesite la app para tener un buen rendimiento y también cómo realizar solicitudes de manera eficiente. Revisa los lineamientos sobre los porcentajes de solicitudes y, en especial, sobre cómo aumentar el porcentaje de solicitudes.
Control de versiones de los objetos
¿Alguna vez borraste información por accidente sin tener copias de seguridad de ella?
Google Cloud Storage es compatible con el
control de versiones de objetos,
que proporciona una manera automática de crear copias de seguridad de tus datos y de restablecerlos a partir de esas
copias. Puedes habilitar el control de versiones de objetos mediante el comando
gsutil
versioning set
:
gsutil versioning set on gs://<your-cloud-storage-bucket>
Cloud Storage siempre toma la versión más reciente, de modo que si deseas restablecer un objeto, debes usar una de las otras API o herramientas descritas previamente para establecer el objeto que desees como el más reciente.
Administración del ciclo de vida de los objetos
Tener la capacidad de archivar o borrar archivos inactivos de forma automática es una función útil para muchas aplicaciones. Afortunadamente, Google Cloud Storage proporciona la Administración del ciclo de vida de los objetos, que te permite borrar o archivar objetos después de un período determinado.
Piensa en una aplicación para compartir fotos en la que deseas borrar todas las fotos al cabo de un día. Puedes configurar una política de ciclo de vida de objeto de la siguiente forma:
// lifecycle.json { "lifecycle": { "rule": [ { "action": {"type": "Delete"}, "condition": {"age": 1} } ] } }
Para implementarla, usa el comando gsutil
lifecycle set
:
gsutil lifecycle set lifecycle.json gs://<your-cloud-storage-bucket>
Ten en cuenta que esto se aplica a todos los archivos del bucket. Por lo tanto, si almacenas copias de seguridad de usuarios importantes que deseas mantener por un largo tiempo junto con fotos que deseas borrar a diario, te recomendamos usar dos depósitos distintos o ejecutar eliminaciones de forma manual con gsutil
o tu propio servidor.
App Engine
App Engine es una “plataforma como servicio” que escala la lógica del backend de forma automática en respuesta a la cantidad de tráfico que recibe. Solo debes subir tu código de backend y Google administrará la disponibilidad de tu app, sin necesidad de que aprovisiones o mantengas ningún servidor. App Engine es una forma rápida y fácil de agregar poder de procesamiento o ejecución de confianza a tu aplicación de Firebase.
Los SDK de Firebase para Cloud Storage usan el bucket predeterminado de App Engine, por lo que, si compilas una aplicación de App Engine, puedes usar las API integradas de esta plataforma para compartir datos entre Firebase y App Engine. Esto es útil para ejecutar codificaciones de audio, transcodificaciones de video y transformaciones de imagen, así como otras tareas de procesamiento intensivo en segundo plano.
Los entornos estándar de Java, Python y Go para App Engine incluyen la API de Images de App Engine (Java y Python), que permite cambiar el tamaño de una imagen, rotarla, girarla y recortarla, además de mostrar una URL de entrega de imagen que permite realizar transformaciones del cliente, de manera similar a Imgix y Cloudinary.
Cuando importes un proyecto existente de Google Cloud a Firebase, si deseas que algún
objeto de App Engine existente esté disponible en Firebase, deberás configurar
el control de acceso predeterminado en tus objetos a fin de permitir que Firebase tenga acceso.
Para ello, ejecuta el siguiente comando con
gsutil
:
gsutil -m acl ch -r -u service-<project number;gt@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://<your-cloud-storage-bucket>
Problemas conocidos
Existen dos casos conocidos en los que no puedes importar tu aplicación de App Engine:
- El proyecto contiene una app maestro/esclavo antigua de App Engine Datastore.
- El proyecto tiene un ID con un prefijo de dominio, por ejemplo:
domain.com:project-1234
.
En ambos casos, el proyecto no será compatible con Cloud Storage para Firebase y deberás crear un proyecto nuevo de Firebase para usar Cloud Storage. Si necesitas ayuda, comunícate con el equipo de asistencia.
Google Cloud Functions (beta)
Google Cloud Functions es una solución de procesamiento ligera, basada en eventos y asíncrona que permite crear funciones pequeñas de un solo propósito que responden a eventos, sin tener que administrar servidores ni entornos de ejecución. Estas funciones pueden usarse para transcodificar videos, clasificar imágenes con el aprendizaje automático o sincronizar metadatos con Firebase Realtime Database. Con aún menos sobrecarga que App Engine, Cloud Functions es la forma más rápida de reaccionar a los cambios en Cloud Storage.
API de Google Cloud Vision
La API de Google Cloud Vision encapsula potentes modelos de aprendizaje automático en una API fácil de usar, lo que permite que los desarrolladores conozcan el contenido de una imagen. Clasifica imágenes de forma rápida en miles de categorías, detecta objetos individuales y rostros en las imágenes, detecta y lee palabras impresas en las imágenes, identifica el contenido ofensivo e incluso proporciona un análisis de opiniones de la imagen.
API de Google Cloud Speech
De manera similar a la API de Vision, la API de Google Cloud Speech permite a los desarrolladores extraer texto desde archivos de audio almacenados en Cloud Storage. La API reconoce más de 80 idiomas y variantes, por lo que puedes usarla con tu base de usuarios global. Si se combina con la API de Google Cloud Natural Language, los desarrolladores pueden extraer el texto sin procesar e inferir su significado. Si necesitas un público global, úsala junto con la API de Google Traductor para traducir el texto a más de 90 idiomas.