Membuat fungsi yang menampilkan hasil BigQuery

Tutorial ini menunjukkan cara menulis fungsi Cloud Run HTTP yang mengirimkan kueri ke BigQuery.

Sebelum memulai

  1. Pastikan Anda telah menyiapkan project baru untuk Cloud Run seperti yang dijelaskan di halaman setup.

  2. Aktifkan Artifact Registry, Cloud Build, dan Cloud Run Admin API API:

     gcloud services enable artifactregistry.googleapis.com \
         cloudbuild.googleapis.com \
         run.googleapis.com
    
  3. Jika Anda dikenai kebijakan organisasi pembatasan domain yang membatasi pemanggilan yang tidak diautentikasi untuk project, Anda perlu mengakses layanan yang di-deploy seperti yang dijelaskan di bagian Menguji layanan pribadi.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan guna men-deploy layanan Cloud Run dari sumber, minta administrator untuk memberi Anda peran IAM berikut:

Untuk mengetahui daftar peran dan izin IAM yang terkait dengan Cloud Run, lihat peran IAM Cloud Run dan izin IAM Cloud Run. Jika layanan Cloud Run Anda berinteraksi dengan APIGoogle Cloud , seperti Library Klien Cloud, lihat panduan konfigurasi identitas layanan. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat izin deployment dan mengelola akses.

Peran untuk akun layanan

  • Agar Cloud Build dapat mem-build sumber Anda, berikan peran Cloud Build Service Account ke akun layanan default Compute Engine dengan menjalankan perintah berikut:

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

    Ganti PROJECT_NUMBER dengan nomor project Google Cloud, dan PROJECT_ID dengan project ID Google Cloud. Untuk mengetahui petunjuk mendetail tentang cara menemukan project ID dan nomor project, lihat Membuat dan mengelola project.

    Pemberian peran Akun Layanan Cloud Build ke akun layanan default Compute Engine memerlukan waktu beberapa menit untuk disebarkan.

  • Menyiapkan aplikasi

    1. Buat clone repositori aplikasi contoh ke komputer lokal Anda:

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

      Atau, download contoh sebagai file ZIP, lalu ekstrak.

    2. Ubah ke direktori yang berisi kode contoh:

      cd nodejs-docs-samples/functions/v2/helloBigQuery
      
    3. Lihat kode contoh: Sampel mengirimkan kueri untuk kata yang terjadi setidaknya 400 kali dalam set data yang ditentukan, dan menampilkan hasilnya.

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

    Men-deploy cloud function

    Untuk men-deploy fungsi dengan pemicu HTTP:

    1. Jalankan perintah berikut di direktori yang berisi kode contoh:

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

      Ganti:

      • FUNCTION dengan nama fungsi yang Anda deploy, misalnya my-bigquery-function. Anda dapat menghilangkan parameter ini secara keseluruhan, tetapi Anda akan diminta untuk memasukkan nama jika mengabaikannya.

      • FUNCTION_ENTRYPOINT dengan titik entri ke fungsi Anda dalam kode sumber. Ini adalah kode yang dijalankan Cloud Run saat fungsi Anda berjalan. Nilai flag ini harus berupa nama fungsi atau nama class yang sepenuhnya memenuhi syarat yang ada dalam kode sumber Anda. Titik entri yang harus Anda tentukan untuk fungsi contoh adalah helloBigQuery.

      • BASE_IMAGE dengan lingkungan image dasar untuk fungsi Anda, misalnya, nodejs22. Untuk mengetahui detail tentang image dasar dan paket yang disertakan dalam setiap image, lihat Image dasar runtime.

      • REGION dengan region Google Cloudtempat Anda ingin men-deploy fungsi. Misalnya, us-central1.

      Opsional:

      • Jika Anda membuat fungsi HTTP publik, misalnya webhook, tentukan tanda --allow-unauthenticated. Flag ini menetapkan peran Cloud Run IAM Invoker ke ID khusus allUser. Anda dapat menggunakan IAM untuk mengedit setelan ini nanti setelah membuat layanan.

    Menguji fungsi

    1. Setelah fungsi selesai di-deploy, salin properti uri.

    2. Kunjungi URI ini di browser Anda.

      Anda akan melihat daftar kata yang cocok dengan kriteria kueri, dan berapa kali setiap kata muncul di set data target.

    Pembersihan

    Meskipun Cloud Run tidak mengenakan biaya saat layanannya tidak digunakan, Anda mungkin tetap dikenai biaya atas penyimpanan image container di Artifact Registry. Anda dapat menghapus image container atau menghapus project Google Cloud untuk menghindari tagihan. Menghapus project Google Cloud akan menghentikan penagihan untuk semua resource yang digunakan dalam project tersebut.

    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.