Best Practices: Geplante Jobs in einem VPC Service Controls-Perimeter ausführen

Auf dieser Seite werden Best Practices für die Ausführung geplanter Cloud Run-Jobs für Google Cloud -Projekte bei Verwendung eines VPC Service Controls-Perimeters beschrieben.

Cloud Scheduler kann keine Jobs innerhalb eines VPC Service Controls-Perimeters auslösen. Für die Einrichtung geplanter Jobs sind zusätzliche Schritte erforderlich. Insbesondere müssen Sie die Anfrage über eine andere Komponente weiterleiten. Wir empfehlen, einen Cloud Run-Dienst als Proxy zu verwenden.

Im folgenden Diagramm wird diese Architektur dargestellt:

Cloud Run-VPC-SC-Perimeter

Hinweise

Cloud Run für VPC Service Controls einrichten Diese Einrichtung ist einmalig und wird für alle nachfolgenden geplanten Jobs verwendet. Außerdem müssen Sie später einige Einstellungen pro Dienst vornehmen. Wie das geht, wird in der folgenden Anleitung beschrieben.

Geplante Jobs einrichten

So richten Sie einen geplanten Job innerhalb eines VPC Service Controls-Perimeters ein:

  1. Erstellen Sie einen Job und notieren Sie sich den Namen.

  2. Führen Sie die VPC Service Controls-Einrichtung für Cloud Run pro Job aus. Sie müssen Ihren Job mit einem VPC-Netzwerk verbinden und den gesamten Traffic über dieses Netzwerk weiterleiten.

    Wenn Sie keinen vorhandenen Cloud Run-Job haben, den Sie auslösen möchten, können Sie die Funktion testen, indem Sie den Beispielcontainer für Cloud Run-Jobs us-docker.pkg.dev/cloudrun/container/job:latest in Cloud Run bereitstellen.

  3. Stellen Sie den Cloud Run-Dienst bereit, der als Proxy dient. Im Artikel Beispiel-Proxydienst finden Sie einen Beispieldienst, der als Reaktion auf eine Anfrage einen Cloud Run-Job auslöst. Nach der Bereitstellung wird in der Console die URL des Dienstes neben dem Text URL: angezeigt.

  4. Führen Sie die VPC Service Controls-Einrichtung für Cloud Run pro Dienst durch. Sie müssen den Dienst mit einem VPC-Netzwerk verbinden und den gesamten Traffic über dieses Netzwerk weiterleiten. Achten Sie darauf, dass Sie „Ingress“ auf Internal festlegen.

  5. Einen Cloud Scheduler-Cronjob erstellen, der Ihren Cloud Run-Proxydienst auslöst:

    1. Zur Seite „Cloud Scheduler-Jobs“ in der Console

    2. Klicken Sie auf Job erstellen.

    3. Geben Sie die gewünschten Werte für die Felder Name, Region, Häufigkeit und Zeitzone ein. Weitere Informationen finden Sie unter Cronjob mit Cloud Scheduler erstellen.

    4. Klicken Sie auf Ausführung konfigurieren.

    5. Wählen Sie als Zieltyp HTTP aus.

    6. Geben Sie unter URL die URL des Cloud Run-Proxy-Dienstes ein, die Sie im vorherigen Schritt notiert haben.

    7. Wählen Sie als HTTP-Methode Get aus.

    8. Wählen Sie für „Auth-Header“ die Option OIDC-Token hinzufügen aus.

    9. Wählen Sie als Dienstkonto Compute Engine-Standarddienstkonto oder ein benutzerdefiniertes Dienstkonto mit der Berechtigung run.routes.invoke oder der Rolle Cloud Run Invoker aus.

    10. Geben Sie unter „Zielgruppe“ dieselbe URL für den Cloud Run-Proxydienst ein, die Sie im vorherigen Schritt notiert haben.

    11. Lassen Sie alle anderen Felder leer.

    12. Klicken Sie auf Erstellen, um den Cloud Scheduler-Cron-Job zu erstellen.

Beispiel für einen Proxy-Dienst

Im folgenden Abschnitt wird ein Beispiel für einen Python-Dienst gezeigt, der Anfragen als Proxy weiterleitet und den Cloud Run-Job auslöst.

  1. Erstellen Sie eine Datei mit dem Namen main.py und fügen Sie den folgenden Code in diese ein. Aktualisieren Sie den Jobnamen, die Region und die Projekt-ID auf die gewünschten Werte.

    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. Erstellen Sie eine Datei mit dem Namen requirements.txt und fügen Sie den folgenden Code in diese ein:

    google-cloud-run
    flask
  3. Erstellen Sie ein Dockerfile mit folgendem Inhalt:

    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. Erstellen und bereitstellen Sie den Container. Die Einrichtung von quellebasierten Bereitstellungen in einer VPC Service Controls-Umgebung kann schwierig sein, da benutzerdefinierte Cloud Build-Worker eingerichtet werden müssen. Wenn Sie bereits eine Build- und Bereitstellungspipeline haben, verwenden Sie diese, um den Quellcode in einem Container zu erstellen und den Container als Cloud Run-Dienst bereitzustellen.

    Wenn Sie noch keine Build- und Bereitstellungseinrichtung haben, erstellen Sie den Container lokal und übertragen Sie ihn per Push in die Artifact Registry. Beispiel:

    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

    Notieren Sie sich die vom Befehl „deploy“ zurückgegebene Dienst-URL.

Nächste Schritte

Weitere Informationen finden Sie in den folgenden Artikeln: