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.
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
- 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 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).
- 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. 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 exemplen1-highmem-4
oun1-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.
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:
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:
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 :
- 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 étiquettes à des 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 à faire vos premiers pas avec GKE. Voici un bon exemple pour commencer :
- 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.