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 du compte de service Cloud Build

Vous ou votre administrateur devez accorder au compte de service Cloud Build le rôle IAM suivant.

Cliquez ici pour afficher les rôles requis pour le compte de service Cloud Build

Cloud Build utilise automatiquement le compte de service Compute Engine par défaut comme compte de service Cloud Build par défaut pour compiler votre code source et votre ressource Cloud Run, sauf si vous remplacez ce comportement. Pour que Cloud Build puisse créer vos sources, demandez à votre administrateur d'accorder le rôle Cloud Run Builder (roles/run.builder) au compte de service Compute Engine par défaut de votre projet:

  gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --role=roles/run.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 de compilateur Cloud Run 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 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 exécuté par Cloud Run lors de l'exécution de votre fonction. 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 avec la région Google Clouddans laquelle vous souhaitez déployer votre fonction. Par 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 afin d'é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.