Bonnes pratiques
1 - Architecture
1.1 Organisation des projets
1.2 Naming conventions
| Ressource | Convention | Exemple |
|---|---|---|
| Projet | env-app-region | prod-myapp-eu |
| Cluster GKE | env-cluster-region | prod-cluster-euw1 |
| Service Cloud Run | app-env | api-prod |
| Repository AR | type-purpose | docker-images |
| Secret | app-env-name | myapp-prod-db-password |
2 - Sécurité
2.1 Principle of Least Privilege
# Créer des rôles personnalisés avec permissions minimales
gcloud iam roles create cloudRunDeployer \
--project=mon-projet \
--permissions=run.services.get,run.services.update
# Utiliser Workload Identity plutôt que des clés de service account
gcloud container clusters update mon-cluster \
--workload-pool=mon-projet.svc.id.goog
2.2 VPC Service Controls
# Créer un périmètre de service
gcloud access-context-manager perimeters create my-perimeter \
--resources="projects/mon-projet" \
--restricted-services="artifactregistry.googleapis.com"
2.3 Secrets Management
# Utiliser Secret Manager
gcloud secrets create my-secret \
--replication-policy="automatic"
# Monter dans Cloud Run
gcloud run services update my-service \
--set-secrets="API_KEY=my-secret:latest"
2.4 Binary Authorization
# Policy pour n'autoriser que les images signées
defaultAdmissionRule:
evaluationMode: REQUIRE_ATTESTATION
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
requireAttestationsBy:
- projects/mon-projet/attestors/prod-attestor
3 - CI/CD
3.1 Pipeline pattern
# cloudbuild.yaml - Pipeline complet
steps:
# 1. Lint & Static Analysis
- name: 'node:18'
entrypoint: 'npm'
args: ['run', 'lint']
# 2. Tests
- name: 'node:18'
entrypoint: 'npm'
args: ['test', '--', '--coverage']
# 3. Build
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '${_IMAGE}', '.']
# 4. Security Scan
- name: 'gcr.io/cloud-builders/gcloud'
args:
- 'artifacts'
- 'docker'
- 'images'
- 'scan'
- '${_IMAGE}'
# 5. Push
- name: 'gcr.io/cloud-builders/docker'
args: ['push', '${_IMAGE}']
# 6. Deploy (via Cloud Deploy)
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'gcloud'
args:
- 'deploy'
- 'releases'
- 'create'
- 'release-$SHORT_SHA'
- '--delivery-pipeline=my-pipeline'
- '--images=app=${_IMAGE}'
substitutions:
_IMAGE: 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/app:$COMMIT_SHA'
options:
machineType: 'E2_HIGHCPU_8'
3.2 Environnements séparés
| Environnement | Trigger | Approval |
|---|---|---|
| Dev | Push sur develop | Non |
| Staging | PR mergée sur main | Non |
| Production | Tag v* | Oui |
4 - Coûts
4.1 Optimisation Cloud Run
# Min instances à 0 pour les services non-critiques
gcloud run services update my-service \
--min-instances=0 \
--max-instances=10
# CPU allocation only during requests
gcloud run services update my-service \
--cpu-throttling
4.2 Optimisation GKE
# Utiliser Autopilot pour optimiser automatiquement
# Ou configurer le cluster autoscaler
gcloud container clusters update mon-cluster \
--enable-autoscaling \
--min-nodes=0 \
--max-nodes=10
4.3 Cleanup policies
# Artifact Registry - supprimer les anciennes images
gcloud artifacts repositories set-cleanup-policies images \
--location=europe-west1 \
--policy=cleanup-policy.json
5 - Monitoring
5.1 Golden Signals
| Signal | Métrique GCP |
|---|---|
| Latency | run.googleapis.com/request_latencies |
| Traffic | run.googleapis.com/request_count |
| Errors | run.googleapis.com/request_count (5xx) |
| Saturation | run.googleapis.com/container/cpu/utilizations |
5.2 Alertes essentielles
# Alertes recommandées
- name: High Error Rate
condition: error_rate > 1%
duration: 5m
- name: High Latency
condition: p99_latency > 1s
duration: 5m
- name: Service Down
condition: uptime_check_failed
duration: 1m
5.3 SLO
# SLO recommandé
availability: 99.9%
latency_p99: < 500ms
6 - Checklist production
Infrastructure
- VPC avec subnets privés
- Firewall rules restrictives
- VPC Service Controls
- Binary Authorization
CI/CD
- Build triggers configurés
- Tests automatisés
- Security scanning
- Cloud Deploy pour CD
Monitoring
- Dashboards configurés
- Alertes sur Golden Signals
- Uptime checks
- Log-based metrics
Sécurité
- Workload Identity activé
- Secrets dans Secret Manager
- IAM avec least privilege
- Audit logs activés
7 - Architecture de référence
Résumé
Dans ce chapitre, nous avons couvert :
- L'organisation des projets GCP
- Les bonnes pratiques de sécurité
- Les patterns CI/CD
- L'optimisation des coûts
- Le monitoring et alerting
- Une checklist de production
Prochaine étape
Dans le prochain chapitre, nous mettrons en pratique avec des Exercices et Projets.
→ Chapitre suivant : Exercices et Projets