Cette page décrit les bonnes pratiques à suivre pour exécuter des tâches Cloud Run planifiées pour des projets Google Cloud lorsque vous utilisez un périmètre de service VPC Service Controls.
Cloud Scheduler ne peut pas déclencher de jobs dans un périmètre VPC Service Controls. Vous devez suivre des étapes supplémentaires pour configurer des tâches planifiées. Plus précisément, vous devez mettre en proxy la requête via un autre composant. Nous vous recommandons d'utiliser un service Cloud Run comme proxy.
Le schéma suivant présente l’architecture :
Avant de commencer
Configurez Cloud Run pour VPC Service Controls. Il s'agit d'une configuration unique utilisée par toutes les tâches planifiées ultérieures. Vous devrez également effectuer une configuration par service ultérieurement, comme décrit dans les instructions suivantes.
Configurer une tâche planifiée
Pour configurer une tâche planifiée dans un périmètre VPC Service Controls:
Créez une tâche et notez son nom.
Effectuez la configuration VPC Service Controls spécifique à Cloud Run par tâche. Vous devez connecter votre tâche à un réseau VPC et acheminer tout le trafic via ce réseau.
Si vous ne disposez pas d'un job Cloud Run existant que vous souhaitez déclencher, testez la fonctionnalité en déployant l'exemple de conteneur de jobs Cloud Run
us-docker.pkg.dev/cloudrun/container/job:latest
dans Cloud Run.Déployez le service Cloud Run qui sert de proxy. Consultez Exemple de service proxy pour découvrir un exemple de service qui déclenche une tâche Cloud Run en réponse à une requête. Une fois le déploiement terminé, la console affiche l'URL du service à côté du texte URL.
Configurez VPC Service Controls pour chaque service Cloud Run. Vous devez connecter le service à un réseau VPC et acheminer tout le trafic via ce réseau. Veillez à définir l'entrée sur Interne.
Créez un job Cron Cloud Scheduler qui déclenche votre service proxy Cloud Run:
Cliquez sur Créer une tâche.
Saisissez les valeurs souhaitées pour les champs Nom, Région, Fréquence et Fuseau horaire. Pour en savoir plus, consultez Créer une tâche Cron à l'aide de Cloud Scheduler.
Cliquez sur Configurer l'exécution.
Sélectionnez le type de cible HTTP.
Dans URL, saisissez l'URL du service proxy Cloud Run que vous avez notée à l'étape précédente.
Pour la méthode HTTP, sélectionnez Get (Récupérer).
Pour l'en-tête d'authentification, sélectionnez Ajouter un jeton OIDC.
Pour "Compte de service", sélectionnez Compte de service Compute Engine par défaut ou un compte de service personnalisé disposant de l'autorisation
run.routes.invoke
ou du rôleCloud Run Invoker
.Pour "Audience", saisissez la même URL de service proxy Cloud Run que celle que vous avez notée à l'étape précédente.
Laissez tous les autres champs vides.
Cliquez sur Créer pour créer le job cron Cloud Scheduler.
Exemple de service proxy
La section suivante présente un exemple de service Python qui met en proxy les requêtes et déclenche la tâche Cloud Run.
Créez un fichier nommé
main.py
et collez-y le code suivant. Remplacez le nom de l'annonce, la région et l'ID du projet par les valeurs dont vous avez besoin.import os from flask import Flask app = Flask(__name__) # pip install google-cloud-run from google.cloud import run_v2 @app.route('/') def hello(): client = run_v2.JobsClient() # UPDATE TO YOUR JOB NAME, REGION, AND PROJECT ID job_name = 'projects/YOUR_PROJECT_ID/locations/YOUR_JOB_REGION/jobs/YOUR_JOB_NAME' print("Triggering job...") request = run_v2.RunJobRequest(name=job_name) operation = client.run_job(request=request) response = operation.result() print(response) return "Done!" if __name__ == '__main__': app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
Créez un fichier nommé
requirements.txt
et collez-y le code suivant :google-cloud-run flask
Créez un fichier Dockerfile avec le contenu suivant:
FROM python:3.9-slim-buster WORKDIR /app COPY requirements.txt requirements.txt RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["python3", "main.py"]
Créez et déployez le conteneur. La configuration des déploiements basés sur la source dans un environnement VPC Service Controls peut s'avérer difficile, car vous devez configurer des nœuds de calcul personnalisés Cloud Build. Si vous disposez d'un pipeline de compilation et de déploiement existant, utilisez-le pour compiler le code source dans un conteneur et le déployer en tant que service Cloud Run.
Si vous ne disposez pas d'une configuration de compilation et de déploiement existante, créez le conteneur localement et transférez-le vers Artifact Registry, par exemple:
PROJECT_ID=
YOUR_PROJECT_ID REGION=YOUR_REGION AR_REPO=YOUR_AR_REPO CLOUD_RUN_SERVICE=job-runner-service docker build -t $CLOUD_RUN_SERVICE . docker tag $CLOUD_RUN_SERVICE $REGION_ID-docker.pkg.dev/$PROJECT_ID/AR_REPO/$CLOUD_RUN_SERVICE docker push $REGION_ID-docker.pkg.dev/$PROJECT_ID/AR_REPO/$CLOUD_RUN_SERVICENotez l'URL du service renvoyée par la commande de déploiement.
Étape suivante
Après avoir utilisé cette fonctionnalité, consultez les ressources suivantes pour en savoir plus:
- Afficher les journaux de tâches
- Surveiller les performances des tâches
- Créer un job
- Exécuter une tâche
- Gérer les jobs