Ghép nối các Chức năng đám mây với Dịch vụ lưu trữ Firebase để tạo và phân phát nội dung động của bạn hoặc xây dựng API REST dưới dạng vi dịch vụ.
Chức năng đám mây cho Firebase cho phép bạn tự động chạy mã phụ trợ để đáp ứng các yêu cầu HTTPS. Mã của bạn được lưu trữ trên đám mây của Google và chạy trong môi trường được quản lý. Không cần phải quản lý và mở rộng quy mô máy chủ của riêng bạn.
Ví dụ: các trường hợp sử dụng và mẫu cho Chức năng đám mây được tích hợp với Firebase Hosting, hãy truy cập tổng quan về serverless của chúng tôi.
Kết nối các chức năng đám mây với dịch vụ lưu trữ Firebase
Phần này cung cấp ví dụ hướng dẫn cách kết nối một chức năng với Firebase Hosting.
Lưu ý rằng để cải thiện hiệu suất phân phát nội dung động, bạn có thể tùy ý điều chỉnh cài đặt bộ đệm của mình .
Bước 1: Thiết lập chức năng đám mây
Đảm bảo rằng bạn có phiên bản Firebase CLI mới nhất và bạn đã khởi chạy Firebase Hosting.
Để biết hướng dẫn chi tiết về cách cài đặt CLI và khởi tạo Hosting, hãy xem hướng dẫn Bắt đầu cho Hosting .
Đảm bảo rằng bạn đã thiết lập Chức năng đám mây:
Nếu đã thiết lập Chức năng đám mây, bạn có thể chuyển sang Bước 2: Tạo và kiểm tra chức năng HTTPS .
Nếu bạn chưa thiết lập Chức năng đám mây:
Khởi tạo Chức năng đám mây bằng cách chạy lệnh sau từ thư mục gốc của dự án của bạn:
firebase init functions
Khi được nhắc, hãy chọn JavaScript (ví dụ hướng dẫn này sử dụng JS).
Kiểm tra xem bạn có thư mục
functions
trong thư mục dự án cục bộ của mình không (được tạo bằng lệnh Firebase bạn vừa chạy). Thư mụcfunctions
này là nơi chứa mã cho Chức năng đám mây.
Bước 2: Tạo và kiểm tra chức năng HTTPS cho trang web Lưu trữ của bạn
Mở
/functions/index.js
trong trình chỉnh sửa yêu thích của bạn.Thay thế nội dung của tập tin bằng đoạn mã sau.
Mã này tạo ra một hàm HTTPS (có tên là
bigben
) để trả lời các yêu cầu HTTPS bằngBONG
cho mỗi giờ trong ngày, giống như một chiếc đồng hồ.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>`); });
Kiểm tra cục bộ các chức năng của bạn bằng Bộ mô phỏng cục bộ Firebase .
Từ thư mục gốc của dự án cục bộ của bạn, hãy chạy lệnh sau:
firebase emulators:start
Truy cập hàm thông qua URL cục bộ được CLI trả về, ví dụ:
.http://localhost:5001/ PROJECT_ID /us-central1/bigben
Hãy truy cập tài liệu về Chức năng đám mây để tìm hiểu thêm về các yêu cầu HTTPS.
Bước tiếp theo sẽ hướng dẫn bạn cách truy cập chức năng HTTPS này từ URL Lưu trữ Firebase để nó có thể tạo nội dung động cho trang web được lưu trữ trên Firebase của bạn.
Bước 3: Hướng các yêu cầu HTTPS tới chức năng của bạn
Với quy tắc viết lại , bạn có thể hướng các yêu cầu khớp với các mẫu cụ thể đến một đích duy nhất. Các bước sau đây chỉ cho bạn cách chuyển hướng tất cả các yêu cầu từ đường dẫn ../bigben
trên trang web Lưu trữ của bạn để thực thi chức năng bigben
.
Mở tệp
firebase.json
của bạn.Thêm cấu hình
rewrite
sau trong phầnhosting
:"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) } } ] }
Xác nhận rằng chuyển hướng của bạn hoạt động như mong đợi bằng cách thử nghiệm lại với trình mô phỏng Firebase.
Từ thư mục gốc của dự án cục bộ của bạn, hãy chạy lệnh sau:
firebase emulators:start
Truy cập URL được lưu trữ cục bộ cho trang web của bạn do CLI trả về (thường là
localhost:5000
), nhưng nối thêm URL bằngbigben
, như vậy:http://localhost:5000/bigben
Lặp lại chức năng của bạn và chức năng của nó cho trang web của bạn. Sử dụng trình mô phỏng Firebase để kiểm tra các lần lặp này.
Nếu
region
bị bỏ qua khỏi khốifunction
của cấu hìnhhosting.rewrites
, Firebase CLI sẽ cố gắng tự động phát hiện vùng đó từ mã nguồn của hàm, nếu không được chỉ định thì mặc định làus-central1
. Nếu mã nguồn của hàm không có sẵn, CLI sẽ cố gắng phát hiện vùng từ hàm được triển khai. Nếu chức năng nằm ở nhiều vùng, CLI yêu cầu phải chỉ địnhregion
trong cấu hìnhhosting.rewrites
.
Tính năng
pinTag
chỉ khả dụng trong Cloud Functions cho Firebase (thế hệ 2). Với tính năng này, bạn có thể đảm bảo rằng mỗi chức năng tạo nội dung động cho trang web của bạn đều được đồng bộ hóa với tài nguyên Lưu trữ tĩnh và cấu hình Lưu trữ. Ngoài ra, tính năng này cho phép bạn xem trước các bản ghi lại của mình đối với các chức năng trên các kênh xem trước Hosting.Nếu bạn thêm
"pinTag": true
vào khốifunction
của cấu hìnhhosting.rewrites
thì chức năng "được ghim" sẽ được triển khai cùng với cấu hình và tài nguyên Lưu trữ tĩnh của bạn, ngay cả khi chạy. Nếu bạn khôi phục một phiên bản trang web của mình, chức năng "được ghim" cũng được khôi phục.
firebase deploy --only hosting Tính năng này dựa trên thẻ Cloud Run , có giới hạn 1000 thẻ cho mỗi dịch vụ và 2000 thẻ cho mỗi khu vực. Điều này có nghĩa là sau hàng trăm lần triển khai, các phiên bản cũ nhất của trang web có thể ngừng hoạt động.
Để có hiệu suất tốt nhất, hãy sắp xếp các chức năng của bạn với Hosting bằng cách chọn một trong các khu vực sau:
-
us-west1
-
us-central1
-
us-east1
-
europe-west1
-
asia-east1
Truy cập trang cấu hình Hosting để biết thêm chi tiết về quy tắc viết lại . Bạn cũng có thể tìm hiểu về thứ tự ưu tiên phản hồi cho các cấu hình Lưu trữ khác nhau.
Lưu ý rằng để cải thiện hiệu suất phân phát nội dung động, bạn có thể tùy ý điều chỉnh cài đặt bộ đệm của mình .
Bước 4: Triển khai chức năng của bạn
Sau khi chức năng của bạn hoạt động như mong muốn trong trình mô phỏng, bạn có thể tiến hành triển khai, thử nghiệm và chạy nó bằng tài nguyên dự án thực . Đây là thời điểm tốt để xem xét việc thiết lập các tùy chọn thời gian chạy để kiểm soát hành vi mở rộng quy mô cho các hàm đang chạy trong sản xuất.
Triển khai chức năng cũng như nội dung và cấu hình Lưu trữ của bạn vào trang web của bạn bằng cách chạy lệnh sau từ thư mục gốc của dự án cục bộ:
firebase deploy --only functions,hosting
Truy cập trang web trực tiếp và chức năng của bạn tại các URL sau:
Tên miền phụ Firebase của bạn:
PROJECT_ID .web.app/bigben
vàPROJECT_ID .firebaseapp.com/bigben
Bất kỳ miền tùy chỉnh nào được kết nối :
CUSTOM_DOMAIN /bigben
Sử dụng khung web
Bạn có thể sử dụng các khung web, như Express.js , trong Cloud Functions để phục vụ nội dung động của ứng dụng và viết các ứng dụng web phức tạp dễ dàng hơn.
Phần sau đây cung cấp ví dụ hướng dẫn cách sử dụng Express.js với Dịch vụ lưu trữ Firebase và Chức năng đám mây.
Cài đặt Express.js trong dự án cục bộ của bạn bằng cách chạy lệnh sau từ thư mục
functions
của bạn:npm install express --save
Mở tệp
/functions/index.js
của bạn, sau đó nhập và khởi tạo Express.js:const functions = require('firebase-functions'); const express = require('express'); const app = express();
Thêm hai điểm cuối sau:
Thêm điểm cuối đầu tiên để phục vụ chỉ mục trang web của chúng tôi tại
/
.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>`); });
Và một điểm cuối khác để trả về số lượng
BONG
dưới dạng API, ở định dạng JSON, trong/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)}); });
Xuất ứng dụng Express.js dưới dạng hàm HTTPS:
exports.app = functions.https.onRequest(app);
Trong tệp
firebase.json
của bạn, hãy chuyển tất cả yêu cầu đến chức năngapp
. Việc viết lại này cho phép Express.js phân phát đường dẫn phụ khác mà chúng tôi đã định cấu hình (trong ví dụ này là/
và/api
).{ "hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "**", "function": "app" } ] } }
Thêm phần mềm trung gian
Tiếp tục ví dụ của chúng tôi, bây giờ bạn đang sử dụng Express.js, bạn có thể thêm phần mềm trung gian Express.js theo cách thông thường. Ví dụ: bạn có thể kích hoạt các yêu cầu CORS trên các điểm cuối của chúng tôi.
Cài đặt phần mềm trung gian
cors
bằng cách chạy lệnh sau:npm install --save cors
Mở tệp
/functions/index.js
của bạn, sau đó thêmcors
vào ứng dụng Express.js của bạn, như sau:const cors = require('cors')({origin: true}); app.use(cors);
Truy cập tài liệu về Chức năng đám mây để tìm hiểu thêm về cách sử dụng Firebase với các ứng dụng Express và mô-đun phần mềm trung gian.
Bước tiếp theo
Thiết lập bộ nhớ đệm cho nội dung động của bạn trên CDN toàn cầu.
Tương tác với các dịch vụ Firebase khác bằng SDK quản trị Firebase .
Xem lại giá cả cũng như hạn ngạch và giới hạn cho Chức năng đám mây.