Google Compute Engine

1. Présentation

Bonjour à tous, merci de votre attention ! Vous êtes prêt à apprendre à utiliser Google Compute Engine ?

Dans cet atelier de programmation, nous allons explorer Compute Engine à l'aide d'un exemple d'application de livre d'or.

Vous allez créer des instances Compute Engine, déployer nginx, puis placer un équilibreur de charge réseau au début. Vous pouvez créer une instance Compute Engine à partir de la console graphique ou de la ligne de commande. Dans cet atelier, vous allez apprendre à utiliser la ligne de commande.

Compute Engine

Google Compute Engine propose des machines virtuelles qui s'exécutent dans les centres de données Google connectés à son réseau de fibre optique mondial. Les outils et les workflows proposés permettent de passer d'instances uniques au cloud computing global 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. Ils sont disponibles dans de nombreuses configurations, y compris avec des tailles prédéfinies, et peuvent être créées avec des types de machines personnalisés, optimisés en fonction de 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érequis

Configuration de l'environnement au rythme de chacun

  1. Connectez-vous à Google Cloud Console, 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.

b35bf95b8bf3d5d8.png

A99b7ace416376c4.png

bd84a6d3003637c5.png

  • Le nom du projet est le nom à afficher pour les participants à ce projet. Il s'agit d'une chaîne de caractères qui n'est pas utilisée par les API Google. Vous pouvez la modifier à tout moment.
  • L'ID du projet doit être unique parmi tous les projets Google Cloud et doit être immuable (il ne peut pas être modifié une fois défini). Cloud Console génère automatiquement une chaîne unique. vous n'avez généralement pas besoin de vous en occuper. Dans la plupart des ateliers de programmation, vous devrez référencer l'ID du projet. De plus, il est généralement identifié comme PROJECT_ID. Si vous n'aimez pas cet outil, générez-en un autre au hasard, ou essayez le vôtre et vérifiez si est disponible. Ensuite, elle est "gelée" après la création du projet.
  • Le numéro de projet, utilisé par certaines API, est troisième. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
  1. 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 gratuite. Pour arrêter les ressources afin d'éviter toute facturation en dehors de ce tutoriel, suivez les instructions de nettoyage indiquées à la fin de l'atelier de programmation. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit de 300 USD.

Google Cloud Shell

Vous pouvez utiliser Google Cloud et Compute Engine à distance depuis votre ordinateur portable. Dans cet atelier de programmation, nous utiliserons Google Cloud Shell, un environnement de ligne de commande fonctionnant 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).

  1. Pour activer Cloud Shell à partir de Cloud Console, cliquez simplement sur Activer Cloud Shell B125d9eb26a46cc5.png (l'opération de provisionnement et la connexion à l'environnement ne devraient prendre que quelques minutes).

1067942a9a93f70.png

Capture d'écran du 2017-06-14 à 10.13.43 PM.png

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 :

cc3895eeac80db2c.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>
  1. 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 nous l'avons expliqué précédemment, nous allons utiliser la ligne de commande gcloud dans cet atelier de programmation. Tout est possible via 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 champ EXTERNAL_IP, qui sera important plus tard.

L'instance est créée en utilisant un certain nombre de valeurs par défaut :

  • Zone que vous sélectionnez. 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. Exemple : --image my-own-image.
  • Le type de machine n1-standard-1. Vous pouvez sélectionner un autre type de machine, par exemple n1-highmem-4 ou n1-highcpu-6. Si aucun des types de machines prédéfinis ne correspond à 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 quelques accès aux ports. Comme nous allons bientôt installer Nginx, activons d'abord 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

Cette action va créer une règle de pare-feu nommée allow-80 qui possède une liste par défaut de blocs d'adresses IP autorisés à établir des connexions entrantes (--source-ranges), dont la valeur est 0.0.0.0/0 (Partout).

Exécutez gcloud compute firewall-rules create --help pour afficher toutes les options par défaut et toutes les options disponibles, y compris la possibilité d'appliquer une règle de pare-feu basée sur des tags.

5. Se connecter en SSH à l'instance

Pour vous connecter en SSH à l'instance à partir de 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:~#

Et voilà ! C'est très simple. En production, veillez à 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 surSSH dans le menu déroulant ;

AbfB.03997a41946e.png

6. Installer Nginx

Connectez-vous à myinstance, l'instance que vous venez de créer, puis installez nginx:

$ sudo su -
# apt update
# apt install -y nginx
# service nginx start
# exit

Vérifiez que le serveur est en cours d'exécution à l'aide de curl depuis 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, répertoriez-les via l'UI Web:

dcc4e56e82ba2603.png

Assurez-vous de quitter SSH et d'exécuter cette commande à partir de 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 est l'adresse IP publique de myinstance. La page nginx devrait s'afficher:

49b52b9354036f3b.png

7. Script de démarrage

Plutôt que 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 à l'aide de ce script de démarrage, saisissez simplement :

$ 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 s'affiche. Si la page ne s'affiche pas immédiatement après quelques secondes, il est possible que l'hôte lance toujours nginx.

8. Créer un cluster de serveurs

Pour générer un cluster de serveurs, vous devez d'abord créer un modèle d'instance. Une fois qu'un modèle d'instance est 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, nous allons créer 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 va créer deux instances de VM supplémentaires avec des noms précédés de 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, parmi lesquels :

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 ensuite accéder à l'équilibreur de charge à partir du navigateur http://IP_ADDRESS/, où IP_ADDRESS est l'adresse affichée suite à l'exécution de la commande précédente.

Pour le moment, nous ne créerons pas d'équilibreur de charge HTTP aujourd'hui.

10. Nettoyer le cluster

N'oubliez pas d'arrêter votre cluster afin qu'il continue de fonctionner et de générer des frais. Les commandes suivantes vont supprimer les instances Google Compute Engine, les groupes 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

Félicitations, vous avez terminé cet atelier de programmation Compute Engine !

Autres fonctionnalités de Compute Engine

Google Compute Engine offre un large éventail de fonctionnalités. Voici quelques-unes des informations utiles :

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 exemple pour commencer :

Votre avis nous intéresse !

  • Veuillez prendre quelques minutes pour répondre à notre courte enquête.