1. Avant de commencer
Cloud Run est une plate-forme de calcul gérée qui permet d'exécuter des conteneurs sans état accessibles via des requêtes HTTP. Cloud Run est un outil sans serveur. vous n'avez plus besoin de gérer l'infrastructure, ce qui vous permet de vous concentrer sur l'essentiel : créer des applications de qualité. Comme il est basé sur Knative, vous pouvez exécuter vos conteneurs avec Cloud Run (entièrement géré) ou Cloud Run for Anthos. L'objectif de cet atelier de programmation est de créer une image de conteneur et de la déployer sur Cloud Run.
Prérequis
N/A
2. Préparation
Configuration de l'environnement au rythme de chacun
- Connectez-vous à Cloud Console, puis créez un projet ou réutilisez un projet existant. (Si vous n'avez pas encore de compte Gmail ou G Suite, vous devez en créer un.)
Mémorisez l'ID du projet. Il s'agit d'un nom unique permettant de différencier chaque projet Google Cloud (le nom ci-dessus est déjà pris ; vous devez en trouver un autre). Il sera désigné par le nom PROJECT_ID
tout au long de cet atelier de programmation.
- Vous devez ensuite activer la facturation dans Cloud Console pour pouvoir utiliser les ressources Google Cloud.
L'exécution de cet atelier de programmation est très peu coûteuse, voire gratuite. Veillez à suivre les instructions de la section "Nettoyer" qui indique comment désactiver les ressources afin d'éviter les frais une fois ce tutoriel terminé. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.
Cloud Shell
Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, vous allez utiliser Cloud Shell, un environnement de ligne de commande exécuté dans Google 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.
Activez l'API Cloud Run
Dans Cloud Shell, activez l'API Cloud Run.
gcloud services enable run.googleapis.com
Un message de réussite semblable à celui-ci doit s'afficher:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
3. Écrire l'application exemple
Vous allez créer une application Node.js simple, basée sur Express et répondant aux requêtes HTTP.
Pour compiler votre application, utilisez Cloud Shell pour créer un répertoire nommé helloworld-nodejs
et y modifier les sous-répertoires.
mkdir helloworld-nodejs cd helloworld-nodejs
Créez un fichier package.json
avec le contenu suivant:
{
"name": "cloudrun-helloworld",
"version": "1.0.0",
"description": "Simple hello world sample in Node",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "",
"license": "Apache-2.0",
"dependencies": {
"express": "^4.17.1"
}
}
Plus important encore, le fichier ci-dessus contient une commande de script de démarrage et une dépendance vis-à-vis du framework d'application Web Express.
Ensuite, dans le même répertoire, créez un fichier index.js
et copiez-y le contenu suivant:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
console.log('Hello world received a request.');
const target = process.env.TARGET || 'World';
res.send(`Hello ${target}!`);
});
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log('Hello world listening on port', port);
});
Ce code crée un serveur Web de base qui écoute le port défini par la variable d'environnement PORT
. Votre application est maintenant prête à être conteneurisée, testée et importée dans Container Registry.
4. Conteneuriser votre application et l'importer dans Container Registry
Pour conteneuriser l'application exemple, créez un fichier nommé Dockerfile
dans le même répertoire que les fichiers sources, puis copiez-y le contenu suivant:
# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:12-slim
# Create and change to the app directory.
WORKDIR /usr/src/app
# Copy application dependency manifests to the container image.
# A wildcard is used to ensure both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./
# Install production dependencies.
RUN npm install --only=production
# Copy local code to the container image.
COPY . ./
# Run the web service on container startup.
CMD [ "npm", "start" ]
Créez votre image de conteneur à l'aide de Cloud Build en exécutant la commande suivante depuis le répertoire contenant le Dockerfile:
gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
$GOOGLE_CLOUD_PROJECT
est une variable d'environnement contenant votre ID de projet Google Cloud lors de l'exécution dans Cloud Shell. Vous pouvez également l'obtenir en exécutant gcloud config get-value project
.
Une fois l'image transférée vers le registre, un message SUCCESS
contenant le nom de l'image (gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
) s'affiche. L'image est stockée dans Container Registry et peut être réutilisée si vous le souhaitez.
Vous pouvez lister toutes les images de conteneurs associées à votre projet actuel à l'aide de la commande suivante:
gcloud container images list
Si vous souhaitez exécuter et tester l'application en local à partir de Cloud Shell, vous pouvez la démarrer à l'aide de cette commande docker
standard:
docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
Dans Cloud Shell, cliquez sur Aperçu sur le Web et sélectionnez Prévisualiser sur le port 8080.
Une fenêtre de navigateur affiche le message Hello World!.
Vous pouvez également utiliser simplement curl localhost:8080
.
5. Déployer dans Cloud Run
Pour déployer votre application conteneurisée sur Cloud Run, exécutez la commande suivante (veillez à modifier le nom d'image correspondant à l'application que vous avez compilée ou utilisez l'image prédéfinie gcr.io/cloudrun/hello
):
gcloud run deploy helloworld \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld \ --platform managed \ --region us-central1 \ --allow-unauthenticated
L'option de déploiement --allow-unauthenticated
vous permet d'accéder à l'application sans vous authentifier. L'option de déploiement --platform managed \
signifie que vous demandez l'environnement entièrement géré (et non l'infrastructure Kubernetes via Anthos).
Patientez quelques instants jusqu'à la fin du déploiement. Une fois l'opération terminée, la ligne de commande affiche l'URL du service.
Service [helloworld] revision [helloworld-00001] has been deployed and is serving traffic at https://helloworld-wdl7fdwaaa-uc.a.run.app
Vous pouvez maintenant accéder au conteneur déployé en ouvrant l'URL du service dans un navigateur Web:
Cloud Run effectue un scaling automatique et horizontal de votre image de conteneur pour traiter les requêtes reçues, puis un scaling à la baisse lorsque la demande diminue. Vous ne payez que pour le processeur, la mémoire et le réseau utilisés lors du traitement des requêtes.
6. Effectuer un nettoyage
Bien que Cloud Run ne facture pas lorsque le service n'est pas utilisé, des frais peuvent vous être facturés pour le stockage de l'image de conteneur générée.
Pour éviter que des frais ne vous soient facturés, vous pouvez soit supprimer votre projet Google Cloud, ce qui interrompra la facturation de toutes les ressources utilisées pour ce projet, soit supprimer simplement votre image helloworld à l'aide de la commande suivante:
gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
Pour supprimer le service Cloud Run, utilisez cette commande :
gcloud run services delete helloworld \ --platform managed \ --region us-central1
7. Félicitations
Félicitations ! Vous avez déployé une application empaquetée dans une image de conteneur dans Cloud Run.
En savoir plus
Vous pouvez également consulter le guide Démarrage rapide: Déployer une application sur Cloud Run for Anthos sur Google Cloud.
Pour savoir comment créer un conteneur HTTP sans état adapté à Cloud Run à partir d'un code source et le transférer vers Container Registry, consultez les ressources suivantes:
Pour en savoir plus sur Knative, le projet Open Source sous-jacent, consultez Knative.