1. Introduction
Présentation
Les révisions Cloud Run vous permettent d'indiquer les révisions qui doivent recevoir du trafic et le pourcentage de trafic à envoyer à chaque révision. Les révisions vous permettent d'effectuer un rollback vers une révision précédente, de déployer progressivement une révision et de répartir le trafic entre plusieurs révisions.
Ces ateliers de programmation vous montrent comment utiliser les révisions pour gérer le trafic vers votre service Cloud Run. Pour en savoir plus sur les révisions, consultez la documentation Cloud Run.
Points abordés
- Répartir le trafic entre deux révisions ou plus pour un service Cloud Run
- Déployer progressivement une nouvelle révision
- Effectuer un rollback vers une révision précédente
2. Préparation
Prérequis
- Vous êtes connecté à la console Cloud.
- Vous avez déjà déployé un service Cloud Run. Par exemple, vous pouvez suivre le tutoriel sur le déploiement d'un service Cloud Run pour commencer.
Définir des variables d'environnement
Vous pouvez définir des variables d'environnement qui seront utilisées tout au long de cet atelier de programmation.
PROJECT_ID=YOUR-PROJECT-ID
REGION=YOUR_REGION
BG_COLOR=darkseagreen
SERVICE_NAME=traffic-revisions-color
AR_REPO=traffic-revisions-color-repo
Créer un dépôt Artifact Registry pour le service
gcloud artifacts repositories create $AR_REPO \
--repository-format=docker \
--location=$REGION \
--description="codelab for finetuning using CR jobs" \
--project=$PROJECT_ID
3. Répartition du trafic
Cet exemple vous montre comment créer un service Cloud Run qui lit une variable d'environnement de couleur et renvoie le nom de la révision en utilisant cette couleur d'arrière-plan.
Bien que cet atelier de programmation utilise Python, vous pouvez utiliser n'importe quel environnement d'exécution.
Définir des variables d'environnement
Vous pouvez définir des variables d'environnement qui seront utilisées tout au long de cet atelier de programmation.
REGION=<YOUR_REGION> PROJECT_ID=<YOUR-PROJECT-ID> BG_COLOR=darkseagreen SERVICE_NAME=traffic-revisions-color AR_REPO=traffic-revisions-color-repo
Créer le service
Commencez par créer un répertoire pour le code source et accédez-y.
mkdir traffic-revisions-codelab && cd $_
Créez ensuite un fichier main.py avec le contenu suivant :
import os
from flask import Flask, render_template_string
app = Flask(__name__)
TEMPLATE = """
<!doctype html>
<html lang="en">
<head>
<title>Cloud Run Traffic Revisions</title>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
min-height: 50vh;
background-color: {{ bg_color }}; /* Set by environment variable */
font-family: sans-serif;
}
.content {
background-color: rgba(255, 255, 255, 0.8); /* Semi-transparent white background */
padding: 2em;
border-radius: 8px;
text-align: center;
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}
</style>
</head>
<body>
<div class="content">
<p>background color: <strong>{{ color_name }}</strong></p>
</div>
</body>
</html>
"""
@app.route('/')
def main():
"""Serves the main page with a background color from the ENV."""
# Get the color from the 'BG_COLOR' environment variable.
# Default to 'white' if the variable is not set.
color = os.environ.get('BG_COLOR', 'white').lower()
return render_template_string(TEMPLATE, bg_color=color, color_name=color)
if __name__ == '__main__':
port = int(os.environ.get('PORT', 8080))
app.run(debug=True, host='0.0.0.0', port=port)
Ensuite, créez un fichier requirements.txt avec le contenu suivant :
Flask>=2.0.0 gunicorn>=20.0.0
Enfin, créez un Dockerfile.
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8080
ENV PYTHONPATH /app
CMD ["gunicorn", "--bind", "0.0.0.0:8080", "main:app"]
Créez l'image dans Artifact Registry à l'aide de Buildpacks et de Cloud Build :
gcloud builds submit \
--tag $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME
Déployez la première révision sur Cloud Run avec la couleur darkseagreen :
gcloud run deploy $SERVICE_NAME \
--image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
--region $REGION \
--allow-unauthenticated \
--set-env-vars BG_COLOR=darkseagreen
Pour tester le service, vous pouvez ouvrir le point de terminaison directement dans votre navigateur Web pour voir la couleur d'arrière-plan vert mer foncé.
Déployez maintenant une deuxième révision avec une couleur d'arrière-plan beige.
# update the env var
BG_COLOR=tan
gcloud run deploy $SERVICE_NAME \
--image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
--region $REGION \
--set-env-vars BG_COLOR=tan
Désormais, lorsque vous actualiserez le site Web, vous verrez la couleur d'arrière-plan beige.
Répartir le trafic à 50/50
Pour répartir le trafic entre les révisions vert océan et beige, vous devez trouver les ID de révision des services Cloud Run sous-jacents. Vous pouvez afficher les ID de révision en exécutant la commande suivante :
gcloud run revisions list --service $SERVICE_NAME \ --region $REGION --format 'value(REVISION)'
Vous devriez obtenir des résultats semblables à ceux ci-dessous.
traffic-revisions-color-00003-qoq traffic-revisions-color-00002-zag
Vous pouvez répartir le trafic 50/50 entre les deux révisions en exécutant la commande suivante avec vos révisions :
gcloud run services update-traffic $SERVICE_NAME \ --region $REGION \ --to-revisions YOUR_REVISION_1=50,YOUR_REVISION_2=50
Tester la répartition du trafic
Vous pouvez tester le service en actualisant la page dans votre navigateur.
La moitié du temps, vous devriez voir la révision vert mer foncé et l'autre moitié, la révision beige. Le nom de la révision s'affiche également dans le résultat, par exemple :
<html><body style="background-color:tan;"><div><p>Hello traffic-revisions-color-00003-qoq</p></div></body></html>
4. Déploiements progressifs
Dans cette section, vous allez apprendre à déployer progressivement des modifications dans une nouvelle révision Cloud Services. Pour en savoir plus sur les déploiements progressifs, consultez la documentation.
Vous allez utiliser le même code que dans la section précédente, mais vous allez le déployer en tant que nouveau service Cloud Run.
Tout d'abord, définissez la couleur d'arrière-plan sur beige et déployez la fonction avec le nom gradual-rollouts-colors.
Pour déployer une fonction Cloud Run directement sur Cloud Run, exécutez la commande suivante :
# update the env var
BG_COLOR=beige
gcloud beta run deploy gradual-rollouts-colors \
--image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
--region $REGION \
--allow-unauthenticated \
--update-env-vars BG_COLOR=$BG_COLOR
Supposons maintenant que nous voulions déployer progressivement une nouvelle révision avec la couleur d'arrière-plan lavande.
Commençons par définir la révision actuelle (beige) pour qu'elle reçoive 100 % du trafic. Cela garantira que vos futures révisions ne recevront aucun trafic. Par défaut, Cloud Run attribue 100 % du trafic à la révision avec l'indicateur latest. En spécifiant manuellement que la révision beige actuelle doit recevoir tout le trafic, la révision avec le drapeau latest ne recevra plus 100 % du trafic. Consultez la documentation.
# get the revision name BEIGE_REVISION=$(gcloud run revisions list --service gradual-rollouts-colors \ --region $REGION --format 'value(REVISION)') # now set 100% traffic to that revision gcloud run services update-traffic gradual-rollouts-colors \ --to-revisions=$BEIGE_REVISION=100 \ --region $REGION
Un résultat semblable à Traffic: 100% radual-rollouts-colors-00001-yox s'affiche.
Vous pouvez désormais déployer une nouvelle révision qui ne recevra aucun trafic. Au lieu de modifier le code, vous pouvez mettre à jour la variable d'environnement BG_COLOR pour cette révision.
Pour déployer une fonction Cloud Run directement sur Cloud Run, exécutez la commande suivante :
# update color
BG_COLOR=lavender
# deploy the function that will not receive any traffic
gcloud beta run deploy gradual-rollouts-colors \
--image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$SERVICE_NAME:latest \
--region $REGION \
--allow-unauthenticated \
--update-env-vars BG_COLOR=$BG_COLOR
Désormais, lorsque vous accédez au site Web dans votre navigateur, la couleur beige s'affiche, même si la révision lavande est celle qui a été déployée le plus récemment.
Tester une révision qui ne diffuse aucun trafic
Supposons que vous ayez vérifié que votre révision a été déployée avec succès et qu'elle diffuse 0 % du trafic. Même si elle a réussi les vérifications de l'état, vous devez quand même vérifier que cette révision utilise la couleur de fond lavande.
Pour tester la révision lavande, vous pouvez appliquer un tag à cette révision. Le tag vous permet de tester directement la nouvelle révision sur une URL spécifique, sans diffuser le trafic.
Commencez par obtenir l'URL de l'image correspondant à la dernière révision (lavande).
IMAGE_URL_LAVENDER=$(gcloud run services describe gradual-rollouts-colors --region $REGION --format 'value(IMAGE)')
Taggez ensuite cette image avec la couleur associée.
gcloud run deploy gradual-rollouts-colors --image $IMAGE_URL_LAVENDER --no-traffic --tag $BG_COLOR --region $REGION
Vous devez obtenir un résultat semblable à ce qui suit :
The revision can be reached directly at https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app
Désormais, lorsque vous accédez à l'URL de cette révision spécifique, la couleur lavande s'affiche.
Augmentation progressive du trafic
Vous pouvez maintenant commencer à envoyer du trafic vers la révision lavande. L'exemple ci-dessous montre comment envoyer 1 % du trafic vers la version lavande.
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=1
Pour envoyer 50 % du trafic à lavande, vous pouvez utiliser la même commande, mais en spécifiant 50 % à la place.
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=50
Vous devriez voir une liste indiquant le trafic généré par chaque révision.
Traffic:
50% gradual-rollouts-colors-00001-hos
50% gradual-rollouts-colors-00004-mum
lavender: https://lavender---gradual-rollouts-colors-<hash>-<region>.a.run.app
Lorsque vous êtes prêt à déployer complètement la couleur lavande, vous pouvez la définir sur 100 % pour remplacer le beige.
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-tags lavender=100
Désormais, lorsque vous accéderez au site Web, vous ne verrez que la couleur lavande.
5. Rollbacks
Supposons que vous ayez reçu les premiers commentaires sur l'UX, indiquant que les clients préfèrent le beige au lavande, et que vous deviez revenir au beige.
Vous pouvez revenir à la révision précédente (beige) en exécutant la commande suivante :
gcloud run services update-traffic gradual-rollouts-colors --region $REGION --to-revisions $BEIGE_REVISION=100
Désormais, lorsque vous accédez au site Web, l'arrière-plan est beige.
Pour en savoir plus sur les rollbacks, consultez la documentation.
6. Félicitations !
Bravo ! Vous avez terminé cet atelier de programmation.
Nous vous recommandons de consulter la documentation sur les déploiements, les rollbacks et la migration du trafic.
Points abordés
- Répartir le trafic entre deux révisions ou plus pour un service Cloud Run
- Déployer progressivement une nouvelle révision
- Effectuer un rollback vers une révision précédente
7. Effectuer un nettoyage
Pour éviter des frais involontaires (par exemple, si cette fonction Cloud Run est invoquée par inadvertance plus de fois que votre allocation mensuelle d'invocations Cloud Run dans le niveau sans frais), vous pouvez supprimer le service Cloud Run ou le projet que vous avez créé à l'étape 2.
Pour supprimer un service Cloud Run, accédez à Cloud Run dans la console Cloud à l'adresse https://console.cloud.google.com/run/, puis supprimez les fonctions que vous avez créées dans cet atelier de programmation.
Si vous choisissez de supprimer l'intégralité du projet, vous pouvez accéder à https://console.cloud.google.com/cloud-resource-manager, sélectionner le projet que vous avez créé à l'étape 2, puis choisir "Supprimer". Si vous supprimez le projet, vous devrez changer de projet dans votre SDK Cloud. Vous pouvez afficher la liste de tous les projets disponibles en exécutant gcloud projects list.