获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

Integrar con Google Cloud

Cloud Storage para Firebase está estrechamente integrado con Google Cloud . Los SDK de Firebase para Cloud Storage almacenan archivos directamente en depósitos de Google Cloud Storage y, a medida que crece su aplicación, puede integrar fácilmente otros servicios de Google Cloud, como computación administrada como App Engine o Cloud Functions, o API de aprendizaje automático como Cloud Vision o Google. Traducir.

Firebase usa cuentas de servicio de Google Cloud para operar y administrar servicios sin compartir las credenciales de los usuarios. Cuando crea un proyecto de Firebase que usa Cloud Storage, es posible que observe que una cuenta de servicio correspondiente ya está disponible en su proyecto: service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com . Consulte esta guía de soporte de Firebase para obtener más información.

En el fondo, los SDK de Firebase para Cloud Storage usan el depósito predeterminado en el nivel sin costo de App Engine . Esto le permite ponerse en marcha rápidamente con Cloud Storage, sin tener que ingresar una tarjeta de crédito o habilitar una cuenta de facturación en la nube. También le permite compartir datos fácilmente entre Firebase y un proyecto de Google Cloud.

La integración con Google Cloud, incluida la importación de depósitos de Cloud Storage existentes, requiere un proyecto de Firebase en el plan Blaze. Obtenga más información sobre los planes en nuestra página de precios .

Almacenamiento en la nube de Google

Puede usar las API de Google Cloud Storage para acceder a los archivos cargados a través de los SDK de Firebase para Cloud Storage, especialmente para realizar operaciones más complejas, como copiar o mover un archivo, o enumerar todos los archivos disponibles en una referencia.

Es importante tener en cuenta que estas solicitudes utilizan las opciones de control de acceso de Google Cloud Storage, en lugar de las reglas de seguridad de Firebase Authentication y Cloud Storage.

API

Además de los SDK de Firebase para Cloud Storage, existen otras formas de acceder a los datos almacenados en su depósito de Cloud Storage, según lo que desee hacer. Si está accediendo a datos en un servidor, ofrecemos bibliotecas del lado del servidor, así como una API RESTful XML compatible con JSON y S3, o si necesita cambios de secuencias de comandos o realizar otras tareas administrativas, tenemos una herramienta de línea de comandos que será útil.

SDK del servidor de Google Cloud

Google Cloud ofrece SDK de servidor de alta calidad para una serie de productos en la nube, incluido Cloud Storage. Estas bibliotecas están disponibles en Node.js , Java , go , Python , PHP y Ruby .

Para obtener más información, incluidas las instrucciones de instalación, la autenticación y la resolución de problemas, consulte la documentación específica de la plataforma vinculada anteriormente.

A continuación se muestra un ejemplo de uso del SDK de Google Cloud Storage:

Nodo.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();
    

Vamos

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

Pitón

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

Rubí

    # 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

Si usa un idioma sin una biblioteca de cliente, quiere hacer algo que las bibliotecas de cliente no hacen o simplemente tiene un cliente HTTP favorito que preferiría usar, Google Cloud Storage ofrece API para JSON y XML . .

Además de estas API de acceso a datos de almacenamiento, para administrar depósitos de Cloud Storage para usar en proyectos de Firebase, puede usar la API de Cloud Storage para Firebase .

gsutil

gsutil es una herramienta de línea de comandos que le brinda acceso directo a Cloud Storage. Puede usar gsutil para realizar una amplia variedad de tareas de administración de objetos y depósitos, entre las que se incluyen:

  • Carga, descarga y eliminación de objetos.
  • Listado de cubos y objetos.
  • Mover, copiar y renombrar objetos.
  • Edición de ACL de objetos y depósitos.

gsutil permite otras operaciones avanzadas, como mover archivos de un directorio a otro o eliminar todos los archivos debajo de una determinada ubicación.

Mover todos los archivos de una referencia a otra es tan fácil como:

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

La eliminación por lotes de todos los archivos debajo de una referencia es igualmente 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

Solicitar Tarifas

Google Cloud Storage es un servicio altamente escalable que utiliza tecnología de escalado automático para lograr tasas de solicitud muy altas.

Google Cloud Storage es un servicio multiinquilino, lo que significa que los usuarios comparten el mismo conjunto de recursos subyacentes. Para hacer el mejor uso de estos recursos compartidos, los cubos tienen una capacidad de E/S inicial.

Cuando planee integrar Cloud Storage para Firebase en su aplicación, piense en una tasa de solicitud mínima que su aplicación necesita para un buen rendimiento y en realizar solicitudes de manera eficiente. Revise las pautas sobre las tasas de solicitudes y, en especial, sobre cómo aumentar las tasas de solicitudes .

Control de versiones de objetos

