1. Introduction
Bonjour à tous, merci d'être parmi nous aujourd'hui. Vous souhaitez en savoir plus sur Google Compute Engine ?
Dans cet atelier de programmation, nous allons explorer Compute Engine à l'aide d'un exemple d'application Guestbook.
Vous allez créer des instances Compute Engine, déployer nginx et, enfin, placer un équilibreur de charge réseau en façade. Vous pouvez créer une instance Compute Engine à partir de la console graphique ou de la ligne de commande. Dans cet atelier, vous apprendrez à utiliser la ligne de commande.

Google Compute Engine propose des machines virtuelles qui s'exécutent dans les centres de données de Google, connectés à son réseau mondial de fibre optique. Les outils et flux de travail proposés permettent de passer d'instances individuelles à un cloud computing mondial avec équilibrage de charge.
Ces VM démarrent rapidement, sont dotées d'un espace de stockage sur disque persistant et offrent des performances constantes. Les machines sont disponibles dans de nombreuses configurations, y compris des tailles prédéfinies, et peuvent également être créées avec des types de machines personnalisés optimisés pour vos besoins spécifiques.
Enfin, les machines virtuelles Compute Engine sont également la technologie utilisée par plusieurs autres produits Google Cloud (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow, etc.).
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 ne possédez 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 qui n'est pas utilisée par les API Google, et que vous pouvez modifier à tout moment.
- L'ID du projet doit être unique sur l'ensemble des projets Google Cloud et doit être immuable (vous ne pouvez pas le modifier une fois que vous l'avez défini). Cloud Console génère automatiquement une chaîne unique dont la composition importe peu, en général. Dans la plupart des ateliers de programmation, vous devrez référencer l'ID du projet (généralement identifié comme
PROJECT_ID), donc s'il ne vous convient pas, générez-en un autre au hasard ou définissez le vôtre, puis vérifiez s'il est disponible. Il est ensuite "gelé" une fois le projet créé. - La troisième valeur est le numéro de projet, utilisé par certaines API. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans Cloud Console afin d'utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour arrêter les ressources afin d'éviter qu'elles ne vous soient facturées après ce tutoriel, suivez les instructions de nettoyage indiquées à la fin de l'atelier. 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 et Compute Engine puissent être utilisés à distance depuis votre ordinateur portable, nous allons utiliser Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.
Cette machine virtuelle basée sur Debian contient tous les outils de développement dont vous aurez besoin. Elle intègre un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement 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 Cloud Console, cliquez simplement sur Activer Cloud Shell
(l'opération de provisionnement et la connexion à l'environnement ne devraient prendre que quelques minutes).


Une fois connecté à Cloud Shell, vous êtes normalement déjà authentifié et le projet PROJECT_ID est sélectionné :
gcloud auth list
Résultat de la commande
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
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 ? Vérifiez l'ID que vous avez utilisé pendant les étapes de configuration ou recherchez-le dans le tableau de bord Cloud Console :

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>
- Pour finir, définissez la configuration du projet et de la zone par défaut :
gcloud config set compute/zone us-central1-f
Vous pouvez choisir parmi différentes zones. Pour en savoir plus, consultez la page Régions et zones.
3. Créer une instance Compute Engine
Comme indiqué précédemment, nous utiliserons la ligne de commande gcloud dans cet atelier de programmation. Tout ce qui est fait ici peut être réalisé à l'aide de la console (disponible à l'adresse console.cloud.google.com).
Commençons par créer une instance avec les paramètres par défaut :
$ gcloud compute instances create myinstance Created [...]. NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
Notez le EXTERNAL_IP, car vous en aurez besoin plus tard.
L'instance est créée à l'aide de plusieurs paramètres par défaut :
- La zone que vous choisissez. Toutes les instances résident dans une zone. Vous pouvez sélectionner une zone au moment de la création de l'instance à l'aide de l'indicateur
--zone, ou définir une zone par défaut (comme nous l'avons fait lors de la configuration initiale) et omettre l'indicateur--zone. - La dernière image Debian GNU/Linux 9 (Stretch). Si vous utilisez votre propre image personnalisée, indiquez plutôt son nom ici. Par exemple,
--image my-own-image. - Le type de machine
n1-standard-1. Vous pouvez sélectionner un autre type de machine, tel quen1-highmem-4oun1-highcpu-6. Si aucun des types de machines prédéfinis ne répond à vos besoins, utilisez un type de machine personnalisé. - Un disque de démarrage persistant portant le même nom que l'instance. Le disque est automatiquement associé à l'instance.
Exécutez gcloud compute instances create --help pour afficher toutes les options disponibles.
4. Activer le pare-feu pour le port 80
Par défaut, Google Cloud Platform n'autorise que l'accès à quelques ports. Comme nous allons bientôt installer Nginx, commençons par activer le port 80 dans la configuration du pare-feu.
$ gcloud compute firewall-rules create allow-80 --allow tcp:80 Created [...]. NAME: allow-80 NETWORK: default DIRECTION: INGRESS PRIORITY: 1000 ALLOW: tcp:80 DENY: DISABLED: False
Cela créera une règle de pare-feu nommée allow-80, dont la liste par défaut des blocs d'adresses IP autorisés à établir des connexions entrantes (--source-ranges) est définie sur 0.0.0.0/0 (Partout).
Exécutez gcloud compute firewall-rules create --help pour afficher toutes les valeurs par défaut et toutes les options disponibles, y compris la possibilité d'appliquer des règles de pare-feu basées sur des tags.
5. Se connecter en SSH à l'instance
Pour vous connecter à l'instance via SSH depuis la ligne de commande (toujours depuis Cloud Shell) :
$ gcloud compute ssh myinstance Waiting for SSH key to propagate. Warning: Permanently added 'compute.12345' (ECDSA) to the list of known hosts. ... yourusername@myinstance:~#
C'est tout ! Plutôt simple, non ? (En production, assurez-vous de saisir une phrase secrète.)
Vous pouvez également vous connecter en SSH à l'instance directement depuis la console ( console.cloud.google.com) en accédant à Compute Engine > Instances de VM, puis en cliquant sur SSH.

6. Installer Nginx
Connectez-vous à myinstance, l'instance que vous venez de créer, et installez nginx :
$ sudo su - # apt update # apt install -y nginx # service nginx start # exit
Testez l'exécution du serveur à l'aide de curl à partir de myinstance :
$ curl -s localhost | grep nginx <title>Welcome to nginx!</title> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and <a href="http://nginx.org/">nginx.org</a>.<br/> <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p>
Pour trouver l'adresse IP externe de votre instance, listez vos instances dans l'interface utilisateur Web :

Assurez-vous de quitter SSH et exécutez cette commande depuis Cloud Shell :
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
Accédez ensuite à http://EXTERNAL_IP/, où EXTERNAL_IP correspond à l'adresse IP publique de myinstance. La page nginx devrait s'afficher :

7. Script de démarrage
Au lieu de configurer l'instance à chaque fois, vous pouvez utiliser un script de démarrage pour l'initialiser au démarrage.
Créez un fichier nommé startup.sh avec le contenu suivant (vous pouvez utiliser votre éditeur de texte préféré : vim, nano ou emacs) :
#! /bin/bash apt-get update apt-get install -y nginx service nginx start sed -i -- 's/nginx/Google Cloud Platform - '"$HOSTNAME"'/' /var/www/html/index.nginx-debian.html
Pour créer une instance de VM avec ce script de démarrage, il vous suffit de saisir :
$ gcloud compute instances create nginx \
--metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx
ZONE: us-central1-f
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
INTERNAL_IP: 10.128.X.X
EXTERNAL_IP: X.X.X.X
STATUS: RUNNING
Accédez à http://EXTERNAL_IP/. La page d'accueil mise à jour devrait s'afficher. Si la page ne s'affiche pas immédiatement, réessayez au bout de quelques secondes. Il est possible que l'hôte soit encore en train de démarrer nginx.
8. Créer un cluster de serveurs
Pour créer un cluster de serveurs, vous devez d'abord créer un modèle d'instance. Une fois le modèle d'instance créé, vous pouvez créer un groupe d'instances pour gérer le nombre d'instances à créer.
Commencez par créer un modèle d'instance à l'aide du script de démarrage :
$ gcloud compute instance-templates create nginx-template \
--metadata-from-file startup-script=startup.sh
Created [...].
NAME: nginx-template
MACHINE_TYPE: n1-standard-1
PREEMPTIBLE:
CREATION_TIMESTAMP: 2022-03-18T15:10:37.621-07:00
Ensuite, créons un pool cible. Celui-ci va nous permettre de disposer d'un point d'accès unique pour l'ensemble des instances d'un groupe. Il sera en outre indispensable pour procéder ensuite à l'équilibrage de charge.
$ gcloud compute target-pools create nginx-pool Created [...]. NAME: nginx-pool REGION: us-central1 SESSION_AFFINITY: NONE BACKUP: HEALTH_CHECKS:
Enfin, créez un groupe d'instances à l'aide du modèle :
$ gcloud compute instance-groups managed create nginx-group \
--base-instance-name nginx \
--size 2 \
--template nginx-template \
--target-pool nginx-pool
Created [...].
NAME: nginx-group
LOCATION: us-central1-f
SCOPE: zone
BASE_INSTANCE_NAME: nginx
SIZE: 0
TARGET_SIZE: 2
INSTANCE_TEMPLATE: nginx-template
AUTOSCALED: no
Cette opération crée deux instances de VM supplémentaires, dont le nom commence par nginx-.
Vous devriez maintenant pouvoir voir toutes les instances créées.
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-frpl ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-ztg4 ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
9. Créer un équilibreur de charge réseau
Il existe plusieurs types d'équilibreurs de charge dans Google Cloud Platform, y compris :
- un équilibreur de charge réseau de niveau 3.
- un équilibreur de charge HTTP(S) L7
Créons un équilibreur de charge réseau régional ciblant notre groupe d'instances :
$ gcloud compute forwarding-rules create nginx-lb \
--ports 80 \
--target-pool nginx-pool
Created [...].
$ gcloud compute forwarding-rules list
NAME: nginx-lb
REGION: us-central1
IP_ADDRESS: X.X.X.X
IP_PROTOCOL: TCP
TARGET: us-central1/targetPools/nginx-pool
Vous pouvez à présent accéder à l'équilibreur de charge en saisissant dans votre navigateur http://IP_ADDRESS/, où IP_ADDRESS désigne l'adresse renvoyée par la commande précédente.
Par manque de temps, nous ne créerons pas d'équilibreur de charge HTTP aujourd'hui.
10. Nettoyer le cluster
N'oubliez pas d'arrêter votre cluster, sinon il continuera de fonctionner et de générer des coûts. Les commandes suivantes supprimeront les instances Google Compute Engine, le groupe d'instances, le groupe de ciblage et l'équilibreur de charge.
$ gcloud compute forwarding-rules delete nginx-lb $ gcloud compute instance-groups managed delete nginx-group $ gcloud compute target-pools delete nginx-pool $ gcloud compute instance-templates delete nginx-template $ gcloud compute instances delete nginx $ gcloud compute instances delete myinstance $ gcloud compute firewall-rules delete allow-80
Chacune des commandes ci-dessus devrait vous demander de confirmer la suppression de la ressource.
11. Étape suivante
Bravo ! Vous avez terminé cet atelier de programmation Compute Engine.
Autres fonctionnalités de Compute Engine
Google Compute Engine propose un large éventail de fonctionnalités. Voici quelques exemples :
- VM préemptives : https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- Nœuds à locataire unique : https://cloud.google.com/compute/docs/nodes/create-nodes
- GPU et TPU : https://cloud.google.com/compute/docs/gpus/add-gpus
- Instances Windows : https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- Ajouter des libellés aux ressources : https://cloud.google.com/compute/docs/labeling-resources
- Migrer des VM vers Compute Engine : https://cloud.google.com/compute/docs/vm-migration/
Google Kubernetes Engine
Google Kubernetes Engine (GKE) est l'offre Kubernetes hébergée et entièrement gérée de Google Cloud. Plusieurs ateliers de programmation sont disponibles pour vous aider à démarrer avec GKE. Voici un bon point de départ :
- Atelier de programmation Google Kubernetes Engine : https://codelabs.developers.google.com/codelabs/cloud-gke-workshop-v2
Votre avis nous intéresse !
- Veuillez prendre quelques minutes pour répondre à notre courte enquête.