Buka konsol

Memulai: menulis dan menerapkan fungsi pertama Anda

Untuk memulai Cloud Functions, coba pelajari tutorial ini, yang dimulai dengan menyiapkan hal-hal yang diperlukan, kemudian memproses pembuatan dan penerapan 2 fungsi yang terkait:

  • addMessage() mengekspos URL yang menerima nilai teks dan menuliskannya ke Realtime Database.
  • makeUppercase() terpicu saat terjadi penulisan di Realtime Database dan mengubah teks menjadi huruf kapital.

Kami telah memilih Realtime Database dan fungsi JavaScript yang dipicu HTTP untuk contoh ini, tetapi Anda memiliki banyak opsi untuk memicu fungsi. Baca panduan cara kerja untuk pemicu background lainnya, seperti peristiwa autentikasi dan peristiwa analisis. Selain itu, jika Anda ingin alternatif yang diketik untuk JavaScript, baca bagian Menulis Fungsi dengan TypeScript.

Bagian tutorial berikut ini menjelaskan langkah-langkah yang diperlukan untuk membangun dan menerapkan sampel. Jika Anda lebih memilih untuk menjalankan kode dan memeriksanya, langsung saja lihat bagian Tinjau kode sampel lengkap.

Membuat project Firebase

  1. Di Firebase console, klik Tambahkan project, lalu pilih atau masukkan Nama project.

    Jika sudah memiliki project Google Cloud Platform (GCP), Anda dapat memilih project tersebut dari menu drop-down Nama project. Jika tidak, masukkan Nama project baru.

  2. (Opsional) Edit Project ID.

    Firebase menetapkan ID unik ke project Firebase Anda secara otomatis. Buka bagian Memahami Project Firebase untuk mempelajari cara Firebase menggunakan project ID.

  3. Ikuti langkah-langkah penyiapan selanjutnya di Firebase console, lalu klik Buat project (atau Tambahkan Firebase, jika Anda menggunakan project Google yang sudah ada).

Firebase menyediakan resource untuk project Firebase Anda secara otomatis. Setelah selesai, Anda akan dibawa ke halaman ringkasan untuk project Firebase Anda di Firebase console.

Menyiapkan Node.js dan Firebase CLI

Anda memerlukan environment Node.js untuk menulis fungsi, dan Anda akan membutuhkan Firebase CLI (yang juga membutuhkan Node.js dan npm) untuk menerapkan fungsi ke runtime Cloud Functions. Dari seluruh versi Node.js yang didukung dan tersedia untuk Cloud Functions, Node.js 8 sangat disarankan untuk permulaan. Node Version Manager direkomendasikan untuk menginstal Node.js dan npm.

Setelah menginstal Node.js dan npm, instal Firebase CLI melalui npm:

npm install -g firebase-tools

Tindakan ini akan menginstal perintah firebase yang tersedia secara global. Jika perintah gagal, Anda mungkin perlu mengubah izin npm. Untuk melakukan update ke versi firebase-tools terbaru, jalankan kembali perintah yang sama.

Menginisialisasi Firebase SDK untuk Cloud Functions

Saat menginisialisasi Firebase SDK untuk Cloud Functions, Anda membuat project kosong yang berisi dependensi dan beberapa kode sampel minimal, lalu memilih TypeScript atau JavaScript untuk membuat fungsi.

Untuk menginisialisasi project Anda:

  1. Jalankan firebase login untuk login melalui browser dan mengautentikasi fitur firebase.
  2. Buka direktori project Firebase Anda.
  3. Jalankan firebase init functions. Fitur ini memberi Anda pilihan untuk menginstal dependensi dengan npm. Anda bisa menolaknya jika ingin mengelola dependensi dengan cara lain.
  4. Fitur ini memberi Anda 2 opsi untuk dukungan bahasa:

    Untuk tutorial ini, pilih JavaScript.

Setelah perintah ini berhasil diselesaikan, struktur project Anda akan terlihat seperti ini:

myproject
 +- .firebaserc    # Hidden file that helps you quickly switch between
 |                 # projects with `firebase use`
 |
 +- firebase.json  # Describes properties for your project
 |
 +- functions/     # Directory containing all your functions code
      |
      +- .eslintrc.json  # Optional file containing rules for JavaScript linting.
      |
      +- package.json  # npm package file describing your Cloud Functions code
      |
      +- index.js      # main source file for your Cloud Functions code
      |
      +- node_modules/ # directory where your dependencies (declared in
                       # package.json) are installed

