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 se baseia no codelab Criar e iniciar um app do ASP.NET Core no Google Cloud Shell. Recomendamos que você faça esse laboratório primeiro.

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, vai ver uma tela intermediária abaixo da dobra com a descrição dele. Se esse for o caso, clique em Continuar e você não a verá novamente. 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 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. 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 comando a seguir no Cloud Shell para confirmar se 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, verifique se a ferramenta de linha de comando dotnet já está instalada listando os SDKs do .NET instalados:

dotnet --list-sdks

Em seguida, crie uma estrutura para um app da Web ASP.NET Core com uma estrutura de destino 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

Quase tudo pronto 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 confirmar que o app está em execução, clique no botão "Visualização da Web", no canto superior direito, e selecione "Visualizar na porta 8080".

Capture.PNG

A página da Web padrão do ASP.NET Core vai aparecer:

f579a9baedc108a9.png

Depois de verificar que o app está em execução, pressione Ctrl+C para desligá-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 mostra algumas mensagens com uma DLL publicada ao 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 precisa 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 na 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

Agora você pode 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 seja necessário escolher uma região para o aplicativo. Escolha a região da sua preferência para a execução do 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, salvar essa imagem no Google Container Registry e implantar no App Engine. Durante a implantação, é possível ver a imagem do contêiner 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ê vai ver que o app foi 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 para acessá-lo.

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

f579a9baedc108a9.png

Você também pode conferir a imagem do contêiner criada para você na nuvem. No console do Cloud, acesse Container Registry > Imagens e, na pasta appengine, você vai encontrar a imagem do seu 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:

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

Salve as mudanças e volte para o Cloud Shell. Dentro de HelloWorldAspNetCore,, publique o app para receber 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 seu app (v1, neste caso).

gcloud app deploy --version v1

Depois de implantado, acesse a seção "Versões do App Engine" no Console do Google Cloud para ver a nova versão do seu app exibindo 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ê encontra vários painéis do aplicativo para latência, CPU etc. Explore-os por conta própria.

5c879431935b080d.png

Na seção "Versões", você pode conferir as versões implantadas do app e dividir o tráfego entre elas na seção "Como dividir o tráfego". Vamos dividir o tráfego entre duas versões:

176a2e22e755b6d3.png

10. Parabéns!

Cleanup

É hora de encerrar o app para economizar custos e garantir boas práticas na nuvem.

Acesse a seção "Versões" do App Engine.

7e9b3b4406e785b9.png

Selecione e pare a versão.

7f80d9ff2c959e0.png

Depois que a versão for interrompida, as instâncias de suporte serão excluídas, e a contagem de instâncias vai cair 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.