Combine o Cloud Run com o Firebase Hosting para gerar e veicular seu conteúdo dinâmico ou criar APIs REST como microsserviços.
Usando o Cloud Run , você pode implantar um aplicativo empacotado em uma imagem de contêiner. Em seguida, usando o Firebase Hosting, você pode direcionar solicitações HTTPS para acionar seu aplicativo em contêiner.
- O Cloud Run oferece suporte a diversas linguagens (incluindo Go, Node.js, Python e Java), proporcionando flexibilidade para usar a linguagem de programação e a estrutura de sua preferência.
- O Cloud Run dimensiona automaticamente e horizontalmente a imagem do contêiner para lidar com as solicitações recebidas e depois reduz quando a demanda diminui.
- Você paga apenas pela CPU, memória e rede consumidas durante o tratamento da solicitação.
Para ver exemplos de casos de uso e exemplos do Cloud Run integrado ao Firebase Hosting, visite nossa visão geral sem servidor .
Este guia mostra como:
- Escreva um aplicativo simples Hello World
- Conteinerize um aplicativo e carregue-o no Container Registry
- Implantar a imagem do contêiner no Cloud Run
- Solicitações diretas de hospedagem para seu aplicativo em contêiner
Observe que, para melhorar o desempenho do fornecimento de conteúdo dinâmico, você pode opcionalmente ajustar as configurações de cache .
Antes de você 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 para seu projeto
O Cloud Run oferece cota de uso gratuita , mas você ainda precisa ter uma conta do Cloud Billing associada ao seu projeto do Firebase para usar ou testar o Cloud Run.
Habilite 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 Cloud SDK.
Verifique se a ferramenta
gcloud
está configurada para o projeto correto:gcloud config list
Etapa 1 : Escreva o aplicativo de exemplo
Observe que o Cloud Run oferece suporte a muitas outras linguagens além das mostradas no exemplo a seguir.
Ir
Crie um novo diretório chamado
helloworld-go
e altere o diretório para ele:mkdir helloworld-go
cd helloworld-go
Crie um novo arquivo chamado
helloworld.go
e adicione o seguinte código:Este código cria um servidor web básico que escuta na porta definida pela variável de ambiente
PORT
.
Seu aplicativo está concluído e pronto para ser conteinerizado e carregado no Container Registry.
Node.js
Crie um novo diretório chamado
helloworld-nodejs
e altere o diretório para ele: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:Este código cria um servidor web básico que escuta na porta definida pela variável de ambiente
PORT
.
Seu aplicativo está concluído e pronto para ser conteinerizado e carregado no Container Registry.
Pitão
Crie um novo diretório chamado
helloworld-python
e altere o diretório para ele:mkdir helloworld-python
cd helloworld-python
Crie um novo arquivo chamado
app.py
e adicione o seguinte código:Este código cria um servidor web básico que escuta na porta definida pela variável de ambiente
PORT
.
Seu aplicativo está concluído e pronto para ser conteinerizado e carregado no Container Registry.
Java
Instale Java SE 8 ou posterior JDK e CURL .
Observe que só precisamos fazer isso para criar o novo projeto web na próxima etapa. O Dockerfile, descrito posteriormente, carregará todas as dependências no contêiner.
No console, crie um novo projeto web vazio usando cURL e 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
:Este código cria um servidor web básico que escuta na porta definida pela variável de ambiente
PORT
.
Seu aplicativo está concluído e pronto para ser conteinerizado e carregado no Container Registry.
Etapa 2 : conteinerizar um aplicativo e carregá-lo no Container Registry
Conteinerize o aplicativo de exemplo criando um novo arquivo chamado
Dockerfile
no mesmo diretório dos arquivos de origem. Copie o seguinte conteúdo em seu arquivo.Ir
Node.js
Pitão
Java
Crie sua imagem de contêiner usando o Cloud Build executando o seguinte comando no diretório que contém seu Dockerfile:
gcloud builds submit --tag gcr.io/PROJECT_ID/helloworld
Após sucesso, 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, você pode usar uma versão do Docker instalada localmente 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
Para obter o melhor desempenho, coloque seu serviço Cloud Run com hospedagem usando as seguintes regiões:
-
us-west1
-
us-central1
-
us-east1
-
europe-west1
-
asia-east1
As reescritas no Cloud Run a partir do Hosting são compatíveis com as seguintes regiões:
-
asia-east1
-
asia-east2
-
asia-northeast1
-
asia-northeast2
-
asia-northeast3
-
asia-south1
-
asia-south2
-
asia-southeast1
-
asia-southeast2
-
australia-southeast1
-
australia-southeast2
-
europe-central2
-
europe-north1
-
europe-southwest1
-
europe-west1
-
europe-west12
-
europe-west2
-
europe-west3
-
europe-west4
-
europe-west6
-
europe-west8
-
europe-west9
-
me-central1
-
me-west1
-
northamerica-northeast1
-
northamerica-northeast2
-
southamerica-east1
-
southamerica-west1
-
us-central1
-
us-east1
-
us-east4
-
us-east5
-
us-south1
-
us-west1
-
us-west2
-
us-west3
-
us-west4
-
us-west1
-
us-central1
-
us-east1
-
europe-west1
-
asia-east1
Aguarde alguns instantes até que a implantação seja concluída. Em caso de sucesso, a linha de comando exibe a URL do serviço. Por exemplo
https://helloworld- RANDOM_HASH -us-central1.a.run.appVisite seu contêiner implantado abrindo a URL do serviço em um navegador da web.
A próxima etapa mostra como acessar esse aplicativo em contêiner a partir de um URL do Firebase Hosting para que ele possa gerar conteúdo dinâmico para seu site hospedado no Firebase.
Etapa 4: solicitações de hospedagem direta para seu aplicativo em contêiner
Com regras de reescrita , você pode direcionar 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
em seu site de hospedagem para acionar a inicialização e a execução de sua instância de contêiner helloworld
.
Certifique-se de que:
Você tem a versão mais recente da CLI do Firebase .
Você inicializou o Firebase Hosting.
Para obter instruções detalhadas sobre como instalar a CLI e inicializar o Hosting, consulte o guia de primeiros passos do Hosting .
Abra seu arquivo
firebase.json
.Adicione a seguinte configuração
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 sua configuração de hospedagem em seu site executando o seguinte comando na raiz do diretório do seu projeto:
firebase deploy --only hosting
Com esse recurso, você pode garantir que a revisão do serviço Cloud Run para gerar o conteúdo dinâmico do seu site seja mantida sincronizada com os recursos estáticos do Hosting e a configuração do Hosting. Além disso, esse recurso permite que você visualize suas reescritas nos canais de visualização do Cloud Run no Hosting.
Se você adicionar
"pingTag": true
a um blocorun
da configuração dohosting.rewrites
, seus recursos e configurações estáticas do Hosting serão fixados na revisão mais recente do serviço Cloud Run, no momento da implantação. Se você reverter uma versão do seu site, a revisão do serviço Cloud Run "fixado" também será revertida.Esse recurso depende de tags do Cloud Run , que têm um limite de 1.000 tags por serviço e 2.000 tags por região. Isso significa que após centenas de implantações, as versões mais antigas de um site podem parar de funcionar.
Seu contêiner agora pode ser acessado por meio dos seguintes URLs:
Seus subdomínios do Firebase:
PROJECT_ID .web.app/
ePROJECT_ID .firebaseapp.com/
Quaisquer domínios personalizados conectados:
CUSTOM_DOMAIN /
Visite a página de configuração de hospedagem para obter mais detalhes sobre regras de reescrita . Você também pode aprender sobre a ordem de prioridade das respostas para diversas configurações de hospedagem.
Teste localmente
Durante o desenvolvimento, você pode executar e testar a imagem do contêiner localmente. Para obter instruções detalhadas, visite a documentação do Cloud Run .
Próximos passos
Configure o 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 de instruções detalhados para instalar, gerenciar e configurar contêineres.
Revise os preços , as cotas e os limites do Cloud Run.