Buka konsol

Mengelola penerapan fungsi dan opsi runtime

Anda dapat menerapkan, menghapus, dan mengubah fungsi menggunakan perintah Firebase CLI atau dengan menyetel opsi runtime dalam kode sumber fungsi Anda.

Menerapkan fungsi

Untuk menerapkan fungsi, jalankan perintah Firebase CLI ini:

$ firebase deploy --only functions

Secara default, Firebase CLI menerapkan semua fungsi di dalam index.js pada saat bersamaan. Jika project Anda berisi lebih dari 5 fungsi, sebaiknya gunakan tanda --only dengan nama fungsi tertentu untuk menerapkan fungsi yang sudah diedit saja. Menerapkan fungsi tertentu akan mempercepat proses penerapan dan membantu agar Anda tidak melampaui kuota penerapan. Misalnya:

$ firebase deploy --only functions:addMessage,functions:makeUppercase

Baca referensi Firebase CLI untuk mengetahui daftar lengkap perintah yang tersedia.

Secara default, Firebase CLI akan mencari kode sumber di folder functions/. Anda bisa menentukan folder lain dengan menambahkan baris berikut di firebase.json:

"functions": {
  "source": "another-folder"
}

Menghapus fungsi

Anda dapat menghapus fungsi yang diterapkan sebelumnya dengan cara berikut:

  • secara eksplisit di Firebase CLI dengan functions:delete
  • secara eksplisit menggunakan menu konteks dalam daftar fungsi di Firebase console
  • secara implisit dengan menghapus fungsi dari index.js sebelum melakukan penerapan.

Semua operasi ini akan meminta Anda untuk mengonfirmasi sebelum menghapus fungsi dari produksi.

Penghapusan fungsi secara eksplisit di Firebase CLI mendukung banyak argumen serta grup fungsi, dan dapat Anda gunakan untuk menentukan fungsi yang dijalankan di region tertentu. Selain itu, Anda juga dapat mengganti permintaan konfirmasi.

# Delete all functions that match the specified name in all regions.
$ firebase functions:delete myFunction

# Delete a specified function running in a specific region.
$ firebase functions:delete myFunction --region us-east-1

# Delete more than one function
$ firebase functions:delete myFunction myOtherFunction

# Delete a specified functions group.
$ firebase functions:delete groupA

# Bypass the confirmation prompt.
$ firebase functions:delete myFunction --force

Dengan penghapusan fungsi secara implisit, firebase deploy mengurai index.js dan menghapus dari produksi semua fungsi yang telah dihapus dari file. Perhatikan bahwa Anda tidak dapat menghapus fungsi dengan menerapkan mode non-interaktif.

Mengganti nama, region, atau pemicu fungsi

Jika Anda mengganti nama atau region atau pemicu untuk fungsi yang menangani traffic produksi, ikuti langkah-langkah di bagian ini untuk menghindari hilangnya peristiwa selama modifikasi. Sebelum mengikuti langkah-langkah ini, pastikan fungsi Anda idempoten, karena versi baru dan versi lama fungsi akan berjalan pada waktu yang sama selama perubahan.

Mengganti nama fungsi

Untuk mengganti nama fungsi, buat versi baru fungsi yang sudah berganti nama di index.js lalu jalankan dua perintah penerapan secara terpisah. Perintah pertama menerapkan fungsi yang baru berganti nama, dan perintah kedua menghapus versi yang diterapkan sebelumnya. Misalnya, jika Anda memiliki fungsi bernama webhook yang ingin diganti namanya menjadi webhookNew, perbaiki kode sebagai berikut:

// before
const functions = require('firebase-functions');

exports.webhook = functions.https.onRequest((req, res) => {
    res.send("Hello");
});

// after
const functions = require('firebase-functions');

exports.webhookNew = functions.https.onRequest((req, res) => {
    res.send("Hello");
});

Lalu, jalankan perintah berikut untuk menerapkan fungsi yang baru:

# Deploy new function called webhookNew
$ firebase deploy --only functions:webhookNew

# Wait until deployment is done; now both webhookNew and webhook are running

# Delete webhook
$ firebase functions:delete webhook

Mengganti region atau region fungsi

Jika Anda mengganti region yang ditentukan untuk fungsi yang menangani traffic produksi, Anda dapat mencegah kehilangan peristiwa dengan melakukan langkah-langkah berikut secara berurutan:

  1. Ubah nama fungsi, dan ubah region sesuai keinginan.
  2. Terapkan fungsi yang telah berganti nama, yang untuk sementara akan menjalankan kode yang sama di kedua region.
  3. Hapus fungsi sebelumnya.

Misalnya, jika Anda memiliki fungsi bernama webhook yang saat ini berada di region fungsi default us-central1, dan ingin memindahkannya ke asia-northeast1, Anda harus terlebih dahulu mengubah kode sumber untuk mengganti nama fungsi dan merevisi region tersebut.

// before
const functions = require('firebase-functions');

exports.webhook = functions
    .https.onRequest((req, res) => {
            res.send("Hello");
    });

// after
const functions = require('firebase-functions');

exports.webhookAsia = functions
    .region('asia-northeast1')
    .https.onRequest((req, res) => {
            res.send("Hello");
    });

Kemudian terapkan dengan menjalankan:

$ firebase deploy --only functions:webhookAsia

Sekarang terdapat dua fungsi identik yang berjalan: webhook berjalan di us-central1, dan webhookAsia berjalan di asia-northeast1.

Selanjutnya, hapus webhook:

$ firebase functions:delete webhook

Sekarang hanya ada satu fungsi - webhookAsia, yang berjalan di asia-northeast1.

Mengganti jenis pemicu fungsi

Saat Anda mengembangkan penerapan Cloud Functions for Firebase dari waktu ke waktu, Anda mungkin perlu mengganti jenis pemicu fungsi karena berbagai alasan. Misalnya, Anda mungkin ingin:

  • Mengganti dari penyimpanan lama peristiwa onChange ke onFinalize, onDelete, onArchive, dan onMetadataUpdate. (Pelajari lebih lanjut panduan upgrade beta hingga v1 atau v2).
  • Mengganti dari satu jenis Firebase Realtime Database atau peristiwa Cloud Firestore ke yang lain, seperti dari peristiwa onWrite generik ke peristiwa onCreate terperinci.

Anda tidak dapat mengganti jenis peristiwa fungsi hanya dengan mengganti kode sumber dan menjalankan firebase deploy. Untuk menghindari error, ganti jenis pemicu fungsi dengan prosedur ini:

  1. Ganti kode sumber untuk menyertakan fungsi baru dengan jenis pemicu yang diinginkan.
  2. Terapkan fungsi, yang untuk sementara akan menjalankan fungsi lama dan fungsi baru.
  3. Hapus fungsi lama secara eksplisit dari produksi menggunakan Firebase CLI.

Misalnya, jika Anda memiliki fungsi objectChanged yang memiliki jenis peristiwa onChange lama, dan Anda ingin menggantinya menjadi onFinalize, ganti nama fungsi terlebih dahulu lalu edit agar menjadi jenis peristiwa onFinalize.

// before
const functions = require('firebase-functions');

exports.objectChanged = functions.storage.object().onChange((object) => {
    return console.log('File name is: ', object.name);
});

// after
const functions = require('firebase-functions');

exports.objectFinalized = functions.storage.object().onFinalize((object) => {
    return console.log('File name is: ', object.name);
});

Lalu, jalankan perintah berikut untuk membuat fungsi baru terlebih dahulu, sebelum menghapus fungsi lama:

# Create new function objectFinalized
$ firebase deploy --only functions:objectFinalized

# Wait until deployment is done; now both objectChanged and objectFinalized are running

# Delete objectChanged
$ firebase functions:delete objectChanged

Menetapkan opsi runtime

Cloud Functions for Firebase dapat Anda gunakan untuk memilih opsi runtime seperti versi runtime Node.js, dan waktu tunggu per fungsi serta alokasi memori.

Menetapkan versi Node.js

Firebase SDK untuk Cloud Functions 2.0.0 dan versi yang lebih baru memungkinkan pemilihan runtime Node.js. Anda dapat memilih untuk menjalankan semua fungsi dalam project secara eksklusif di runtime environment yang terkait dengan salah satu versi Node.js yang didukung ini:

  • Node.js 6 (Tidak digunakan lagi)
  • Node.js 8
  • Node.js 10 (Beta)

Perhatikan bahwa runtime Node.js 10 saat ini masih dalam versi beta. Selain itu, Anda membutuhkan firebase-tools 4.0.0 atau versi yang lebih baru untuk menerapkan fungsi ke Node 8. Jika memiliki fungsi yang sudah dikembangkan di Node 6, Anda dapat terus menggunakan versi tersebut sampai tanggal penghapusan. Node 8 sangat disarankan karena stabilitas dan dukungannya untuk sintaks async/await.

Untuk menetapkan versi Node.js:

Tetapkan versi di kolom engines pada file package.json yang dibuat dalam direktori functions/ selama inisialisasi. Misalnya, untuk hanya menggunakan versi 10, edit baris ini di package.json:

  "engines": {"node": "10"}

Kolom engines wajib diisi; kolom ini harus menetapkan salah satu versi Node.js yang didukung agar Anda dapat menggunakan dan menjalankan fungsi. Saat ini, firebase init functions menetapkan kolom ini menjadi 8, versi Node yang disarankan untuk sebagian besar penerapan.

Menetapkan waktu tunggu dan alokasi memori

Dalam beberapa kasus, fungsi Anda dapat memiliki persyaratan khusus untuk nilai waktu tunggu yang lama atau alokasi memori yang besar. Anda dapat menetapkan nilai-nilai ini di Google Cloud Console atau di kode sumber fungsi (khusus Firebase).

Untuk menetapkan alokasi memori dan waktu tunggu dalam kode sumber fungsi, gunakan parameter runWith yang diperkenalkan di Firebase SDK untuk Cloud Functions 2.0.0. Opsi runtime ini menerima objek JSON yang sesuai dengan antarmuka RuntimeOptions, yang menentukan nilai untuk timeoutSeconds dan memory. Misalnya, fungsi penyimpanan ini menggunakan memori 1 GB dan akan berakhir setelah 300 detik:

const runtimeOpts = {
  timeoutSeconds: 300,
  memory: '1GB'
}

exports.myStorageFunction = functions
  .runWith(runtimeOpts)
  .storage
  .object()
  .onFinalize((object) = > {
    // do some complicated things that take a lot of memory and time
  });

Nilai maksimum untuk timeoutSeconds adalah 540, atau 9 menit. Nilai yang valid untuk memory adalah:

  • 128MB
  • 256MB
  • 512MB
  • 1GB
  • 2GB

Untuk menetapkan alokasi memori dan waktu tunggu di Google Cloud Platform Console:

  1. Di Google Cloud Platform Console, pilih Cloud Functions dari menu sebelah kiri.
  2. Pilih fungsi dengan mengklik namanya di daftar fungsi.
  3. Klik ikon Edit di menu atas.
  4. Pilih alokasi memori dari menu drop-down berlabel Memori yang dialokasikan.
  5. Klik Lainnya untuk menampilkan opsi lanjutan, dan masukkan jumlah detik di kotak teks Waktu tunggu.
  6. Klik Simpan untuk mengupdate fungsi.