Google Compute Engine

1. Introduction

Bonjour à tous et merci d'être venus aujourd'hui. Prêt à vous familiariser avec 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 et enfin mettre un équilibreur de charge réseau à l'avant. 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.

ComputeEngine_128px.png

Google Compute Engine propose des machines virtuelles qui s'exécutent dans les centres de données de Google connectés à son réseau de fibre optique mondial. Les outils et le workflow proposés permettent de passer d'instances individuelles à un 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. 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

  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.)

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • 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.
  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 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 gratuit pour bénéficier d'un crédit de 300 $.

Google Cloud Shell

Google Cloud et Compute Engine peuvent être utilisés à distance depuis votre ordinateur portable. Toutefois, dans cet atelier de programmation, nous allons utiliser Google Cloud Shell, 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).

  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 indiqué précédemment, nous utiliserons la ligne de commande gcloud dans cet atelier de programmation. Vous pouvez effectuer toutes ces opérations à 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 la EXTERNAL_IP, elle sera importante par la suite.

L'instance est créée à l'aide d'un certain nombre de valeurs par défaut :

  • Zone choisie. 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'option --zone ou définir une zone par défaut (comme nous l'avons fait lors de la configuration initiale) et omettre l'option --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 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 peu d'accès au port. Puisque 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 opération entraîne la création d'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) définies 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 balises.

5. Se connecter en SSH à l'instance

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

Et voilà ! assez facile. (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 sur SSH.

bfbc03997a41946e.png

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

Vérifiez que le serveur s'exécute à 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>

Recherchez l'adresse IP externe de votre instance en répertoriant vos instances via l'interface utilisateur Web:

dcc4e56e82ba2603.png

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

49b52b9354041f3b.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 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 a été mise à jour. Si la page ne s'affiche pas immédiatement, réessayez après quelques secondes, il est possible que l'hôte soit toujours 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

Deuxièmement, 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 entraîne la création de deux instances de VM supplémentaires, dont le nom commence par nginx-.

Toutes les instances créées devraient s'afficher.

$ 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 les suivants :

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 à la suite de l'exécution de la commande précédente.

En raison des délais, 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

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

Autres fonctionnalités Compute Engine

Google Compute Engine offre un large éventail de fonctionnalités. Nous vous conseillons de vous intéresser à certains de ces sujets :

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 à faire vos premiers pas avec GKE. Voici un bon exemple pour commencer :

Votre avis nous intéresse !

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