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 của bạn với trình mô phỏng Cloud Functions, hãy đảm bảo rằng bạn nắm rõ quy trình công việc tổng thể của Bộ mô phỏng cục bộ của Firebase, đồng thời cài đặt và định cấu hình Bộ mô phỏng cục bộ cũng như xem xét các lệnh CLI của bộ công cụ này.

Chọn một dự án Firebase

Bộ công cụ mô phỏng cục bộ Firebase mô phỏng các sản phẩm cho một dự án Firebase duy nhất.

Để chọn dự án sẽ sử dụng, trước khi bạn khởi động trình mô phỏng, trong CLI, hãy chạy firebase use trong thư mục đang hoạt động của bạn. Bạn cũng có thể chuyển cờ --project vào từng lệnh của trình mô phỏng.

Bộ công cụ mô phỏng cục bộ hỗ trợ việc mô phỏng các dự án Firebase thực và các dự án minh hoạ.

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

Dự án Firebase thực tế là dự án do bạn tạo và định cấu hình (nhiều khả năng là thông qua bảng điều khiển của Firebase).

Các dự án thực tế 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, bộ chứa bộ nhớ, 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 tế, bạn có thể chạy trình mô phỏng cho bất kỳ hoặc tất cả sản phẩm được hỗ trợ.

Đối với bất kỳ sản phẩm nào 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 (thực thể 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. Những dự án này thường được truy cập thông qua lớp học lập trình hoặc các hướng dẫn khác.

Mã dự án của 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 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 thành cô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:

  • Thiết lập dễ dàng hơn vì bạn có thể chạy trình mô phỏng mà không cần tạo dự án Firebase
  • Mức độ an toàn cao 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 (chính thức), thì sẽ không có khả năng thay đổi dữ liệu, mức sử dụng và thanh toán
  • Hỗ trợ ngoại tuyến tốt hơn vì không cần truy cập Internet để tải cấu hình SDK xuống.

Đo lường ứng dụng của bạn để trò chuyện với trình mô phỏng

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

Nếu hoạt động thử nghiệm và nguyên mẫu 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 cho Firebase như sau:

Kotlin+KTX
// 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().useFunctionsEmulator(origin: "http://127.0.0.1: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);

Đo lường ứng dụng của bạn để mô phỏng các hàm 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 và khu vực máy chủ lưu trữ 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 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 trong nền từ những nguồn sau:

  • Trình mô phỏng Cơ sở dữ liệu theo thời gian thực
  • Trình mô phỏng Cloud Firestore
  • Trình mô phỏng xác thực
  • Trình mô phỏng Pub/Sub

Để kích hoạt các sự kiện trong nền, hãy sửa đổi tài nguyên phụ trợ bằng cách sử dụng giao diện người dùng của Bộ mô phỏng hoặc bằng cách kết nối ứng dụng/mã kiểm thử của bạn với trình mô phỏng thông qua 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 tạo ra

Đối với các hàm bạn triển khai để xử lý sự kiện tuỳ chỉnh của Tiện ích Firebase 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ợ điều kiện 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 trình mô phỏng Chức năng đám mây và Eventarc.

Môi trường 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. SDK quản trị của Firebase tự động kết nối với trình mô phỏng Eventarc khi biến môi trường EVENTARC_EMULATOR được đặt. 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 bộ trình mô phỏng cục bộ.

Khi các biến môi trường được định cấu hình đúng cách, SDK quản trị của Firebase sẽ tự động gửi các sự kiện đến trình mô phỏng Eventarc. Đổi lại, trình mô phỏng Eventarc sẽ thực hiện lệnh 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 giao diện người dùng Bộ mô phỏng để 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, thì 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 sau đây, trong đó chứa các giá trị hơi khác nhau để phát triển và kiểm thử cục bộ:

.env .env.dev .env.local
Hành tinh=Trái đất

KHÁN GIẢ=Con người

KHÁN GIẢ=Nhà phát triển KHÁN GIẢ=Người địa phương

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

  $ 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 xác thực 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 vào 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 phát hành công khai của bạn bằng cách sử dụng thông tin xác thực 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 vào các giá trị bí mật do các hạn chế về quyền.

Tương tự như tính năng 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 trên máy, đặc biệt là khi bạn không có quyền truy cập vào giá trị bí mật.

Ngoài ra còn 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ụ kiểm thử và nguyên mẫu khác:

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

Bạn có thể tìm thêm về Cloud Functions và SDK kiểm thử Cloud Functions trong bài viết Kiểm thử các hàm có tính tương tác và bài viết Kiểm thử đơn vị của Cloud Functions.

Trình mô phỏng Cloud Functions khác với phiên bản phát hành công khai như thế nào

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

Cloud IAM

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

Các hạn chế về bộ nhớ và bộ xử lý

Trình mô phỏng không thực thi các quy định hạn chế đối với 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.

Lưu ý rằng thời gian thực thi hàm có thể khác với thời gian chính thức 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 hàm bằng trình mô phỏng, bạn nên chạy các chương trình kiểm thử có giới hạn trong phiên bản chính thức để xác nhận thời gian thực thi.

Lập kế hoạch cho những điểm khác biệt trong môi trường địa phương và môi trường thực tế

Vì trình mô phỏng chạy trên máy cục bộ của bạn, nên trình mô phỏng phụ thuộc vào môi trường cục bộ của bạn đối với các ứng dụng cũng như các 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 phát hành chính thức của Google:

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

  • Tương tự, các tiện ích tích hợp sẵn (ví dụ: các lệnh shell như ls, mkdir) có thể khác với các phiên bản có trong phiên bản chính thức, đặc biệt là khi bạn đang phát triển trong một 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 lựa chọn thay thế chỉ dành cho nút thay cho lệnh gốc, hoặc bằng cách tạo tệp nhị phân Linux để đóng gói cùng 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 không thành công.

Tiếp theo là gì?