Come pianificare un job Cloud Run all'interno di un perimetro dei Controlli di servizio VPC

Come pianificare un job Cloud Run all'interno di un perimetro dei Controlli di servizio VPC

Informazioni su questo codelab

subjectUltimo aggiornamento: gen 18, 2025
account_circleScritto da un Googler

1. Introduzione

Se il tuo progetto Google Cloud si trova all'interno di un perimetro VPC SC, devi eseguire ulteriori passaggi per configurare i job pianificati. Poiché Cloud Scheduler non può attivare direttamente i job all'interno dei perimetri della rete virtuale privata, dovrai eseguire il proxy della richiesta tramite un altro componente. Ti consigliamo di utilizzare un servizio Cloud Run come proxy.

L'architettura ha questo aspetto:

Diagramma di Cloud Scheduler che attiva un servizio Cloud Run che esegue un job Cloud Run

Cosa imparerai a fare

  • Come eseguire un job Cloud Run in base a una pianificazione all'interno di un perimetro SC VPC
  • Come creare un servizio Cloud Run che attiva un job Cloud Run utilizzando le librerie client Cloud Run
  • Come configurare Cloud Scheduler per richiamare un servizio Cloud Run in base a una pianificazione

2. Prima di iniziare

Innanzitutto, assicurati di aver seguito i passaggi per configurare Cloud Run per i Controlli di servizio VPC.

A questo punto, imposta le variabili di ambiente che verranno utilizzate in questo codelab.

PROJECT_ID=<YOUR_PROJECT_ID>
REGION=<YOUR_REGION>
AR_REPO=sample-job-repo
CLOUD_RUN_SERVICE=job-runner-service
CLOUD_RUN_JOB=sample-job
CLOUD_SCHEDULER=job-scheduler
SERVICE_ACCOUNT="cloud-run-invoker-sa"
SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
NETWORK=default
SUBNET=default

3. Crea il job Cloud Run

Questo codelab utilizza il container dei job Cloud Run di esempio.

Innanzitutto, crea un repository Artifact Registry per il contenitore del job Cloud Run.

gcloud artifacts repositories create $AR_REPO --repository-format=docker --location=$REGION --description="codelab for Cloud Run jobs on schedule within VPC SC"

Successivamente, copia il contenitore dei job Cloud Run di esempio in un Artifact Registry all'interno del progetto VPC configurato con SC. Per farlo, puoi utilizzare lo strumento gcrane seguendo queste istruzioni di installazione. Per scoprire di più su gcrane, consulta la documentazione per la copia delle immagini tra repository.

gcrane cp us-docker.pkg.dev/cloudrun/container/job:latest $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_JOB:latest

In secondo luogo, esegui il deployment del tuo job Cloud Run conforme ai Controlli di servizio VPC.

gcloud run jobs create $CLOUD_RUN_JOB --region $REGION \
 --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_JOB:latest \
 --network=$NETWORK \
 --subnet=$SUBNET \
 --vpc-egress=all-traffic

Per ulteriori informazioni sulla creazione di job, segui i passaggi descritti nella documentazione dei job Cloud Run.

4. Crea un account di servizio

Questo account di servizio verrà utilizzato da Cloud Run per chiamare il job Cloud Run.

Innanzitutto, crea l'account di servizio eseguendo questo comando:

gcloud iam service-accounts create $SERVICE_ACCOUNT \
  --display-name="Cloud Run to run a Cloud Run job"

In secondo luogo, concedi all'account di servizio il ruolo Invoker di Cloud Run e il ruolo Visualizzatore di Cloud Run.

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
  --role=roles/run.invoker

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
  --role=roles/run.viewer

5. Crea il servizio Cloud Run

In questo passaggio, eseguirai il deployment di un servizio Cloud Run che funge da proxy.

mkdir job-runner-service && cd $_

Crea un file denominato main.py con il seguente codice.

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)))

Crea un file denominato requirements.txt con il seguente codice.

google-cloud-run
flask

Infine, crea un Dockerfile.

