Informazioni su questo codelab
1. Introduzione
Panoramica
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:
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
.