File package.json yang dibuat selama inisialisasi berisi kunci penting: "engines": {"node": "8"}. Ini menentukan versi node Anda untuk menulis dan menerapkan fungsi. Anda dapat memilih versi yang didukung lainnya, tetapi Node.js 8 (default) direkomendasikan untuk tutorial ini.

Mengimpor modul yang diperlukan dan menginisialisasi aplikasi

Setelah menyelesaikan penyiapan tugas, Anda dapat membuka direktori sumber dan mulai menambahkan kode seperti yang diuraikan di bagian berikut. Untuk contoh ini, project Anda harus mengimpor Cloud Functions dan modul Admin SDK menggunakan pernyataan Node require. Tambahkan baris berikut ke file index.js:

// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');
admin.initializeApp();

Baris ini memuat modul firebase-functions dan firebase-admin, lalu menginisialisasi instance aplikasi admin, tempat Anda bisa mengubah Realtime Database. Dukungan Admin SDK seperti untuk FCM, Authentication, dan Firebase Realtime Database, menyediakan cara andal untuk mengintegrasikan Firebase menggunakan Cloud Functions.

Firebase CLI menginstal Firebase dan modul Node Firebase SDK untuk Cloud Functions secara otomatis saat Anda menginisialisasi project. Untuk menambahkan library pihak ketiga ke project, Anda dapat mengubah package.json dan menjalankan npm install. Untuk mengetahui informasi lebih lanjut, baca bagian Menangani Dependensi.

Menambahkan fungsi addMessage()

Untuk fungsi addMessage(), tambahkan baris berikut ke index.js:

// Take the text parameter passed to this HTTP endpoint and insert it into the
// Realtime Database under the path /messages/:pushId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into the Realtime Database using the Firebase Admin SDK.
  const snapshot = await admin.database().ref('/messages').push({original: original});
  // Redirect with 303 SEE OTHER to the URL of the pushed object in the Firebase console.
  res.redirect(303, snapshot.ref.toString());
});

Fungsi addMessage() adalah endpoint HTTP. Setiap permintaan yang dibuat ke endpoint akan membuat objek Request dan Response ExpressJS-style diteruskan ke callback onRequest().

Fungsi HTTP bersifat sinkron (mirip dengan fungsi callable), sehingga Anda harus mengirim respons secepat mungkin dan menunda pekerjaan menggunakan Realtime Database. Fungsi HTTP addMessage() meneruskan nilai teks ke endpoint HTTP dan memasukkannya ke dalam Realtime Database di lokasi /messages/:pushId/original menggunakan aplikasi admin yang diinisialisasikan sebelumnya.

Menerapkan dan menjalankan addMessage()

Untuk menerapkan dan menjalankan fungsi addMessage(), ikuti langkah berikut:

  1. Jalankan perintah ini untuk menerapkan fungsi Anda:

    $ firebase deploy --only functions
    

    Setelah Anda menjalankan perintah ini, Firebase CLI akan membuat output URL untuk setiap endpoint fungsi HTTP. Dalam terminal, Anda akan melihat baris seperti ini:

    Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage
    

    URL berisi project ID Anda serta region untuk fungsi HTTP. Meskipun Anda tidak perlu mengkhawatirkannya sekarang, beberapa fungsi HTTP produksi akan menentukan lokasi untuk meminimalkan latensi jaringan.

  2. Tambahkan parameter kueri teks ke URL addMessage(), lalu buka di browser:

    https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercaseme
    

    Fungsi ini menjalankan dan mengalihkan browser ke Firebase console di lokasi database tempat string teks disimpan. Anda akan melihat nilai teks ditampilkan di konsol.

Setelah menerapkan dan menjalankan fungsi, Anda dapat melihat log di Firebase console.

Menambahkan fungsi makeUppercase()

Untuk fungsi makeUppercase(), tambahkan baris berikut ke index.js:

// Listens for new messages added to /messages/:pushId/original and creates an
// uppercase version of the message to /messages/:pushId/uppercase
exports.makeUppercase = functions.database.ref('/messages/{pushId}/original')
    .onCreate((snapshot, context) => {
      // Grab the current value of what was written to the Realtime Database.
      const original = snapshot.val();
      console.log('Uppercasing', context.params.pushId, original);
      const uppercase = original.toUpperCase();
      // You must return a Promise when performing asynchronous tasks inside a Functions such as
      // writing to the Firebase Realtime Database.
      // Setting an "uppercase" sibling in the Realtime Database returns a Promise.
      return snapshot.ref.parent.child('uppercase').set(uppercase);
    });

Fungsi makeUppercase() dijalankan saat terjadi penulisan di Realtime Database. Fungsi ref(path) menentukan bagian database yang akan dideteksi. Untuk alasan performa, Anda harus mengaturnya dengan spesifik.

Tanda kurung kurawal — misalnya, {pushId} — melingkupi "parameter", yaitu karakter pengganti yang mengekspos data yang sesuai dalam callback.

Realtime Database memicu callback onWrite() setiap kali data ditulis atau diperbarui di lokasi yang ditentukan.

Fungsi yang digerakkan peristiwa, seperti peristiwa Realtime Database, bersifat asinkron. Fungsi callback harus menampilkan null, Objek, atau Promise. Jika tidak menampilkan hasil apa pun, waktu fungsi akan habis, sehingga akan menghasilkan sinyal error, dan fungsi tersebut akan dicoba ulang. Baca Sinkronisasi, Asinkronisasi, dan Promise.

Menerapkan dan menjalankan makeUppercase()

Untuk menyelesaikan tutorial, terapkan kembali fungsi Anda, lalu jalankan addMessage() untuk memicu makeUppercase().

  1. Jalankan perintah ini untuk menerapkan fungsi Anda:

    $ firebase deploy --only functions
    

    Jika menemukan error akses seperti "Tidak dapat memberikan otorisasi akses ke project", coba periksa aliasing project Anda.

  2. Dengan menggunakan URL addMessage() yang dioutput oleh CLI, tambahkan parameter kueri teks, lalu buka di browser:

    https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetoo
    

    Fungsi ini menjalankan dan mengalihkan browser ke Firebase console di lokasi database tempat string teks disimpan. Peristiwa penulisan ini memicu makeUppercase(), yang menulis string dalam huruf kapital.

Setelah menerapkan dan menjalankan fungsi, Anda dapat melihat log di Firebase console untuk Cloud Functions. Jika Anda perlu menghapus fungsi dalam pengembangan atau produksi, gunakan Firebase CLI.

Meninjau kode contoh lengkap

Ini adalah functions/index.js lengkap yang berisi fungsi addMessage() dan makeUppercase(). Dengan fungsi-fungsi ini, Anda dapat meneruskan parameter ke endpoint HTTP yang menulis nilai ke Realtime Database, lalu mengubahnya dengan mengganti semua karakter dalam string itu menjadi huruf kapital.

// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers.
const functions = require('firebase-functions');

// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');
admin.initializeApp();

// Take the text parameter passed to this HTTP endpoint and insert it into the
// Realtime Database under the path /messages/:pushId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into the Realtime Database using the Firebase Admin SDK.
  const snapshot = await admin.database().ref('/messages').push({original: original});
  // Redirect with 303 SEE OTHER to the URL of the pushed object in the Firebase console.
  res.redirect(303, snapshot.ref.toString());
});

// Listens for new messages added to /messages/:pushId/original and creates an
// uppercase version of the message to /messages/:pushId/uppercase
exports.makeUppercase = functions.database.ref('/messages/{pushId}/original')
    .onCreate((snapshot, context) => {
      // Grab the current value of what was written to the Realtime Database.
      const original = snapshot.val();
      console.log('Uppercasing', context.params.pushId, original);
      const uppercase = original.toUpperCase();
      // You must return a Promise when performing asynchronous tasks inside a Functions such as
      // writing to the Firebase Realtime Database.
      // Setting an "uppercase" sibling in the Realtime Database returns a Promise.
      return snapshot.ref.parent.child('uppercase').set(uppercase);
    });

Langkah berikutnya

Dalam dokumentasi ini, Anda dapat menemukan informasi selengkapnya mengenai konsep umum Cloud Functions dan panduan menulis fungsi untuk menangani jenis peristiwa yang didukung oleh Cloud Functions.

Untuk mempelajari lebih lanjut tentang Cloud Functions, Anda juga dapat melakukan hal berikut:

Video tutorial

Anda dapat mempelajari lebih lanjut tentang Cloud Functions dengan menonton video tutorial. Dalam video ini, Anda akan menemukan panduan terperinci untuk memulai Cloud Functions, termasuk penyiapan Node.js dan CLI.