1. Antes de começar
O Cloud Run é uma plataforma de computação gerenciada onde você executa contêineres sem estado que podem ser invocados usando solicitações HTTP. O Cloud Run não tem servidor. ele elimina a necessidade de gerenciamento de infraestrutura. Assim, você pode se concentrar no que mais importa: criar apps incríveis. Ele foi criado com base no Knative, o que permite a você executar os contêineres com o Cloud Run (totalmente gerenciado) ou o Cloud Run for Anthos. O objetivo deste codelab é criar uma imagem de contêiner e implantá-la no Cloud Run.
Pré-requisitos
N/A
2. Configuração e requisitos
Configuração de ambiente autoguiada
- Faça login no Console do Cloud e crie um novo projeto ou reutilize um existente. Crie uma se você ainda não tiver uma conta do Gmail ou do G Suite.
Lembre-se do código do projeto, um nome exclusivo em todos os projetos do Google Cloud. O nome acima já foi escolhido e não servirá para você. Faremos referência a ele mais adiante neste codelab como PROJECT_ID
.
- Em seguida, será necessário ativar o faturamento no Console do Cloud para usar os recursos do Google Cloud.
A execução deste codelab não será muito cara, se for o caso. Siga todas as instruções na seção "Limpeza", que orienta você sobre como encerrar recursos para não incorrer em cobranças além deste tutorial. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.
Cloud Shell
Embora o Google Cloud possa ser operado remotamente em um laptop, você usará o Cloud Shell, um ambiente de linha de comando executado no Google Cloud.
O Cloud Shell é uma máquina virtual com base em Debian que contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Isso significa que tudo que você precisa para este codelab é um navegador (sim, funciona em um Chromebook).
- Para ativar o Cloud Shell no Console do Cloud, basta clicar em Ativar o Cloud Shell . Leva apenas alguns instantes para provisionar e se conectar ao ambiente.
Depois de se conectar ao Cloud Shell, você já estará autenticado e o projeto estará configurado com seu PROJECT_ID
.
gcloud auth list
Resposta ao comando
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Resposta ao comando
[core] project = <PROJECT_ID>
Se, por algum motivo, o projeto não estiver definido, basta emitir o seguinte comando:
gcloud config set project <PROJECT_ID>
Quer encontrar seu PROJECT_ID
? Veja qual ID você usou nas etapas de configuração ou procure-o no painel do Console do Cloud:
O Cloud Shell também define algumas variáveis de ambiente por padrão, o que pode ser útil ao executar comandos futuros.
echo $GOOGLE_CLOUD_PROJECT
Resposta ao comando
<PROJECT_ID>
- Defina a zona padrão e a configuração do projeto:
gcloud config set compute/zone us-central1-f
É possível escolher uma variedade de zonas diferentes. Para mais informações, consulte Regiões e zonas.
Ative a API Cloud Run
No Cloud Shell, ative a API Cloud Run.
gcloud services enable run.googleapis.com
Uma mensagem semelhante a esta vai aparecer:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
3. Criar o app de exemplo
Você criará um app Node.js simples e baseado no Express para responder a solicitações HTTP.
Para criar seu app, use o Cloud Shell para criar 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:
{
"name": "cloudrun-helloworld",
"version": "1.0.0",
"description": "Simple hello world sample in Node",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "",
"license": "Apache-2.0",
"dependencies": {
"express": "^4.17.1"
}
}
O arquivo acima contém principalmente um comando de script de inicialização e uma dependência no framework Express para apps da Web.
No mesmo diretório, crie um arquivo index.js
e copie o seguinte conteúdo nele:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
console.log('Hello world received a request.');
const target = process.env.TARGET || 'World';
res.send(`Hello ${target}!`);
});
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log('Hello world listening on port', port);
});
Esse código cria um servidor da Web básico que detecta na porta definida pela variável de ambiente PORT
. Agora o app está pronto para conteinerização, teste e upload no Container Registry.
4. Contentorize seu app e o envie para o Container Registry
Para conteinerizar o app de exemplo, crie um novo arquivo chamado Dockerfile
no mesmo diretório dos arquivos de origem e copie o conteúdo a seguir nele:
# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:12-slim
# Create and change to the app directory.
WORKDIR /usr/src/app
# Copy application dependency manifests to the container image.
# A wildcard is used to ensure both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./
# Install production dependencies.
RUN npm install --only=production
# Copy local code to the container image.
COPY . ./
# Run the web service on container startup.
CMD [ "npm", "start" ]
Crie sua imagem de contêiner usando o Cloud Build. Para isso, execute o seguinte comando no diretório que contém o Dockerfile:
gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
$GOOGLE_CLOUD_PROJECT
é uma variável de ambiente que contém o ID do projeto do Google Cloud quando executada no Cloud Shell. Você também pode consegui-lo executando gcloud config get-value project
.
Depois de enviada ao registro, você verá uma mensagem SUCCESS
contendo o nome da imagem (gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
). A imagem é armazenada no Container Registry e pode ser reutilizada se você quiser.
Use este comando para listar todas as imagens do contêiner associadas ao projeto atual:
gcloud container images list
Se você quiser executar e testar o app localmente no Cloud Shell, inicie-o usando este comando docker
padrão:
docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
No Cloud Shell, clique em Visualização na Web e selecione Visualizar na porta 8080.
Uma janela do navegador será aberta com a mensagem Hello World!
Também é possível simplesmente usar curl localhost:8080
.
5. Implantar no Cloud Run
Para implantar seu app conteinerizado no Cloud Run, use o seguinte comando. Não se esqueça de ajustar o nome da imagem correta do app que você criou ou usar a imagem pré-criada gcr.io/cloudrun/hello
:
gcloud run deploy helloworld \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld \ --platform managed \ --region us-central1 \ --allow-unauthenticated
A opção de implantação --allow-unauthenticated
permite que você acesse o app sem autenticação. A opção de implantação --platform managed \
significa que você está solicitando o ambiente totalmente gerenciado, e não a infraestrutura do Kubernetes via Anthos.
Aguarde alguns instantes até a implantação terminar. Quando terminar, a linha de comando vai mostrar o URL do serviço.
Service [helloworld] revision [helloworld-00001] has been deployed and is serving traffic at https://helloworld-wdl7fdwaaa-uc.a.run.app
Agora você pode acessar o contêiner implantado abrindo o URL do serviço em um navegador da Web:
O Cloud Run escalona de forma automática e horizontal a imagem do contêiner para lidar com as solicitações recebidas, depois reduz o escalonamento quando a demanda diminui. Você paga apenas pela CPU, memória e rede consumidas durante o processamento da solicitação.
6. Limpar
Embora o Cloud Run não gere custos quando o serviço não está em uso, você ainda pode receber cobranças pelo armazenamento da imagem do contêiner que você criou.
Exclua seu projeto do Google Cloud para evitar cobranças, o que interromperá o faturamento de todos os recursos usados nele, ou simplesmente exclua sua imagem helloworld usando este comando:
gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
Para excluir o serviço Cloud Run, use este comando:
gcloud run services delete helloworld \ --platform managed \ --region us-central1
7. Parabéns
Parabéns! Você implantou um aplicativo empacotado em uma imagem de contêiner no Cloud Run.
Saiba mais
Uma boa próxima etapa é conferir o Guia de início rápido: implantar no Cloud Run for Anthos no Google Cloud.
Para mais informações sobre como criar um contêiner HTTP sem estado adequado para o Cloud Run a partir do código-fonte e enviá-lo para o Container Registry, consulte os seguintes recursos:
Para saber mais sobre o Knative, o projeto de código aberto subjacente, consulte Knative.