Costruisci e crea un job Node.js 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 dell'immagine container in Artifact Registry, quindi 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  4. Installa Google Cloud CLI.
  5. Per initialize gcloud CLI, esegui questo comando:

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

    Go to project selector

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

  8. Installa Google Cloud CLI.
  9. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  10. Individua l'account di servizio predefinito di Compute Engine. Per impostazione predefinita, l'account di servizio predefinito di Compute Engine viene creato automaticamente con il seguente formato email:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    Sostituisci PROJECT_NUMBER con il tuo Google Cloud del progetto. Puoi trovare il numero del tuo progetto nella Ti diamo il benvenuto della console Google Cloud o eseguendo questo comando:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

    Per gli ambienti di produzione, consigliamo vivamente creazione di un nuovo account di servizio e la concessione di uno o più ruoli IAM contenenti autorizzazioni minime richieste e seguire il principio del privilegio minimo.

  11. Affinché Cloud Build sia in grado di creare le tue origini, concedi il Account di servizio Cloud Build all'account di servizio predefinito di Compute Engine eseguendo questo comando:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/cloudbuild.builds.builder

Scrittura del job di esempio

Per scrivere un job in Node.js:

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

    mkdir jobs
    cd jobs
    
  2. Crea un file package.json con il seguente contenuto:

    {
        "name": "jobs",
        "version": "1.0.0",
        "description": "Node.js sample for Cloud Run jobs",
        "main": "index.js",
        "scripts": {
            "start": "node index.js"
        },
        "engines": {
            "node": ">=16.0.0"
        },
        "author": "Google LLC",
        "license": "Apache-2.0"
    }
    
  3. Nella stessa directory, crea un file index.js per il codice del job effettivo. Copia le seguenti linee di esempio:

    // Retrieve Job-defined env vars
    const {CLOUD_RUN_TASK_INDEX = 0, CLOUD_RUN_TASK_ATTEMPT = 0} = process.env;
    // Retrieve User-defined env vars
    const {SLEEP_MS, FAIL_RATE} = process.env;
    
    // Define main script
    const main = async () => {
      console.log(
        `Starting Task #${CLOUD_RUN_TASK_INDEX}, Attempt #${CLOUD_RUN_TASK_ATTEMPT}...`
      );
      // Simulate work
      if (SLEEP_MS) {
        await sleep(SLEEP_MS);
      }
      // Simulate errors
      if (FAIL_RATE) {
        try {
          randomFailure(FAIL_RATE);
        } catch (err) {
          err.message = `Task #${CLOUD_RUN_TASK_INDEX}, Attempt #${CLOUD_RUN_TASK_ATTEMPT} failed.\n\n${err.message}`;
          throw err;
        }
      }
      console.log(`Completed Task #${CLOUD_RUN_TASK_INDEX}.`);
    };
    
    // Wait for a specific amount of time
    const sleep = ms => {
      return new Promise(resolve => setTimeout(resolve, ms));
    };
    
    // Throw an error based on fail rate
    const randomFailure = rate => {
      rate = parseFloat(rate);
      if (!rate || rate < 0 || rate > 1) {
        console.warn(
          `Invalid FAIL_RATE env var value: ${rate}. Must be a float between 0 and 1 inclusive.`
        );
        return;
      }
    
      const randomFailure = Math.random();
      if (randomFailure < rate) {
        throw new Error('Task failed.');
      }
    };
    
    // Start script
    main().catch(err => {
      console.error(err);
      process.exit(1); // Retry Job Task by exiting the process
    });

    I job Cloud Run consentono agli utenti di specificare il numero di attività associate al job da eseguire. Questo codice campione mostra come utilizzare l'CLOUD_RUN_TASK_INDEX integrata variabile di ambiente. Ogni attività rappresenta una copia in esecuzione del container. Tieni presente che di solito le attività vengono eseguite in parallelo. Utilizzare più attività è utile se ogni attività può elaborare in modo indipendente un sottoinsieme dei tuoi dati.

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

    Il codice mostrato mostra anche come riprovare le attività, utilizzando lo strumento CLOUD_RUN_TASK_ATTEMPT variabile di ambiente, che contiene il numero di numero di nuovi tentativi per questa attività, a partire da 0 per il primo tentativo e con incrementi di 1 per ogni tentativo successivo, fino a un massimo di --max-retries.

    Il codice consente anche di generare errori per testare i nuovi tentativi. e generare log di errore per vedere come si presentano.

  4. Crea un Procfile con i seguenti contenuti:

    # Define the application's entrypoint to override default, `npm start`
    # https://github.com/GoogleCloudPlatform/buildpacks/issues/160
    web: node index.js
    

Il codice è completo e pronto per essere pacchettizzato 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 stai utilizzando per la guida rapida. In caso contrario, fai riferimento al ruolo Sviluppatore origine Cloud Run per le autorizzazioni richieste per il deployment di una risorsa Cloud Run dall'origine.

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 è il tuo regione, ad esempio us-central1. Tieni presente che puoi modificare i vari parametri ai valori che vuoi utilizzare per i tuoi test. SLEEP_MS simula il lavoro e FAIL_RATE fa sì che X% delle attività non vada a buon fine, quindi possono sperimentare il parallelismo e ritentare 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 utilizzata al momento della creazione e del deployment il job, ad esempio us-central1.

Passaggi successivi

Per saperne di più sulla creazione di un container dall'origine di codice e sul push a un repository, consulta: