Crea una funzione che restituisce i risultati di BigQuery

Questo tutorial mostra come scrivere una funzione Cloud Run HTTP che invia una query a BigQuery.

Prima di iniziare

  1. Assicurati di aver configurato un nuovo progetto per Cloud Run come descritto nella pagina di configurazione.

  2. Abilita le API Artifact Registry, Cloud Build e Cloud Run Admin:

     gcloud services enable artifactregistry.googleapis.com \
         cloudbuild.googleapis.com \
         run.googleapis.com
    
  3. Se il tuo progetto è soggetto a un criterio dell'organizzazione che limita le invocazioni non autenticate, dovrai accedere al servizio di cui è stato eseguito il deployment come descritto in Testare i servizi privati.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per eseguire il deployment dei servizi Cloud Run dall'origine, chiedi all'amministratore di concederti i seguenti ruoli IAM:

Per un elenco dei ruoli e delle autorizzazioni IAM associati a Cloud Run, consulta Ruoli IAM di Cloud Run e Autorizzazioni IAM di Cloud Run. Se il servizio Cloud Run interagisce con le API Google Cloud, come le librerie client di Cloud, consulta la guida alla configurazione dell'identità del servizio. Per ulteriori informazioni sulla concessione dei ruoli, consulta le autorizzazioni di deployment e gestisci l'accesso.

Ruoli per l'account di servizio

  • Affinché Cloud Build possa compilare le tue origini, concedi il ruolo Account di servizio Cloud Build all'account di servizio predefinito di Compute Engine eseguendo quanto segue:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/cloudbuild.builds.builder

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

    La propagazione del ruolo dell'account di servizio Cloud Build all'account di servizio predefinito di Compute Engine richiede un paio di minuti.

  • Prepara l'applicazione

    1. Clona il repository dell'applicazione di esempio sulla tua macchina locale:

      git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
      

      In alternativa, scarica il sample come file ZIP e ricavane l'estrazione.

    2. Passa alla directory che contiene il codice di esempio delle funzioni Cloud Run:

      cd nodejs-docs-samples/functions/v2/helloBigQuery
      
    3. Dai un'occhiata al codice campione. Il sample invia una query per le parole che si verificano almeno 400 volte nel set di dati specificato e restituisce il risultato.

      // Import the Google Cloud client library
      const {BigQuery} = require('@google-cloud/bigquery');
      const bigquery = new BigQuery();
      
      const functions = require('@google-cloud/functions-framework');
      
      /**
       * HTTP Cloud Function that returns BigQuery query results
       *
       * @param {Object} req Cloud Function request context.
       * @param {Object} res Cloud Function response context.
       */
      functions.http('helloBigQuery', async (req, res) => {
        // Define the SQL query
        // Queries the public Shakespeare dataset using named query parameter
        const sqlQuery = `
            SELECT word, word_count
                  FROM \`bigquery-public-data.samples.shakespeare\`
                  WHERE corpus = @corpus
                  AND word_count >= @min_word_count
                  ORDER BY word_count DESC`;
      
        const options = {
          query: sqlQuery,
          // Location must match that of the dataset(s) referenced in the query.
          location: 'US',
          params: {corpus: 'romeoandjuliet', min_word_count: 400},
        };
      
        // Execute the query
        try {
          const [rows] = await bigquery.query(options);
          // Send the results
          res.status(200).send(rows);
        } catch (err) {
          console.error(err);
          res.status(500).send(`Error querying BigQuery: ${err}`);
        }
      });

    esegui il deployment della funzione

    Per il deployment della funzione con un trigger HTTP:

    1. Esegui il seguente comando nella directory che contiene il codice campione:

      gcloud beta run deploy FUNCTION \
         --source . \
         --function FUNCTION_ENTRYPOINT \
         --base-image BASE_IMAGE \
         --region REGION \
         --allow-unauthenticated

      Sostituisci:

      • FUNCTION con il nome della funzione che stai dispiegando, ad esempio my-bigquery-function. Puoi omettere completamente questo parametro, ma ti verrà chiesto il nome se lo ometti.

      • FUNCTION_ENTRYPOINT con il punto di ingresso della funzione nel codice sorgente. Questo è il codice che Cloud Run esegue quando viene eseguita la funzione. Il valore di questo flag deve essere un nome di funzione o un nome di classe completamente qualificato esistente nel codice sorgente. L'entry point da specificare per la funzione di esempio è helloBigQuery.

      • BASE_IMAGE con l'ambiente dell'immagine di base per la funzione, ad esempio nodejs22. Per informazioni dettagliate sulle immagini di base e sui pacchetti inclusi in ogni immagine, consulta Immagini di base dei runtime.

      • REGION con la regione Google Cloud in cui vuoi eseguire il deployment della funzione. Ad esempio: us-central1.

      Facoltativamente,

      • Se stai creando una funzione HTTP pubblica, ad esempio un webhook, specifica il flag --allow-unauthenticated. Questo flag assegna il ruolo Invoker IAM di Cloud Run all'identificatore specialeallUser. Puoi utilizzare IAM per modificare questa impostazione in un secondo momento dopo aver creato il servizio.

    testa la funzione

    1. Al termine del deployment della funzione, copia la proprietà uri.

    2. Visita questo URI nel browser.

      Dovresti vedere un elenco delle parole che corrispondono ai criteri di query e quante volte ciascuna parola compare nel set di dati di destinazione.

    Esegui la pulizia

    Sebbene non siano previsti addebiti per Cloud Run quando il servizio non è in uso, ti potrebbero comunque essere addebitati i costi di archiviazione dell'immagine container in Artifact Registry. Per evitare addebiti, puoi eliminare l'immagine del contenitore o il progetto Google Cloud. L'eliminazione del progetto Google Cloud interrompe la fatturazione per tutte le risorse utilizzate all'interno del progetto.

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.