Crea un job Python in Cloud Run

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

Prima di iniziare

  1. Installa Google Cloud CLI.

  2. Configura gcloud CLI per utilizzare la tua identità federata.

    Per saperne di più, consulta Accedi a gcloud CLI con la tua identità federata.

  3. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  4. Crea o seleziona un progetto Cloud de Confiance .

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per cui ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l'autorizzazione resourcemanager.projects.create. Scopri come concedere i ruoli.
    • Crea un progetto Cloud de Confiance :

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Cloud de Confiance che stai creando.

    • Seleziona il progetto Cloud de Confiance che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del progetto Cloud de Confiance .

  5. Se utilizzi un progetto esistente per questa guida, verifica di disporre delle autorizzazioni necessarie per completare la guida. Se hai creato un nuovo progetto, disponi già delle autorizzazioni necessarie.

  6. Verifica che la fatturazione sia attivata per il tuo progetto Cloud de Confiance .

  7. Abilita l'API Cloud Run Admin e le API Cloud Build, se non sono già abilitate:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    gcloud services enable run.googleapis.com cloudbuild.googleapis.com

    Dopo l'abilitazione dell'API Cloud Run Admin, viene creato automaticamente il account di servizio predefinito di Compute Engine.

  8. Esamina i prezzi di Cloud Run o stima i costi con il Calcolatore prezzi.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per completare questa guida rapida, chiedi all'amministratore di concederti i seguenti ruoli IAM:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Concedi al account di servizio Cloud Build l'accesso al tuo progetto

Cloud Build utilizza automaticamente il service account predefinito di Compute Engine come account di servizio Cloud Build predefinito per creare il codice sorgente e la risorsa Cloud Run, a meno che non esegui l'override di questo comportamento.

Affinché Cloud Build possa creare le tue origini, concedi al service account Cloud Build il ruolo Cloud Run Builder (roles/run.builder) nel tuo progetto:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS \
    --role=roles/run.builder

Sostituisci PROJECT_ID con l'ID progetto Cloud de Confiancee SERVICE_ACCOUNT_EMAIL_ADDRESS con l'indirizzo email del account di servizio Cloud Build. Se utilizzi il account di servizio predefinito di Compute Engine come account di servizio Cloud Build, utilizza il seguente formato per l'indirizzo email del account di servizio:

PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com

Sostituisci PROJECT_NUMBER con il tuo numero di progetto Cloud de Confiance.

Per istruzioni dettagliate su come trovare l'ID progetto e il numero di progetto, consulta Creazione e gestione dei progetti.

La concessione del ruolo Cloud Run Builder richiede un paio di minuti per la propagazione.

Scrittura del job di esempio

