Crea e crea un job Shell in Cloud Run

Scopri come creare un semplice job Cloud Run, quindi eseguire il deployment dall'origine, che pacchettizza automaticamente il codice in un'immagine container, carica l'immagine del container in Artifact Registry e poi ne esegue il deployment in Cloud Run. Puoi utilizzare altre lingue oltre a quelle mostrate.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

Scrittura del job di esempio in corso...

Per scrivere un job Cloud Run che esegue uno script Shell:

  1. Crea una nuova directory denominata jobs e modifica la directory al suo interno:

    mkdir jobs
    cd jobs
    
  2. Crea un file Dockerfile con i seguenti contenuti:

    
    # Use the official Ubuntu image from Docker Hub as
    # a base image
    FROM ubuntu:22.04
    
    # Execute next commands in the directory /workspace
    WORKDIR /workspace
    
    # Copy over the script to the /workspace directory
    COPY script.sh .
    
    # Just in case the script doesn't have the executable bit set
    RUN chmod +x ./script.sh
    
    # Run the script when starting the container
    CMD [ "./script.sh" ]
    
  3. Nella stessa directory, crea un file script.sh per il codice del job effettivo. Copia al suo interno le seguenti righe di esempio:

    #!/bin/bash
    set -euo pipefail
    
    # In production, consider printing commands as they are executed.
    # This helps with debugging if things go wrong and you only
    # have the logs.
    #
    # Add -x:
    # `set -euox pipefail`
    
    CLOUD_RUN_TASK_INDEX=${CLOUD_RUN_TASK_INDEX:=0}
    CLOUD_RUN_TASK_ATTEMPT=${CLOUD_RUN_TASK_ATTEMPT:=0}
    
    echo "Starting Task #${CLOUD_RUN_TASK_INDEX}, Attempt #${CLOUD_RUN_TASK_ATTEMPT}..."
    
    # SLEEP_MS and FAIL_RATE should be a decimal
    # numbers. parse and format the input using
    # printf.
    #
    # printf validates the input since it
    # quits on invalid input, as shown here:
    #
    #   $: printf '%.1f' "abc"
    #   bash: printf: abc: invalid number
    #
    SLEEP_MS=$(printf '%.1f' "${SLEEP_MS:=0}")
    FAIL_RATE=$(printf '%.1f' "${FAIL_RATE:=0}")
    
    # Wait for a specific amount of time to simulate
    # performing some work
    SLEEP_SEC=$(echo print\("${SLEEP_MS}"/1000\) | perl)
    sleep "$SLEEP_SEC" # sleep accepts seconds, not milliseconds
    
    # Fail the task with a likelihood of $FAIL_RATE
    
    # Bash does not do floating point arithmetic. Use perl
    # to convert into integer and multiply by 100.
    FAIL_RATE_INT=$(echo print\("int(${FAIL_RATE:=0}*100"\)\) | perl)
    
    # Generate a random number between 0 and 100
    RAND=$(( RANDOM % 100))
    if (( RAND < FAIL_RATE_INT )); then
        echo "Task #${CLOUD_RUN_TASK_INDEX}, Attempt #${CLOUD_RUN_TASK_ATTEMPT} failed."
        exit 1
    else
        echo "Completed Task #${CLOUD_RUN_TASK_INDEX}."
    fi
    

    I job Cloud Run consentono agli utenti di specificare il numero di attività da eseguire. Questo codice campione mostra come utilizzare la variabile di ambiente CLOUD_RUN_TASK_INDEX integrata. Ogni attività rappresenta una copia in esecuzione del container. Tieni presente che le attività di solito vengono eseguite in parallelo. L'utilizzo di più attività è utile se ogni attività è in grado di elaborare autonomamente un sottoinsieme di dati.

    Ogni attività è a conoscenza del proprio indice, archiviato nella variabile di ambiente CLOUD_RUN_TASK_INDEX. La variabile di ambiente CLOUD_RUN_TASK_COUNT integrata contiene il numero di attività fornite al momento dell'esecuzione del job tramite il parametro --tasks.

    Il codice mostrato mostra anche come riprovare le attività, utilizzando la variabile di ambiente integrata CLOUD_RUN_TASK_ATTEMPT, che contiene il numero di volte in cui questa attività è stata ripetuta, a partire da 0 per il primo tentativo e incrementando di 1 per ogni nuovo tentativo successivo, fino a un massimo di --max-retries.

    Il codice consente inoltre di generare errori per testare i nuovi tentativi e generare log degli errori in modo da poterne vedere l'aspetto.

Il codice è completo e pronto per essere pacchettizzato in un container.

Crea il container dei job, invialo ad Artifact Registry ed esegui il deployment su Cloud Run

Importante: questa guida rapida presuppone che tu disponga dei ruoli di proprietario o editor nel progetto che utilizzi per la guida rapida. In caso contrario, consulta Autorizzazioni per il deployment di Cloud Run, Autorizzazioni Cloud Build e Autorizzazioni di Artifact Registry per le autorizzazioni necessarie.

Questa guida rapida utilizza il deployment dall'origine, che crea il container, lo carica in Artifact Registry ed esegue il deployment del job in Cloud Run:

gcloud run jobs deploy job-quickstart \
    --source . \
    --tasks 50 \
    --set-env-vars SLEEP_MS=10000 \
    --set-env-vars FAIL_RATE=0.1 \
    --max-retries 5 \
    --region REGION \
    --project=PROJECT_ID

dove PROJECT_ID è l'ID progetto e REGION è la tua regione, ad esempio us-central1. Tieni presente che puoi modificare i vari parametri con i valori che desideri utilizzare per i test. SLEEP_MS simula il lavoro e FAIL_RATE fa sì che una percentuale pari a X% delle attività non vada a buon fine in modo che tu possa sperimentare il parallelismo e riprovare le attività non riuscite.

Esegui un job in Cloud Run

Per eseguire il job appena creato:

gcloud run jobs execute job-quickstart --region REGION

Sostituisci REGION con la regione che hai utilizzato quando hai creato il job e ne hai eseguito il deployment, ad esempio us-central1.

Passaggi successivi

Per saperne di più sulla creazione di un container da un codice sorgente ed il push a un repository, consulta: