Premiers pas avec App Engine (Python 3)

1. Présentation

befa7a877ccdd35d.png

Les applications Google App Engine sont faciles à créer et à gérer. Grâce à leur caractère évolutif, elles s'adaptent en fonction de vos besoins en termes de trafic et de stockage des données. Avec App Engine, vous n'avez aucun serveur à gérer. Il vous suffit d'importer votre application : vous êtes alors prêt à démarrer.

Dans cet atelier de programmation, vous allez apprendre à déployer une application Web Python simple, écrite avec le framework Web Flask. Bien que cet exemple utilise Flask, vous pouvez utiliser d'autres frameworks Web, y compris Django, Pyramid, Bottle et web.py.

Ce tutoriel est une adaptation de la page https://cloud.google.com/appengine/docs/standard/python3/quickstart.

Points abordés

  • Créer un serveur Python simple sur Google App Engine
  • Mise à jour du code sans arrêter le serveur

Prérequis

  • Connaissances de base sur Python
  • Connaissance des éditeurs de texte Linux standards tels que Vim, Emacs ou nano

Enquête

Comment allez-vous utiliser ce tutoriel ?

Je vais le lire uniquement Je vais le lire et effectuer les exercices

Quel est votre niveau d'expérience avec Python ?

Débutant Intermédiaire Expert

Comment évalueriez-vous votre expérience des services Google Cloud ?

<ph type="x-smartling-placeholder"></ph> Débutant Intermédiaire Expert
.

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 n'avez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.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 $.

Démarrer Cloud Shell

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

Activer Cloud Shell

  1. Dans Cloud Console, cliquez sur Activer Cloud Shell 853e55310c205094.png.

3c1dabeca90e44e5.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 s'est affiché, cliquez sur Continuer.

9c92662c6a846a5c.png

Le provisionnement et la connexion à Cloud Shell ne devraient pas prendre plus de quelques minutes.

9f0e51b578fecce5.png

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.

  1. 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`
  1. 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. Écrire l'application Web

Une fois Cloud Shell lancé, vous pouvez utiliser la ligne de commande pour appeler la commande gcloud de Cloud SDK ou d'autres outils disponibles sur l'instance de machine virtuelle. Vous pouvez utiliser le répertoire $HOME de votre espace de stockage sur disque persistant pour stocker des fichiers entre plusieurs projets et sessions Cloud Shell. Votre répertoire $HOME est privé. Les autres utilisateurs ne peuvent pas y accéder.

Commençons par créer un dossier dans votre répertoire $HOME pour l'application:

mkdir ~/helloworld
cd ~/helloworld

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:

10af7b1a6240e9f4.gif

Pour modifier directement le fichier avec l'éditeur Cloud Shell, utilisez la commande suivante:

cloudshell edit main.py

main.py

import flask

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    return "Hello World!\n"


if __name__ == "__main__":
    # Used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="localhost", port=8080, debug=True)

4. Définir les dépendances

Pour spécifier les dépendances de votre application Web, revenez au terminal et créez un fichier requirements.txt dans le répertoire racine de votre projet, avec la version exacte de Flask à utiliser:

touch requirements.txt

Pour modifier 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

5. Configurer le déploiement

Pour déployer votre application Web sur App Engine, vous avez besoin d'un fichier app.yaml. Ce fichier de configuration définit les paramètres de votre application Web pour App Engine.

Depuis le terminal, créez et modifiez le fichier app.yaml dans le répertoire racine de votre projet:

touch app.yaml

Pour modifier le fichier avec l'éditeur Cloud Shell, utilisez la commande suivante:

cloudshell edit app.yaml

app.yaml

runtime: python312

6. Déployer l'application Web

Depuis le terminal, vérifiez le contenu de votre répertoire:

ls

Vous devriez disposer des trois fichiers suivants:

app.yaml  main.py  requirements.txt

Déployez votre application Web à l'aide de la commande suivante:

gcloud app deploy

La première fois, vous devez choisir une région de déploiement:

Please choose the region where you want your App Engine application
located:

 [1] asia-east2
...
 [7] australia-southeast1
 [8] europe-west
 [9] europe-west2
...
 [12] northamerica-northeast1
 [13] southamerica-east1
...
 [19] us-west4
...
Please enter your numeric choice:

Confirmez pour lancer le déploiement:

Creating App Engine application in project [PROJECT_ID] and region [REGION]....done.
Services to deploy:

descriptor:      [~/helloworld/app.yaml]
source:          [~/helloworld]
target project:  [PROJECT_ID]
target service:  [default]
target version:  [YYYYMMDDtHHMMSS]
target url:      [https://PROJECT_ID.REGION_ID.r.appspot.com]

Do you want to continue (Y/n)?

Votre application est déployée:

Beginning deployment of service [default]...
Created .gcloudignore file. See `gcloud topic gcloudignore` for details.
Uploading 3 files to Google Cloud Storage
100%
File upload done.
Updating service [default]...done.     
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]

Votre application Web est maintenant prête à répondre aux requêtes HTTP sur https://PROJECT_ID.REGION_ID.r.appspot.com.

7. Tester l'application Web

Votre application Web est prête à répondre aux requêtes HTTP sur https://PROJECT_ID.REGION_ID.r.appspot.com.

Commencez par récupérer le nom d'hôte de votre application Web à l'aide de la commande gcloud app describe:

APPENGINE_HOSTNAME=$(gcloud app describe --format "value(defaultHostname)")

Testez votre application Web avec cette simple requête HTTP GET:

curl https://$APPENGINE_HOSTNAME

Vous devriez obtenir la réponse suivante:

Hello World!

Résumé

Au cours des étapes précédentes, vous avez configuré une application Web Python simple, puis vous avez exécuté et déployé l'application sur App Engine.

8. Mettre à jour l'application Web

Modifiez votre application Web en modifiant le corps de la fonction hello() dans le fichier main.py.

Pour modifier le fichier avec l'éditeur Cloud Shell, utilisez la commande suivante:

cloudshell edit main.py

main.py

import flask

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    # return "Hello World!\n"  # ← Replace this line
    who = flask.request.args.get("who", "World")
    return f"Hello {who}!\n"


if __name__ == "__main__":
    # Used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="localhost", port=8080, debug=True)

À partir du terminal, redéployez l'application Web pour la mettre à jour:

gcloud app deploy --quiet

La nouvelle version de votre application est déployée:

Beginning deployment of service [default]...
Uploading 1 file to Google Cloud Storage 
...
Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]

Testez la nouvelle version de votre application Web exactement comme vous l'avez fait précédemment:

curl https://$APPENGINE_HOSTNAME

Vous devriez obtenir la même réponse:

Hello World!

Testez-le avec le paramètre facultatif:

curl https://$APPENGINE_HOSTNAME?who=Universe

Vous devriez obtenir la réponse suivante:

Hello Universe!

Résumé

Au cours de cette étape, vous avez mis à jour et redéployé votre application Web sans interruption de service.

9. Félicitations !

Vous avez appris à écrire votre première application Web App Engine en Python.

En savoir plus

Licence

Ce document est publié sous une licence Creative Commons Attribution 2.0 Generic.