No momento, o
Combine Cloud Run com Firebase Hosting para gerar e exibir seu conteúdo dinâmico ou criar APIs REST como microsserviços.
Ao usar o Cloud Run, é possível implantar um aplicativo empacotado em uma imagem de contêiner. Em seguida, com Firebase Hosting, é possível direcionar solicitações HTTPS para acionar seu aplicativo conteinerizado.
- O Cloud Run tem suporte a várias linguagens, incluindo Go, Node.js, Python e Java, dando a você a flexibilidade de usar a linguagem de programação e o framework de sua escolha.
- O Cloud Run escalona automática e horizontalmente a imagem do seu contêiner para lidar com as solicitações recebidas e reduz o escalonamento quando a demanda diminui.
- Você paga apenas pela CPU, memória e rede consumidas durante o processamento da solicitação.
Se você quiser encontrar exemplos de casos de uso e amostras do Cloud Run integrado ao Firebase Hosting, acesse nossa visão geral de opções sem servidor.
Confira neste guia como realizar os procedimentos a seguir:
- Criar um simples aplicativo Hello World.
- Conteinerizar um app e fazer upload dele para o Artifact Registry
- Implantar a imagem do contêiner no Cloud Run
- Direcionar solicitações do Hosting para seu aplicativo conteinerizado.
Observe que, para melhorar o desempenho da exibição de conteúdo dinâmico, é possível, opcionalmente, ajustar suas configurações de cache.
Antes de começar
Antes de usar o Cloud Run, você precisa concluir algumas tarefas iniciais,
incluindo a configuração de uma conta Cloud Billing, a ativação da API Cloud Run
e a instalação da ferramenta de linha de comando gcloud
.
Configure o faturamento do seu projeto
O Cloud Run oferece uma cota de uso sem custo financeiro, mas você ainda precisa ter uma conta Cloud Billing associada ao seu projeto do Firebase para usar ou testar o Cloud Run.
Ative a API e instale o SDK
Ative a API Cloud Run no console de APIs do Google:
Abra a página da API Cloud Run no console de APIs do Google.
Quando solicitado, selecione seu projeto do Firebase.
Clique em Ativar na página da API Cloud Run.
Instale e inicialize o SDK Cloud.
Verifique se a ferramenta
gcloud
está configurada para o projeto correto:gcloud config list
Etapa 1: criar o aplicativo de exemplo
O Cloud Run oferece suporte a muitas outras linguagens, além das linguagens mostradas no exemplo a seguir.
Go
Crie um novo diretório chamado
helloworld-go
e acesse-o:mkdir helloworld-go
cd helloworld-go
Crie um novo arquivo chamado
helloworld.go
e adicione o seguinte código:Esse código cria um servidor da Web básico que detecta na porta definida pela variável de ambiente
PORT
.
O app está concluído, pronto para ser conteinerizado e enviado ao Artifact Registry.
Node.js
Crie um novo diretório chamado
helloworld-nodejs
e acesse-o:mkdir helloworld-nodejs
cd helloworld-nodejs
Crie um arquivo
package.json
com o seguinte conteúdo:Crie um novo arquivo chamado
index.js
e adicione o seguinte código:Esse código cria um servidor da Web básico que detecta na porta definida pela variável de ambiente
PORT
.
O app está concluído, pronto para ser conteinerizado e enviado ao Artifact Registry.
Python
Crie um novo diretório chamado
helloworld-python
e acesse-o:mkdir helloworld-python
cd helloworld-python
Crie um novo arquivo chamado
app.py
e adicione o seguinte código:Esse código cria um servidor da Web básico que detecta na porta definida pela variável de ambiente
PORT
.
O app está concluído, pronto para ser conteinerizado e enviado ao Artifact Registry.
Java
Instale o Java SE 8 ou um JDK posterior e o CURL.
Observe que só precisamos fazer isso para criar o novo projeto da Web na próxima etapa. O Dockerfile, descrito posteriormente, carregará todas as dependências no contêiner.
No console, crie um novo projeto da Web vazio usando cURL e, em seguida, os comandos de descompactação:
curl https://start.spring.io/starter.zip \ -d dependencies=web \ -d name=helloworld \ -d artifactId=helloworld \ -o helloworld.zip
unzip helloworld.zip
Isso cria um projeto SpringBoot.
Atualize a classe
SpringBootApplication
emsrc/main/java/com/example/helloworld/HelloworldApplication.java
adicionando um@RestController
para lidar com o mapeamento/
e também adicione um campo@Value
para fornecer a variável de ambienteTARGET
:Esse código cria um servidor da Web básico que detecta na porta definida pela variável de ambiente
PORT
.
O app está concluído, pronto para ser conteinerizado e enviado ao Artifact Registry.
Etapa 2: conteinerizar um app e fazer upload dele para o Artifact Registry
Para conteinerizar o app de amostra, basta criar um novo arquivo chamado
Dockerfile
no mesmo diretório dos arquivos do código-fonte. Copie o conteúdo a seguir para seu arquivo.Go
Node.js
Python
Java
Crie a imagem do contêiner usando Cloud Build. Para isso, execute o seguinte comando no diretório que contém seu Dockerfile:
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld
Após a conclusão, você verá uma mensagem de SUCESSO contendo o nome da imagem
(gcr.io/PROJECT_ID/helloworld
).
A imagem do contêiner agora está armazenada no Artifact Registry e pode ser reutilizada, se desejado.
Observe que, em vez do Cloud Build, é possível usar uma versão instalada localmente do Docker para criar seu contêiner localmente.
Etapa 3: implantar a imagem do contêiner no Cloud Run
Implante usando o seguinte comando:
gcloud run deploy --image gcr.io/PROJECT_ID/helloworld
Quando solicitado:
- Selecione uma região (por exemplo,
us-central1
). - Confirme o nome do serviço (por exemplo,
helloworld
). - Responda
Y
para permitir invocações não autenticadas.
- Selecione uma região (por exemplo,
Aguarde alguns instantes para que a implantação seja concluída. Em caso de sucesso, a linha de comando exibe o URL do serviço. Por exemplo:
https://helloworld-RANDOM_HASH-us-central1.a.run.app Consulte o contêiner implantado. Para isso, abra o URL do serviço em um navegador da Web.
Confira na próxima etapa como acessar esse app conteinerizado a partir de um URL do Firebase Hosting de modo que ele gere conteúdo dinâmico para seu site hospedado pelo Firebase.
Etapa 4: direcionar solicitações do Hosting para o aplicativo conteinerizado
Com as regras de substituição, é possível encaminhar solicitações que correspondam a padrões específicos para um único destino.
O exemplo a seguir mostra como direcionar todas as solicitações da página
/helloworld
no site do Hosting para acionar a inicialização e a execução de
sua instância de contêiner helloworld
.
Verifique se as seguintes condições foram atendidas:
Você tem a versão mais recente da CLI Firebase.
Você inicializou o Firebase Hosting.
Para instruções detalhadas sobre como instalar a CLI e inicializar o Hosting, consulte o Guia de início rápido do Hosting.
Adicione a seguinte configuração de
rewrite
na seçãohosting
:"hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "/helloworld", "run": { "serviceId": "helloworld", // "service name" (from when you deployed the container image) "region": "us-central1", // optional (if omitted, default is us-central1) "pinTag": true // optional (see note below) } } ] }
Implante a configuração do Hosting no site executando o seguinte comando na raiz do diretório do seu projeto:
firebase deploy --only hosting
Seu contêiner agora pode ser acessado por meio destes URLs:
Subdomínios do Firebase:
PROJECT_ID.web.app/
ePROJECT_ID.firebaseapp.com/
Qualquer domínio personalizado conectado:
CUSTOM_DOMAIN/
Visite a página de configuração do Hosting para conferir mais detalhes sobre regras de substituição. Saiba mais sobre a ordem de prioridade das respostas para várias configurações do Hosting.
Testar localmente
Durante o desenvolvimento, é possível executar e testar sua imagem de contêiner localmente. Para instruções detalhadas, acesse a documentação do Cloud Run.
Próximas etapas
Configure o armazenamento em cache do seu conteúdo dinâmico em uma CDN global.
Interaja com outros serviços do Firebase usando o SDK Admin do Firebase.
Saiba mais sobre o Cloud Run, incluindo guias detalhados sobre como definir, gerenciar e configurar contêineres.
Verifique os preços e as cotas e os limites do Cloud Run.