1. Introduction
Cloud Run est une plate-forme de calcul gérée qui permet d'exécuter des conteneurs sans état accessibles via des requêtes HTTP. Il repose sur le projet Open Source Knative, ce qui permet la portabilité de vos charges de travail entre de nombreuses plates-formes. 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é.
L'objectif de ce tutoriel est de créer une application Web simple et de la déployer sur Cloud Run.
2. Préparation
Configuration de l'environnement au rythme de chacun
- Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. Si vous n'avez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.
- 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.
- 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 $.
Démarrer Cloud Shell
Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, vous allez utiliser dans ce tutoriel Cloud Shell, un environnement de ligne de commande exécuté dans le cloud.
Activer Cloud Shell
- Dans Cloud Console, cliquez sur Activer Cloud Shell .
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 Continue (Continuer).
Le provisionnement et la connexion à Cloud Shell ne devraient pas prendre plus de quelques minutes.
Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute dans Google Cloud, ce qui améliore considérablement les performances du réseau et l'authentification. Une grande partie, voire la totalité, de votre travail dans cet atelier de programmation peut être effectué dans un navigateur.
Une fois connecté à Cloud Shell, vous êtes authentifié et le projet est défini sur votre ID de projet.
- Exécutez la commande suivante dans Cloud Shell pour vérifier que vous êtes authentifié :
gcloud auth list
Résultat de la commande
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Exécutez la commande suivante dans Cloud Shell pour vérifier que la commande gcloud connaît votre projet:
gcloud config list project
Résultat de la commande
[core] project = <PROJECT_ID>
Si vous obtenez un résultat différent, exécutez cette commande :
gcloud config set project <PROJECT_ID>
Résultat de la commande
Updated property [core/project].
3. Activer les API
Dans Cloud Shell, activez les API Artifact Registry, Cloud Build et Cloud Run:
gcloud services enable \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com
Un message de réussite semblable à celui-ci s'affiche:
Operation "operations/..." finished successfully.
Vous êtes maintenant prêt à travailler et à écrire votre application...
4. Écrire l'application
Au cours de cette étape, vous allez créer une application Python simple basée sur Flask, qui répond aux requêtes HTTP.
Répertoire de travail
Utilisez Cloud Shell pour créer un répertoire de travail nommé helloworld-python
et y accéder:
mkdir ~/helloworld-python cd ~/helloworld-python
main.py
Créez un fichier nommé main.py
:
touch main.py
Modifiez le fichier à l'aide de l'éditeur de ligne de commande de votre choix (nano, vim ou emacs) ou en cliquant sur le bouton de l'éditeur Cloud Shell:
Pour modifier directement le fichier avec l'éditeur Cloud Shell, utilisez la commande suivante:
cloudshell edit main.py
main.py
from flask import Flask, request
app = Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
who = request.args.get("who", default="World")
return f"Hello {who}!\n"
if __name__ == "__main__":
# Development only: run "python main.py" and open http://localhost:8080
# When deploying to Cloud Run, a production-grade WSGI HTTP server,
# such as Gunicorn, will serve the app.
app.run(host="localhost", port=8080, debug=True)
Ce code crée un service Web de base répondant aux requêtes HTTP GET avec un message convivial.
requirements.txt
Ajoutez un fichier nommé requirements.txt
pour définir les dépendances:
touch requirements.txt
Pour modifier directement le fichier avec l'éditeur Cloud Shell, utilisez la commande suivante:
cloudshell edit requirements.txt
requirements.txt
# https://pypi.org/project/flask
Flask==3.0.2
# https://pypi.org/project/gunicorn
gunicorn==21.2.0
Procfile
Enfin, ajoutez un fichier nommé Procfile
pour spécifier le mode de diffusion de l'application:
touch Procfile
Pour modifier directement le fichier avec l'éditeur Cloud Shell, utilisez la commande suivante:
cloudshell edit Procfile
Procfile
web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
Vérifiez que tous les fichiers se trouvent bien dans le répertoire de travail:
ls
Les fichiers suivants devraient s'afficher:
main.py Procfile requirements.txt
Votre application est prête à être déployée, mais commençons par la tester...
5. Tester l'application
Pour tester l'application, créez un environnement virtuel:
virtualenv venv
Activez l'environnement virtuel :
source venv/bin/activate
Installez les dépendances :
pip install -r requirements.txt
Un message de confirmation semblable à celui-ci doit s'afficher:
... Successfully installed Flask ... gunicorn ...
Démarrez l'application:
python main.py
Les journaux indiquent que vous êtes en mode Développement:
* Serving Flask app 'main' * Debug mode: on WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://localhost:8080 Press CTRL+C to quit ...
Dans la fenêtre Cloud Shell, cliquez sur l'icône Web Preview
et sélectionnez Preview on port 8080
:
Une fenêtre de navigateur doit s'ouvrir et afficher le message Hello World!
.
Vous pouvez également ouvrir une autre session Cloud Shell (un nouvel onglet de terminal) en cliquant sur l'icône +
et en envoyant une requête Web à l'application en cours d'exécution:
curl localhost:8080
Vous devriez obtenir la réponse suivante:
Hello World!
Lorsque vous avez terminé, revenez à la session Cloud Shell principale et arrêtez la commande python main.py
avec CTRL+C
.
Quittez l'environnement virtuel:
deactivate
Enfin, supprimez le répertoire de l'environnement virtuel:
rm -r venv/
Votre application fonctionne comme prévu: déployons-la...
6. Déployer dans Cloud Run
Cloud Run est régional, ce qui signifie que l'infrastructure qui exécute vos services Cloud Run est située dans une région spécifique et gérée par Google pour être disponible de manière redondante dans toutes les zones de cette région. Définissez la région que vous utiliserez pour votre déploiement, par exemple:
REGION="europe-west9"
Vérifiez que vous vous trouvez toujours dans le répertoire de travail:
ls
Les fichiers suivants devraient s'afficher:
main.py Procfile requirements.txt
Déployez l'application sur Cloud Run:
gcloud run deploy helloworld-python \ --source . \ --platform managed \ --region $REGION \ --allow-unauthenticated
- Vous pouvez définir une région par défaut à l'aide de la commande suivante:
gcloud config set run/region $REGION
- Vous pouvez également rendre Cloud Run géré par défaut à l'aide de cette commande:
gcloud config set run/platform managed
- L'option
--allow-unauthenticated
rend le service public. Pour éviter les requêtes non authentifiées, utilisez plutôt--no-allow-unauthenticated
.
La première fois, vous serez invité à créer un dépôt Artifact Registry. Appuyez sur Entrée pour valider:
Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [REGION] will be created. Do you want to continue (Y/n)?
Cette opération lance l'importation de votre code source dans le dépôt Artifact Registry et la compilation de votre image de conteneur:
Building using Buildpacks and deploying container ... * Building and deploying new service... Building Container. OK Creating Container Repository... OK Uploading sources... * Building Container... Logs are available at ...
Patientez quelques instants jusqu'à la fin du déploiement. En cas de réussite, la ligne de commande affiche l'URL du service :
... OK Building and deploying new service... Done. OK Creating Container Repository... OK Uploading sources... OK Building Container... Logs are available at ... OK Creating Revision... Creating Service. OK Routing traffic... OK Setting IAM Policy... Done. Service [SERVICE]... has been deployed and is serving 100 percent of traffic. Service URL: https://SERVICE-PROJECTHASH-REGIONID.a.run.app
Vous pouvez obtenir l'URL du service à l'aide de la commande suivante:
SERVICE_URL=$( \ gcloud run services describe helloworld-python \ --platform managed \ --region $REGION \ --format "value(status.url)" \ ) echo $SERVICE_URL
Le résultat devrait ressembler à ceci:
https://helloworld-python-PROJECTHASH-REGIONID.a.run.app
Vous pouvez maintenant utiliser votre application en ouvrant l'URL du service dans un navigateur Web:
Vous pouvez également appeler l'application à partir de Cloud Shell:
curl $SERVICE_URL?who=me
Vous devriez obtenir le message d'accueil attendu:
Hello me!
Félicitations ! Vous venez de déployer une application 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.
7. Effectuer un nettoyage
Bien que Cloud Run ne facture pas lorsque le service n'est pas utilisé, des frais peuvent vous être facturés pour le stockage de l'image de conteneur dans Artifact Registry. Vous pouvez supprimer votre dépôt ou votre projet Cloud pour éviter des frais. La suppression de votre projet Cloud arrête la facturation de toutes les ressources utilisées dans ce projet.
Pour supprimer le dépôt d'images de conteneurs, procédez comme suit:
gcloud artifacts repositories delete cloud-run-source-deploy \ --location $REGION
Pour supprimer votre service Cloud Run, procédez comme suit:
gcloud run services delete helloworld-python \ --platform managed \ --region $REGION
Pour supprimer votre projet Google Cloud,
- Récupérez l'ID de votre projet actuel:
PROJECT_ID=$(gcloud config get-value core/project)
- Assurez-vous qu'il s'agit bien du projet que vous souhaitez supprimer:
echo $PROJECT_ID
- Supprimez le projet :
gcloud projects delete $PROJECT_ID
8. Félicitations !
Vous avez créé une application Web simple et l'avez déployée dans Cloud Run.
En savoir plus
- Consultez la documentation Cloud Run
- Pour découvrir d'autres options, suivez le cours Dev to Prod in 3 Easy steps with Cloud Run (du développement en production en trois étapes simples avec Cloud Run).
- Suivez la formation Django sur Cloud Run pour créer une base de données Cloud SQL, gérer les identifiants avec Secret Manager et déployer Django.
- Découvrez d'autres ateliers de programmation Cloud Run...
Licence
Ce document est publié sous une licence Creative Commons Attribution 2.0 Generic.