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, cài đặt và định cấu hình Local Emulator Suite cũng như xem lại 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.

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

Local Emulator Suite hỗ trợ mô phỏng các dự án Firebase thực và 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 (rất có thể thông qua bảng điều khiển 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ộ nhớ nhóm, hàm hoặc bất kỳ tài nguyên nào khác mà bạn thiết lập cho Firebase đó dự án.

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 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 (phiên bản cơ sở dữ liệu, bộ nhớ) nhóm, 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. Bạn thường truy cập vào các dự án này thông qua các lớp học lập trình 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ạ, các ứng dụng và mã của bạn sẽ tương tác với chỉ có thể sử dụng 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
  • An toàn hơn vì nếu mã của bạn vô tình gọi ra những lệnh 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 của bạn 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 của bạn cho các hàm có thể gọi

Nếu hoạt động kiểm thử 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 for 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 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 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 để mô phỏng các chức năng của hàng đợi tác vụ

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

Xin lưu ý rằng hệ thống điều phối dùng trong môi trường 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 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 độ gửi và thử lại tác vụ.

Đ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:

  • Trình mô phỏng 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 cảnh báo Firebase

Để 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 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ý 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ợ 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 trình mô phỏng Cloud Functions và 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. Các Firebase Admin SDK tự động kết nối với Eventarc trình mô phỏng khi biến môi trường EVENTARC_EMULATOR được đặt. Bạn có thể sửa đổi cổng mặc định như được thảo luận trong Đị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 tự động gửi sự kiện đến trình mô phỏng Eventarc. Đổi lại, Eventarc trình mô phỏng thực hiện lệnh gọi lại đến trình mô phỏng Cloud Functions để kích hoạt bất kỳ 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ề trình xử lý thực thi.

Đị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 trên dotenv cấu hình môi trường, 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 một trình mô phỏng Cloud Functions cục bộ, bạn có thể ghi đè môi trường cho dự án của bạn 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 ba tệp này chứa hơi các giá trị khác nhau để phát triển và kiểm thử cục bộ:

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

AUDIENCE=Con người

AUDIENCE=Dev Humans 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 thông tin bảo 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 bí mật sản xuất bằ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 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 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.

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

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 thực hiện các hàm lặp lại, tương tác tạo nguyên mẫu và phát triển. Shell sử dụng trình mô phỏng Cloud Functions với giao diện kiểu REPL để phát triển. Không tích hợp với Trình mô phỏng Cloud Firestore hoặc Realtime Database được cung cấp. Bằng cách sử dụng shell, bạn 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 Local Emulator Suite hiện không hỗ trợ: Analytics, Cấu hình từ xa và Crashlytics.
  • SDK kiểm thử Firebase cho Cloud Functions, một Node.js có khung mocha để phát triển các hàm. Về cơ bản, SDK kiểm thử Cloud Functions 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ề shell của Cloud Functions và SDK kiểm thử Cloud Functions trong bài viết Kiểm thử hàm theo 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 chính thức

Trình mô phỏng Cloud Functions khá giống với môi trường phát hành chính thức trong hầu hết 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 môi trường thời gian chạy Node đều gần với môi trường sản xuất nhất có thể. Tuy nhiên, không bắt chước môi trường sản xuất trong vùng chứa đầy đủ, để mặc dù mã hàm sẽ thực thi trên thực tế, 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 nhau.

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. Trình mô phỏng tuân thủ chính sách bảo mật của Firebase Có quy tắc, nhưng trong các trường hợp thường dùng IAM, ví dụ: thiết lập Cloud Functions tài khoản dịch vụ gọi và do đó cấp 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 vào máy phát triển của bạn, tương tự như chạy trực tiếp 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ý cho các hàm của bạn. Tuy nhiên, trình mô phỏng 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 phát hành khi các hàm chạy trong trình mô phỏng. Chúng tôi khuyên bạn nên sau khi thiết kế và thử nghiệm với trình mô phỏng, bạn hãy chạy các kiểm thử 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 nó phụ thuộc vào môi trường cho các ứng dụng cũng như các chương trình và tiện ích tích hợp sẵn.

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 công khai của Google:

  • Các ứng dụng 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 là 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ự như vậy, 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ó sẵn trong phiên bản chính thức, đặc biệt nếu bạn đang phát triển bằng 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 so với lệnh gốc hoặc bằng cách tạo tệp nhị phân Linux để với lần triển khai của bạn.

Đ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ì?