Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Memulai: tulis, uji, dan terapkan fungsi pertama Anda

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Untuk memulai Cloud Functions, coba ikuti tutorial ini, yang dimulai dengan tugas penyiapan yang diperlukan dan bekerja melalui pembuatan, pengujian, dan penerapan dua fungsi terkait:

  • addMessage() , yang menampilkan URL yang menerima nilai teks dan menulisnya ke Cloud Firestore.
  • makeUppercase() , yang memicu penulisan di Cloud Firestore dan mengubah teks menjadi huruf besar.

Kami telah memilih Cloud Firestore dan fungsi JavaScript yang dipicu HTTP untuk sampel ini sebagian karena pemicu latar belakang ini dapat diuji secara menyeluruh melalui Firebase Local Emulator Suite . Perangkat ini juga mendukung Realtime Database, PubSub, Auth, dan pemicu yang dapat dipanggil HTTP. Jenis pemicu latar belakang lainnya seperti Remote Config, TestLab, dan pemicu Analytics semuanya dapat diuji secara interaktif menggunakan kumpulan alat yang tidak dijelaskan di halaman ini.

Bagian berikut dari tutorial ini merinci langkah-langkah yang diperlukan untuk membuat, menguji, dan menerapkan sampel. Jika Anda lebih suka menjalankan kode dan memeriksanya, lompat ke Tinjau kode sampel lengkap .

Buat Proyek Firebase

  1. Di konsol Firebase , klik Tambahkan proyek .

    • Untuk menambahkan sumber daya Firebase ke proyek Google Cloud yang ada , masukkan nama proyeknya atau pilih dari menu tarik-turun.

    • Untuk membuat proyek baru, masukkan nama proyek yang diinginkan. Anda juga dapat secara opsional mengedit ID proyek yang ditampilkan di bawah nama proyek.

  2. Jika diminta, tinjau dan setujui persyaratan Firebase .

  3. Klik Lanjutkan .

  4. (Opsional) Siapkan Google Analytics untuk proyek Anda, yang memungkinkan Anda mendapatkan pengalaman optimal menggunakan salah satu produk Firebase berikut:

    Pilih akun Google Analytics yang ada atau buat akun baru.

    Jika Anda membuat akun baru, pilih lokasi pelaporan Analytics , lalu terima setelan berbagi data dan persyaratan Google Analytics untuk proyek Anda.

  5. Klik Buat proyek (atau Tambahkan Firebase , jika Anda menggunakan proyek Google Cloud yang sudah ada).

Firebase secara otomatis menyediakan sumber daya untuk proyek Firebase Anda. Saat proses selesai, Anda akan dibawa ke halaman ringkasan untuk proyek Firebase Anda di Firebase console.

Siapkan Node.js dan Firebase CLI

Anda memerlukan lingkungan Node.js untuk menulis fungsi, dan Anda akan memerlukan Firebase CLI untuk menerapkan fungsi ke runtime Cloud Functions. Untuk menginstal Node.js dan npm , Node Version Manager direkomendasikan.

Setelah Anda menginstal Node.js dan npm, instal Firebase CLI melalui metode pilihan Anda. Untuk menginstal CLI melalui npm, gunakan:

npm install -g firebase-tools

Ini menginstal perintah firebase yang tersedia secara global. Jika perintah gagal, Anda mungkin perlu mengubah izin npm . Untuk memperbarui ke versi terbaru firebase-tools , jalankan kembali perintah yang sama.

Inisialisasi proyek Anda

Saat Anda menginisialisasi Firebase SDK untuk Cloud Functions, Anda membuat proyek kosong yang berisi dependensi dan beberapa kode contoh minimal, dan Anda memilih TypeScript atau JavaScript untuk menulis fungsi. Untuk keperluan tutorial ini, Anda juga perlu menginisialisasi Cloud Firestore.

Untuk menginisialisasi proyek Anda:

  1. Jalankan firebase login untuk login melalui browser dan autentikasi Firebase CLI.
  2. Buka direktori proyek Firebase Anda.
  3. Jalankan firebase init firestore . Untuk tutorial ini, Anda dapat menerima nilai default saat diminta untuk aturan Firestore dan file indeks. Jika Anda belum menggunakan Cloud Firestore dalam proyek ini, Anda juga harus memilih mode awal dan lokasi untuk Firestore seperti yang dijelaskan dalam Memulai Cloud Firestore .
  4. Jalankan firebase init functions . CLI meminta Anda untuk memilih basis kode yang ada atau menginisialisasi dan memberi nama yang baru. Saat Anda baru memulai, satu basis kode di lokasi default sudah memadai; nanti, saat implementasi Anda berkembang, Anda mungkin ingin mengatur fungsi dalam basis kode .
  5. CLI memberi Anda dua opsi untuk dukungan bahasa:

    Untuk tutorial ini, pilih JavaScript .

  6. CLI memberi Anda opsi untuk menginstal dependensi dengan npm. Aman untuk menolak jika Anda ingin mengelola dependensi dengan cara lain, meskipun jika Anda menolak, Anda harus menjalankan npm install sebelum meniru atau menerapkan fungsi Anda.

