Implantar um app ASP.NET Core no App Engine

1. Visão geral

O ASP.NET Core é um novo framework de código aberto e multiplataforma para criação de aplicativos modernos baseados em nuvem e conectados à Internet usando a linguagem de programação C#.

Neste laboratório, você implantará um aplicativo simples do ASP.NET Core no ambiente flexível do App Engine. Este codelab tem como base o Criar e iniciar o app ASP.NET Core no Google Cloud Shell. É recomendável fazer isso antes de começar este.

Os aplicativos do Google App Engine são fáceis de criar, manter e escalonar de acordo com as mudanças necessárias no tráfego e no armazenamento de dados. Com o App Engine, você não precisa se preocupar com o gerenciamento de servidores. Basta fazer upload do aplicativo e pronto.

Os aplicativos do App Engine são escalonados automaticamente com base no tráfego de entrada. O App Engine oferece suporte nativo a balanceamento de carga, microsserviços, autorização, bancos de dados SQL e NoSQL, Memcache, divisão de tráfego, geração de registros, pesquisa, controle de versões, implantações, reversões e verificações de segurança. Todos esses recursos são altamente personalizáveis.

Os ambientes do App Engine, o ambiente padrão e o ambiente flexível são compatíveis com várias linguagens de programação, como C#, Java, Python, PHP, Node.js e Go, entre outras. Esses dois ambientes oferecem uma maior flexibilidade aos usuários dos aplicativos, já que cada ambiente tem pontos fortes específicos. Para mais informações, consulte Como escolher um ambiente do App Engine.

O que você vai aprender

  • Como empacotar um aplicativo simples do ASP.NET Core como um contêiner do Docker
  • implantar um app simples do ASP.NET Core no App Engine.

O que é necessário

  • Um projeto do Google Cloud Platform
  • Um navegador, como o Chrome ou o Firefox

Como você usará este tutorial?

Apenas leitura Leitura e exercícios

Como você classificaria sua experiência com o Google Cloud Platform?

Iniciante Intermediário Proficiente

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.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • O Nome do projeto é o nome de exibição para os participantes do projeto. Ele é uma string de caracteres que não é usada pelas APIs do Google e pode ser atualizada a qualquer momento.
  • O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser alterado após a definição. O Console do Cloud gera automaticamente uma string única, geralmente não importa o que seja. Na maioria dos codelabs, você precisará fazer referência ao ID do projeto, que geralmente é identificado como PROJECT_ID. Então, se você não gostar dele, gere outro ID aleatório ou crie um próprio e veja se ele está disponível. Em seguida, ele fica "congelado" depois que o projeto é criado.
  • Há um terceiro valor, um Número de projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
  1. Em seguida, você precisará ativar o faturamento no Console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não será muito cara, se tiver algum custo. Para encerrar os recursos e não gerar cobranças além deste tutorial, siga as instruções de "limpeza" encontradas no final do codelab. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.

Inicie o Cloud Shell

Embora o Google Cloud e o Spanner possam ser operados remotamente do seu laptop, neste codelab usaremos o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.

Ativar o Cloud Shell

  1. No Console do Cloud, clique em Ativar o Cloud Shell4292cbf4971c9786.png.

bce75f34b2c53987.png

Se você nunca iniciou o Cloud Shell antes, uma tela intermediária (abaixo da dobra) será exibida com a descrição dele. Se esse for o caso, clique em Continuar (e você não verá mais esse aviso). Esta é a aparência dessa tela única:

70f315d7b402b476.png

Leva apenas alguns instantes para provisionar e se conectar ao Cloud Shell.

fbe3a0674c982259.png

Essa máquina virtual tem 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. Praticamente todo o seu trabalho neste codelab pode ser feito em um navegador ou no seu Chromebook.

Depois de se conectar ao Cloud Shell, você já estará autenticado e o projeto já estará configurado com seu ID do projeto.

  1. Execute o seguinte comando no Cloud Shell para confirmar que você está autenticado:
gcloud auth list

Resposta ao comando

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Execute o seguinte comando no Cloud Shell para confirmar que o comando gcloud sabe sobre seu projeto:
gcloud config list project

Resposta ao comando

[core]
project = <PROJECT_ID>

Se o projeto não estiver configurado, configure-o usando este comando:

gcloud config set project <PROJECT_ID>

Resposta ao comando

Updated property [core/project].

3. Crie um aplicativo do ASP.NET Core no Cloud Shell

No prompt do Cloud Shell, liste os SDKs do .NET instalados para verificar se a ferramenta de linha de comando dotnet já está instalada:

dotnet --list-sdks

Em seguida, crie um novo esqueleto de app da Web ASP.NET Core com um framework de destino de netcoreapp3.1:

dotnet new mvc -o HelloWorldAspNetCore -f netcoreapp3.1

Esse comando cria um projeto e restaura as dependências dele. Você verá uma mensagem semelhante ao exemplo abaixo.

Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.

Restore succeeded.

4. Execute o aplicativo do ASP.NET Core

Estamos quase prontos para executar o app. Navegue até a pasta do app.

cd HelloWorldAspNetCore

Por fim, execute o app.

dotnet run --urls=http://localhost:8080

O aplicativo começará a ouvir na porta 8080.

Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.

