Introduction
Cloud Run permet d'exécuter des conteneurs sans serveur sur l'infrastructure Google. Ce tutoriel expert couvre le déploiement d'une API Node.js avec scaling automatique, authentification IAM fine et intégration CI/CD. Vous apprendrez à optimiser les coûts et la latence en production.
Prérequis
- Compte Google Cloud avec facturation activée
- SDK gcloud installé (version 450+)
- Docker et Node.js 20+
- Connaissances avancées en conteneurs et IAM
Initialisation du projet
gcloud config set project mon-projet-12345
gcloud services enable run.googleapis.com cloudbuild.googleapis.com artifactregistry.googleapis.comActive les APIs nécessaires et définit le projet cible. Évitez les erreurs de permission en activant ces services avant tout déploiement.
Création du Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 8080
CMD ["node", "server.js"]Image minimale Alpine pour réduire la taille. Le port 8080 est obligatoire pour Cloud Run. Utilisez npm ci pour des builds reproductibles.
Application Node.js minimale
const express = require('express');
const app = express();
app.get('/', (req, res) => res.send('Cloud Run 2026'));
const port = process.env.PORT || 8080;
app.listen(port, () => console.log(`Running on ${port}`));Application Express basique qui écoute sur PORT fourni par Cloud Run. Toujours utiliser process.env.PORT.
Déploiement initial
gcloud run deploy mon-api \
--source . \
--region europe-west1 \
--allow-unauthenticated \
--memory 512Mi \
--cpu 1Déploiement direct depuis le code source avec Cloud Build intégré. Spécifiez région, mémoire et CPU pour contrôler les coûts et performances.
Configuration service.yaml avancée
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: mon-api
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/maxScale: "100"
run.googleapis.com/cpu-throttling: "false"
spec:
containerConcurrency: 80
containers:
- image: europe-west1-docker.pkg.dev/mon-projet-12345/cloud-run/mon-api
resources:
limits:
memory: 1Gi
cpu: 2Fichier de configuration pour scaling précis, désactivation du throttling CPU et limites de ressources. Utilisez-le avec gcloud run services replace.
Pipeline CI/CD avec Cloud Build
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'europe-west1-docker.pkg.dev/$PROJECT_ID/cloud-run/mon-api:$SHORT_SHA', '.']
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'europe-west1-docker.pkg.dev/$PROJECT_ID/cloud-run/mon-api:$SHORT_SHA']
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: gcloud
args: ['run', 'deploy', 'mon-api', '--image', 'europe-west1-docker.pkg.dev/$PROJECT_ID/cloud-run/mon-api:$SHORT_SHA', '--region', 'europe-west1']Pipeline complet qui build, push et déploie automatiquement. Déclenchez-le via un trigger sur push Git.
Bonnes pratiques
- Utilisez toujours des images immuables avec digest SHA
- Configurez IAM avec des comptes de service dédiés
- Activez le scaling à zéro pour minimiser les coûts
- Surveillez avec Cloud Monitoring et alertes
- Testez les cold starts avec des requêtes synthétiques
Erreurs courantes
- Oublier d'exposer le port 8080 dans le conteneur
- Permissions IAM insuffisantes sur le compte de service
- Limites de mémoire trop basses causant des OOM
- Ne pas configurer les timeouts de requête pour les tâches longues
Pour aller plus loin
Approfondissez avec nos formations Cloud Run avancées.