Crea e 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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Make sure that you have the following role or roles on the project: Cloud Run Admin, Cloud Run Source Developer, Logs Viewer

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      Vai a IAM
    2. Seleziona il progetto.
    3. Fai clic su Concedi l'accesso.
    4. Nel campo Nuove entità, inserisci il tuo identificatore utente. In genere si tratta dell'indirizzo email di un Account Google.

    5. Nell'elenco Seleziona un ruolo, seleziona un ruolo.
    6. Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ogni ruolo aggiuntivo.
    7. Fai clic su Salva.
  5. Install the Google Cloud CLI.

  6. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.

  7. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Make sure that you have the following role or roles on the project: Cloud Run Admin, Cloud Run Source Developer, Logs Viewer

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      Vai a IAM
    2. Seleziona il progetto.
    3. Fai clic su Concedi l'accesso.
    4. Nel campo Nuove entità, inserisci il tuo identificatore utente. In genere si tratta dell'indirizzo email di un Account Google.

    5. Nell'elenco Seleziona un ruolo, seleziona un ruolo.
    6. Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ogni ruolo aggiuntivo.
    7. Fai clic su Salva.
  11. Install the Google Cloud CLI.

  12. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.

  13. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  14. Abilita l'API Cloud Run Admin e l'API Cloud Build:

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

    Dopo aver abilitato l'API Cloud Run Admin, viene creato automaticamente l'account di servizio predefinito di Compute Engine.

  15. Assicurati di disporre del ruolo Utente account di servizio concesso per l'identità di servizio. Per impostazione predefinita, l'identità del servizio è l'account di servizio Compute Engine predefinito.

    Concedere i ruoli

    Per concedere l'accesso alla risorsa dell'identità di servizio, utilizza il comando gcloud iam service-accounts add-iam-policy-binding, sostituendo le variabili evidenziate con i valori appropriati:

          gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_EMAIL \           --member="PRINCIPAL" \           --role="roles/iam.serviceAccountUser"       

    Sostituisci quanto segue:

    • SERVICE_ACCOUNT_EMAIL: l'indirizzo email del account di servizio che utilizzi come identità del servizio, ad esempio:
      • Il account di servizio predefinito di Compute Engine: PROJECT_NUMBER[email protected]
      • Un account di servizio che hai creato: SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
    • PRINCIPAL: l'identificatore utente. In genere si tratta dell'indirizzo email di un Account Google.
  16. Concedi al account di servizio Cloud Build il seguente ruolo IAM.

    Fai clic per visualizzare i ruoli richiesti per il account di servizio Cloud Build

    Cloud Build utilizza automaticamente l'account di servizio predefinito di Compute Engine come account di servizio Cloud Build predefinito per creare il codice sorgente e la risorsa Cloud Run, a meno che tu non esegua l'override di questo comportamento. Affinché Cloud Build possa creare le tue origini, chiedi all'amministratore di concedere Cloud Run Builder (roles/run.builder) all'account di servizio predefinito di Compute Engine nel tuo progetto:

      gcloud projects add-iam-policy-binding PROJECT_ID \       --member=serviceAccount:PROJECT_NUMBER[email protected] \       --role=roles/run.builder   

    Sostituisci PROJECT_NUMBER con il numero del tuo progetto Google Cloude PROJECT_ID con l'ID progetto Google Cloud. Per istruzioni dettagliate su come trovare l'ID progetto e il numero di progetto, vedi Creazione e gestione dei progetti.

    La concessione del ruolo Cloud Run Builder all'account di servizio Compute Engine predefinito richiede un paio di minuti per la propagazione.

  17. 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 lavoro effettivo. Copia le seguenti righe di esempio al suo interno:

      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 contenitore. Tieni presente che le attività vengono in genere eseguite in parallelo. L'utilizzo di più attività è utile se ogni attività può elaborare in modo indipendente un sottoinsieme dei tuoi dati.

      Ogni attività è consapevole 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 illustra anche come riprovare le attività utilizzando la variabile di ambiente CLOUD_RUN_TASK_ATTEMPT integrata, che contiene il numero di tentativi di ripetizione di questa attività, a partire da 0 per il primo tentativo e incrementando di 1 per ogni tentativo successivo, fino a --max-retries.

      Il codice consente anche di generare errori per testare i nuovi tentativi e generare log degli errori in modo da poter vedere come appaiono.

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

      web: python3 main.py

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

    Crea il container dei job, invialo ad Artifact Registry ed esegui il deployment in 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 il ruolo Sviluppatore origine Cloud Run per le autorizzazioni necessarie per il deployment di una risorsa Cloud Run dall'origine.

    Questa guida rapida utilizza il deployment dal codice sorgente, che crea il container, lo carica in Artifact Registry ed esegue il deployment del job su 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 con i 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 il nuovo tentativo di esecuzione delle attività non riuscite.

    Esegui un job in Cloud Run

    Per eseguire il job che hai appena creato:

    gcloud run jobs execute job-quickstart --region REGION

    Sostituisci REGION con la regione che hai utilizzato quando hai creato e sottoposto a deployment il job, ad esempio europe-west1.

    Passaggi successivi

    Per saperne di più sulla creazione di un container dal codice sorgente e sul push in un repository, consulta: