Pareie o Cloud Run com o Firebase Hosting para gerar e exibir o 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 o Firebase Hosting, é possível direcionar solicitações HTTPS para acionar seu aplicativo em contêiner.
- O Cloud Run é compatível com várias linguagens, incluindo Go, Node.js, Python e Java, e oferece 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 consumida durante o processamento da solicitação.
Se você quiser ver exemplos de casos de uso e amostras para o Cloud Run integrado ao Firebase Hosting, acesse nossa visão geral de opções sem servidor.
Veja neste guia como realizar os procedimentos a seguir:
- Escrever um simples aplicativo Hello World.
- Colocar um app em contêiner e fazer upload para o Container Registry.
- Implantar a imagem do contêiner no Cloud Run.
- Solicitar uma hospedagem direta para seu aplicativo em contêiner..
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 do 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 do 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 do Cloud.
Verifique se a ferramenta
gcloud
está configurada para o projeto correto:gcloud config list
Etapa 1: gravar o aplicativo de amostra
Observe que o Cloud Run é compatível com muitas outras linguagens, além das linguagens mostradas na amostra a seguir.
Go
Crie um novo diretório chamado
helloworld-go
e altere o diretório nele: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 ficar em contêiner e ser enviado ao Container Registry.
Node.js
Crie um novo diretório chamado
helloworld-nodejs
e altere o diretório nele: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 ficar em contêiner e ser enviado ao Container Registry.
Python
Crie um novo diretório chamado
helloworld-python
e altere o diretório nele: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 ficar em contêiner e ser enviado ao Container Registry.
Java
Instale o Java SE 8 ou o 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, descompacte os comandos:
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 ficar em contêiner e ser enviado ao Container Registry.
Etapa 2: colocar em contêiner um aplicativo e fazer upload para o Container Registry
Para colocar o app de amostra em contêiner, basta criar um novo arquivo chamado
Dockerfile
no mesmo diretório dos arquivos de origem. Copie o seguinte conteúdo em seu arquivo.Go
Node.js
Python
Java
Crie a imagem de contêiner usando o 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 Container 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 de serviço. Por exemplo:
https://helloworld-RANDOM_HASH-us-central1.a.run.app Consulte o contêiner implantado. Para isso, abra o URL de serviço em um navegador da Web.
Veja na próxima etapa como acessar esse app em contêiner 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 de hospedagem para seu aplicativo em contêiner
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 de hospedagem 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 aversão mais recente da CLI do Firebase.
Você inicializou o Firebase Hosting.
Para instruções detalhadas sobre como instalar a CLI e inicializar o Hosting, consulte o Guia de primeiros passos do produto.
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) } } ] }
Implante a configuração de hospedagem no site ao executar o seguinte comando na raiz do diretório do seu projeto:
firebase deploy
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 ver 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, consulte a documentação do Cloud Run.
Próximas etapas
Configure o armazenamento em cache de seu conteúdo dinâmico em um 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, as cotas e os limites do Cloud Run.