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 su aplicación crece, 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 utiliza cuentas de servicio de Google Cloud para operar y administrar servicios sin compartir las credenciales de usuario. Cuando creas un proyecto de Firebase que usa Cloud Storage, es posible que notes que una cuenta de servicio correspondiente ya está disponible en tu 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 esencia, los SDK de Firebase para Cloud Storage utilizan el depósito predeterminado en el nivel sin costo de App Engine . Esto le permite comenzar a utilizar Cloud Storage rápidamente, sin tener que ingresar una tarjeta de crédito o 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 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 utilizar las API de Google Cloud Storage para acceder a 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 la autenticación de Firebase 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 su depósito de Cloud Storage, según lo que desee hacer. Si accede 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 realizar cambios en el script 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 varios 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 instrucciones de instalación, autenticación y solució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();
    

Ir

    // 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 DESCANSO

Si está utilizando un lenguaje sin una biblioteca cliente, desea hacer algo que las bibliotecas cliente no hacen o simplemente tiene un cliente HTTP favorito que preferiría usar, Google Cloud Storage ofrece API tanto para JSON como para XML . .

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

gsutil

gsutil es una herramienta de línea de comandos que te brinda acceso directo a Cloud Storage. Puedes usar gsutil para realizar una amplia gama de tareas de administración de depósitos y objetos, que incluyen:

  • Carga, descarga y eliminación de objetos.
  • Listado de depósitos 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 que se encuentran debajo de una ubicación determinada.

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

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

Eliminar por lotes todos los archivos debajo de una referencia es igualmente 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

Solicitar tarifas

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

Google Cloud Storage es un servicio multiinquilino, lo que significa que los usuarios comparten el mismo conjunto de recursos subyacentes. Para aprovechar al máximo estos recursos compartidos, los depósitos tienen una capacidad de E/S inicial.

Cuando planees integrar Cloud Storage para Firebase en tu aplicación, piensa en la tasa de solicitudes mínima que tu aplicación necesita para un buen rendimiento y en realizar solicitudes de manera eficiente. Revise las pautas sobre las tasas de solicitudes y, especialmente , cómo aumentar las tasas de solicitudes .

Control de versiones de objetos

¿Alguna vez borraste algo por accidente y no tuviste una copia de seguridad? Google Cloud Storage admite el control de versiones de objetos , que proporciona una forma automática de realizar una copia de seguridad de sus datos y restaurarlos a partir de esas copias de seguridad. 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 elige 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 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 administración del ciclo de vida de objetos , que le permite eliminar o archivar objetos después de un cierto período de tiempo.

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éntelo usando 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 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 backend y Google administrará la disponibilidad de su aplicación; no hay servidores que usted pueda aprovisionar o mantener. App Engine es una forma rápida y sencilla de agregar potencia de procesamiento adicional o ejecución confiable a tu aplicación Firebase.

Los SDK de Firebase para Cloud Storage usan el depósito predeterminado de App Engine, lo que significa que si creas una aplicación de App Engine, puedes usar las API integradas de App Engine 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 estándar de Java, Python y go 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 imágenes 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 cualquier objeto de App Engine existente esté disponible en Firebase, deberá configurar el control de acceso predeterminado en sus objetos para permitir que Firebase acceda a ellos ejecutando el siguiente comando usando 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 App Engine:

  1. El proyecto contiene una antigua aplicación maestra/esclava de App Engine Datastore.
  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 debes crear un nuevo proyecto de Firebase para poder usar Cloud Storage. Contacta con soporte para que podamos ayudarte.

Funciones de la nube de Google (Beta)

Google Cloud Functions es una solución informática asincrónica, 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 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 visión de Google Cloud

La API de Google Cloud Vision permite a los desarrolladores comprender el contenido de una imagen encapsulando potentes modelos de aprendizaje automático en una API fácil de usar. Clasifica rápidamente imágenes en miles de categorías, detecta objetos y rostros individuales dentro de las imágenes, encuentra y lee palabras impresas contenidas en las imágenes, identifica contenido ofensivo e incluso proporciona análisis de opinión sobre las imágenes.

API de voz de Google Cloud

De manera similar a la API Vision, la API 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 formato e inferir el significado de ese texto. Y si se requiere una audiencia global, combínela con la API de Google Translate para traducir el texto a más de 90 idiomas.