Buat fungsi Cloud Run yang menggunakan BigQuery untuk mengirimkan kueri dan menampilkan hasil.


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

Tujuan

Dalam tutorial ini, Anda akan:

  1. Siapkan aplikasi yang mengirimkan kueri ke BigQuery.
  2. Deploy fungsi dengan pemicu HTTP.
  3. Uji fungsi.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    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.

    Go to project selector

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

  6. Enable the Artifact Registry, Cloud Run Admin API, and Cloud Build APIs.

    Enable the APIs

  7. Siapkan lingkungan pengembangan Cloud Run di project Google Cloud Anda.
  8. 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.

  9. Peran yang diperlukan

    Untuk mendapatkan izin yang Anda perlukan untuk men-deploy layanan Cloud Run dari sumber, minta administrator Anda 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 Google Cloud API, 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 Cloud Build

    Anda atau administrator Anda harus memberikan peran IAM berikut kepada akun layanan Cloud Build.

    Klik untuk melihat peran yang diperlukan untuk akun layanan Cloud Build

    Cloud Build secara otomatis menggunakan akun layanan default Compute Engine sebagai akun layanan Cloud Build default untuk membangun kode sumber dan resource Cloud Run, kecuali jika Anda mengganti perilaku ini. Agar Cloud Build dapat membangun sumber Anda, minta administrator Anda untuk memberikan peran Cloud Run Builder (roles/run.builder) ke akun layanan default Compute Engine di project Anda:

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

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

    Pemberian peran builder Cloud Run ke akun layanan default Compute Engine memerlukan waktu beberapa menit untuk berlaku.

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 dan 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 fungsi

Untuk men-deploy fungsi dengan pemicu HTTP:

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

    gcloud 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 sepenuhnya, tetapi Anda akan diminta untuk memasukkan nama jika menghilangkannya.

    • FUNCTION_ENTRYPOINT dengan titik entri ke fungsi Anda dalam kode sumber. Ini adalah kode yang dieksekusi 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 Google Cloud region tempat Anda ingin men-deploy fungsi Anda. Contohnya, europe-west1

    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

Untuk menghindari biaya tambahan pada akun Google Cloud Anda, hapus semua resource yang Anda deploy dengan tutorial ini.

Menghapus project

Jika Anda membuat project baru untuk tutorial ini, hapus project tersebut. Jika Anda menggunakan project yang ada dan perlu mempertahankannya tanpa perubahan yang Anda tambahkan dalam tutorial ini, hapus resource yang Anda buat untuk tutorial.

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

Untuk menghapus project:

  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.

Menghapus resource tutorial

  1. Hapus layanan Cloud Run yang Anda deploy dalam tutorial ini. Layanan Cloud Run tidak menimbulkan biaya hingga menerima permintaan.

    Untuk menghapus layanan Cloud Run, jalankan perintah berikut:

    gcloud run services delete SERVICE-NAME

    Ganti SERVICE-NAME dengan nama layanan Anda.

    Anda juga dapat menghapus layanan Cloud Run dari Google Cloud console.

  2. Hapus konfigurasi region default gcloud yang Anda tambahkan selama penyiapan tutorial:

     gcloud config unset run/region
    
  3. Hapus konfigurasi project:

     gcloud config unset project