Hello Cloud Run avec C#

1. Introduction

89eb4723767d4525.png

Cloud Run est une plate-forme gérée qui vous permet d'exécuter des conteneurs sans état accessibles via des requêtes HTTP. Cloud Run fonctionne sans serveur : il élimine toute gestion de l'infrastructure pour vous permettre de vous concentrer sur ce qui compte le plus : créer des applications de qualité.

La plate-forme étant basée sur Knative, vous pouvez exécuter vos conteneurs soit de façon entièrement gérée avec Cloud Run, soit dans votre cluster Google Kubernetes Engine avec Cloud Run sur GKE.

L'objectif de cet atelier de programmation est de créer une image de conteneur et de la déployer sur Cloud Run.

2. Préparation

Configuration de l'environnement au rythme de chacun

  1. Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pourrez toujours le modifier.
  • L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID de votre projet (généralement identifié par PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet.
  • Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
  1. Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.

Google Cloud Shell

Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons utiliser Google Cloud Shell dans cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.

Cloud Shell est un environnement de développement et d'opérations en ligne accessible depuis votre navigateur, où que vous soyez. Vous pouvez gérer vos ressources grâce à son terminal en ligne doté d'utilitaires préchargés, tels que l'outil de ligne de commande gcloud, kubectl, etc. Vous pouvez également développer, compiler, déboguer et déployer vos applications cloud à l'aide de l'éditeur Cloud Shell en ligne.

Cette machine virtuelle contient tous les outils de développement dont vous avez besoin. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute directement dans Google Cloud, ce qui améliore considérablement les performances du réseau et l'authentification. Cela signifie que tout ce dont vous avez besoin pour cet atelier de programmation est un navigateur (oui, tout fonctionne sur un Chromebook).

  • Pour activer Cloud Shell à partir de la console Cloud, il vous suffit de cliquer sur Activer Cloud Shell :

cb81e7c8e34bc8d.png

Si vous démarrez Cloud Shell pour la première fois, un écran intermédiaire vous explique de quoi il s'agit. Si un écran intermédiaire vous s'est présenté, cliquez sur Continuer.

bfde7b083abc9544.png

Le provisionnement de l'environnement ne devrait prendre que quelques secondes :

cbb597d2be277a14.png

Une fois connecté à Cloud Shell, vous devez être authentifié :

gcloud auth list

Résultat de la commande

Credentialed Accounts

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

Le projet devrait également déjà être défini sur votre PROJECT_ID (en supposant que vous ayez sélectionné un projet dans la console Web) :

gcloud config list project

Résultat de la commande

[core]
project = <PROJECT_ID>

Si, pour une raison quelconque, le projet n'est pas défini, exécutez simplement la commande suivante :

gcloud config set project <PROJECT_ID>

Vous recherchez votre PROJECT_ID ? Consultez le menu déroulant en haut de la console Cloud :

2c7a57249d954735.png

Vous pouvez également consulter les détails de votre projet dans la section "Paramètres et utilitaires" :

791f101797cfef39.png

Par défaut, Cloud Shell définit certaines variables d'environnement qui pourront s'avérer utiles pour exécuter certaines commandes dans le futur.

echo $GOOGLE_CLOUD_PROJECT

Résultat de la commande

<PROJECT_ID>
  • Enfin, vous pouvez définir la zone par défaut :
gcloud config set compute/zone us-central1-f

Vous pouvez choisir différentes zones. Pour en savoir plus, consultez la page Régions et zones.

Activez l'API Cloud Run

Dans Cloud Shell, activez l'API Cloud Run :

gcloud services enable run.googleapis.com

Un message de réussite semblable à celui-ci doit s'afficher :

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

3. Coder l'exemple d'application

Nous allons créer une application ASP.NET C# simple qui répond aux requêtes HTTP.

Pour créer votre application, utilisez l'outil de ligne de commande dotnet dans Cloud Shell:

dotnet new web -o helloworld-csharp

Accédez au répertoire helloworld-csharp:

cd helloworld-csharp

Modifiez ensuite Program.cs pour qu'il corresponde à ce qui suit:

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

Ce code crée un serveur Web de base qui écoute le port défini par la variable d'environnement PORT et répond avec Hello World.

Vous pouvez tester l'application en l'exécutant localement dans Cloud Shell. Il doit normalement être en écoute sur le port 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. Déployer dans Cloud Run

Déployez votre application sur Cloud Run à l'aide de la commande suivante:

gcloud run deploy hello-world \
    --allow-unauthenticated \
    --region us-central1 \
    --source .
  • hello-world correspond au nom du service.
  • L'option allow-unauthenticated déploie le service en tant que service accessible au public sans aucune exigence d'authentification.
  • us-central1 est la région dans laquelle l'application sera déployée.
  • L'option source détermine l'emplacement de la source à compiler. Cloud Run utilise des buildpacks pour créer automatiquement un conteneur à partir du code source.

Patientez quelques minutes jusqu'à la fin du déploiement. En cas de réussite, la ligne de commande affiche l'URL du service :

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

Vous pouvez maintenant accéder au conteneur déployé en ouvrant l'URL du service dans un navigateur Web :

85e7fbbd264444c9.png

Félicitations ! Vous venez de déployer une application empaquetée dans une image de conteneur sur Cloud Run. Cloud Run effectue un scaling automatique et horizontal de votre image de conteneur pour traiter les requêtes reçues, puis un scaling à la baisse lorsque la demande diminue. Vous ne payez que pour le processeur, la mémoire et le réseau utilisés lors du traitement des requêtes.

5. Il est temps de nettoyer

Vous pouvez soit supprimer votre projet GCP pour éviter que des frais ne vous soient facturés, ce qui interrompra la facturation de toutes les ressources utilisées dans ce projet, ou simplement supprimer le service Cloud Run:

gcloud run services delete helloworld

6. Étape suivante

Vous pouvez par exemple déployer une instance sur Cloud Run sur GKE.

Pour savoir comment créer un conteneur HTTP sans état pour Cloud Run à partir du code source et le transférer dans Container Registry, reportez-vous à la page suivante :