Setelah perintah ini berhasil diselesaikan, struktur proyek Anda 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": "16"} . Ini menentukan versi Node.js Anda untuk menulis dan menerapkan fungsi. Anda dapat memilih versi lain yang didukung .

Impor modul yang diperlukan dan inisialisasi aplikasi

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

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

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

Baris ini memuat firebase-functions dan firebase-admin , dan menginisialisasi instance aplikasi admin tempat perubahan Cloud Firestore dapat dibuat. Di mana pun dukungan Admin SDK tersedia, seperti untuk FCM, Authentication, dan Firebase Realtime Database, dukungan ini menyediakan cara yang andal untuk mengintegrasikan Firebase menggunakan Cloud Functions.

Firebase CLI secara otomatis menginstal modul Firebase dan Firebase SDK untuk Cloud Functions Node saat Anda menginisialisasi proyek Anda. Untuk menambahkan perpustakaan pihak ketiga ke proyek Anda, Anda dapat memodifikasi package.json dan menjalankan npm install . Untuk informasi selengkapnya, lihat Menangani Dependensi .

Tambahkan fungsi addMessage()

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

// Take the text parameter passed to this HTTP endpoint and insert it into 
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await admin.firestore().collection('messages').add({original: original});
  // Send back a message that we've successfully written the message
  res.json({result: `Message with ID: ${writeResult.id} added.`});
});

Fungsi addMessage() adalah titik akhir HTTP. Setiap permintaan ke titik akhir menghasilkan objek Permintaan dan Respons gaya ExpressJS yang diteruskan ke callback onRequest() .

Fungsi HTTP bersifat sinkron (mirip dengan fungsi yang dapat dipanggil ), jadi Anda harus mengirim respons secepat mungkin dan menunda pekerjaan menggunakan Cloud Firestore. Fungsi HTTP addMessage() meneruskan nilai teks ke titik akhir HTTP dan memasukkannya ke dalam database di bawah jalur /messages/:documentId/original .

Tambahkan fungsi makeUppercase()

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

// Listens for new messages added to /messages/:documentId/original and creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore.document('/messages/{documentId}')
    .onCreate((snap, context) => {
      // Grab the current value of what was written to Firestore.
      const original = snap.data().original;

      // Access the parameter `{documentId}` with `context.params`
      functions.logger.log('Uppercasing', context.params.documentId, original);
      
      const uppercase = original.toUpperCase();
      
      // You must return a Promise when performing asynchronous tasks inside a Functions such as
      // writing to Firestore.
      // Setting an 'uppercase' field in Firestore document returns a Promise.
      return snap.ref.set({uppercase}, {merge: true});
    });

Fungsi makeUppercase() dijalankan saat Cloud Firestore ditulis. Fungsi ref.set mendefinisikan dokumen yang akan didengarkan. Untuk alasan kinerja, Anda harus sespesifik mungkin.

Tanda kurung—misalnya, {documentId} —mengelilingi "parameter", karakter pengganti yang menampilkan data yang cocok dalam panggilan balik.

Cloud Firestore memicu callback onCreate() setiap kali pesan baru ditambahkan.

Fungsi berdasarkan peristiwa seperti peristiwa Cloud Firestore tidak sinkron. Fungsi panggilan balik harus mengembalikan null , Object, atau Promise . Jika Anda tidak mengembalikan apa pun, fungsi akan habis waktu, menandakan kesalahan, dan dicoba lagi. Lihat Sinkronisasi, Asinkron, dan Janji .

Tiru eksekusi fungsi Anda

Firebase Local Emulator Suite memungkinkan Anda membuat dan menguji aplikasi di mesin lokal Anda alih-alih men-deploy ke proyek Firebase. Pengujian lokal selama pengembangan sangat disarankan, sebagian karena menurunkan risiko dari kesalahan pengkodean yang berpotensi menimbulkan biaya dalam lingkungan produksi (misalnya, infinite loop).

