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 para que você possa se concentrar no que mais importa: criar apps incríveis. Ele é criado com base no Knative, permitindo que você execute seus contêineres com o Cloud Run (totalmente gerenciado) ou o Cloud Run para 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 seu laptop, você vai 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. Escrever o app de exemplo
Você vai criar um app Node.js simples, baseado no Express, que responde a solicitações HTTP.
Para criar o app, use o Cloud Shell para criar um diretório chamado helloworld-nodejs e mude para ele.
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 início e uma dependência no framework Express para aplicativos 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 realiza detecções na porta definida pela variável de ambiente PORT. O app está pronto para ser conteinerizado, testado e enviado ao Container Registry.
4. Contentorize seu app e o envie para o Container Registry
Para contentorizar o app de exemplo, crie um novo arquivo chamado Dockerfile no mesmo diretório dos arquivos de origem e copie o seguinte conteúdo 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 a imagem do contêiner usando o Cloud Build. Para isso, execute o comando a seguir no diretório que tem seu 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 ao executar no Cloud Shell. Você também pode consegui-lo executando gcloud config get-value project.
Depois de enviada para o registro, uma mensagem SUCCESS vai aparecer com o nome da imagem (gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld). A imagem é armazenada no Container Registry e pode ser reutilizada, se você quiser.
Liste todas as imagens do contêiner associadas ao projeto atual usando este comando:
gcloud container images list
Se você quiser executar e testar o app localmente no Cloud Shell, inicie-o usando este comando padrão do docker:
docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
No Cloud Shell, clique em Visualização da Web
e selecione Visualizar na porta 8080.

Isso abre uma janela do navegador com a mensagem Hello World!.

Você também pode usar curl localhost:8080.
5. Implantar no Cloud Run
Para implantar seu app conteinerizado no Cloud Run, use o seguinte comando. Ajuste-o com o nome correto da imagem do app que você criou ou use a imagem predefinida 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 acessar o app sem autenticação. A opção de implantação --platform managed \ significa que você está solicitando o ambiente totalmente gerenciado, 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 de serviço em um navegador da Web:

O Cloud Run escalona de maneira automática e horizontal a imagem do contêiner para processar 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
O Cloud Run não cobra quando o serviço não está em uso, mas você ainda pode receber cobranças pelo armazenamento da imagem do contêiner criada.
Para evitar cobranças, exclua seu projeto na nuvem do Google Cloud para interromper o faturamento de todos os recursos usados ou apague 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 app empacotado em uma imagem de contêiner no Cloud Run.
Saiba mais
Uma boa próxima etapa seria 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 compatível com 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 (em inglês).