Integrar com o Google Cloud

O Cloud Storage para Firebase está bem integrado com o Google Cloud. Os SDKs do Firebase para Cloud Storage armazenam os arquivos diretamente nos buckets do Google Cloud Storage. À medida que o app cresce, outros serviços do Google Cloud podem ser facilmente integrados. Alguns exemplos são os serviços de computação gerenciada, como App Engine ou Cloud Functions, ou as APIs de machine learning, como Cloud Vision ou Google Translate.

O Firebase usa contas de serviço do Google Cloud para operar e gerenciar serviços sem compartilhar credenciais de usuário. Ao criar um projeto do Firebase que usa o Cloud Storage, talvez você perceba que uma conta de serviço correspondente já está disponível no projeto: service-<project number>@gcp-sa-firebasestorage.iam.gserviceaccount.com. Para mais informações, consulte o guia de suporte do Firebase.

Em segundo plano, os SDKs do Firebase para Cloud Storage usam o bucket padrão no nível sem custo financeiro do App Engine. Isso permite a instalação e a execução rápidas do Cloud Storage, sem que seja necessário adicionar um cartão de crédito ou ativar uma conta do Cloud Billing. Também é possível compartilhar dados entre o Firebase e um projeto do Google Cloud com facilidade.

A integração com o Google Cloud, com a importação de buckets do Cloud Storage, requer um projeto do Firebase no plano Blaze. Saiba mais sobre os planos na página de preços.

Google Cloud Storage

Use as APIs do Google Cloud Storage para acessar os arquivos carregados por meio de SDKs do Firebase para Cloud Storage, especialmente para executar operações mais complexas como copiar/mover um arquivo ou listar todos os arquivos disponíveis em uma referência.

Essas solicitações usam as opções de controle de acesso do Google Cloud Storage, em vez das regras de segurança do Firebase Authentication e do Cloud Storage.

APIs

Além dos SDKs do Firebase para Cloud Storage, há várias outras maneiras de acessar os dados armazenados no bucket do Cloud Storage, conforme o que você quer fazer. Se estiver acessando dados em um servidor, oferecemos bibliotecas do servidor, bem como uma API RESTful XML compatível com JSON e S3. Se você precisar fazer alterações com script ou realizar outras tarefas administrativas, temos uma ferramenta de linha de comando muito útil.

SDKs do servidor do Google Cloud

O Google Cloud oferece SDKs de servidor de alta qualidade para vários produtos do Cloud, incluindo o Cloud Storage. Essas bibliotecas estão disponíveis em Node.js, Java, go, Python, PHP, e Ruby.

Para mais informações, incluindo instruções de instalação, autenticação e solução de problemas, consulte a documentação específica da plataforma nos links acima.

Um exemplo de uso para o Cloud Storage SDK é mostrado abaixo:

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 você usar uma linguagem sem biblioteca de cliente, quiser executar uma operação indisponível nessas bibliotecas ou tiver um cliente HTTP preferido, o Cloud Storage oferece ambas as APIs JSON e XML.

Além dessas APIs de acesso a dados de armazenamento, para gerenciar os buckets do Cloud Storage para uso em projetos do Firebase, use a API Cloud Storage para Firebase.

gsutil

gsutil é uma ferramenta de linha de comando que fornece acesso direto ao Cloud Storage. É possível usar gsutil para executar uma ampla variedade de tarefas de gerenciamento de bucket e de objetos, incluindo:

  • fazer upload e download e excluir objetos;
  • listar buckets e objetos;
  • mover, copiar e renomear objetos;
  • editar ACLs de objetos e intervalos.

gsutil permitem outras operações avançadas, como mover arquivos de um diretório para outro ou excluir todos os arquivos abaixo de um determinado local.

Para mover todos os arquivos de uma referência a outra, basta usar o recurso da seguinte maneira:

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

Apagar em lote todos os arquivos de uma referência é 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

Taxas de solicitação

O Google Cloud Storage é um serviço altamente escalonável que usa a tecnologia de escalonamento automático para atingir taxas de solicitação muito altas.

O Cloud Storage é um serviço multilocatário. Isso significa que os usuários compartilham o mesmo grupo de recursos subjacentes. Para aproveitar ao máximo esses recursos compartilhados, os buckets têm uma capacidade inicial de E/S de:

Ao planejar como integrar o Cloud Storage para Firebase no app, pense em uma taxa mínima de solicitação necessária para um bom desempenho e em fazer solicitações de maneira eficiente. Consulte as diretrizes sobre taxas de solicitação, principalmente como aumentar as taxas de solicitação.

Controle de versões do objeto

