Aller au contenu principal

Cloud Run


1 - Présentation

Cloud Run est une plateforme serverless pour exécuter des conteneurs sans gérer l'infrastructure.


2 - Services vs Jobs

TypeDescriptionUsage
ServiceConteneur HTTP long-runningAPIs, Web apps
JobConteneur batch one-shotTâches planifiées, migrations

3 - Déployer un service

3.1 Depuis une image

# Déployer
gcloud run deploy my-service \
--image=europe-west1-docker.pkg.dev/mon-projet/images/my-app:v1.0.0 \
--region=europe-west1 \
--platform=managed \
--allow-unauthenticated \
--port=8080 \
--cpu=1 \
--memory=512Mi \
--min-instances=0 \
--max-instances=10

3.2 Depuis le code source

# Build et deploy automatique
gcloud run deploy my-service \
--source=. \
--region=europe-west1

3.3 Via Cloud Build

# cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
args:
- 'build'
- '-t'
- 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/my-app:$COMMIT_SHA'
- '.'

- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/my-app:$COMMIT_SHA']

- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'gcloud'
args:
- 'run'
- 'deploy'
- 'my-service'
- '--image=europe-west1-docker.pkg.dev/$PROJECT_ID/images/my-app:$COMMIT_SHA'
- '--region=europe-west1'
- '--platform=managed'

4 - Configuration

4.1 Resources

gcloud run services update my-service \
--cpu=2 \
--memory=1Gi \
--concurrency=80 \
--timeout=300 \
--region=europe-west1

4.2 Scaling

# Min et max instances
gcloud run services update my-service \
--min-instances=1 \
--max-instances=100 \
--region=europe-west1

4.3 Variables d'environnement

gcloud run services update my-service \
--set-env-vars="NODE_ENV=production,LOG_LEVEL=info" \
--region=europe-west1

4.4 Secrets

# Utiliser un secret de Secret Manager
gcloud run services update my-service \
--set-secrets="API_KEY=api-key:latest" \
--region=europe-west1

# Monter comme fichier
gcloud run services update my-service \
--set-secrets="/secrets/config=config-secret:latest" \
--region=europe-west1

5 - Traffic Management

5.1 Canary deployment

# Déployer sans traffic
gcloud run deploy my-service \
--image=new-image:v2 \
--no-traffic \
--region=europe-west1

# Envoyer 10% du traffic
gcloud run services update-traffic my-service \
--to-revisions=my-service-00002=10 \
--region=europe-west1

# Promouvoir à 100%
gcloud run services update-traffic my-service \
--to-latest \
--region=europe-west1

5.2 Tags de révision

# Tagger une révision
gcloud run services update-traffic my-service \
--to-tags=canary=my-service-00002 \
--region=europe-west1

# URL: https://canary---my-service-xxxxx.run.app

6 - Jobs

6.1 Créer un job

gcloud run jobs create my-job \
--image=europe-west1-docker.pkg.dev/mon-projet/images/batch:v1 \
--region=europe-west1 \
--tasks=10 \
--parallelism=5 \
--task-timeout=3600 \
--max-retries=3

6.2 Exécuter un job

# Exécution manuelle
gcloud run jobs execute my-job --region=europe-west1

# Exécution planifiée (Cloud Scheduler)
gcloud scheduler jobs create http my-scheduled-job \
--schedule="0 2 * * *" \
--uri="https://europe-west1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/mon-projet/jobs/my-job:run" \
--http-method=POST \
--oauth-service-account-email=scheduler-sa@mon-projet.iam.gserviceaccount.com

7 - Domaines personnalisés

7.1 Mapper un domaine

# Vérifier le domaine
gcloud domains verify example.com

# Mapper
gcloud run domain-mappings create \
--service=my-service \
--domain=app.example.com \
--region=europe-west1

7.2 Certificat SSL

Cloud Run fournit automatiquement un certificat SSL managé pour les domaines personnalisés.


8 - Authentification

8.1 Accès public

gcloud run services update my-service \
--allow-unauthenticated \
--region=europe-west1

8.2 Accès authentifié

# Restreindre l'accès
gcloud run services update my-service \
--no-allow-unauthenticated \
--region=europe-west1

# Donner accès à un utilisateur
gcloud run services add-iam-policy-binding my-service \
--member="user:[email protected]" \
--role="roles/run.invoker" \
--region=europe-west1

# Donner accès à un service account
gcloud run services add-iam-policy-binding my-service \
--member="serviceAccount:[email protected]" \
--role="roles/run.invoker" \
--region=europe-west1

8.3 Appel service-to-service

# Python
import google.auth.transport.requests
import google.oauth2.id_token

def call_cloud_run_service():
auth_req = google.auth.transport.requests.Request()
id_token = google.oauth2.id_token.fetch_id_token(
auth_req,
"https://my-service-xxxxx.run.app"
)

response = requests.get(
"https://my-service-xxxxx.run.app/api/data",
headers={"Authorization": f"Bearer {id_token}"}
)
return response.json()

9 - Tarification

RessourcePrix
vCPU$0.00002400/vCPU-seconde
Mémoire$0.00000250/GiB-seconde
Requêtes$0.40/million

Free tier mensuel :

  • 2 millions de requêtes
  • 360,000 GiB-secondes de mémoire
  • 180,000 vCPU-secondes

Résumé

Dans ce chapitre, nous avons appris :

  • Les Services vs Jobs
  • Le déploiement de conteneurs
  • La configuration (resources, scaling, secrets)
  • Le Traffic Management (canary)
  • Les Jobs pour les tâches batch
  • L'authentification

Prochaine étape

Dans le prochain chapitre, nous verrons Cloud Monitoring et Logging.

→ Chapitre suivant : Monitoring et Logging


← Retour à la table des matières