FROM python:3.9-slim-buster
# for logging purposes
ENV PYTHONUNBUFFERED=True

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

CMD ["python3", "main.py"]

Quindi, crea il contenitore utilizzando i seguenti comandi docker. Tieni presente che i deployment basati su origine possono essere difficili da configurare in un ambiente VPC SC. Se hai già una pipeline di compilazione ed esecuzione, utilizzala per compilare il codice sorgente in un contenitore ed esegui il deployment del contenitore come servizio Cloud Run.

docker build -t $CLOUD_RUN_SERVICE .

docker tag $CLOUD_RUN_SERVICE $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_SERVICE

docker push $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_SERVICE

Ora esegui il deployment del servizio Cloud Run conforme ai Controlli di servizio VPC.

gcloud run deploy $CLOUD_RUN_SERVICE --region $REGION \
 --image $REGION-docker.pkg.dev/$PROJECT_ID/$AR_REPO/$CLOUD_RUN_SERVICE \
 --service-account $SERVICE_ACCOUNT_ADDRESS \
 --network=$NETWORK \
 --subnet=$SUBNET \
 --vpc-egress=all-traffic \
 --no-allow-unauthenticated \
 --ingress internal

Salva l'URL dell'endpoint del servizio eseguendo questo comando:

SERVICE_URL=$(gcloud run services describe $CLOUD_RUN_SERVICE --region $REGION --format 'value(status.url)')

6. Crea un job Cloud Scheduler per attivare il servizio

# create the Cloud Scheduler job
gcloud scheduler jobs create http $CLOUD_SCHEDULER \
  --location=$REGION \
  --schedule="0 0 1 * *" \
  --uri=$SERVICE_URL \
  --http-method=GET \
  --oidc-service-account-email=$SERVICE_ACCOUNT_ADDRESS

Una volta creato il job Cloud Scheduler, puoi eseguire il seguente comando per eseguirlo immediatamente a scopo di test:

gcloud scheduler jobs run $CLOUD_SCHEDULER --location=$REGION

NOTA:

Potresti dover attendere un paio di minuti per il completamento dell'esecuzione del job. Puoi monitorarne lo stato nella pagina Cloud Scheduler.

Verifica che il job Cloud Run sia stato eseguito correttamente eseguendo i seguenti comandi:

EXECUTION_NAME=$(gcloud run jobs describe $CLOUD_RUN_JOB --region $REGION --format 'value(status.latestCreatedExecution.name)')

gcloud run jobs executions describe $EXECUTION_NAME --region $REGION

Dovresti visualizzare qualcosa di simile al seguente:

✔ Execution sample-job-w6hrj in region us-central1
1 task completed successfully
Elapsed time: 28 seconds

7. Complimenti!

Complimenti per aver completato il codelab.

Argomenti trattati

  • Come eseguire un job Cloud Run in base a una pianificazione all'interno di un perimetro SC VPC
  • Come creare un servizio Cloud Run che attiva un job Cloud Run utilizzando le librerie client Cloud Run
  • Come configurare Cloud Scheduler per richiamare un servizio Cloud Run in base a una pianificazione

8. Esegui la pulizia

Per evitare addebiti involontari, ad esempio se i servizi Cloud Run vengono invocati inavvertitamente più volte rispetto all'allocazione mensile di invocazioni Cloud Run nel livello senza costi, puoi eliminare i servizi Google Cloud o il progetto creato nel passaggio 2.

Per eliminare il servizio Cloud Run e il job Cloud Run, vai alla console Cloud Run all'indirizzo https://console.cloud.google.com/run ed elimina il servizio.

Se scegli di eliminare l'intero progetto, puoi andare alla pagina https://console.cloud.google.com/cloud-resource-manager, selezionare il progetto creato nel passaggio 2 e scegliere Elimina. Se elimini il progetto, dovrai modificare i progetti nel tuo Cloud SDK. Puoi visualizzare l'elenco di tutti i progetti disponibili eseguendo gcloud projects list.