Di chuyển Tiện ích Firebase sang bộ công cụ hàm

Hướng dẫn này cho bạn biết cách di chuyển các tiện ích của bạn từ môi trường Firebase Extensions không dùng nữa sang một bộ chức năng mà bạn có thể cài đặt và triển khai trong Cloud Functions của riêng bạn cho toàn bộ mã nguồn Firebase (thế hệ thứ 2).

Firebase Extensions quản lý mọi khía cạnh của việc tạo, cập nhật và xoá tiện ích. Bộ chức năng đóng gói các chức năng của tiện ích dưới dạng Cloud Functions for Firebase thế hệ thứ 2 điển hình. Vì bộ chức năng là Cloud Functions tiêu chuẩn, nên bạn tạo, cập nhật, xoá và khắc phục sự cố cho bộ chức năng bằng CLI Firebase trong dự án Firebase. Hướng dẫn này giúp bạn chuẩn bị sẵn sàng để quản lý các hàm ngay bây giờ và áp dụng các bản cập nhật khi chúng được phát hành.

Trong suốt hướng dẫn này, tiện ích Stream Cloud Firestore to BigQuery (firestore-bigquery-export) được dùng làm ví dụ minh hoạ các lệnh và đầu ra của lệnh cho từng bước di chuyển.

Xác định lộ trình di chuyển

Firebase khuyến khích tất cả nhà xuất bản Firebase Extensions tạo các tiện ích thay thế dưới dạng bộ chức năng được xuất bản trên npm. Bạn có thể kiểm tra xem có bản thay thế bộ chức năng nào cho các tiện ích của mình hay không theo một số cách:

  • Chuyển đến trang Tiện ích của bảng điều khiển Firebase cho dự án của bạn. Mỗi tiện ích mà bạn đã cài đặt sẽ cho biết liệu tiện ích đó có sẵn bản thay thế bộ chức năng hay không.
  • Chạy firebase ext:list bên trong dự án Firebase trong một thiết bị đầu cuối để cho biết tiện ích nào bạn đã cài đặt có các tiện ích thay thế chính thức:

    firebase ext:list --project my-project
    
    i  extensions: ensuring required API firebaseextensions.googleapis.com is enabled...
    ✔  extensions: required API firebaseextensions.googleapis.com is enabled
    i  extensions: list of extensions installed in my-project:
    ┌────────────────────────────────────┬───────────┬────────────────────────────────┬────────┬─────────┬─────────────────────┬───────────────────────────────────────────────────┐
    │ Extension                          │ Publisher │ Instance ID                    │ State  │ Version │ Your last update    │ Replacement Kit                                   │
    ├────────────────────────────────────┼───────────┼────────────────────────────────┼────────┼─────────┼─────────────────────┼───────────────────────────────────────────────────┤
    │ firebase/firestore-bigquery-export │ firebase  │ firestore-bigquery-export-zbrp │ ACTIVE │ 0.3.2   │ 2026-06-10 18:35:03 │ @firebase-function-kits/firestore-bigquery-export │
    ├────────────────────────────────────┼───────────┼────────────────────────────────┼────────┼─────────┼─────────────────────┼───────────────────────────────────────────────────┤
    │ firebase/storage-resize-images     │ firebase  │ storage-resize-images          │ ACTIVE │ 0.3.6   │ 2026-06-03 17:41:24 │                                                   │
    └────────────────────────────────────┴───────────┴────────────────────────────────┴────────┴─────────┴─────────────────────┴───────────────────────────────────────────────────┘
    ⚠ Notice: Firebase Extensions will shut down on March 31, 2027. Learn more: https://firebase.google.com/docs/extensions/faq-and-troubleshooting
    

Nếu có một bộ chức năng thay thế chính thức cho tiện ích của bạn, bạn có thể di chuyển tiện ích đó bằng cách sử dụng phần Di chuyển sang bộ chức năng trên npm.

Nếu không tìm thấy tiện ích thay thế đã xuất bản, bạn có thể phát triển nhánh mã tiện ích và tạo tiện ích thay thế của riêng mình vì tất cả tiện ích đều là nguồn mở. Để làm việc này, hãy làm theo hướng dẫn Di chuyển sang bộ hàm tự tạo.

Chọn lộ trình di chuyển: Di chuyển sang các bộ hàm trên npm Di chuyển sang một bộ hàm do bạn tự tạo

Di chuyển sang bộ công cụ hàm trên npm

Kiểm tra các hạn chế đã biết về việc di chuyển

Trước khi bắt đầu di chuyển một phiên bản tiện ích, hãy kiểm tra xem chế độ thiết lập của bạn có sử dụng bất kỳ tính năng nào sau đây hay không. Những tính năng này yêu cầu giải pháp tạm thời hoặc chưa được hỗ trợ trong bộ công cụ chức năng:

  • Kho lưu trữ Docker tuỳ chỉnh và khoá KMS yêu cầu giải pháp tạm thời thủ công Cloud Functions for Firebase không hỗ trợ các tham số hệ thống thay thế để định cấu hình kho lưu trữ Docker tuỳ chỉnh hoặc Khoá mã hoá do khách hàng quản lý (khoá KMS). Nếu tiện ích của bạn định cấu hình một trong hai tham số này, hãy tham khảo giải pháp thay thế trong phần Câu hỏi thường gặp.

Trước khi bắt đầu

Bạn cần thiết lập Firebase CLI và khởi động một dự án Firebase. Khi sử dụng CLI, hãy đảm bảo rằng bạn đang dùng phiên bản firebase-tools >= 15.32.0. Phiên bản này có các lệnh di chuyển và bộ hàm mới.

Các quyền và vai trò bắt buộc đối với tài khoản

Tuỳ thuộc vào những gì cần được tạo và định cấu hình bằng Firebase CLI trong quá trình di chuyển, tài khoản mà bạn đang dùng để xác thực bằng Firebase và Google Cloud phải có các vai trò sau:

  • roles/firebaseextensions.editor
  • roles/cloudbuild.builds.editor
  • roles/artifactregistry.writer
  • roles/run.developer
  • roles/iam.serviceAccountUser
  • roles/iam.serviceAccountCreator
  • roles/cloudfunctions.admin (nếu bạn cần thực hiện setIamPermissions cho các điểm cuối công khai)
  • roles/secretmanager.admin (nếu sử dụng bí mật)
  • roles/serviceusage.serviceUsageAdmin (nếu bạn cần bật các API mới)

Bạn nên sử dụng một tài khoản đã cài đặt các tiện ích và triển khai các chức năng trước đó, vì hầu hết các quyền này sẽ được cấp. Nếu tài khoản mà bạn đang di chuyển cần có thêm vai trò, hãy làm theo hướng dẫn về IAM Google Cloud để thêm các vai trò đó.

Chọn một quy trình CLI

Để di chuyển từ một phiên bản tiện ích sang một bộ hàm có trên npm, hãy chọn một trong các lựa chọn sau:

  • (Đề xuất) Di chuyển bằng lệnh ext:migrate CLI. Lệnh này sẽ triển khai bản thay thế bộ chức năng trước khi gỡ cài đặt tiện ích mà bản thay thế đó thay thế.
  • Di chuyển bằng các lệnh CLI của bộ công cụ chức năng. Bạn có thể dùng các lệnh riêng biệt để cập nhật tiện ích, cài đặt một bộ chức năng, định cấu hình bộ chức năng đó như tiện ích, triển khai bộ chức năng và gỡ cài đặt tiện ích. Điều này giúp bạn linh hoạt hơn trong việc sắp xếp lại các lệnh hoặc thực hiện thêm công việc giữa các bước.

Di chuyển bằng ext:migrate

Mỗi phiên bản tiện ích, hãy bắt đầu di chuyển bằng cách chạy:

firebase ext:migrate --project <project-id>

Lệnh này sẽ hướng dẫn bạn thực hiện:

  1. Chọn một tiện ích cần di chuyển có sẵn bản thay thế bằng bộ chức năng chính thức.
  2. Chọn một phiên bản cụ thể của tiện ích đó.
  3. Cập nhật tiện ích lên phiên bản mới nhất nếu cần.
  4. Cài đặt bộ công cụ hàm, định cấu hình một phiên bản giống hệt như cách định cấu hình phiên bản tiện ích.
  5. Triển khai bộ hàm.
  6. Xác minh rằng bộ chức năng đã được triển khai thành công và tất cả các lệnh gọi lại vòng đời (nếu có) đều đã chạy.
  7. Gỡ cài đặt phiên bản tiện ích.

Nếu bạn biết tiện ích hoặc phiên bản tiện ích cụ thể mà bạn muốn di chuyển, hãy chỉ định tiện ích hoặc phiên bản đó bằng các cờ dòng lệnh sau:

firebase ext:migrate --extension firebase/firestore-bigquery-export --project <project-id>

# or

firebase ext:migrate --ext-instance firestore-bigquery-export-abcd --project <project-id>

Nếu bạn biết gói cụ thể mà bạn muốn di chuyển đến, đặc biệt là nếu đó không phải là gói thay thế chính thức do Google liệt kê, hãy chỉ định gói đó bằng cờ --package:

firebase ext:migrate --ext-instance firestore-bigquery-export-abcd --package @firebase-function-kits/firestore-bigquery-export --project <project-id>

Xác minh việc triển khai một bộ công cụ chức năng

Để xác minh rằng firebase deploy của bộ công cụ không có lỗi, hãy kiểm tra nhật ký triển khai để xem có kích hoạt móc vòng đời nào không. Các tiện ích phổ biến, chẳng hạn như Stream Cloud Firestore to BigQuery, sử dụng các lệnh gọi lại trong vòng đời. Sau đây là ví dụ về cách một lệnh gọi lại vòng đời xuất hiện khi được kích hoạt:

i  functions: Executing afterFirstDeploy lifecycle hook targeting: kit-firestore-bigquery-export-initBigQuerySync...
✔  functions: Successfully queued task for lifecycle hook kit-firestore-bigquery-export-initBigQuerySync in queue projects/my-project/locations/europe-west1/queues/kit-firestore-bigquery-export-initBigQuerySync.
i  functions: View logs for afterFirstDeploy at: https://console.cloud.google.com/logs/query;query=resource.type%3D%22cloud_run_revision%22%0Aresource.labels.service_name%3D%22kit-firestore-bigquery-export--initbigquerysync%22%0Aresource.labels.location%3D%22europe-west1%22;project=my-project

Các thông báo nhật ký này xác nhận những điều sau:

  • Đã tìm thấy và thực thi một lệnh gọi lại vòng đời.
  • Một tác vụ đã được đưa vào hàng đợi trong hàng đợi tác vụ được liên kết của lệnh gọi lại vòng đời.
  • Một đường liên kết đến Cloud Logging đã được cung cấp để bạn có thể xác thực rằng tác vụ đã hoàn tất mà không gặp lỗi.

Hãy truy cập vào đường liên kết nhật ký đến bảng điều khiển Google Cloud để xác thực rằng không có lỗi nào trong nhật ký và sự kiện hàng đợi tác vụ của bạn đã được xử lý thành công. Nếu sự kiện trong vòng đời không thực thi thành công, bạn có thể kích hoạt lại bằng cách chạy:

firebase functions:lifecycle:run <hook-name> <codebase>

Nếu đây là lần đầu tiên bạn triển khai một thực thể của bộ công cụ hàm, hãy chạy:

firebase functions:lifecycle:run afterFirstDeploy <kit-instance-id>

Nếu quyết định dừng hoặc huỷ quá trình di chuyển này bất cứ lúc nào trong quá trình xác thực, bạn có thể gỡ cài đặt bộ công cụ theo hướng dẫn trong phần Gỡ cài đặt tiện ích.

Xem tệp README của bộ công cụ chức năng

Một số bộ công cụ có thể yêu cầu thêm công việc ngoài những việc được bộ công cụ chức năng xử lý tự động. Xem README cho bộ dụng cụ mà bạn đang lắp đặt và làm theo mọi hướng dẫn bổ sung.

Di chuyển bằng CLI của bộ công cụ hàm

Trước khi bắt đầu, hãy xác định và ghi lại mã nhận dạng phiên bản của tiện ích mà bạn muốn di chuyển sang một bộ công cụ và tên gói npm của bộ công cụ thay thế. Bạn có thể tìm thấy cả hai thông tin này bằng cách sử dụng đầu ra của firebase ext:list. Hãy xem phần Xác định đường dẫn di chuyển để biết ví dụ về cách sử dụng ext:list.

1. Nâng cấp phiên bản tiện ích của bạn lên phiên bản mới nhất

Bạn phải cập nhật tiện ích lên phiên bản mới nhất để giảm thiểu sự khác biệt giữa phiên bản tiện ích và bộ thay thế của tiện ích. Nếu tiện ích của bạn chưa được nâng cấp, thì có thể có những thay đổi lớn, mang tính đột phá giữa phiên bản tiện ích và phiên bản thay thế bằng bộ công cụ. Cấu hình đã xuất có thể không khớp với cấu hình mà bộ công cụ mong đợi do các thông số thay đổi giữa các phiên bản.

Hãy dùng một trong các cách sau để cập nhật tiện ích, tuỳ thuộc vào nơi bạn đã cài đặt tiện ích:

  • Trên bảng điều khiểnFirebase
  • Từ CLI Firebase bằng cách sử dụng:
    • firebase ext:update <extension-instance-id> --project <project-id> firebase deploy --only extensions --project <project-id>

Nếu bạn bỏ qua bước này, CLI sẽ nhắc bạn nâng cấp khi xuất cấu hình nếu tiện ích của bạn không phải là phiên bản mới nhất.

2. Xem xét và cài đặt phiên bản bộ công cụ hàm thay thế

Bạn có thể cài đặt bộ công cụ chức năng bằng lệnh CLI sau:

firebase functions:kits:install --template migration --no-configure --package <npm-package-name> --project <project-id>

Khi bạn chọn một mã nhận dạng phiên bản cho bộ công cụ trong quá trình cài đặt, hãy nhớ ghi lại mã nhận dạng đó để sử dụng sau này trong hướng dẫn di chuyển.

Sau khi bạn cài đặt bộ công cụ này, một thư mục mới sẽ được tạo bên trong dự án Firebase của bạn với một vị trí như function-kits/<kit-name>/source. Thư mục này chứa gói npm có bộ công cụ thay thế tiện ích của bạn và một tệp index.ts cơ bản xuất những hàm đó để Firebase triển khai và đặt cấu hình tuỳ chỉnh.

Xem README của bộ công cụ và làm theo mọi hướng dẫn bổ sung được liệt kê ở đó.

Nếu có nhiều phiên bản của bộ công cụ trong cùng một dự án, bạn có thể lặp lại lệnh này để tạo các phiên bản mới của cùng một bộ công cụ. Bạn cũng có thể triển khai một phiên bản bộ công cụ duy nhất cho 2 dự án Firebase khác nhau với các cấu hình khác nhau (ví dụ: dự án dàn dựng và dự án phát hành công khai). Để tìm hiểu thêm về các chế độ thiết lập nâng cao này, hãy xem phần Di chuyển nâng cao.

Ví dụ minh hoạ:

firebase functions:kits:install --template migration --no-configure --package @firebase-function-kits/firestore-bigquery-export --project my-project

3. Định cấu hình phiên bản bộ công cụ hàm giống hệt như tiện ích

Bạn cần tuỳ chỉnh phiên bản bộ công cụ này bằng một cấu hình giống hệt với tiện ích mà phiên bản này sẽ thay thế. Bạn có thể xuất cấu hình phiên bản tiện ích của mình vào một tệp .env. Tệp này lưu trữ dữ liệu cấu hình tham số, biến môi trường và tham chiếu bí mật cho tất cả Cloud Functions, bao gồm cả các bộ công cụ. Để xuất trực tiếp vào tệp cấu hình của bộ công cụ, hãy chạy:

firebase ext:export --mode functions --instance <extension-instance-id> --kit-instance <kit-instance-id> --project <project-id>

Khi kết thúc bước này, thông tin cấu hình cho phiên bản này sẽ được lưu trữ trong một tệp .env dành riêng cho dự án trong thư mục cấu hình phiên bản, chẳng hạn như: function-kits/<kit-name>/config-<instance-id>/.env.<project-id>

4. Triển khai và xác minh việc thay thế bộ dụng cụ

Giờ đây, khi bộ công cụ đã được cài đặt và có sẵn dưới dạng một tập hợp các hàm, bạn có thể triển khai việc thay thế bộ công cụ. Bộ hàm hoạt động giống như các hàm tiêu chuẩn, trong đó mỗi phiên bản bộ hàm đóng vai trò là một toàn bộ mã nguồn riêng biệt để sắp xếp các hàm của bạn. Bạn có thể chọn triển khai tất cả các hàm hoặc chỉ một phiên bản bộ công cụ cụ thể. Trong khi di chuyển một phiên bản tiện ích duy nhất, hãy chỉ triển khai phiên bản bộ công cụ đó.

Nếu bộ công cụ của bạn sử dụng bất kỳ tham số mới nào không có trong phiên bản tiện ích mà bạn đã di chuyển, thì CLI Firebase sẽ nhắc bạn nhập các tham số đó khi bắt đầu quy trình triển khai. Điều này không được mong đợi trong ví dụ minh hoạ này từ một tiện ích firestore-bigquery-export mới nhất, nhưng nhiều bộ công cụ sẽ nhắc bạn nhập một tham số mới cho mọi nguồn kích hoạt sự kiện mà bộ công cụ sử dụng. Trong quá trình di chuyển này, các bộ công cụ được cập nhật sẽ sử dụng các hàm thế hệ thứ 2, trong khi các tiện ích trước đây sử dụng các hàm thế hệ thứ nhất. Trong thế hệ thứ 2, các hàm nằm gần nguồn sự kiện và được thêm dưới dạng một tham số bổ sung. Trong các bản cập nhật sau này, nếu bạn thêm các tham số mới, thì CLI sẽ nhắc bạn trong lần triển khai tiếp theo.

Ví dụ minh hoạ:

firebase deploy --only functions:firestore-bigquery-export --project my-project

Đầu ra:

=== Deploying to 'my-project'...
i  deploying functions
i  functions: Loaded environment variables from function-kits/firestore-bigquery-export/config-firestore-bigquery-export/.env.my-project
i  functions: ensuring required API bigquery.googleapis.com is enabled...
i  functions: ensuring required API cloudtasks.googleapis.com is enabled...
✔  functions: required APIs are enabled
i  functions: granting declarative IAM roles to managed service account:
   - BigQuery Data Editor
   - BigQuery User
   - Cloud Datastore User
   - Eventarc Event Receiver
   - roles/run.invoker
✔  functions: successfully granted IAM roles
i  functions: creating Node.js 22 (2nd Gen) function kit-firestore-bigquery-export-fsexportbigquery(us-central1)...
i  functions: creating Node.js 22 (2nd Gen) function kit-firestore-bigquery-export-initBigQuerySync(us-central1)...
i  functions: creating Node.js 22 (2nd Gen) function kit-firestore-bigquery-export-setupBigQuerySync(us-central1)...
✔  functions[kit-firestore-bigquery-export-fsexportbigquery(us-central1)] Successful create operation.
✔  functions[kit-firestore-bigquery-export-initBigQuerySync(us-central1)] Successful create operation.
✔  functions[kit-firestore-bigquery-export-setupBigQuerySync(us-central1)] Successful create operation.
i  functions: Executing afterFirstDeploy lifecycle hook targeting: kit-firestore-bigquery-export-initBigQuerySync...
✔  functions: Successfully queued task for lifecycle hook kit-firestore-bigquery-export-initBigQuerySync in queue projects/my-project/locations/us-central1/queues/kit-firestore-bigquery-export-initBigQuerySync.
✔  Deploy complete!

Để xác minh rằng firebase deploy của bộ công cụ không có lỗi, hãy kiểm tra nhật ký triển khai để xem có kích hoạt móc vòng đời nào không. Các tiện ích phổ biến, chẳng hạn như Stream Cloud Firestore to BigQuery, sử dụng các lệnh gọi lại trong vòng đời. Sau đây là ví dụ về cách một lệnh gọi lại vòng đời xuất hiện khi được kích hoạt:

i  functions: Executing afterFirstDeploy lifecycle hook targeting: kit-firestore-bigquery-export-initBigQuerySync...
✔  functions: Successfully queued task for lifecycle hook kit-firestore-bigquery-export-initBigQuerySync in queue projects/my-project/locations/europe-west1/queues/kit-firestore-bigquery-export-initBigQuerySync.
i  functions: View logs for afterFirstDeploy at: https://console.cloud.google.com/logs/query;query=resource.type%3D%22cloud_run_revision%22%0Aresource.labels.service_name%3D%22kit-firestore-bigquery-export--initbigquerysync%22%0Aresource.labels.location%3D%22europe-west1%22;project=my-project

Các thông báo nhật ký này xác nhận những điều sau:

  • Đã tìm thấy và thực thi một lệnh gọi lại vòng đời.
  • Một tác vụ đã được đưa vào hàng đợi trong hàng đợi tác vụ được liên kết của lệnh gọi lại vòng đời.
  • Một đường liên kết đến Cloud Logging đã được cung cấp để bạn có thể xác thực rằng tác vụ đã hoàn tất mà không gặp lỗi.

Hãy truy cập vào đường liên kết nhật ký đến bảng điều khiển Google Cloud để xác thực rằng không có lỗi nào trong nhật ký và sự kiện hàng đợi tác vụ của bạn đã được xử lý thành công. Nếu sự kiện trong vòng đời không thực thi thành công, bạn có thể kích hoạt lại bằng cách chạy:

firebase functions:lifecycle:run <hook-name> <codebase>

Nếu đây là lần đầu tiên bạn triển khai một thực thể của bộ công cụ hàm, hãy chạy:

firebase functions:lifecycle:run afterFirstDeploy <kit-instance-id>

Nếu quyết định dừng hoặc huỷ quá trình di chuyển này bất cứ lúc nào trong quá trình xác thực, bạn có thể gỡ cài đặt bộ công cụ theo hướng dẫn trong phần Gỡ cài đặt tiện ích.

5. Gỡ cài đặt tiện ích

Sau khi xác minh bộ chức năng đã triển khai, bạn có thể gỡ cài đặt tiện ích để không sao chép hành vi của tiện ích một lần cho bộ và một lần cho tiện ích. Bạn có thể gỡ cài đặt tất cả các tiện ích khỏi CLI Firebase bất kể bạn đã cài đặt chúng như thế nào nếu bạn truyền cờ --immediate:

firebase ext:uninstall <extension-instance-id> --project <project-id> --immediate

Ví dụ minh hoạ:

firebase ext:uninstall firestore-bigquery-export --project my-project --immediate

Đầu ra:

i  extensions: uninstalling firestore-bigquery-export...
i  extensions: deleting extension instance resources in project my-project...
✔  extensions: successfully uninstalled firestore-bigquery-export

Di chuyển nâng cao

Bạn có thể có các tiện ích trong nhiều dự án Firebase mà bạn muốn quản lý bằng một toàn bộ mã nguồn duy nhất. Ví dụ: nếu triển khai cùng một cơ sở hạ tầng cho môi trường testing và môi trường production, mỗi môi trường có một phiên bản documents Cloud Firestore mà bạn xuất sang BigQuery, thì bạn có thể đã cài đặt 2 phiên bản của tiện ích firestore-bigquery-export:

  • export-documents-testing
  • export-documents-production

Nếu bạn di chuyển 2 thực thể tiện ích này sang 2 thực thể bộ công cụ Functions trong một toàn bộ mã nguồn duy nhất khi làm việc với CLI Firebase và triển khai bằng firebase deploy --project testing và firebase deploy --project production, thì mỗi lần triển khai sẽ tạo 2 thực thể trong cả môi trường testing và production.

Thay vào đó, hãy thay thế 2 phiên bản tiện ích bằng một phiên bản bộ công cụ hàm firestore-bigquery-export được triển khai cho nhiều dự án, trong đó mỗi dự án có cấu hình riêng. Thư mục cấu hình cho phiên bản sẽ có dạng như sau:

  • config-export-documents/
    • .env.testing
    • .env.production

Mỗi lần triển khai đến testing và production sẽ tạo một phiên bản của bộ công cụ với cấu hình tương ứng. Các lệnh CLI hiện có sẽ tạo chế độ thiết lập này miễn là bạn truyền cờ --project trong mỗi lệnh gọi ext:migrate hoặc functions:kits:install.

Ví dụ minh hoạ:

firebase functions:kits:install --package @firebase-function-kits/firestore-bigquery-export --project testing --no-configure --template migration
✔ What would you like to name this kit? firestore-bigquery-export
✔ What would you like to name this instance? export-documents
✔  Wrote function-kits/firestore-bigquery-export/source/package.json
✔  Wrote function-kits/firestore-bigquery-export/source/tsconfig.json
✔  Wrote function-kits/firestore-bigquery-export/source/.gitignore
✔  Wrote function-kits/firestore-bigquery-export/source/src/index.ts
i  functions: Running npm install
✔  Wrote configuration info to firebase.json
✔  functions: Function kit firestore-bigquery-export successfully installed.
# This creates the export-documents instance with an empty .env.testing file
# for the testing project. Now populate it via export:
firebase ext:export --mode functions --instance export-documents-testing \
  --kit-instance export-documents --project testing

# Repeat the export for production into the same kit instance to create
# .env.production from the export-documents-prod instance:
firebase ext:export --mode functions --instance export-documents-prod \
  --kit-instance export-documents --project production

Giờ đây, bạn đã có một thực thể duy nhất của bộ công cụ được định cấu hình để triển khai cho các dự án testing và production với cấu hình tương ứng. Nếu tạo một thực thể trong dự án testing và chạy lệnh functions:kits:install cho cùng một gói trong dự án production, bạn sẽ thấy lời nhắc có lựa chọn dùng lại thực thể được định cấu hình cho testing hoặc cài đặt thực thể thứ hai.