Để bắt đầu sử dụng Cloud Functions, hãy thử làm theo hướng dẫn này, hướng dẫn này bắt đầu bằng các tác vụ thiết lập bắt buộc và hướng dẫn bạn cách tạo, kiểm thử, và triển khai hai hàm có liên quan:
- Hàm "thêm thông báo" hiển thị một URL chấp nhận giá trị văn bản và ghi giá trị đó vào Cloud Firestore.
- Hàm "chuyển thành chữ hoa" kích hoạt khi ghi vào Cloud Firestore và chuyển đổi văn bản thành chữ hoa.
Chúng tôi đã chọn Cloud Firestore và các hàm JavaScript được kích hoạt bằng HTTP cho mẫu này một phần vì bạn có thể kiểm thử kỹ lưỡng các trình kích hoạt nền này thông qua Firebase Local Emulator Suite. Bộ công cụ này cũng hỗ trợ Realtime Database, PubSub, Xác thực và các trình kích hoạt có thể gọi bằng HTTP. Bạn có thể kiểm thử tương tác các loại trình kích hoạt nền khác như Remote Config, TestLab và Analytics bằng các bộ công cụ không được mô tả trong trang này.
Các phần sau đây của hướng dẫn này trình bày chi tiết các bước cần thiết để tạo, kiểm thử và triển khai mẫu. Nếu bạn chỉ muốn chạy mã và kiểm tra mã đó, hãy chuyển đến phần Xem lại mã mẫu hoàn chỉnh.
Tạo dự án Firebase
Bạn mới sử dụng Firebase hoặc Cloud
Hãy làm theo các bước sau nếu bạn mới sử dụng Firebase hoặc Google Cloud.
Bạn cũng có thể làm theo các bước này nếu muốn tạo một dự án Firebase hoàn toàn mới (và dự án cơ bản của dự án đó).Google Cloud
- Đăng nhập vào Firebase bảng điều khiển.
- Nhấp vào nút để tạo dự án Firebase mới.
-
Trong trường văn bản, hãy nhập tên dự án.
Nếu thuộc một Google Cloud tổ chức, bạn có thể chọn thư mục mà bạn tạo dự án.
- Nếu được nhắc, hãy xem xét và chấp nhận các điều khoản của Firebase, sau đó nhấp vào Tiếp tục.
- (Không bắt buộc) Bật tính năng hỗ trợ AI trong bảng điều khiển của Firebase (có tên là "Gemini trong Firebase"). Tính năng này có thể giúp bạn bắt đầu và đơn giản hoá quy trình phát triển.
-
(Không bắt buộc) Thiết lập Google Analytics cho dự án của bạn. Việc này giúp bạn có trải nghiệm tối ưu khi sử dụng các sản phẩm Firebase sau: Firebase A/B Testing, Cloud Messaging, Crashlytics, In-App Messaging và Remote Config (bao gồm cả tính năng Cá nhân hoá).
Chọn một tài khoản Google Analytics hiện có hoặc tạo một tài khoản mới. Nếu bạn tạo một tài khoản mới, hãy chọn Analytics vị trí báo cáo, sau đó chấp nhận các cài đặt cách chia sẻ dữ liệu và Google Analytics điều khoản cho dự án của bạn.
- Nhấp vào Tạo dự án.
Firebase tạo dự án của bạn, cung cấp một số tài nguyên ban đầu và bật các API quan trọng. Khi quá trình này hoàn tất, bạn sẽ được chuyển đến trang tổng quan của dự án Firebase trong bảng điều khiển Firebase.
Dự án trên đám mây hiện có
Hãy làm theo các bước sau nếu bạn muốn bắt đầu sử dụng Firebase với một dự án hiện có Google Cloud. Tìm hiểu thêm và khắc phục sự cố khi "thêm Firebase" vào một dự án Google Cloud hiện có.
- Đăng nhập vào bảng điều khiển của Firebase Firebase bằng tài khoản cho phép bạn truy cập vào dự án Google Cloud hiện có.
- Nhấp vào nút để tạo dự án Firebase mới.
- Ở cuối trang, hãy nhấp vào Thêm Firebase vào dự án trên đám mây của Google Cloud.
- Trong trường văn bản, hãy bắt đầu nhập tên dự án của dự án hiện có, sau đó chọn dự án trong danh sách xuất hiện.
- Nhấp vào Mở dự án.
- Nếu được nhắc, hãy xem xét và chấp nhận các điều khoản của Firebase, sau đó nhấp vào Tiếp tục.
- (Không bắt buộc) Bật tính năng hỗ trợ AI trong bảng điều khiển của Firebase (có tên là "Gemini trong Firebase"). Tính năng này có thể giúp bạn bắt đầu và đơn giản hoá quy trình phát triển.
-
(Không bắt buộc) Thiết lập Google Analytics cho dự án của bạn. Việc này giúp bạn có trải nghiệm tối ưu khi sử dụng các sản phẩm Firebase sau: Firebase A/B Testing, Cloud Messaging, Crashlytics, In-App Messaging và Remote Config (bao gồm cả tính năng Cá nhân hoá).
Chọn một tài khoản Google Analytics hiện có hoặc tạo một tài khoản mới. Nếu bạn tạo một tài khoản mới, hãy chọn Analytics vị trí báo cáo, sau đó chấp nhận các cài đặt cách chia sẻ dữ liệu và Google Analytics điều khoản cho dự án của bạn.
- Nhấp vào Thêm Firebase.
Firebase thêm Firebase vào dự án hiện có của bạn. Khi quá trình này hoàn tất, bạn sẽ được chuyển đến trang tổng quan của dự án Firebase trong bảng điều khiển Firebase.
Thiết lập Node.js và Firebase CLI
Bạn cần có môi trường Node.js để viết các hàm, và cần có Firebase CLI để triển khai các hàm vào thời gian chạy Cloud Functions. Bạn nên dùng Trình quản lý phiên bản nút để cài đặt Node.js và npm.
Sau khi cài đặt Node.js và npm, hãy cài đặt Firebase CLI thông qua phương thức mà bạn muốn. Để cài đặt CLI thông qua npm, hãy sử dụng:
npm install -g firebase-tools
Lệnh này sẽ cài đặt lệnh firebase có sẵn trên toàn cầu. Nếu
lệnh này không thành công, bạn có thể cần
thay đổi quyền npm.
Để cập nhật lên phiên bản firebase-tools mới nhất, hãy chạy lại lệnh tương tự.
Chạy dự án của bạn
Khi chạy Firebase SDK cho Cloud Functions, bạn sẽ tạo một dự án trống chứa các phần phụ thuộc và một số mã mẫu tối thiểu, đồng thời chọn TypeScript hoặc JavaScript để tạo các hàm. Để phục vụ mục đích của hướng dẫn này, bạn cũng cần chạy Cloud Firestore.
Cách chạy dự án:
Chạy
firebase loginđể đăng nhập qua trình trình duyệt và xác thực Firebase CLI.Chuyển đến thư mục dự án Firebase.
Chạy
firebase init firestore. Đối với hướng dẫn này, bạn có thể chấp nhận các giá trị mặc định khi được nhắc về các quy tắc Firestore và tệp chỉ mục. Nếu bạn chưa sử dụng Cloud Firestore trong dự án này, bạn cũng cần chọn chế độ và vị trí bắt đầu cho Firestore như mô tả trong Bắt đầu sử dụng Cloud Firestore.Chạy
firebase init functions. CLI nhắc bạn chọn một cơ sở mã hiện có hoặc chạy và đặt tên cho một cơ sở mã mới. Khi bạn mới bắt đầu, một toàn bộ mã nguồn duy nhất ở vị trí mặc định là đủ; sau này, khi quá trình triển khai của bạn mở rộng, bạn có thể muốn tổ chức các hàm trong toàn bộ mã nguồn.CLI cung cấp cho bạn các lựa chọn sau đây để hỗ trợ ngôn ngữ:
- JavaScript
- Python
- TypeScript Xem bài viết Viết hàm bằng TypeScript để biết thêm thông tin.
Đối với hướng dẫn này, hãy chọn JavaScript.
CLI cung cấp cho bạn một lựa chọn để cài đặt các phần phụ thuộc bằng npm. Bạn có thể từ chối nếu muốn quản lý các phần phụ thuộc theo cách khác. Tuy nhiên, nếu từ chối, bạn cần chạy
npm installtrước khi mô phỏng hoặc triển khai các hàm.
Sau khi các lệnh này hoàn tất thành công, cấu trúc dự án của bạn sẽ có dạng như sau:
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
Tệp package.json được tạo trong quá trình chạy chứa một khoá quan trọng: "engines": {"node": "16"}. Khoá này chỉ định phiên bản Node.js để bạn viết và triển khai các hàm. Bạn có thể
chọn các phiên bản được hỗ trợ khác.
Nhập các mô-đun bắt buộc và chạy một ứng dụng
Sau khi hoàn tất các tác vụ thiết lập, bạn có thể mở thư mục nguồn và bắt đầu thêm mã như mô tả trong các phần sau. Đối với mẫu này, dự án của bạn phải nhập các
Cloud Functions và mô-đun SDK dành cho quản trị viên bằng các câu lệnh require
của Node. Thêm các dòng như sau vào tệp index.js:
// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers. const functions = require('firebase-functions/v1'); // The Firebase Admin SDK to access Firestore. const admin = require("firebase-admin"); admin.initializeApp();
Các dòng này tải các mô-đun firebase-functions và firebase-admin, đồng thời
chạy một thực thể ứng dụng admin mà bạn có thể thực hiện các thay đổi đối với Cloud Firestore.
Ở bất cứ nơi nào có hỗ trợ SDK dành cho quản trị viên (như đối với FCM, Authentication, và Firebase Realtime Database), SDK này sẽ cung cấp một cách hiệu quả để tích hợp Firebase bằng Cloud Functions.
Firebase CLI tự động
cài đặt các mô-đun Firebase và Firebase SDK cho Cloud Functions Node khi bạn chạy
dự án. Để thêm thư viện của bên thứ ba vào dự án, bạn có thể sửa đổi package.json và chạy npm install.
Để biết thêm thông tin, hãy xem
bài viết Xử lý các phần phụ thuộc.
Thêm hàm addMessage()
Đối với hàm addMessage(), hãy thêm các dòng sau vào 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.` }); });
Hàm addMessage() là một điểm cuối HTTP. Mọi yêu cầu đến điểm cuối
đều dẫn đến các đối tượng Yêu cầu và Phản hồi theo kiểu ExpressJS
Yêu cầu và Phản hồi
được truyền đến lệnh gọi lại
onRequest().
Các hàm HTTP là đồng bộ (tương tự như
các hàm có thể gọi), vì vậy, bạn nên gửi phản hồi
nhanh nhất có thể và trì hoãn công việc bằng Cloud Firestore. Hàm HTTP addMessage() truyền một giá trị văn bản đến điểm cuối HTTP và chèn giá trị đó vào cơ sở dữ liệu theo đường dẫn /messages/:documentId/original.
Thêm hàm makeUppercase()
Đối với hàm makeUppercase(), hãy thêm các dòng sau vào 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 }); });
Hàm makeUppercase() thực thi khi Cloud Firestore được ghi vào. Hàm ref.set xác định tài liệu cần theo dõi. Vì lý do hiệu suất, bạn nên cung cấp thông tin cụ thể nhất có thể.
Dấu ngoặc nhọn (ví dụ: {documentId}) bao quanh "các tham số", ký tự đại diện hiển thị dữ liệu được so khớp trong lệnh gọi lại.
Cloud Firestore kích hoạt lệnh gọi lại
onCreate()
mỗi khi thông báo mới được thêm.
Các hàm dựa trên sự kiện như sự kiện Cloud Firestore là
không đồng bộ. Hàm callback phải trả về null, Đối tượng, hoặc một Promise.
Nếu bạn không trả về gì, hàm sẽ hết thời gian chờ, báo hiệu lỗi và được thử lại. Xem phần Đồng bộ, Không đồng bộ và Lời hứa.
Mô phỏng quá trình thực thi các hàm
Bộ mô phỏng cục bộ của FirebaseFirebase Local Emulator Suite cho phép bạn tạo và kiểm thử ứng dụng trên máy cục bộ thay vì triển khai vào một dự án Firebase. Bạn nên kiểm thử cục bộ trong quá trình phát triển, một phần vì việc này giúp giảm rủi ro do lỗi mã hoá có thể phát sinh chi phí trong môi trường thực tế (ví dụ: vòng lặp vô hạn).
Cách mô phỏng các hàm:
Chạy
firebase emulators:startvà kiểm tra kết quả cho URL của Emulator Suite UI. URL này mặc định là localhost:4000, nhưng có thể được lưu trữ trên một cổng khác trên máy của bạn. Nhập URL đó vào trình duyệt để mở Emulator Suite UI.Kiểm tra kết quả của lệnh
firebase emulators:startcho URL của hàm HTTPaddMessage(). URL này sẽ có dạng tương tự nhưhttp://localhost:5001/MY_PROJECT/us-central1/addMessage, ngoại trừ:MY_PROJECTsẽ được thay thế bằng mã dự án của bạn.- Cổng có thể khác trên máy cục bộ của bạn.
Thêm chuỗi truy vấn
?text=uppercasemevào cuối URL của hàm. URL này sẽ có dạng như sau:http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme. Bạn có thể thay đổi thông báo "uppercaseme" thành một thông báo tuỳ chỉnh message.Tạo một thông báo mới bằng cách mở URL trong một thẻ mới trong trình duyệt.
Xem hiệu ứng của các hàm trong Emulator Suite UI:
Trong thẻ Nhật ký, bạn sẽ thấy nhật ký mới cho biết các hàm
addMessage()vàmakeUppercase()đã chạy:i functions: Beginning execution of "addMessage"i functions: Beginning execution of "makeUppercase"Trong thẻ Firestore, bạn sẽ thấy một tài liệu chứa thông báo gốc cũng như phiên bản chữ hoa của thông báo (nếu thông báo ban đầu là "uppercaseme", bạn sẽ thấy "UPPERCASEME").
Triển khai các hàm vào môi trường thực tế
Sau khi các hàm hoạt động như mong muốn trong trình mô phỏng, bạn có thể tiến hành triển khai, kiểm thử và chạy các hàm đó trong môi trường thực tế. Xin lưu ý rằng để triển khai vào môi trường thời gian chạy Node.js 14, dự án của bạn phải sử dụng gói giá Blaze. Xem Cloud Functions giá.
Để hoàn tất hướng dẫn này, hãy triển khai các hàm, sau đó thực thi addMessage() để kích hoạt makeUppercase().
Chạy lệnh này để triển khai các hàm:
firebase deploy --only functions
Sau khi bạn chạy lệnh này, Firebase CLI sẽ xuất URL cho mọi điểm cuối của hàm HTTP. Trong thiết bị đầu cuối, bạn sẽ thấy một dòng như sau:
Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessageURL này chứa mã dự án cũng như một khu vực cho hàm HTTP. Mặc dù bạn không cần lo lắng về điều này ngay bây giờ, nhưng một số hàm HTTP thực tế nên chỉ định một vị trí để giảm thiểu độ trễ của mạng.
Nếu bạn gặp lỗi truy cập như "Không thể cho phép truy cập vào dự án," hãy thử kiểm tra bí danh dự án.
Sử dụng URL
addMessage()do CLI xuất, thêm tham số truy vấn văn bản, và mở URL đó trong trình duyệt:https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetooHàm này thực thi và chuyển hướng trình trình duyệt đến Firebase bảng điều khiển tại vị trí cơ sở dữ liệu nơi chuỗi văn bản được lưu trữ. Sự kiện ghi này kích hoạt
makeUppercase(), ghi phiên bản chữ hoa của chuỗi.
Sau khi triển khai và thực thi các hàm, bạn có thể xem nhật ký trong bảng điều khiển Google Cloud. Nếu bạn cần xoá các hàm trong quá trình phát triển hoặc thực tế, hãy sử dụng Firebase CLI.
Trong thực tế, bạn có thể muốn tối ưu hoá hiệu suất của hàm và kiểm soát chi phí bằng cách đặt số lượng tối thiểu và tối đa của các thực thể cần chạy. Xem phần Kiểm soát hành vi mở rộng quy mô để biết thêm thông tin về các tuỳ chọn thời gian chạy này.
Xem lại mã mẫu hoàn chỉnh
Sau đây là functions/index.js hoàn chỉnh chứa các hàm addMessage() và makeUppercase(). Các hàm này cho phép bạn truyền một
tham số đến một điểm cuối HTTP
ghi một giá trị vào Cloud Firestore, sau đó chuyển đổi giá trị đó bằng cách
chuyển tất cả các ký tự trong chuỗi thành chữ hoa.
// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers. const functions = require('firebase-functions/v1'); // 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 }); });
Các bước tiếp theo
Trong tài liệu này, bạn có thể tìm hiểu thêm về cách quản lý các hàm cho Cloud Functions cũng như cách xử lý tất cả các loại sự kiện được Cloud Functionshỗ trợ.
Để tìm hiểu thêm về Cloud Functions, bạn cũng có thể làm như sau:
- Đọc về các trường hợp sử dụng Cloud Functions.
- Thử lớp học lập trình Cloud Functionscodelab.
- Xem và chạy mã mẫu trên GitHub