¿Alguna vez ha eliminado algo por accidente y no tenía una copia de seguridad? Google Cloud Storage admite el control de versiones de objetos , que proporciona una forma automática de hacer una copia de seguridad de sus datos y restaurarlos a partir de esas copias de seguridad. Puedes habilitar el control de versiones de objetos con el comando gsutil versioning set :

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

Cloud Storage siempre selecciona la versión más reciente, por lo que si desea restaurar un objeto, debe usar una de las otras API o herramientas anteriores para configurar el objeto deseado como el más reciente.

Gestión del ciclo de vida de los objetos

Tener la capacidad de archivar o eliminar automáticamente archivos obsoletos es una característica útil para muchas aplicaciones. Afortunadamente, Google Cloud Storage proporciona la gestión del ciclo de vida de los objetos , que le permite eliminar o archivar objetos después de un período de tiempo determinado.

Considere una aplicación para compartir fotos en la que desea que todas las fotos se eliminen en un día. Puede configurar una política de ciclo de vida de objetos de la siguiente manera:

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

E impleméntalo con el comando gsutil lifecycle set :

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

Tenga en cuenta que esto se aplica a todos los archivos en el depósito, por lo que si está almacenando copias de seguridad de usuarios importantes que desea almacenar durante mucho tiempo junto con fotos paralelas que desea eliminar diariamente, es posible que desee utilizar dos depósitos separados o realizar eliminaciones manualmente. con gsutil o tu propio servidor.

Motor de aplicaciones

App Engine es una "plataforma como servicio" que escala automáticamente la lógica de backend en respuesta a la cantidad de tráfico que recibe. Simplemente cargue su código de back-end y Google administrará la disponibilidad de su aplicación; no hay servidores que usted deba aprovisionar o mantener. App Engine es una forma rápida y fácil de agregar potencia de procesamiento adicional o ejecución confiable a su aplicación de Firebase.

Los SDK de Firebase para Cloud Storage usan el depósito predeterminado de App Engine, lo que significa que si crea una aplicación de App Engine, puede usar las API de App Engine integradas para compartir datos entre Firebase y App Engine. Esto es útil para realizar codificación de audio, transcodificación de video y transformaciones de imágenes, así como otros procesamientos en segundo plano intensivos en computación.

Los entornos Java, Python y go Standard para App Engine incluyen la API de imágenes de App Engine ( Java , Python , que puede cambiar el tamaño, rotar, voltear y recortar una imagen, así como devolver una URL de servicio de imagen que permite transformaciones del lado del cliente , similar a Cloudinary e Imgix.

Al importar un proyecto de Google Cloud existente a Firebase, si desea que los objetos de App Engine existentes estén disponibles en Firebase, deberá configurar el control de acceso predeterminado en sus objetos para permitir que Firebase acceda a ellos ejecutando 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

Hay dos casos conocidos en los que no puedes importar tu aplicación de App Engine:

  1. El proyecto contiene una aplicación principal/secundaria del almacén de datos de App Engine.
  2. El proyecto tiene un Id. de proyecto con prefijo de dominio, por ejemplo: domain.com:project-1234 .

En cualquiera de estos casos, el proyecto no admitirá Cloud Storage para Firebase y debe crear un nuevo proyecto de Firebase para usar Cloud Storage. Póngase en contacto con el soporte para que podamos ayudarlo.

Funciones de Google Cloud (Beta)

Google Cloud Functions es una solución informática asíncrona, liviana y basada en eventos que le permite crear funciones pequeñas con un solo propósito que responden a eventos sin la necesidad de administrar un servidor o un entorno de tiempo de ejecución. Estas funciones se pueden usar para transcodificar videos, clasificar imágenes mediante aprendizaje automático o sincronizar metadatos con Firebase Realtime Database. Con incluso menos gastos generales 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 permite a los desarrolladores comprender el contenido de una imagen al encapsular poderosos modelos de aprendizaje automático en una API fácil de usar. Clasifica rápidamente las imágenes en miles de categorías, detecta objetos y rostros individuales dentro de las imágenes, encuentra y lee palabras impresas dentro de las imágenes, identifica contenido ofensivo e incluso proporciona análisis de sentimiento de imagen.

API de Google Cloud Speech

Similar a la API de Vision, la API de Google Cloud Speech permite a los desarrolladores extraer texto de un archivo de audio almacenado en Cloud Storage. La API reconoce más de 80 idiomas y variantes para respaldar su base de usuarios global. Cuando se combina con la API de lenguaje natural de Google Cloud , los desarrolladores pueden extraer el texto sin procesar e inferir el significado de ese texto. Y si se requiere una audiencia global, combine esto con la API de Google Translate para traducir el texto a más de 90 idiomas.