Alguma vez você já excluiu algo por acidente e não tinha um backup? O Google Cloud Storage é compatível com o controle de versões de objetos, que oferece uma maneira automática de fazer o backup e restauração dos dados com esses backups. É possível ativar o controle de versões de objeto usando o comando gsutil versioning set:

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

O Cloud Storage sempre usa a versão mais recente. Por isso, se você quer restaurar um objeto, use uma das outras APIs ou ferramentas acima para definir o objeto desejado como o mais recente.

Gerenciamento do ciclo de vida de objetos

O recurso de arquivar ou excluir automaticamente arquivos desatualizados é útil para muitos aplicativos. Felizmente, com o gerenciamento do ciclo de vida de objetos do Cloud Storage, isso pode ser feito após um determinado período.

Suponha que você tenha um app de compartilhamento de fotos e quer que todas as fotos sejam excluídas depois de um dia. Você pode configurar uma política de ciclo de vida do objeto da seguinte maneira:

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

Em seguida, implante-o usando o comando gsutil lifecycle set:

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

Isso se aplica a todos os arquivos do bucket. Portanto, se você estiver armazenando backups de usuários importantes que pretende manter por muito tempo junto com fotos que serão excluídas diariamente, é melhor usar dois buckets separados ou realizar exclusões manualmente com gsutil ou seu próprio servidor.

App Engine

O App Engine é uma "plataforma como serviço" que faz o escalonamento automático da lógica do back-end em resposta ao volume de tráfego que recebe. Basta fazer upload do código do back-end, e o Google gerenciará a disponibilidade do app. Não é preciso aprovisionar nem manter servidores. O App Engine é uma maneira rápida e fácil de adicionar capacidade de processamento ou confiabilidade de execução ao seu aplicativo do Firebase.

Os SDKs do Firebase para Cloud Storage usam o bucket padrão do App Engine. Isso significa que, quando um aplicativo do App Engine é criado, as APIs incorporadas do produto podem ser usadas para compartilhar dados entre o Firebase e o App Engine. Isso é útil para executar codificação de áudio, transcodificação de vídeo e transformações de imagem, bem como outros processamentos de computação intensiva de segundo plano.

Os ambientes padrão Java, Python e Go para o App Engine incluem a API App Engine Images (Java, Python), que pode redimensionar, girar, virar e cortar uma imagem, além de retornar um URL de exibição de imagem que permite ao cliente fazer transformações como no Cloudinary e no Imgix.

Para importar um projeto do Google Cloud Platform e também disponibilizar objetos existentes do App Engine no Firebase, defina o controle de acesso padrão para que os objetos possam ser acessados pelo Firebase. Execute o seguinte comando gsutil:

gsutil -m acl ch -r -u service-<project number;gt@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://<your-cloud-storage-bucket>

Problemas conhecidos

Há dois casos conhecidos em que não é possível importar seu aplicativo do App Engine:

  1. O projeto contém um antigo app do tipo primário/operário do App Engine Datastore.
  2. O projeto tem um ID do projeto com prefixo de domínio, por exemplo: domain.com:project-1234.

Em qualquer um desses casos, o projeto não é compatível com o Cloud Storage para Firebase. Você precisa criar um novo projeto do Firebase para usar o Cloud Storage. Fale com o suporte para que ajudarmos você.

Google Cloud Functions (Beta)

O Google Cloud Functions é uma solução de computação leve, assíncrona e baseada em eventos que permite criar pequenas funções de finalidade única que respondem a eventos sem a necessidade de gerenciar um servidor ou um ambiente de tempo de execução. Essas funções podem ser usadas para a transcodificar vídeo, classificar imagens com machine learning ou sincronizar metadados com o Firebase Realtime Database. Com ainda menos sobrecarga do que o App Engine, o Cloud Functions é o caminho mais rápido para reagir às mudanças no Cloud Storage.

API Google Cloud Vision

A Google Cloud Vision API permite aos desenvolvedores entender o conteúdo de uma imagem por meio do encapsulamento de modelos potentes de aprendizado de máquina em uma API fácil de usar. Ela classifica rapidamente as imagens em milhares de categorias, detecta objetos e rostos, encontra e lê palavras impressas contidas nas imagens, identifica conteúdo ofensivo e fornece até mesmo análise do sentimento da imagem.

API Google Cloud Speech

Do mesmo modo que a Vision API, o Google Cloud Speech API permite aos desenvolvedores extrair texto de um arquivo de áudio armazenado no Cloud Storage. A API reconhece mais de 80 idiomas e variantes para oferecer suporte à sua base global de usuários. Quando combinada com a API Google Cloud Natural Language, além de extrair o texto bruto, o desenvolvedor também consegue inferir o significado do texto. Caso o público seja global, ele poderá usar a API Google Translate e traduzir esse texto para mais de 90 idiomas.