1. Introduzione
Panoramica
Se il tuo progetto GCP si trova all'interno di un perimetro VPC SC, dovrai eseguire passaggi aggiuntivi per configurare i job pianificati. Poiché Cloud Scheduler non può attivare direttamente i job all'interno dei perimetri di VPC SC, devi eseguire il proxy della richiesta tramite un altro componente. Ti consigliamo di utilizzare un servizio Cloud Run come proxy.
L'architettura ha questo aspetto:

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 durante 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 di esempio dei job Cloud Run.
Innanzitutto, crea un repository Artifact Registry per il container 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 di esempio dei job Cloud Run in un Artifact Registry all'interno del progetto configurato con VPC SC. Per farlo, puoi utilizzare lo strumento gcrane seguendo queste istruzioni di installazione. Puoi scoprire di più su gcrane nella documentazione sulla 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
Secondo, esegui il deployment del 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 elencati qui nella documentazione di Cloud Run Jobs.
4. Creare un service account
Questo service account verrà utilizzato da Cloud Run per chiamare il job Cloud Run.
Innanzitutto, crea il service account eseguendo questo comando:
gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run to run a Cloud Run job"
In secondo luogo, concedi i ruoli Invoker di Cloud Run e Visualizzatore di Cloud Run al service account.
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"]
Successivamente, crea il container utilizzando i seguenti comandi Docker. Tieni presente che le implementazioni basate sull'origine possono essere difficili da configurare in un ambiente VPC SC. Se hai una pipeline di build e deployment esistente, utilizzala per creare il codice sorgente in un container ed eseguire il deployment del container 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 di 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 comando seguente per eseguirlo immediatamente a scopo di test:
gcloud scheduler jobs run $CLOUD_SCHEDULER --location=$REGION
NOTA:
Potrebbe essere necessario attendere un paio di minuti per il completamento dell'esecuzione del job. Puoi monitorare il suo stato nella pagina Cloud Run Scheduler.
Verifica che il job Cloud Run sia stato eseguito correttamente eseguendo questi 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
e dovresti visualizzare un risultato simile al seguente:
✔ Execution sample-job-w6hrj in region us-central1 1 task completed successfully Elapsed time: 28 seconds
7. Complimenti!
Congratulazioni 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 richiamati inavvertitamente più volte rispetto all'allocazione mensile di chiamate di Cloud Run nel livello senza costi), puoi eliminare i servizi GCP o il progetto che hai 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 che hai creato nel passaggio 2 e scegliere Elimina. Se elimini il progetto, dovrai cambiare progetto in Cloud SDK. Puoi visualizzare l'elenco di tutti i progetti disponibili eseguendo gcloud projects list.