Créez une fonction Cloud Run qui utilise BigQuery pour envoyer une requête et renvoyer des résultats.

Ce tutoriel vous explique comment écrire une fonction Cloud Run HTTP qui envoie une requête à BigQuery.

Préparer l'application

  1. Clonez le dépôt de l'exemple d'application sur votre ordinateur local :

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

    Vous pouvez également télécharger l'exemple sous forme de fichier zip et l'extraire.

  2. Accédez au répertoire qui contient l'exemple de code :

    cd nodejs-docs-samples/functions/v2/helloBigQuery
    
  3. Consultez l'exemple de code. L'exemple envoie une requête pour les mots qui se produisent au moins 400 fois dans l'ensemble de données spécifié, puis renvoie le résultat.

    // 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}`);
      }
    });

Déployer la fonction

Pour déployer la fonction avec un déclencheur HTTP :

  1. Exécutez la commande suivante dans le répertoire contenant l'exemple de code :

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

    Remplacez :

    • FUNCTION par le nom de la fonction que vous déployez, par exemple my-bigquery-function. Vous pouvez omettre ce paramètre, mais dans ce cas le nom vous sera demandé.

    • FUNCTION_ENTRYPOINT par le point d'entrée de votre fonction dans votre code source. Il s'agit du code que Cloud Run exécute lorsque votre fonction s'exécute. La valeur de cette option doit être un nom de fonction ou un nom de classe complet qui existe dans votre code source. Le point d'entrée que vous devez spécifier pour la fonction d'exemple est helloBigQuery.

    • BASE_IMAGE par l'environnement d'image de base de votre fonction, par exemple nodejs22. Pour en savoir plus sur les images de base et les packages inclus dans chaque image, consultez Images de base des environnements d'exécution.

    • REGION par la région dans laquelle vous souhaitez déployer votre fonction. Google CloudPar exemple, europe-west1.

    Facultatif :

    • Si vous créez une fonction HTTP publique, par exemple un webhook, spécifiez l'option --allow-unauthenticated. Cette option attribue le rôle Demandeur IAM Cloud Run à l'identifiant spécial allUser. Vous pouvez utiliser IAM pour modifier ce paramètre ultérieurement après avoir créé le service.

Tester la fonction

  1. Une fois le déploiement de la fonction terminé, copiez la propriété uri.

  2. Accédez à cet URI dans votre navigateur.

    Une liste des mots correspondant aux critères de requête et le nombre d'occurrences de chaque mot dans l'ensemble de données cible doit s'afficher.