
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 foi 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
Configuração de ambiente autoguiada
Se você ainda não tem uma Conta do Google (Gmail ou Google Apps), crie uma. Faça login no Console do Google Cloud Platform (console.cloud.google.com) e crie um projeto:
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, ative o faturamento no console do Cloud para usar os recursos do Google Cloud.
A execução por meio deste codelab terá um custo baixo, mas poderá ser mais se você decidir usar mais recursos ou se deixá-los em execução. Consulte a seção "limpeza" no final deste documento.
Novos usuários do Google Cloud Platform têm direito a uma avaliação sem custo financeiro de US$300.
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 permanente de 5 GB, além de ser executada no Google Cloud, o que 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 Google Cloud Shell, clique no botão no canto superior direito do console do desenvolvedor. Leva apenas alguns instantes para provisionar e se conectar ao ambiente:
Clique no botão "Iniciar Cloud Shell":
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>
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>
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:
IMPORTANTE: por fim, 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. Saiba mais na documentação sobre Zonas e Regiões.
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.
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.
Para contentorizar o app de exemplo, crie um 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 contém 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, você vai 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.
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.
Para implantar seu app conteinerizado no Cloud Run, use o seguinte comando. Ajuste-o ao 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.
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 de contêiner criada.
Para evitar cobranças, exclua seu projeto 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
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).