Per scrivere un job in Python:

  1. Crea una nuova directory denominata jobs e accedi alla directory:

    mkdir jobs
    cd jobs
    
  2. Crea un file main.py per il codice del job effettivo. Copia le seguenti righe di esempio:

    import json
    import os
    import random
    import sys
    import time
    
    # Retrieve Job-defined env vars
    TASK_INDEX = os.getenv("CLOUD_RUN_TASK_INDEX", 0)
    TASK_ATTEMPT = os.getenv("CLOUD_RUN_TASK_ATTEMPT", 0)
    # Retrieve User-defined env vars
    SLEEP_MS = os.getenv("SLEEP_MS", 0)
    FAIL_RATE = os.getenv("FAIL_RATE", 0)
    
    
    # Define main script
    def main(sleep_ms=0, fail_rate=0):
        """Program that simulates work using the sleep method and random failures.
    
        Args:
            sleep_ms: number of milliseconds to sleep
            fail_rate: rate of simulated errors
        """
        print(f"Starting Task #{TASK_INDEX}, Attempt #{TASK_ATTEMPT}...")
        # Simulate work by waiting for a specific amount of time
        time.sleep(float(sleep_ms) / 1000)  # Convert to seconds
    
        # Simulate errors
        random_failure(float(fail_rate))
    
        print(f"Completed Task #{TASK_INDEX}.")
    
    
    def random_failure(rate):
        """Throws an error based on fail rate
    
        Args:
            rate: a float between 0 and 1
        """
        if rate < 0 or rate > 1:
            # Return without retrying the Job Task
            print(
                f"Invalid FAIL_RATE env var value: {rate}. "
                + "Must be a float between 0 and 1 inclusive."
            )
            return
    
        random_failure = random.random()
        if random_failure < rate:
            raise Exception("Task failed.")
    
    
    # Start script
    if __name__ == "__main__":
        try:
            main(SLEEP_MS, FAIL_RATE)
        except Exception as err:
            message = (
                f"Task #{TASK_INDEX}, " + f"Attempt #{TASK_ATTEMPT} failed: {str(err)}"
            )
    
            print(json.dumps({"message": message, "severity": "ERROR"}))
            sys.exit(1)  # Retry Job Task by exiting the process

    I job Cloud Run consentono agli utenti di specificare il numero di attività che il job deve 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à vengono solitamente eseguite in parallelo. L'utilizzo di più attività è utile se ogni attività può elaborare in modo indipendente un sottoinsieme dei tuoi dati.

    Ogni attività è a conoscenza del proprio indice, archiviato nella variabile di ambiente CLOUD_RUN_TASK_INDEX. La variabile di ambiente integrata CLOUD_RUN_TASK_COUNT 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 l'attività è stata riprovata, a partire da 0 per il primo tentativo e incrementando di 1 per ogni tentativo successivo, fino a --max-retries.

    Il codice consente inoltre di generare errori per testare i nuovi tentativi e di generare log degli errori per vedere come appaiono.

  3. Crea un file di testo denominato Procfile senza estensione del file, contenente quanto segue:

    web: python3 main.py

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

Crea il container dei job, invialo ad Artifact Registry ed eseguine il deployment in Cloud Run

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 regione, ad esempio europe-west1. Tieni presente che puoi modificare i vari parametri in base ai valori che vuoi utilizzare per i test. SLEEP_MS simula il lavoro e FAIL_RATE causa l'errore del X% delle attività, in modo da poter 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 per creare ed eseguire il deployment del job, ad esempio europe-west1.

Esegui la pulizia

Per evitare che al tuo account Cloud de Confiance by S3NS vengano addebitati costi aggiuntivi, elimina tutte le risorse di cui hai eseguito il deployment con questa guida rapida.

Elimina il repository

Cloud Run addebita solo il tempo di esecuzione del job. Tuttavia, ti potrebbero comunque essere addebitati i costi di archiviazione dell'immagine container in Artifact Registry. Per eliminare i repository Artifact Registry, segui i passaggi descritti in Elimina i repository nella documentazione di Artifact Registry.

Elimina il job

I job Cloud Run comportano costi solo quando è in esecuzione un'attività del job. Per eliminare il job Cloud Run, segui uno di questi passaggi:

Console

Per eliminare un job:

  1. Nella console Cloud de Confiance by S3NS , vai a Cloud Run:

    Vai a Cloud Run

  2. Individua il job che vuoi eliminare nell'elenco dei job e fai clic sulla relativa casella di controllo per selezionarlo.

  3. Fai clic su Elimina. In questo modo vengono terminate tutte le esecuzioni dei job in corso e tutte le istanze di container in esecuzione.

gcloud

Per eliminare un job, esegui questo comando:

gcloud run jobs delete JOB_NAME

Sostituisci JOB_NAME con il nome del job.

Elimina il progetto di test

L'eliminazione del progetto Cloud de Confiance interrompe la fatturazione per tutte le risorse al suo interno. Per rilasciare tutte le risorse Cloud de Confiance by S3NS del progetto, segui questi passaggi:

    Elimina un progetto Cloud de Confiance :

    gcloud projects delete PROJECT_ID

Passaggi successivi

Per saperne di più sulla creazione di un container dall'origine del codice e su come eseguirne il push in un repository, consulta: