Exercices et Projets
1 - Exercices pratiques
Exercice 1 : Configuration initiale
Objectif : Configurer un projet GCP pour le DevOps.
Tâches :
- Créer un projet GCP
- Activer les APIs nécessaires
- Créer un repository Artifact Registry
- Configurer gcloud CLI
Solution
# Créer le projet
gcloud projects create mon-projet-devops \
--name="Mon Projet DevOps"
# Définir comme projet actif
gcloud config set project mon-projet-devops
# Activer les APIs
gcloud services enable \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
run.googleapis.com \
container.googleapis.com \
monitoring.googleapis.com \
logging.googleapis.com
# Créer le repo Artifact Registry
gcloud artifacts repositories create images \
--repository-format=docker \
--location=europe-west1
# Configurer Docker
gcloud auth configure-docker europe-west1-docker.pkg.dev
Exercice 2 : Pipeline Cloud Build
Objectif : Créer un pipeline CI/CD pour une application Node.js.
Solution
# cloudbuild.yaml
steps:
- name: 'node:18'
entrypoint: 'npm'
args: ['ci']
- name: 'node:18'
entrypoint: 'npm'
args: ['run', 'lint']
- name: 'node:18'
entrypoint: 'npm'
args: ['test']
- name: 'gcr.io/cloud-builders/docker'
args:
- 'build'
- '-t'
- 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/app:$COMMIT_SHA'
- '-t'
- 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/app:latest'
- '.'
- name: 'gcr.io/cloud-builders/docker'
args:
- 'push'
- '--all-tags'
- 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/app'
images:
- 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/app:$COMMIT_SHA'
- 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/app:latest'
options:
machineType: 'E2_HIGHCPU_8'
Exercice 3 : Déploiement Cloud Run
Objectif : Déployer une application sur Cloud Run avec traffic splitting.
Solution
# Déployer la v1
gcloud run deploy my-app \
--image=europe-west1-docker.pkg.dev/mon-projet/images/app:v1 \
--region=europe-west1 \
--allow-unauthenticated \
--tag=v1
# Déployer la v2 sans traffic
gcloud run deploy my-app \
--image=europe-west1-docker.pkg.dev/mon-projet/images/app:v2 \
--region=europe-west1 \
--no-traffic \
--tag=v2
# Canary: 10% sur v2
gcloud run services update-traffic my-app \
--to-tags=v2=10,v1=90 \
--region=europe-west1
# Promouvoir v2 à 100%
gcloud run services update-traffic my-app \
--to-tags=v2=100 \
--region=europe-west1
Exercice 4 : Monitoring et alertes
Objectif : Configurer le monitoring et les alertes.
Solution
# Créer un uptime check
gcloud monitoring uptime-checks create http app-health \
--display-name="App Health Check" \
--resource-type=uptime-url \
--monitored-resource-labels=host=my-app-xxx.run.app \
--path=/health \
--check-interval=60s
# Créer un notification channel (email)
gcloud alpha monitoring channels create \
--display-name="Team Email" \
--type=email \
[email protected]
# Créer une alerte
gcloud alpha monitoring policies create \
--display-name="High Error Rate" \
--condition-display-name="Error rate > 1%" \
--condition-filter='resource.type="cloud_run_revision" AND metric.type="run.googleapis.com/request_count" AND metric.labels.response_code_class="5xx"' \
--condition-threshold-value=1 \
--condition-threshold-comparison=COMPARISON_GT \
--notification-channels=<channel-id>
2 - Projet complet : Application Microservices
Architecture
Structure du projet
my-microservices/
├── .cloudbuild/
│ ├── ci.yaml
│ └── cd.yaml
├── clouddeploy/
│ ├── delivery-pipeline.yaml
│ └── targets.yaml
├── services/
│ ├── frontend/
│ │ ├── Dockerfile
│ │ ├── package.json
│ │ └── kubernetes/
│ ├── api/
│ │ ├── Dockerfile
│ │ ├── package.json
│ │ └── kubernetes/
│ └── worker/
│ ├── Dockerfile
│ └── kubernetes/
├── skaffold.yaml
└── README.md
Pipeline CI
# .cloudbuild/ci.yaml
steps:
# Build all services
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '${_REGION}-docker.pkg.dev/$PROJECT_ID/images/frontend:$COMMIT_SHA', './services/frontend']
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '${_REGION}-docker.pkg.dev/$PROJECT_ID/images/api:$COMMIT_SHA', './services/api']
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '${_REGION}-docker.pkg.dev/$PROJECT_ID/images/worker:$COMMIT_SHA', './services/worker']
# Push all
- name: 'gcr.io/cloud-builders/docker'
args: ['push', '${_REGION}-docker.pkg.dev/$PROJECT_ID/images/frontend:$COMMIT_SHA']
- name: 'gcr.io/cloud-builders/docker'
args: ['push', '${_REGION}-docker.pkg.dev/$PROJECT_ID/images/api:$COMMIT_SHA']
- name: 'gcr.io/cloud-builders/docker'
args: ['push', '${_REGION}-docker.pkg.dev/$PROJECT_ID/images/worker:$COMMIT_SHA']
# Create release
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'gcloud'
args:
- 'deploy'
- 'releases'
- 'create'
- 'release-$SHORT_SHA'
- '--delivery-pipeline=microservices-pipeline'
- '--region=${_REGION}'
- '--images=frontend=${_REGION}-docker.pkg.dev/$PROJECT_ID/images/frontend:$COMMIT_SHA,api=${_REGION}-docker.pkg.dev/$PROJECT_ID/images/api:$COMMIT_SHA,worker=${_REGION}-docker.pkg.dev/$PROJECT_ID/images/worker:$COMMIT_SHA'
substitutions:
_REGION: 'europe-west1'
options:
machineType: 'E2_HIGHCPU_8'
Cloud Deploy Pipeline
# clouddeploy/delivery-pipeline.yaml
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: microservices-pipeline
serialPipeline:
stages:
- targetId: dev
profiles: [dev]
- targetId: staging
profiles: [staging]
- targetId: production
profiles: [production]
strategy:
canary:
canaryDeployment:
percentages: [25, 50, 75]
verify: true
3 - Quiz de révision
-
Quelle est la différence entre Cloud Build et Cloud Deploy ?
-
Quand utiliser GKE Autopilot vs Standard ?
-
Comment sécuriser les secrets dans Cloud Run ?
-
Qu'est-ce que Workload Identity ?
-
Comment configurer un canary deployment sur Cloud Run ?
Réponses
-
Cloud Build exécute les builds (CI). Cloud Deploy gère la livraison (CD) vers les environnements.
-
Autopilot : zéro gestion, pay-per-pod. Standard : contrôle total, GPU/TPU, customisation.
-
Utiliser Secret Manager et monter les secrets avec
--set-secrets. -
Méthode sécurisée pour permettre aux pods GKE d'accéder aux APIs GCP sans clés de service account.
-
Déployer avec
--no-trafficpuis utiliserupdate-trafficpour augmenter progressivement le pourcentage.
4 - Certification Google Cloud
Professional Cloud DevOps Engineer
| Domaine | Poids |
|---|---|
| Bootstrapping a Google Cloud organization | 17% |
| Building and implementing CI/CD pipelines | 24% |
| Applying SRE practices to a service | 23% |
| Implementing service monitoring strategies | 21% |
| Optimizing service performance | 15% |
Ressources
Résumé du cours
Félicitations ! Vous avez complété le cours GCP DevOps.
Vous maîtrisez maintenant :
- Cloud Source Repositories et les triggers
- Cloud Build pour CI
- Artifact Registry pour les artefacts
- Cloud Deploy pour CD
- GKE et Cloud Run pour l'exécution
- Cloud Monitoring et Logging
Prochaines étapes
- Pratiquer avec des projets réels
- Passer la certification Professional Cloud DevOps Engineer
- Explorer les services avancés (Cloud Functions, Anthos)