Hello Cloud Run with C#

1. Introduzione

89eb4723767d4525.png

Cloud Run è una piattaforma gestita che consente di eseguire container stateless richiamabili tramite richieste HTTP. Cloud Run è serverless. Astrae completamente la gestione dell'infrastruttura per consentirti di concentrarti su quello che conta davvero: creare applicazioni fantastiche.

È basato su Knative per consentirti di scegliere se eseguire i container in maniera completamente gestita con Cloud Run o nel tuo cluster Google Kubernetes Engine con Cloud Run su GKE.

L'obiettivo di questo codelab è creare un'immagine container ed eseguirne il deployment su Cloud Run.

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.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarlo.
  • L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo l'impostazione). La console Cloud genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere identificato come PROJECT_ID). Se l'ID generato non ti piace, puoi generarne un altro casuale. In alternativa, puoi provare a crearne uno e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimane per tutta la durata del progetto.
  • Per tua informazione, 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. Completare questo codelab non costa molto, se non nulla. Per arrestare le risorse ed evitare addebiti oltre a quelli previsti in questo tutorial, puoi eliminare le risorse che hai creato o il progetto. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.

Google Cloud Shell

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

Cloud Shell è un ambiente operativo e di sviluppo online accessibile ovunque con il browser. Puoi gestire le tue risorse tramite il suo terminale online che dispone di utilità precaricate come lo strumento a riga di comando gcloud, kubectl e molto altro. Puoi anche sviluppare, creare, eseguire il debug e il deployment delle tue app basate su cloud utilizzando l'editor di Cloud Shell online.

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 direttamente in Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione della rete. Ciò significa che per questo codelab ti servirà solo un browser (sì, funziona su Chromebook).

  • Per attivare Cloud Shell dalla console Cloud, fai clic su Attiva Cloud Shell :

cb81e7c8e34bc8d.png

Se è la prima volta che avvii Cloud Shell, viene visualizzata una schermata intermedia che ne descrive le funzionalità. Se è stata visualizzata una schermata intermedia, fai clic su Continua.

bfde7b083abc9544.png

Il provisioning dell'ambiente dovrebbe richiedere solo pochi secondi :

cbb597d2be277a14.png

Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato :

gcloud auth list

Output comando

Credentialed Accounts

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

Il progetto dovrebbe essere già impostato sul tuo PROJECT_ID (supponendo che tu abbia selezionato un progetto nella console web) :

gcloud config list project

Output comando

[core]
project = <PROJECT_ID>

Se per qualche motivo il progetto non è impostato, esegui questo comando:

gcloud config set project <PROJECT_ID>

Stai cercando PROJECT_ID? Controlla il menu a discesa nella parte superiore di Cloud Console :

2c7a57249d954735.png

Puoi anche controllare i dettagli del progetto utilizzando la sezione "Impostazioni e utilità":

791f101797cfef39.png

Cloud Shell imposta anche alcune variabili di ambiente per impostazione predefinita, che potrebbero essere utili quando esegui i comandi futuri.

echo $GOOGLE_CLOUD_PROJECT

Output comando

<PROJECT_ID>
  • Infine, puoi impostare la zona predefinita :
gcloud config set compute/zone us-central1-f

Puoi scegliere zone diverse. Per saperne di più, consulta Regioni e zone.

Abilita l'API Cloud Run

Da Cloud Shell, abilita l'API Cloud Run :

gcloud services enable run.googleapis.com

Dovrebbe essere visualizzato un messaggio di operazione riuscita simile a questo :

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

3. scrivi l'applicazione di esempio

Creeremo una semplice applicazione ASP.NET C# che risponde alle richieste HTTP.

Per creare l'applicazione, utilizza lo strumento a riga di comando dotnet in Cloud Shell:

dotnet new web -o helloworld-csharp

Passa alla directory helloworld-csharp:

cd helloworld-csharp

Successivamente, aggiorna Program.cs in modo che corrisponda a quanto segue:

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();

Questo codice crea un server web di base in ascolto sulla porta definita dalla variabile di ambiente PORT e risponde con Hello World.

Puoi testare l'app eseguendola localmente in Cloud Shell. Dovresti vederlo in ascolto sulla 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. Esegui il deployment in Cloud Run

Esegui il deployment dell'applicazione su Cloud Run con questo comando:

gcloud run deploy hello-world \
    --allow-unauthenticated \
    --region us-central1 \
    --source .
  • hello-world è il nome del servizio.
  • Il flag allow-unauthenticated esegue il deployment del servizio come servizio disponibile pubblicamente senza requisiti di autenticazione.
  • us-central1 è la regione in cui verrà eseguito il deployment dell'app.
  • Il flag source determina la posizione della sorgente da creare. Cloud Run utilizza i buildpack per creare automaticamente un container dal codice sorgente.

Attendi un paio di minuti fino al completamento del deployment. Se l'operazione riesce, la riga di comando visualizza l'URL del servizio:

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

Ora puoi visitare il container di cui hai eseguito il deployment aprendo l'URL del servizio in un browser web :

85e7fbbd264444c9.png

Complimenti! Hai eseguito il deployment di un'applicazione pacchettizzata in un'immagine container su Cloud Run. Cloud Run scala automaticamente e orizzontalmente l'immagine container per gestire le richieste ricevute, quindi fa lo scale down quando la domanda diminuisce. Paghi solo per la CPU, la memoria e le risorse di rete utilizzate durante la gestione delle richieste.

5. È il momento di eseguire la pulizia

Puoi decidere di eliminare il tuo progetto GCP per evitare addebiti, interrompendo così la fatturazione per tutte le risorse utilizzate all'interno di quel progetto, o semplicemente eliminare il servizio Cloud Run:

gcloud run services delete helloworld

6. Passaggi successivi

Un buon passo successivo è eseguire il deployment su Cloud Run su GKE.

Per saperne di più sulla creazione di un container HTTP stateless adatto per Cloud Run dall'origine del codice e su come eseguirne il push in Container Registry, vai alla pagina: