Kết nối ứng dụng của bạn với Trình mô phỏng Cloud Functions

Trước khi kết nối ứng dụng với trình mô phỏng Cloud Functions, hãy đảm bảo rằng bạn hiểu quy trình làm việc tổng thể của Firebase Local Emulator Suite, đồng thời bạn cài đặt và định cấu hình Local Emulator Suite cũng như xem xét các lệnh CLI của trình mô phỏng này.

Chọn một dự án Firebase

Firebase Local Emulator Suite mô phỏng các sản phẩm cho một dự án Firebase duy nhất.

Để chọn dự án cần dùng, trước khi bạn khởi động trình mô phỏng, hãy chạy firebase use trong thư mục làm việc của bạn trong CLI. Hoặc bạn có thể truyền cờ --project đến từng lệnh trình mô phỏng.

Local Emulator Suite hỗ trợ hoạt động mô phỏng các dự án Firebase thực và dự án demo.

Loại dự án Tính năng Sử dụng với trình mô phỏng
Real

Dự án Firebase thực là dự án mà bạn đã tạo và định cấu hình (rất có thể là thông qua bảng điều khiển Firebase).

Các dự án thực có tài nguyên trực tiếp, chẳng hạn như các phiên bản cơ sở dữ liệu, vùng lưu trữ, hàm hoặc bất kỳ tài nguyên nào khác mà bạn thiết lập cho dự án Firebase đó.

Khi làm việc với các dự án Firebase thực, bạn có thể chạy trình mô phỏng cho bất kỳ hoặc tất cả các sản phẩm được hỗ trợ.

Đối với mọi sản phẩm mà bạn không mô phỏng, ứng dụng và mã của bạn sẽ tương tác với tài nguyên trực tiếp (phiên bản cơ sở dữ liệu, bộ chứa lưu trữ, hàm, v.v.).

Bản trình diễn

Dự án Firebase minh hoạ không có cấu hình Firebase thực và không có tài nguyên trực tiếp. Người dùng thường truy cập vào các dự án này thông qua lớp học mã hoặc các hướng dẫn khác.

Mã dự án cho các dự án minh hoạ có tiền tố demo-.

Khi làm việc với các dự án Firebase minh hoạ, ứng dụng và mã của bạn chỉ tương tác với các trình mô phỏng. Nếu ứng dụng của bạn cố gắng tương tác với một tài nguyên mà trình mô phỏng không chạy, thì mã đó sẽ không hoạt động.

Bạn nên sử dụng các dự án minh hoạ bất cứ khi nào có thể. Các lợi ích bao gồm:

  • Dễ dàng thiết lập hơn vì bạn có thể chạy trình mô phỏng mà không cần tạo dự án Firebase
  • An toàn hơn, vì nếu mã của bạn vô tình gọi các tài nguyên không được mô phỏng (sản xuất), thì không có khả năng xảy ra thay đổi dữ liệu, mức sử dụng và việc thanh toán
  • Hỗ trợ tốt hơn khi không có mạng, vì bạn không cần truy cập vào Internet để tải cấu hình SDK xuống.

Đo lường ứng dụng để giao tiếp với trình mô phỏng

Đo lường ứng dụng cho các hàm có thể gọi

Nếu các hoạt động nguyên mẫu và kiểm thử của bạn liên quan đến các hàm phụ trợ có thể gọi, hãy định cấu hình hoạt động tương tác với trình mô phỏng Cloud Functions for Firebase như sau:

Kotlin
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val functions = Firebase.functions
functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseFunctions functions = FirebaseFunctions.getInstance();
functions.useEmulator("10.0.2.2", 5001);
Swift
Functions.functions().useEmulator(withHost: "localhost", port: 5001)

Web

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "127.0.0.1", 5001);

Web

firebase.functions().useEmulator("127.0.0.1", 5001);

Thiết lập ứng dụng của bạn để mô phỏng các chức năng HTTPS

Mỗi hàm HTTPS trong mã của bạn sẽ được phân phát từ trình mô phỏng cục bộ bằng cách sử dụng định dạng URL sau:

http://$HOST:$PORT/$PROJECT/$REGION/$NAME

Ví dụ: một hàm helloWorld đơn giản có cổng máy chủ lưu trữ và khu vực mặc định sẽ được phân phát tại:

https://localhost:5001/$PROJECT/us-central1/helloWorld

Đo lường ứng dụng của bạn để mô phỏng các chức năng hàng đợi tác vụ

Trình mô phỏng tự động thiết lập các hàng đợi tác vụ được mô phỏng dựa trên các định nghĩa về trình kích hoạt và Admin SDK sẽ định tuyến lại các yêu cầu được đưa vào hàng đợi đến trình mô phỏng nếu phát hiện thấy trình mô phỏng đang chạy thông qua biến môi trường CLOUD_TASKS_EMULATOR_HOST.

Xin lưu ý rằng hệ thống gửi được dùng trong quá trình sản xuất phức tạp hơn hệ thống được triển khai trong trình mô phỏng. Vì vậy, bạn không nên mong đợi hành vi được mô phỏng sẽ phản ánh chính xác môi trường sản xuất. Các tham số trong trình mô phỏng cung cấp giới hạn trên cho tốc độ mà các tác vụ được gửi đi và thử lại.

Đo lường ứng dụng của bạn để mô phỏng các hàm được kích hoạt ở chế độ nền

Trình mô phỏng Cloud Functions hỗ trợ các hàm được kích hoạt ở chế độ nền từ các nguồn sau:

  • Realtime Database trình mô phỏng
  • Cloud Firestore trình mô phỏng
  • Authentication trình mô phỏng
  • Pub/Sub trình mô phỏng
  • Trình mô phỏng cảnh báo của Firebase

Để kích hoạt các sự kiện ở chế độ nền, hãy sửa đổi tài nguyên phụ trợ bằng cách sử dụng Emulator Suite UI hoặc bằng cách kết nối ứng dụng hoặc mã kiểm thử với trình mô phỏng bằng SDK cho nền tảng của bạn.

Trình xử lý kiểm thử cho các sự kiện tuỳ chỉnh do Tiện ích phát ra

Đối với các hàm mà bạn triển khai để xử lý các sự kiện tuỳ chỉnh Firebase Extensions bằng Cloud Functions phiên bản 2, trình mô phỏng Cloud Functions sẽ ghép nối với trình mô phỏng Eventarc để hỗ trợ các trình kích hoạt Eventarc.

Để kiểm thử trình xử lý sự kiện tuỳ chỉnh cho các tiện ích phát ra sự kiện, bạn phải cài đặt Cloud Functions và trình mô phỏng Eventarc.

Thời gian chạy Cloud Functions đặt biến môi trường EVENTARC_EMULATOR thành localhost:9299 trong quy trình hiện tại nếu trình mô phỏng Eventarc đang chạy. Firebase Admin SDK sẽ tự động kết nối với trình mô phỏng Eventarc khi bạn đặt biến môi trường EVENTARC_EMULATOR. Bạn có thể sửa đổi cổng mặc định như đã thảo luận trong phần Định cấu hình Local Emulator Suite.

Khi các biến môi trường được định cấu hình đúng cách, Firebase Admin SDK sẽ tự động gửi các sự kiện đến trình mô phỏng Eventarc. Đến lượt, trình mô phỏng Eventarc sẽ gọi lại trình mô phỏng Cloud Functions để kích hoạt mọi trình xử lý đã đăng ký.

Bạn có thể kiểm tra nhật ký Hàm trong Emulator Suite UI để biết thông tin chi tiết về quá trình thực thi trình xử lý.

Định cấu hình môi trường kiểm thử cục bộ

Nếu các hàm của bạn dựa vào cấu hình môi trường dựa trên dotenv, bạn có thể mô phỏng hành vi đó trong môi trường kiểm thử cục bộ.

Khi sử dụng trình mô phỏng Cloud Functions cục bộ, bạn có thể ghi đè các biến môi trường cho dự án của mình bằng cách thiết lập tệp .env.local. Nội dung của .env.local được ưu tiên hơn .env và tệp .env dành riêng cho dự án.

Ví dụ: một dự án có thể bao gồm 3 tệp này chứa các giá trị hơi khác nhau cho quá trình phát triển và kiểm thử cục bộ:

.env .env.dev .env.local
PLANET=Earth

ĐỐI TƯỢNG=Con người

ĐỐI TƯỢNG=Dev Humans ĐỐI TƯỢNG=Người dân địa phương

Khi được khởi động trong bối cảnh cục bộ, trình mô phỏng sẽ tải các biến môi trường như minh hoạ:

  $ firebase emulators:start
  i  emulators: Starting emulators: functions
  # Starts emulator with following environment variables:
  #  PLANET=Earth
  #  AUDIENCE=Local Humans

Thông tin bí mật và thông tin đăng nhập trong trình mô phỏng Cloud Functions

Trình mô phỏng Cloud Functions hỗ trợ việc sử dụng các khoá bí mật để lưu trữ và truy cập thông tin cấu hình nhạy cảm. Theo mặc định, trình mô phỏng sẽ cố gắng truy cập vào các khoá bí mật sản xuất của bạn bằng cách sử dụng thông tin đăng nhập mặc định của ứng dụng. Trong một số trường hợp như môi trường CI, trình mô phỏng có thể không truy cập được các giá trị bí mật do hạn chế về quyền.

Tương tự như chế độ hỗ trợ trình mô phỏng Cloud Functions cho các biến môi trường, bạn có thể ghi đè các giá trị bí mật bằng cách thiết lập một tệp .secret.local. Điều này giúp bạn dễ dàng kiểm thử các hàm cục bộ, đặc biệt nếu bạn không có quyền truy cập vào giá trị bí mật.

Có những công cụ nào khác để kiểm thử Cloud Functions?

Trình mô phỏng Cloud Functions được bổ sung bằng các công cụ nguyên mẫu và kiểm thử khác:

  • Trình bao Cloud Functions, cho phép tạo mẫu và phát triển các hàm lặp đi lặp lại, mang tính tương tác. Shell sử dụng trình mô phỏng Cloud Functions với giao diện theo kiểu REPL để phát triển. Không có tính năng tích hợp với trình mô phỏng Cloud Firestore hoặc Realtime Database. Bằng cách sử dụng shell, bạn có thể mô phỏng dữ liệu và thực hiện các lệnh gọi hàm để mô phỏng hoạt động tương tác với những sản phẩm mà Local Emulator Suite hiện không hỗ trợ: Analytics, Cấu hình từ xa và Crashlytics.
  • Firebase Test SDK cho Cloud Functions, một Node.js có khung mocha để phát triển các hàm. Trên thực tế, Cloud Functions Test SDK cung cấp tính năng tự động hoá trên shell Cloud Functions.

Bạn có thể tìm hiểu thêm về trình bao Cloud Functions và Cloud Functions Test SDK tại Kiểm thử các hàm một cách tương tácKiểm thử đơn vị của Cloud Functions.

Sự khác biệt giữa trình mô phỏng Cloud Functions và bản phát hành công khai

Trình mô phỏng Cloud Functions khá giống với môi trường sản xuất đối với phần lớn các trường hợp sử dụng. Chúng tôi đã nỗ lực rất nhiều để đảm bảo mọi thứ trong thời gian chạy Node gần với quá trình sản xuất nhất có thể. Tuy nhiên, trình mô phỏng không mô phỏng toàn bộ môi trường sản xuất được chứa trong vùng chứa, vì vậy, mặc dù mã hàm của bạn sẽ thực thi một cách thực tế, nhưng các khía cạnh khác của môi trường (tức là tệp cục bộ, hành vi sau khi hàm gặp sự cố, v.v.) sẽ khác.

Cloud IAM

Bộ công cụ mô phỏng Firebase không cố gắng sao chép hoặc tuân thủ bất kỳ hành vi nào liên quan đến IAM để chạy. Các trình mô phỏng tuân thủ Quy tắc bảo mật của Firebase được cung cấp, nhưng trong những trường hợp thường dùng IAM, chẳng hạn như để đặt tài khoản dịch vụ gọi Cloud Functions và do đó là các quyền, trình mô phỏng không thể định cấu hình và sẽ sử dụng tài khoản có sẵn trên toàn cầu trên máy của nhà phát triển, tương tự như việc chạy trực tiếp một tập lệnh cục bộ.

Hạn chế về bộ nhớ và bộ xử lý

Trình mô phỏng không thực thi các hạn chế về bộ nhớ hoặc bộ xử lý đối với các hàm của bạn. Tuy nhiên, trình mô phỏng có hỗ trợ các hàm hết thời gian chờ thông qua đối số thời gian chạy timeoutSeconds.

Xin lưu ý rằng thời gian thực thi hàm có thể khác với thời gian thực thi trong quá trình sản xuất khi các hàm được chạy trong trình mô phỏng. Sau khi thiết kế và kiểm thử các chức năng bằng trình mô phỏng, bạn nên chạy các kiểm thử có giới hạn trong quá trình phát hành công khai để xác nhận thời gian thực thi.

Lập kế hoạch cho sự khác biệt giữa môi trường cục bộ và môi trường phát hành công khai

Vì trình mô phỏng chạy trên máy cục bộ, nên trình mô phỏng này phụ thuộc vào môi trường cục bộ của bạn đối với các ứng dụng, chương trình và tiện ích tích hợp.

Xin lưu ý rằng môi trường cục bộ để phát triển Cloud Functions có thể khác với môi trường sản xuất của Google:

  • Các ứng dụng mà bạn cài đặt cục bộ để mô phỏng môi trường sản xuất (ví dụ: ImageMagick trong hướng dẫn này) có thể khác về hành vi so với môi trường sản xuất, đặc biệt nếu bạn yêu cầu các phiên bản khác hoặc phát triển trong môi trường không phải Linux. Cân nhắc việc triển khai bản sao nhị phân của chương trình bị thiếu cùng với việc triển khai hàm.

  • Tương tự, các tiện ích tích hợp (ví dụ: các lệnh shell như ls, mkdir) có thể khác với các phiên bản có trong bản phát hành công khai, đặc biệt nếu bạn đang phát triển trong môi trường không phải Linux (ví dụ: macOS). Bạn có thể xử lý vấn đề này bằng cách sử dụng các giải pháp thay thế chỉ dành cho Node cho các lệnh gốc hoặc bằng cách tạo các tệp nhị phân Linux để đi kèm với quá trình triển khai.

Đang thử lại

Trình mô phỏng Cloud Functions không hỗ trợ việc thử lại các hàm khi gặp lỗi.

Bước tiếp theo là gì?