Hello Cloud Run com C#

1. Introdução

89eb4723767d4525.png

O Cloud Run é uma plataforma gerenciada para executar contêineres sem estado que podem ser invocados usando solicitações HTTP. O Cloud Run não tem servidor. Ele cuida de todo o gerenciamento da infraestrutura para que você possa se concentrar no que mais importa: criar aplicativos incríveis.

Ele foi criado com base no Knative, o que dá a você a opção de executar os contêineres de modo totalmente gerenciado com o Cloud Run ou no cluster do Google Kubernetes Engine com o Cloud Run no GKE.

O objetivo deste codelab é criar uma imagem de contêiner e implantá-la no Cloud Run.

2. Configuração e requisitos

Configuração de ambiente autoguiada

  1. Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • O Nome do projeto é o nome de exibição para os participantes do projeto. É uma string de caracteres não usada pelas APIs do Google e pode ser atualizada quando você quiser.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser mudado após a definição. O console do Cloud gera automaticamente uma string exclusiva. Em geral, não importa o que seja. Na maioria dos codelabs, é necessário fazer referência ao ID do projeto, normalmente identificado como PROJECT_ID. Se você não gostar do ID gerado, crie outro aleatório. Se preferir, teste o seu e confira se ele está disponível. Ele não pode ser mudado após essa etapa e permanece durante o projeto.
  • Para sua informação, há um terceiro valor, um Número do projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
  1. Em seguida, ative o faturamento no console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não vai ser muito cara, se tiver algum custo. Para encerrar os recursos e evitar cobranças além deste tutorial, exclua os recursos criados ou exclua o projeto. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

Google Cloud Shell

Embora o Google Cloud possa ser operado remotamente do seu laptop, neste codelab vamos usar o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.

O Cloud Shell é um ambiente de desenvolvimento e operações on-line acessível pelo navegador em qualquer lugar. É possível gerenciar seus recursos com o terminal on-line pré-carregado com utilitários como a ferramenta de linha de comando gcloud, kubectl e muito mais. Também é possível desenvolver, criar, depurar e implantar apps baseados na nuvem usando o Editor do Cloud Shell on-line.

Essa máquina virtual tem todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal permanente de 5 GB e é executada diretamente no Google Cloud, melhorando muito 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 :

cb81e7c8e34bc8d.png

Se você estiver iniciando o Cloud Shell pela primeira vez, verá uma tela intermediária com a descrição dele. Se aparecer uma tela intermediária, clique em Continuar.

bfde7b083abc9544.png

O provisionamento do ambiente leva apenas alguns segundos :

cbb597d2be277a14.png

Após se conectar ao Cloud Shell, sua conta já estará autenticada :

gcloud auth list

Resposta ao comando

Credentialed Accounts

ACTIVE: *
ACCOUNT: <my-account>@<mydomain>

O projeto também estará definido como PROJECT_ID, supondo que você tenha selecionado um projeto no console da Web:

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? Confira o menu suspenso na parte de cima do Console do Cloud :

2c7a57249d954735.png

Você também pode conferir os detalhes do projeto em "Configurações e utilitários" :

791f101797cfef39.png

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>
  • Por fim, você pode definir a zona padrão :
gcloud config set compute/zone us-central1-f

É possível escolher 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. Crie o aplicativo de exemplo

Criaremos um aplicativo ASP.NET em C# simples para responder às solicitações HTTP.

Para criar seu aplicativo, use a ferramenta de linha de comando dotnet no Cloud Shell:

dotnet new web -o helloworld-csharp

Mude para o diretório helloworld-csharp:

cd helloworld-csharp

Em seguida, atualize Program.cs para corresponder ao seguinte:

var builder = WebApplication.CreateBuilder(args);

var port = Environment.GetEnvironmentVariable("PORT") ?? "8080";
var url = $"http://0.0.0.0:{port}";
builder.WebHost.UseUrls(url);

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Esse código cria um servidor da Web básico que detecta na porta definida pela variável de ambiente PORT e responde com Hello World.

Execute o app localmente no Cloud Shell para testá-lo. Ele deve detectar atividade na porta 8080:

$ dotnet run
Using launch settings from /home/atameldev/helloworld-csharp/Properties/launchSettings.json...
Hosting environment: Development
Content root path: /home/atameldev/helloworld-csharp
Now listening on: http://0.0.0.0:8080
Application started. Press Ctrl+C to shut down.

4. Implantar no Cloud Run

Implante seu aplicativo no Cloud Run com o seguinte comando:

gcloud run deploy hello-world \
    --allow-unauthenticated \
    --region us-central1 \
    --source .
  • hello-world é o nome do serviço;
  • A flag allow-unauthenticated implanta o serviço como um serviço disponível publicamente sem requisitos de autenticação.
  • us-central1 é a região em que o aplicativo será implantado.
  • A sinalização source determina o local da origem a ser criada. O Cloud Run usa buildpacks para criar automaticamente um contêiner com base no código-fonte.

Aguarde alguns minutos até que a implantação seja concluída. Em caso de sucesso, a linha de comando mostra o URL de serviço:

Service [hello-world] revision [hello-world-00001-yos] has been deployed and is serving 100 percent of traffic.
Service URL: 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 :

85e7fbbd264444c9.png

Parabéns! Você acabou de implantar um aplicativo empacotado em uma imagem de contêiner no Cloud Run. 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.

5. Hora de fazer a limpeza

É possível excluir seu projeto do GCP para evitar cobranças, o que interromperá o faturamento de todos os recursos usados nesse projeto, ou simplesmente excluir o serviço do Cloud Run:

gcloud run services delete helloworld

6. A seguir

Uma boa próxima etapa seria Implantar no Cloud Run no GKE.

Para mais informações sobre como criar um contêiner HTTP sem estado compatível com o Cloud Run desde o código-fonte e enviá-lo para o Container Registry, consulte: