Esegui il deployment di un'app ASP.NET Core in App Engine

1. Panoramica

ASP.NET Core è un nuovo framework open source e multipiattaforma per la creazione di moderne applicazioni basate sul cloud e connesse a internet utilizzando il linguaggio di programmazione C#.

In questo lab, eseguirai il deployment di una semplice app ASP.NET Core nell'ambiente flessibile di App Engine. Questo codelab si basa sul codelab Build and launch ASP.NET Core app from Google Cloud Shell. Ti consigliamo di svolgere prima questo lab.

Le applicazioni Google App Engine sono facili da creare, gestire e scalare man mano che cambiano le esigenze di traffico e archiviazione dei dati. Con App Engine, non ci sono server da gestire. Ti basterà caricare la tua applicazione e sarà pronta per l'uso.

Le applicazioni App Engine vengono scalate automaticamente in base al traffico in entrata. App Engine supporta in modo nativo bilanciamento del carico, microservizi, autorizzazione, database SQL e NoSQL, Memcache, suddivisione del traffico, logging, ricerca, controllo delle versioni, implementazione e rollback e scansione di sicurezza, tutti altamente personalizzabili.

Gli ambienti di App Engine, l'ambiente standard e l'ambiente flessibile, supportano una serie di linguaggi di programmazione, tra cui C#, Java, Python, PHP, Node.js, Go e altri ancora. I due ambienti offrono agli utenti la massima flessibilità nel comportamento dell'applicazione, poiché ogni ambiente ha determinati punti di forza. Per ulteriori informazioni, leggi Scegliere un ambiente App Engine.

Obiettivi didattici

  • Come pacchettizzare una semplice app ASP.NET Core come container Docker.
  • Come eseguire il deployment di un'app ASP.NET Core semplice in App Engine.

Che cosa ti serve

  • Un progetto Google Cloud
  • Un browser, ad esempio Chrome o Firefox

Come utilizzerai questo tutorial?

Leggilo e basta Leggilo e completa gli esercizi

Come valuteresti la tua esperienza con Google Cloud Platform?

Principiante Intermedio Avanzato

2. Configurazione e requisiti

Configurazione dell'ambiente autonomo

  1. Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google e puoi aggiornarla in qualsiasi momento.
  • L'ID progetto deve essere univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). Cloud Console genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (che in genere è identificato come PROJECT_ID), quindi, se non ti piace, generane un altro casuale oppure puoi provare il tuo e vedere se è disponibile. Viene "congelato" dopo la creazione del progetto.
  • Esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Per arrestare le risorse in modo da non incorrere in costi di fatturazione al termine di questo tutorial, segui le istruzioni di "pulizia" riportate alla fine del codelab. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.

Avvia Cloud Shell

Sebbene Google Cloud possa essere gestito da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.

Attiva Cloud Shell

  1. Nella console Cloud, fai clic su Attiva Cloud Shell 4292cbf4971c9786.png.

bce75f34b2c53987.png

Se non hai mai avviato Cloud Shell, viene visualizzata una schermata intermedia (sotto la piega) che ne descrive le funzionalità. In questo caso, fai clic su Continua e non comparirà più. Ecco come si presenta la schermata intermedia:

70f315d7b402b476.png

Bastano pochi istanti per eseguire il provisioning e connettersi a Cloud Shell.

fbe3a0674c982259.png

Questa macchina virtuale è caricata con tutti gli strumenti per sviluppatori di cui hai bisogno. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Gran parte del lavoro per questo codelab, se non tutto, può essere svolto semplicemente con un browser o con Chromebook.

Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato e il progetto è già impostato sul tuo ID progetto.

  1. Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:
gcloud auth list

Output comando

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

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Esegui questo comando in Cloud Shell per verificare che il comando gcloud conosca il tuo progetto:
gcloud config list project

Output comando

[core]
project = <PROJECT_ID>

In caso contrario, puoi impostarlo con questo comando:

gcloud config set project <PROJECT_ID>

Output comando

Updated property [core/project].

3. Crea un'app ASP.NET Core in Cloud Shell

Nel prompt di Cloud Shell, puoi verificare che lo strumento a riga di comando dotnet sia già installato elencando gli SDK .NET installati:

dotnet --list-sdks

Successivamente, crea una nuova app web ASP.NET Core scheletrica con un framework di destinazione netcoreapp3.1:

dotnet new mvc -o HelloWorldAspNetCore -f netcoreapp3.1

Viene creato un progetto e ne vengono ripristinate le dipendenze. Dovresti vedere un messaggio simile al seguente.

Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.

Restore succeeded.

4. Esegui l'app ASP.NET Core

È quasi tutto pronto per eseguire la nostra app. Vai alla cartella dell'app.

cd HelloWorldAspNetCore

Infine, esegui l'app.

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

L'applicazione inizia ad ascoltare sulla porta 8080.

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

Per verificare che l'app sia in esecuzione, fai clic sul pulsante di anteprima web in alto a destra e seleziona "Anteprima sulla porta 8080".

Capture.PNG

Vedrai la pagina web ASP.NET Core predefinita:

f579a9baedc108a9.png

Dopo aver verificato che l'app è in esecuzione, premi Ctrl+C per chiuderla.

5. Pubblica l'app ASP.NET Core

Ora pubblica l'app per ottenere una DLL autonoma utilizzando il comando dotnet publish.

dotnet publish -c Release

L'esecuzione di publish mostra alcuni messaggi con una DLL pubblicata correttamente al termine della procedura.

...
  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. Crea app.yaml per l'ambiente flessibile di App Engine

Il file app.yaml descrive come eseguire il deployment dell'app in App Engine, in questo caso l'ambiente flessibile di App Engine.

Innanzitutto, vai alla cartella publish. Deve trovarsi nella cartella bin/Release, ma il percorso esatto dipende dalla versione di .NET:

cd bin/Release/netcoreapp3.1/publish/

Crea un file app.yaml all'interno della cartella publish:

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

Nota come il file app.yaml specifichi l'ambiente come flex e il runtime come aspnetcore.

7. Esegui il deployment in App Engine flessibile

Ora puoi eseguire il deployment dell'app in App Engine flessibile utilizzando gcloud. All'interno della directory publish, esegui questo comando:

gcloud app deploy --version v0

Durante il deployment, potrebbe esserti chiesto di scegliere una regione per la tua applicazione. Scegli una regione in cui vuoi eseguire l'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

In questo modo verrà creata un'immagine per la tua applicazione nel cloud, che verrà salvata in Google Container Registry e di cui verrà eseguito il deployment in App Engine. Durante il deployment, puoi vedere l'immagine container in fase di creazione:

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

Alla fine, dovresti vedere che l'app è stata implementata.

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

Dopo aver eseguito il deployment dell'applicazione,visita l'URL http://<project-id>.appspot.com nel browser web.

Vedrai la pagina web ASP.NET Core predefinita in una nuova scheda.

f579a9baedc108a9.png

Puoi anche dare un'occhiata all'immagine container creata per te nel cloud. Nella console Cloud, vai a Container Registry > Immagini e poi nella cartella appengine dovresti vedere l'immagine della tua applicazione.

de788f4949d0c5a.png

8. Esegui il deployment di una nuova versione del servizio

A un certo punto, l'applicazione che hai implementato in produzione richiederà correzioni di bug o funzionalità aggiuntive. App Engine è qui per aiutarti a eseguire il deployment di una nuova versione in produzione senza influire sugli utenti.

Innanzitutto, modifichiamo l'applicazione. Apri l'editor di codice da Cloud Shell.

868c4f615e2331fe.png

Vai a Index.cshtml nella cartella Views/Home di HelloWorldAspNetCore e aggiorna il messaggio predefinito con questo testo:

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

Salva le modifiche e torna a Cloud Shell. All'interno di HelloWorldAspNetCore,, pubblica l'app per ottenere una DLL autonoma.

dotnet publish -c Release

Vai alla directory di pubblicazione.

cd bin/Release/netcoreapp3.1/publish/

Ora puoi eseguire il deployment di una nuova versione della tua app (v1 in questo caso).

gcloud app deploy --version v1

Una volta eseguito il deployment, puoi andare alla sezione delle versioni di App Engine di Google Cloud Console per visualizzare la nuova versione della tua app che gestisce tutto il traffico con il nuovo messaggio.

8cc0cc992b4e07ed.png

9. Dashboard e suddivisione del traffico

In App Engine, nella sezione Dashboard, puoi visualizzare una serie di dashboard per la tua applicazione relative a latenza, CPU e così via. Esplorale in autonomia.

5c879431935b080d.png

Nella sezione Versioni puoi visualizzare le versioni dell'app di cui è stato eseguito il deployment e puoi suddividere il traffico tra le diverse versioni nella sezione Suddivisione del traffico. Suddividiamo il traffico tra due versioni:

176a2e22e755b6d3.png

10. Complimenti!

Cleanup

È il momento di chiudere l'app per risparmiare sui costi e per essere un buon cittadino del cloud.

Vai alla sezione delle versioni di App Engine.

7e9b3b4406e785b9.png

Seleziona la versione e interrompila.

7f80d9ff2c959e0.png

Una volta arrestata la versione, le istanze di backend verranno eliminate e il conteggio delle istanze dovrebbe scendere a zero.

29f3cb5c71225b2d.png

Argomenti trattati

Ecco fatto. Hai creato un'app ASP.NET Core, l'hai pacchettizzata come container Docker e l'hai eseguita il deployment su Google App Engine Flexible.

  • Come pacchettizzare una semplice app ASP.NET Core come container Docker.
  • Come eseguire il deployment di un'app ASP.NET Core semplice in App Engine.

Passaggi successivi

Licenza

Questo lavoro è concesso in licenza ai sensi di una licenza Creative Commons Attribution 2.0 Generic.