Untuk meniru fungsi Anda:

  1. Jalankan firebase emulators:start dan periksa output untuk URL UI Emulator Suite. Ini default ke localhost:4000 , tetapi mungkin di-host di port yang berbeda di mesin Anda. Masukkan URL itu di browser Anda untuk membuka UI Emulator Suite.

  2. Periksa output dari perintah firebase emulators:start untuk URL fungsi HTTP addMessage() . Ini akan terlihat mirip dengan http://localhost:5001/MY_PROJECT/us-central1/addMessage , kecuali bahwa:

    1. MY_PROJECT akan diganti dengan ID proyek Anda.
    2. Port mungkin berbeda pada mesin lokal Anda.
  3. Tambahkan string kueri ?text=uppercaseme ke akhir URL fungsi. Ini akan terlihat seperti: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme . Secara opsional, Anda dapat mengubah pesan "huruf besar" menjadi pesan khusus.

  4. Buat pesan baru dengan membuka URL di tab baru di browser Anda.

  5. Lihat efek fungsi di UI Emulator Suite:

    1. Di tab Logs , Anda akan melihat log baru yang menunjukkan bahwa fungsi addMessage() dan makeUppercase() berjalan:

      i function: Memulai eksekusi "addMessage"

      i function: Memulai eksekusi "makeUppercase"

    2. Di tab Firestore , Anda akan melihat dokumen yang berisi pesan asli Anda serta versi huruf besar dari pesan Anda (jika awalnya "huruf besar", Anda akan melihat "UPPERCASEME").

Menerapkan fungsi ke lingkungan produksi

Setelah fungsi Anda berfungsi seperti yang diinginkan di emulator, Anda dapat melanjutkan untuk menerapkan, menguji, dan menjalankannya di lingkungan produksi. Perlu diingat bahwa untuk menerapkan ke lingkungan runtime Node.js 14 yang direkomendasikan, proyek Anda harus menggunakan paket harga Blaze . Lihat harga Cloud Functions .

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

  1. Jalankan perintah ini untuk menerapkan fungsi Anda:

     firebase deploy --only functions
     

    Setelah Anda menjalankan perintah ini, Firebase CLI akan mengeluarkan URL untuk endpoint fungsi HTTP apa pun. Di terminal Anda, Anda akan melihat baris seperti berikut:

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

    URL berisi ID proyek Anda serta wilayah untuk fungsi HTTP. Meskipun Anda tidak perlu mengkhawatirkannya sekarang, beberapa fungsi HTTP produksi harus menentukan lokasi untuk meminimalkan latensi jaringan.

    Jika Anda mengalami kesalahan akses seperti "Tidak dapat mengotorisasi akses ke proyek", coba periksa alias proyek Anda .

  2. Menggunakan output URL addMessage() oleh CLI, tambahkan parameter kueri teks, dan buka di browser:

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

    Fungsi tersebut mengeksekusi dan mengalihkan browser ke konsol Firebase di lokasi database tempat string teks disimpan. Peristiwa tulis ini memicu makeUppercase() , yang menulis versi huruf besar dari string.

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

Dalam produksi, Anda mungkin ingin mengoptimalkan kinerja fungsi dan mengontrol biaya dengan menetapkan jumlah instans minimum dan maksimum untuk dijalankan. Lihat Mengontrol perilaku penskalaan untuk informasi selengkapnya tentang opsi waktu proses ini.

Tinjau kode sampel lengkap

Berikut adalah functions/index.js lengkap yang berisi fungsi addMessage() dan makeUppercase() . Fungsi ini memungkinkan Anda meneruskan parameter ke endpoint HTTP yang menulis nilai ke Cloud Firestore, lalu mengubahnya dengan huruf besar semua karakter dalam string.

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

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

// Take the text parameter passed to this HTTP endpoint and insert it into 
// Firestore under the path /messages/:documentId/original
exports.addMessage = functions.https.onRequest(async (req, res) => {
  // Grab the text parameter.
  const original = req.query.text;
  // Push the new message into Firestore using the Firebase Admin SDK.
  const writeResult = await admin.firestore().collection('messages').add({original: original});
  // Send back a message that we've successfully written the message
  res.json({result: `Message with ID: ${writeResult.id} added.`});
});

// Listens for new messages added to /messages/:documentId/original and creates an
// uppercase version of the message to /messages/:documentId/uppercase
exports.makeUppercase = functions.firestore.document('/messages/{documentId}')
    .onCreate((snap, context) => {
      // Grab the current value of what was written to Firestore.
      const original = snap.data().original;

      // Access the parameter `{documentId}` with `context.params`
      functions.logger.log('Uppercasing', context.params.documentId, original);
      
      const uppercase = original.toUpperCase();
      
      // You must return a Promise when performing asynchronous tasks inside a Functions such as
      // writing to Firestore.
      // Setting an 'uppercase' field in Firestore document returns a Promise.
      return snap.ref.set({uppercase}, {merge: true});
    });

Langkah selanjutnya

Dalam dokumentasi ini, Anda dapat menemukan informasi lebih lanjut tentang konsep umum Cloud Functions serta panduan untuk menulis fungsi guna 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 mendetail tentang memulai Cloud Functions, termasuk penyiapan Node.js dan CLI.