Pasangkan Cloud Functions dengan Firebase Hosting untuk membuat dan menayangkan konten dinamis, atau membuat REST API sebagai microservice.
Dengan Cloud Functions for Firebase, Anda dapat otomatis menjalankan kode backend sebagai respons terhadap permintaan HTTPS. Kode Anda disimpan di cloud Google dan dijalankan di lingkungan terkelola. Anda tidak perlu mengelola dan menyesuaikan skala server sendiri.
Untuk melihat kasus penggunaan dan contoh integrasi Cloud Functions dengan Firebase Hosting, lihat ringkasan serverless.
Menghubungkan Cloud Functions ke Firebase Hosting
Bagian ini memberikan contoh panduan untuk menghubungkan fungsi ke Firebase Hosting.
Perlu diingat bahwa untuk meningkatkan performa penayangan konten dinamis, Anda juga dapat menyesuaikan setelan cache (opsional).
Langkah 1: Siapkan Cloud Functions
Pastikan Anda memiliki Firebase CLI versi terbaru dan Firebase Hosting telah diinisialisasi.
Untuk mendapatkan petunjuk terperinci tentang cara menginstal CLI dan menginisialisasi Hosting, lihat panduan Memulai Hosting.
Pastikan Anda telah menyiapkan Cloud Functions:
Jika sudah menyiapkan Cloud Functions, Anda dapat melanjutkan ke Langkah 2: Buat dan uji fungsi HTTPS.
Jika Anda belum menyiapkan Cloud Functions:
Inisialisasi Cloud Functions dengan menjalankan perintah berikut dari root direktori project Anda:
firebase init functions
Saat diminta, pilih JavaScript (contoh panduan ini menggunakan JS).
Pastikan Anda memiliki direktori
functions
di direktori project lokal (dibuat dengan perintah Firebase yang baru saja Anda jalankan). Di direktorifunctions
inilah kode untuk Cloud Function berada.
Langkah 2: Buat dan uji fungsi HTTPS untuk situs Hosting
Buka
/functions/index.js
di editor favorit Anda.Ganti konten file dengan kode berikut.
Kode ini membuat fungsi HTTPS (dinamai
bigben
) yang merespons permintaan HTTPS denganBONG
untuk setiap jam dalam sehari, seperti halnya jam.const functions = require('firebase-functions'); exports.bigben = functions.https.onRequest((req, res) => { const hours = (new Date().getHours() % 12) + 1 // London is UTC + 1hr; res.status(200).send(`<!doctype html> <head> <title>Time</title> </head> <body> ${'BONG '.repeat(hours)} </body> </html>`); });
Uji fungsi Anda secara lokal menggunakan Firebase Local Emulator Suite.
Dari root direktori project lokal Anda, jalankan perintah berikut:
firebase emulators:start
Akses fungsi melalui URL lokal yang ditampilkan oleh CLI, misalnya:
.http://localhost:5001/PROJECT_ID/us-central1/bigben
Buka dokumentasi Cloud Functions untuk mempelajari permintaan HTTPS lebih lanjut.
Langkah selanjutnya memandu Anda dalam mengakses fungsi HTTPS ini dari URL Firebase Hosting sehingga dapat menghasilkan konten dinamis untuk situs yang di-hosting oleh Firebase.
Langkah 3: Arahkan permintaan HTTPS ke fungsi Anda
Dengan aturan penulisan ulang, Anda dapat mengarahkan permintaan yang cocok dengan pola tertentu ke satu tujuan. Langkah berikut menunjukkan cara mengarahkan semua permintaan dari jalur ../bigben
di situs Hosting Anda untuk menjalankan fungsi bigben
.
Buka file
firebase.json
Anda.Tambahkan konfigurasi
rewrite
berikut di bagianhosting
:"hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "/bigben", "function": { "functionId": "bigben", "region": "us-central1" // optional (see note below) "pinTag": true // optional (see note below) } } ] }
Pastikan pengalihan Anda berfungsi sesuai harapan dengan mengulangi pengujian menggunakan emulator Firebase.
Dari root direktori project lokal Anda, jalankan perintah berikut:
firebase emulators:start
Buka URL yang dihosting secara lokal untuk situs Anda seperti yang ditampilkan oleh CLI (biasanya
localhost:5000
), tetapi tambahkanbigben
ke akhir URL, seperti berikut:http://localhost:5000/bigben
Lakukan iterasi pada fungsi tersebut dan fungsionalitasnya untuk situs Anda. Gunakan emulator Firebase untuk menguji iterasi ini.
Untuk mendapatkan performa terbaik, lakukan kolokasi fungsi Anda menggunakan Hosting dengan memilih salah satu region berikut:
us-west1
us-central1
us-east1
europe-west1
asia-east1
Buka halaman konfigurasi Hosting untuk mengetahui penjelasan selengkapnya tentang aturan penulisan ulang. Anda juga dapat mempelajari urutan prioritas respons untuk berbagai konfigurasi Hosting.
Perlu diingat bahwa untuk meningkatkan performa penayangan konten dinamis, Anda juga dapat menyesuaikan setelan cache (opsional).
Langkah 4: Deploy fungsi
Setelah fungsi berjalan sesuai harapan di emulator, Anda dapat melanjutkan men-deploy, menguji, dan menjalankannya dengan resource project yang sebenarnya. Ini adalah saat yang tepat untuk mempertimbangkan menyetel opsi runtime guna mengontrol perilaku penskalaan untuk fungsi yang berjalan dalam lingkungan produksi.
Deploy fungsi, juga konten dan konfigurasi Hosting, ke situs Anda dengan menjalankan perintah berikut dari root direktori project lokal:
firebase deploy --only functions,hosting
Akses situs live dan fungsi Anda pada URL berikut:
Subdomain Firebase Anda:
PROJECT_ID.web.app/bigben
danPROJECT_ID.firebaseapp.com/bigben
Setiap domain kustom yang terhubung:
CUSTOM_DOMAIN/bigben
Menggunakan framework web
Anda dapat menggunakan framework web, seperti Express.js, di Cloud Functions untuk menayangkan konten dinamis aplikasi dan menulis aplikasi web yang kompleks dengan lebih mudah.
Bagian berikut memberikan contoh panduan untuk menggunakan Express.js dengan Firebase Hosting dan Cloud Functions.
Instal Express.js di project lokal Anda dengan menjalankan perintah berikut dari direktori
functions
Anda:npm install express --save
Buka file
/functions/index.js
, lalu impor dan inisialisasi Express.js:const functions = require('firebase-functions'); const express = require('express'); const app = express();
Tambahkan dua endpoint berikut:
Tambahkan endpoint pertama untuk menayangkan indeks situs di
/
.app.get('/', (req, res) => { const date = new Date(); const hours = (date.getHours() % 12) + 1; // London is UTC + 1hr; res.send(` <!doctype html> <head> <title>Time</title> <link rel="stylesheet" href="/style.css"> <script src="/script.js"></script> </head> <body> <p>In London, the clock strikes: <span id="bongs">${'BONG '.repeat(hours)}</span></p> <button onClick="refresh(this)">Refresh</button> </body> </html>`); });
Dan satu endpoint lain untuk menampilkan jumlah
BONG
sebagai API, dalam format JSON, di bagian/api
:app.get('/api', (req, res) => { const date = new Date(); const hours = (date.getHours() % 12) + 1; // London is UTC + 1hr; res.json({bongs: 'BONG '.repeat(hours)}); });
Ekspor aplikasi Express.js sebagai fungsi HTTPS:
exports.app = functions.https.onRequest(app);
Di dalam file
firebase.json
Anda, arahkan semua permintaan ke fungsiapp
. Penulisan ulang ini memungkinkan Express.js untuk menayangkan subjalur berbeda yang telah dikonfigurasi (dalam contoh ini,/
dan/api
).{ "hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "**", "function": "app" } ] } }
Menambahkan middleware
Melanjutkan contoh kami, setelah menggunakan Express.js, Anda dapat menambahkan middleware Express.js dengan cara yang umum. Misalnya, Anda dapat mengaktifkan permintaan CORS di endpoint.
Instal middleware
cors
dengan menjalankan perintah berikut:npm install --save cors
Buka file
/functions/index.js
Anda, lalu tambahkancors
ke aplikasi Express.js, seperti ini:const cors = require('cors')({origin: true}); app.use(cors);
Buka dokumentasi Cloud Functions untuk mempelajari penggunaan Firebase dengan aplikasi Express dan modul middleware lebih lanjut.
Langkah berikutnya
Siapkan caching untuk konten dinamis Anda di CDN global.
Berinteraksi dengan layanan Firebase lainnya menggunakan Firebase Admin SDK.
Tinjau harga serta kuota dan batas untuk Cloud Functions.