Um projeto do Firebase é apenas um projeto do Google Cloud que tem mais configurações e serviços específicos do Firebase ativados para ele. Isso significa que todos os buckets Cloud Storage usados com o Cloud Storage for Firebase são acessíveis em Google Cloud, incluindo o console e as APIs.
A integração com o Google Cloud, incluindo a importação de buckets Cloud Storage atuais, exige um projeto do Firebase no plano de preços do Blaze de pagamento por uso.
Considerações sobre contas de serviço
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:
.
Para mais informações, consulte
Visão geral das contas de serviço do Firebase.
Google Cloud Storage
É possível usar as APIs do Google Cloud Storage para acessar os arquivos enviados pelos SDKs do Firebase para Cloud Storage, principalmente para executar operações mais complexas, como copiar ou mover um arquivo ou listar todos os arquivos disponíveis em uma referência.
É importante observar que essas solicitações usam as opções de controle de acesso do Google Cloud Storage, no lugar de Firebase Authentication e Cloud Storage Security Rules.
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, dependendo do que você quer fazer. Quando você acessa dados em um servidor, oferecemos bibliotecas do lado do servidor, além de uma API RESTful XML
compatível com JSON
e S3, ou quando você precisa programar alterações ou realizar outras tarefas administrativas, disponibilizamos uma ferramenta de linha de comando muito útil.
SDK de servidor do Google Cloud
O Google Cloud oferece SDKs de servidor de alta qualidade para vários produtos do Google 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 SDK do Google Cloud Storage é 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
Quando você usa uma linguagem sem biblioteca de cliente, quer executar uma operação indisponível nessas bibliotecas ou tem um cliente HTTP preferido, o Google Cloud Storage oferece APIs para ambos: 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 for Firebase.
gsutil
gsutil
é uma ferramenta de linha de comando que fornece acesso direto ao Cloud Storage. É possível usar o 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 Google Cloud Storage é um serviço multilocatário. Ou seja, os usuários compartilham o mesmo conjunto de recursos subjacentes. Para aproveitar ao máximo esses recursos compartilhados, os buckets têm uma capacidade inicial de E/S de:
Ao planejar a integração do Cloud Storage for Firebase com o app, considere uma taxa de solicitação mínima que o app precisará para ter um bom desempenho e como fazer solicitações com eficiência. Consulte as diretrizes sobre taxas de solicitação, principalmente como aumentar as taxas de solicitação.
Controle de versão de objeto
Alguma vez você já excluiu algo por acidente e não tinha um backup?
O Google Cloud Storage é compatível com controle de versões de objetos, que oferece uma maneira automática de fazer backup de dados e restauração com esses backups. É possível ativar o controle de versões de objetos 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, o Google Cloud Storage oferece o Gerenciamento do ciclo de vida de objetos, que permite apagar ou arquivar objetos 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.
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 transcodificação de vídeo, classificação de imagens usando machine learning ou sincronização de metadados com o Firebase Realtime Database. Com ainda menos overhead 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 API Vision, o API Google Cloud Speech 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.
Google App Engine
O Google 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 recebido. Basta fazer upload do código do back-end, e o Google vai gerenciar a disponibilidade do app. Não é preciso provisionar nem manter servidores. O App Engine é uma maneira rápida e fácil de adicionar capacidade de processamento extra ou execução confiável ao app do Firebase.
Se você tiver um bucket Cloud Storage padrão com o formato de nome
PROJECT_ID.appspot.com
Os ambientes padrão de Java, Python, e Go para o App Engine incluem a API App Engine Images (Java | Python | Go), 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 existente 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 ao executar o seguinte comando via gsutil
:
gsutil -m acl ch -r -u service-PROJECT_NUMBER@gcp-sa-firebasestorage.iam.gserviceaccount.com gs://BUCKET_NAME
Considerações sobre arquivos Firebase Security Rules e App Engine
Se você tiver um bucket Cloud Storage padrão com um formato de nome
*.appspot.com
Se você configurar o Firebase Security Rules para acesso público (não autenticado), os arquivos App Engine enviados recentemente também vão ficar acessíveis publicamente.
Problemas conhecidos para Cloud Storage e App Engine
Há dois casos conhecidos em que não é possível importar o app do App Engine:
- O projeto contém um app principal/secundário do App Engine Datastore antigo.
- 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 será compatível com o Cloud Storage for Firebase. Você precisa criar um novo projeto do Firebase para usar o Cloud Storage. Fale com o suporte para podermos ajudar você.