Erstellen Sie eine Cloud Run-Funktion, die BigQuery verwendet, um eine Abfrage zu senden und Ergebnisse zurückzugeben.

In dieser Anleitung wird gezeigt, wie eine Cloud Run-HTTP-Funktion geschrieben wird, die eine Abfrage an BigQuery sendet.

Ziele

In dieser Anleitung wird Folgendes beschrieben:

  1. Anwendung vorbereiten, die eine Abfrage an BigQuery sendet.
  2. Funktion mit einem HTTP-Trigger bereitstellen.
  3. Funktion testen.

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Verwenden Sie den Preisrechner.

Neuen Nutzern von Google Cloud steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweis

  1. Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch kein Konto haben Google Cloud, erstellen Sie ein Konto, um die Leistung unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Aktivieren Sie die Artifact Registry API, die Cloud Run Admin API und die Cloud Build API.

    Rollen, die zum Aktivieren von APIs erforderlich sind

    Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin), die die Berechtigung serviceusage.services.enable enthält. Informationen zum Zuweisen von Rollen.

    APIs aktivieren

  7. Richten Sie Ihre Cloud Run-Entwicklungsumgebung ein in Ihrem Google Cloud Projekt.
  8. Wenn Sie einer Domaineinschränkung zur Organisationsrichtlinie nicht eingeschränkter Aufrufe für Ihr Projekt unterliegen, müssen Sie auf Ihren bereitgestellten Dienst zugreifen, wie unter Private Dienste testen beschrieben.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Bereitstellen von Cloud Run-Diensten aus der Quelle benötigen:

Eine Liste der IAM-Rollen und -Berechtigungen im Zusammenhang mit Cloud Run finden Sie unter IAM-Rollen für Cloud Run und IAM-Berechtigungen für Cloud Run. Wenn Ihr Cloud Run-Dienst mit Google Cloud APIs wie Cloud-Clientbibliotheken verknüpft ist, lesen Sie die Konfigurationsanleitung für Dienstidentitäten. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Bereitstellungsberechtigungen und Zugriff verwalten.

Rollen für das Cloud Build-Dienstkonto

Sie oder Ihr Administrator müssen dem Cloud Build-Dienstkonto die folgende IAM-Rolle zuweisen.

Klicken Sie hier, um die erforderlichen Rollen für das Cloud Build-Dienstkonto aufzurufen

Cloud Build verwendet automatisch das Compute Engine-Standarddienstkonto als Standard-Cloud Build-Dienstkonto, um Ihren Quellcode und Ihre Cloud Run-Ressource zu erstellen, es sei denn, Sie überschreiben dieses Verhalten. Damit Cloud Build Ihre Quellen erstellen kann, bitten Sie Ihren Administrator, dem Compute Engine-Standarddienstkonto in Ihrem Projekt die Rolle Cloud Run-Builder (roles/run.builder) zuzuweisen:

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

Ersetzen Sie PROJECT_NUMBER durch Ihre Google Cloud Projektnummer und PROJECT_ID durch Ihre Google Cloud Projekt-ID. Eine detaillierte Anleitung zum Ermitteln der Projekt-ID und der Projektnummer, siehe Projekte erstellen und verwalten.

Es dauert einige Minuten, bis die Zuweisung der Rolle „Cloud Run-Builder“ für das Compute Engine-Standarddienstkonto übertragen wurde.

Anwendung vorbereiten

  1. Klonen Sie das Beispielanwendungs-Repository auf Ihren lokalen Rechner:

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

    Sie können auch das Beispiel als ZIP-Datei herunterladen und entpacken.

  2. Wechseln Sie zu dem Verzeichnis, das den Beispielcode enthält:

    cd nodejs-docs-samples/functions/v2/helloBigQuery
    
  3. Sehen Sie sich den Beispielcode an: Das Beispiel sendet eine Abfrage für Wörter, die im angegebenen Dataset mindestens 400 Mal vorkommen, und gibt das Ergebnis zurück.

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

Funktion bereitstellen

So stellen Sie die Funktion mit einem HTTP-Trigger bereit:

  1. Führen Sie den folgenden Befehl in dem Verzeichnis aus, das den Beispielcode enthält:

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

    Ersetzen Sie:

    • FUNCTION durch den Namen der Funktion, die Sie bereitstellen, z. B. my-bigquery-function. Sie können diesen Parameter auch ganz weglassen. In diesem Fall werden Sie jedoch aufgefordert, den Namen anzugeben.

    • FUNCTION_ENTRYPOINT durch den Einstiegspunkt zur Funktion in Ihrem Quellcode. Dies ist der Code, der von Cloud Run ausgeführt wird, wenn Ihre Funktion ausgeführt wird. Der Wert dieses Flags muss ein Funktionsname oder ein voll qualifizierter Klassenname sein, der in Ihrem Quellcode vorhanden ist. Der Einstiegspunkt, den Sie für die Beispielfunktion angeben müssen, ist helloBigQuery.

    • BASE_IMAGE durch die Basis-Image-Umgebung für Ihre Funktion, z. B. nodejs24. Weitere Informationen zu Basis Images und den in den einzelnen Images enthaltenen Paketen finden Sie unter Basis-Images für Laufzeiten.

    • REGION durch die Google Cloud Region, in der Sie die Funktion bereitstellen möchten. Beispiel: europe-west1.

    Optional:

    • Wenn Sie eine öffentliche HTTP-Funktion erstellen, z. B. einen Webhook, geben Sie das Flag --allow-unauthenticated an. Mit diesem Flag wird der Sonderkennzeichnung allUser die Rolle „IAM-Invoker“ für Cloud Run zugewiesen. Sie können die Einstellung mit IAM bearbeiten , nachdem Sie den Dienst erstellt haben.

Funktion testen

  1. Kopieren Sie nach der Bereitstellung der Funktion das Attribut uri.

  2. Rufen Sie diesen URI in Ihrem Browser auf.

    Sie sollten eine Liste der Wörter sehen, die den Abfragekriterien entsprechen und wie oft jedes Wort im Ziel-Dataset angezeigt wird.

Bereinigen

Löschen Sie alle Ressourcen, die Sie mit dieser Anleitung bereitgestellt haben, um zusätzliche Kosten für Ihr Google Cloud Konto zu vermeiden.

Projekt löschen

Wenn Sie ein neues Projekt für diese Anleitung erstellt haben, löschen Sie das Projekt. Wenn Sie ein vorhandenes Projekt verwendet haben und es ohne die in dieser Anleitung hinzugefügten Änderungen beibehalten möchten, löschen Sie die für die Anleitung erstellten Ressourcen.

Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.

So löschen Sie das Projekt:

  1. Wechseln Sie in der Google Cloud -Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Herunterfahren), um das Projekt zu löschen.

Anleitungsressourcen löschen

  1. Löschen Sie den Cloud Run-Dienst, den Sie in dieser Anleitung bereitgestellt haben. Für Cloud Run-Dienste fallen erst Kosten an, wenn sie Anfragen erhalten.

    Führen Sie den folgenden Befehl aus, um Ihren Cloud Run-Dienst zu löschen:

    gcloud run services delete SERVICE-NAME

    Ersetzen Sie SERVICE-NAME durch den Namen Ihres Dienstes.

    Sie können Cloud Run-Dienste auch über die Google Cloud Console löschen.

  2. Entfernen Sie die Konfiguration der Standardregion gcloud, die Sie während der Einrichtung für die Anleitung hinzugefügt haben:

     gcloud config unset run/region
    
  3. Entfernen Sie die Projektkonfiguration:

     gcloud config unset project