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 creare applicazioni moderne basate su 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 Crea e avvia l'app ASP.NET Core da Google Cloud Shell. Ti consigliamo di eseguire questo lab prima di iniziare questo.

Le applicazioni di 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. Non devi fare altro che caricare la tua richiesta ed è pronta per iniziare.

Le applicazioni App Engine scalano 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 analisi della sicurezza, tutti elementi altamente personalizzabili.

Gli ambienti 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. I due ambienti offrono agli utenti la massima flessibilità nel comportamento dell'applicazione, dal momento che ogni ambiente presenta determinati punti di forza. Per saperne di più, consulta Scelta di un ambiente App Engine.

Obiettivi didattici

  • Pacchettizzare una semplice app ASP.NET Core come container Docker.
  • Eseguire il deployment di una semplice app ASP.NET Core in App Engine.

Che cosa ti serve

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

Come utilizzerai questo tutorial?

Solo lettura Leggilo e completa gli esercizi

Come valuteresti la tua esperienza con la piattaforma Google Cloud?

Principiante Livello intermedio Eccellente

2. Configurazione e requisiti

Configurazione dell'ambiente da seguire in modo 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 progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google e può essere aggiornata 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). La console Cloud genera automaticamente una stringa univoca. di solito non ti importa cosa sia. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (che solitamente è identificato come PROJECT_ID), quindi, se non ti piace, generane un altro a caso oppure puoi fare un tentativo personalizzato e controllare se è disponibile. Poi c'è "congelato" dopo la creazione del progetto.
  • C'è un terzo valore, il numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare le risorse/le API Cloud. Eseguire questo codelab non dovrebbe costare molto. Per arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial, segui eventuali "pulizie" istruzioni riportate alla fine del codelab. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.

Avvia Cloud Shell

Anche se Google Cloud può essere utilizzato 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. Dalla console Cloud, fai clic su Attiva Cloud Shell 4292cbf4971c9786.png.

bce75f34b2c53987.png

Se non hai mai avviato Cloud Shell, ti viene mostrata una schermata intermedia (below the fold) che descrive di cosa si tratta. In tal caso, fai clic su Continua (e non la vedrai più). Ecco come appare quella singola schermata:

70f315d7b402b476.png

Il provisioning e la connessione a Cloud Shell dovrebbero richiedere solo qualche istante.

fbe3a0674c982259.png

Questa macchina virtuale viene caricata con tutti gli strumenti di sviluppo di cui hai bisogno. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Gran parte, se non tutto, del lavoro in questo codelab può essere svolto semplicemente con un browser o 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 confermare che il comando gcloud è a conoscenza del 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

Poi, crea uno scheletro di app web ASP.NET Core con un framework di destinazione netcoreapp3.1:

dotnet new mvc -o HelloWorldAspNetCore -f netcoreapp3.1

Questo dovrebbe creare un progetto e ripristinare le sue 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

Siamo quasi pronti 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 l'ascolto 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 Anteprima web in alto a destra e seleziona "Anteprima sulla porta 8080".

Capture.PNG

Verrà visualizzata la pagina web predefinita di ASP.NET Core:

f579a9baedc108a9.png

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

5. Pubblica l'app ASP.NET Core

Ora pubblica l'app in modo da ottenere una DLL autonoma usando il comando dotnet publish.

dotnet publish -c Release

L'esecuzione di publish mostra alcuni messaggi con una DLL pubblicata alla fine del 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. Creazione di 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. Dovrebbe trovarsi all'interno della 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 specifica l'ambiente come flex e il runtime come aspnetcore.

7. Esegui il deployment nell'ambiente flessibile di App Engine

Ora puoi eseguire il deployment della tua app in App Engine flessibile utilizzando gcloud. Nella directory publish, esegui questo comando:

gcloud app deploy --version v0

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

Verrà creata un'immagine per l'applicazione nel cloud, l'immagine verrà salvata in Google Container Registry e ne verrà eseguita il deployment in App Engine. Durante il deployment, puoi effettivamente 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 è stato eseguito il deployment dell'app.

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

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

Vedrai la pagina web predefinita di ASP.NET Core 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, nella cartella appengine, dovresti vedere l'immagine dell'applicazione.

de788f4949d0c5a.png

8. Esegui il deployment di una nuova versione del servizio

A un certo punto, l'applicazione di cui hai eseguito il deployment 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 in questo modo:

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, 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 (in questo caso v1).

gcloud app deploy --version v1

Una volta eseguito il deployment, puoi andare alla sezione delle versioni di App Engine di Google Cloud Console per vedere la nuova versione dell'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 vedere una serie di dashboard per la tua applicazione relative a latenza, CPU e così via. Esplorale in modo autonomo.

5c879431935b080d.png

Nella sezione Versioni puoi vedere le versioni della tua app di cui è stato eseguito il deployment e puoi suddividere il traffico tra versioni diverse 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 supporto verranno eliminate e il conteggio delle istanze dovrebbe scendere a zero.

29f3cb5c71225b2d.png

Argomenti trattati

Ci siamo! Hai creato un'app ASP.NET Core, l'hai pacchettizzata come container Docker e ne hai eseguito il deployment nell'ambiente flessibile di Google App Engine.

  • Pacchettizzare una semplice app ASP.NET Core come container Docker.
  • Eseguire il deployment di una semplice app ASP.NET Core in App Engine.

Passaggi successivi

Licenza

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