Bonnes pratiques: exécuter des tâches planifiées dans un périmètre VPC Service Controls

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 :

Périmètre VPC SC Cloud Run

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:

  1. Créez une tâche et notez son nom.

  2. 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.

  3. 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.

  4. 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.

  5. Créez un job Cron Cloud Scheduler qui déclenche votre service proxy Cloud Run:

    1. Accéder à la page de la console des tâches Cloud Scheduler

    2. Cliquez sur Créer une tâche.

    3. 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.

    4. Cliquez sur Configurer l'exécution.

    5. Sélectionnez le type de cible HTTP.

    6. Dans URL, saisissez l'URL du service proxy Cloud Run que vous avez notée à l'étape précédente.

    7. Pour la méthode HTTP, sélectionnez Get (Récupérer).

    8. Pour l'en-tête d'authentification, sélectionnez Ajouter un jeton OIDC.

    9. 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ôle Cloud Run Invoker.

    10. Pour "Audience", saisissez la même URL de service proxy Cloud Run que celle que vous avez notée à l'étape précédente.

    11. Laissez tous les autres champs vides.

    12. 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.

  1. 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)))
  2. Créez un fichier nommé requirements.txt et collez-y le code suivant :

    google-cloud-run
    flask
  3. 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"]
  4. 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_SERVICE

    Notez 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: