Créer une fonction qui renvoie des résultats BigQuery

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

Avant de commencer

  1. Assurez-vous d'avoir configuré un nouveau projet pour Cloud Run, comme décrit sur la page de configuration.

  2. Activez les API Artifact Registry, Cloud Build et Cloud Run Admin:

     gcloud services enable artifactregistry.googleapis.com \
         cloudbuild.googleapis.com \
         run.googleapis.com
    
  3. Si vous êtes soumis à une règle d'administration de restriction de domaine limitant les appels non authentifiés pour votre projet, vous devez accéder au service déployé comme décrit dans la section Tester les services privés.

Rôles requis

Pour obtenir les autorisations nécessaires pour déployer des services Cloud Run à partir de la source, demandez à votre administrateur de vous accorder les rôles IAM suivants:

Pour obtenir la liste des rôles et des autorisations IAM associés à Cloud Run, consultez les sections Rôles IAM Cloud Run et Autorisations IAM Cloud Run. Si votre service Cloud Run communique avec des APIGoogle Cloud , telles que des bibliothèques clientes Cloud, consultez le guide de configuration de l'identité du service. Pour en savoir plus sur l'attribution de rôles, consultez les pages Autorisations de déploiement et Gérer les accès.

Rôles pour le compte de service

  • Pour que Cloud Build puisse créer vos sources, attribuez le rôle Compte de service Cloud Build au compte de service Compute Engine par défaut en exécutant la commande suivante :

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

    Remplacez PROJECT_NUMBER par votre numéro de projet Google Cloudet PROJECT_ID par votre ID de projet Google Cloud. Pour obtenir des instructions détaillées sur la recherche de votre ID et de votre numéro de projet, consultez la section Créer et gérer des projets.

    L'propagation de l'attribution du rôle "Compte de service Cloud Build" au compte de service Compute Engine par défaut prend quelques minutes.

  • 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 beta 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 l'exemple de fonction 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 la section Images de base des environnements d'exécution.

      • REGION par la région Google Clouddans laquelle vous souhaitez déployer votre fonction. Exemple : us-central1.

      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.

    Effectuer un nettoyage

    Bien que Cloud Run ne facture pas lorsque le service n'est pas utilisé, il se peut que des frais vous soient facturés pour le stockage de l'image de conteneur dans Artifact Registry. Vous pouvez supprimer votre image de conteneur ou votre projet Google Cloud pour éviter que des frais ne vous soient facturés. La suppression de votre projet Google Cloud arrête la facturation de toutes les ressources utilisées dans ce projet.

    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.