Para verificar se o app está em execução, clique no botão de visualização da Web, no canto superior direito, e selecione "Visualizar na porta 8080".

Capture.PNG

Você verá a página da Web padrão do ASP.NET Core:

f579a9baedc108a9.png

Depois de verificar se o app está em execução, pressione Ctrl+C para encerrá-lo.

5. Publique o aplicativo do ASP.NET Core

Agora, publique o app para receber uma DLL independente usando o comando dotnet publish.

dotnet publish -c Release

A execução de publish exibe algumas mensagens com uma DLL publicada com sucesso no final do processo.

...
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.dll
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.Views.dll
  HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/publish/

6. Crie o app.yaml para o ambiente flexível do App Engine

O arquivo app.yaml descreve como implantar o app no App Engine. Neste caso, o ambiente flexível do App Engine.

Primeiro, navegue até a pasta publish. Ele deve estar na pasta bin/Release, mas o caminho exato depende da versão do .NET:

cd bin/Release/netcoreapp3.1/publish/

Crie um arquivo app.yaml dentro da pasta publish:

cat <<EOT >> app.yaml
env: flex
runtime: aspnetcore
EOT

Observe como o arquivo app.yaml especifica o ambiente como flex e o ambiente de execução como aspnetcore.

7. Implante no ambiente flexível do App Engine

Tudo pronto para implantar o app no ambiente flexível do App Engine usando gcloud. No diretório publish, execute o seguinte:

gcloud app deploy --version v0

Durante a implantação, talvez você precise escolher uma região para o aplicativo. Escolha a região em que você quer executar o app.

Please choose a region for your application. After choosing a region, 
you cannot change it. Which region would you like to choose?
 [1] europe-west   (supports standard and flexible)
 [2] us-central    (supports standard and flexible)
 [3] us-east1      (supports standard and flexible)
 [4] asia-northeast1 (supports standard and flexible)
 [5] cancel

Isso vai criar uma imagem para seu aplicativo na nuvem, salvá-la no Google Container Registry e implantá-la no App Engine. Durante a implantação, é possível conferir a imagem do contêiner que está sendo criada:

Operation completed over 1 objects/571.8 KiB.
BUILD
Step #0: Pulling image: gcr.io/gcp-runtimes/aspnetcorebuild@sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb
Step #0: sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb: Pulling from gcp-runtimes/aspnetcorebuild

No final, você verá que o app está implantado.

...
Deployed service [default] to [https://<project-id>.appspot.com]

Depois de implantar o aplicativo,abra o URL http://<project-id>.appspot.com no navegador da Web.

A página da Web padrão do ASP.NET Core vai aparecer em uma nova guia.

f579a9baedc108a9.png

Também é possível observar a imagem do contêiner criada para você na nuvem. No console do Cloud, acesse Container Registry > Imagens e, na pasta appengine, você verá a imagem do aplicativo.

de788f4949d0c5a.png

8. Implante uma nova versão do seu serviço

Em algum momento, o aplicativo implantado na produção exigirá correções de bugs ou recursos adicionais. O App Engine foi criado para ajudar você a implantar uma nova versão na produção sem afetar seus usuários.

Primeiro, vamos modificar o aplicativo. Abra o editor de código no Cloud Shell.

868c4f615e2331fe.png

Navegue até Index.cshtml na pasta Views/Home de HelloWorldAspNetCore e atualize a mensagem padrão para esta:

Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core on Google Cloud Platform!

Salve as alterações e volte ao Cloud Shell. Dentro de HelloWorldAspNetCore,, publique o app para acessar uma DLL independente.

dotnet publish -c Release

Acesse o diretório "publish".

cd bin/Release/netcoreapp3.1/publish/

Agora você pode implantar uma nova versão do app (neste caso, v1).

gcloud app deploy --version v1

Após a implantação, acesse a seção de versões do App Engine no console do Google Cloud para conferir a nova versão do app que atende todo o tráfego com a nova mensagem.

8cc0cc992b4e07ed.png

9. Painéis e divisão de tráfego

No App Engine, na seção "Painel", você pode ver vários painéis de controle de latência, CPU etc. para seu aplicativo. Explore-os por conta própria.

5c879431935b080d.png

Na seção Versões, é possível ver as versões implantadas do aplicativo e dividir o tráfego entre versões diferentes na seção Divisão de tráfego. Vamos dividir o tráfego entre duas versões:

176a2e22e755b6d3.png

10. Parabéns!

Cleanup (link em inglês)

É hora de desligar o app para economizar e ser um bom cidadão da nuvem.

Acesse a seção de versões do App Engine.

7e9b3b4406e785b9.png

Selecione e interrompa a versão.

7f80d9ff2c959e0.png

Quando a versão for interrompida, as instâncias de backup serão excluídas, e a contagem de instâncias vai diminuir para zero.

29f3cb5c71225b2d.png

O que vimos

Pronto! Você criou um aplicativo do ASP.NET, o empacotou como um contêiner do Docker e o implantou no ambiente flexível do Google App Engine.

  • Como empacotar um aplicativo simples do ASP.NET Core como um contêiner do Docker
  • implantar um app simples do ASP.NET Core no App Engine.

Próximas etapas

Licença

Este conteúdo está sob a licença Atribuição 2.0 Genérica da Creative Commons.