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 di eseguire i container in modo completamente gestito 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 in Cloud Run.

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.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Il Nome progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarla.
  • L'ID progetto è 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, dovrai fare riferimento al tuo ID progetto (in genere identificato come PROJECT_ID). Se l'ID generato non ti soddisfa, potresti generarne un altro casuale. In alternativa, puoi provarne una personalizzata per verificare se è disponibile. Non può essere modificato dopo questo passaggio e rimane per tutta la durata del progetto.
  • Per informazione, c'è un terzo valore, un 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 risorse/API Cloud. L'esecuzione di questo codelab non ha alcun costo. Per arrestare le risorse ed evitare di incorrere in fatturazione dopo questo tutorial, puoi eliminare le risorse che hai creato o eliminare il progetto. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.

Google Cloud Shell

Anche se Google Cloud può essere utilizzato 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 con il suo terminale online precaricato con utilità come lo strumento a riga di comando gcloud, kubectl e 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 viene caricata con tutti gli strumenti di sviluppo 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 di rete. Ciò significa che per questo codelab sarà sufficiente un browser (sì, funziona su Chromebook).

  • Per attivare Cloud Shell dalla console Cloud, è sufficiente fare clic su Attiva Cloud Shell :

cb81e7c8e34bc8d.png

Se è la prima volta che avvii Cloud Shell, ti verrà mostrata una schermata intermedia che descrive di cosa si tratta. Se ti è stata presentata una schermata intermedia, fai clic su Continua.

bfde7b083abc9544.png

Il provisioning dell'ambiente dovrebbe richiedere solo pochi secondi :

cbb597d2be277a14.png

Una volta stabilita la connessione a Cloud Shell, dovresti vedere che hai già eseguito l'autenticazione :

gcloud auth list

Output comando

Credentialed Accounts

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

Il progetto dovrebbe inoltre essere già impostato su 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, invia semplicemente il seguente comando:

gcloud config set project <PROJECT_ID>

Stai cercando il tuo PROJECT_ID? Controlla il menu a discesa nella parte superiore della console Cloud :

2c7a57249d954735.png

Puoi anche controllare i dettagli del progetto usando il menu sezione:

791f101797cfef39.png

Cloud Shell imposta anche alcune variabili di ambiente per impostazione predefinita, cosa che può essere utile quando eseguirai 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 ulteriori informazioni, consulta la sezione 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 la tua applicazione, usa lo strumento a riga di comando dotnet in Cloud Shell:

dotnet new web -o helloworld-csharp

Passa alla directory helloworld-csharp:

cd helloworld-csharp

Dopodiché 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 che rimane 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 vederla 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 della tua applicazione in 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 dell'origine da creare. Cloud Run utilizza i buildpack per creare automaticamente un container a partire dal codice sorgente.

Attendi qualche minuto 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 il networking utilizzati durante la gestione delle richieste.

5. È ora di eseguire la pulizia

Puoi decidere di eliminare il tuo progetto Google Cloud 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 passaggio successivo sarebbe Eseguire il deployment in 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: