Di chuyển Tiện ích Firebase sang một bộ hàm do bạn tự tạo

Chọn cách thức di chuyển: Di chuyển sang bộ hàm trên npm Di chuyển sang bộ hàm tự tạo

Nếu nhà xuất bản chưa tạo bộ công cụ thay thế chính thức được phân phối trên npm, thì hướng dẫn này sẽ hướng dẫn bạn các bước để phân nhánh tiện ích của họ và thiết lập tiện ích đó làm bộ công cụ hàm cục bộ.

Kiểm tra các hạn chế đã biết khi 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 cần có giải pháp thay thế hoặc chưa được hỗ trợ trong bộ hàm hay không:

  • Kho lưu trữ Docker tuỳ chỉnh và khoá KMS yêu cầu giải pháp 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 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 CLI Firebase và khởi động một dự án Firebase. Khi sử dụng CLI, hãy đảm bảo bạn đang dùng firebase-tools phiên bản >= 15.32.0, 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 CLI Firebase trong quá trình di chuyển, tài khoản 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 tiện ích và triển khai các hàm trước đó, vì hầu hết các quyền này đều đã được cấp. Nếu tài khoản di chuyển của bạn cần thêm vai trò, hãy làm theo Google Cloud hướng dẫn về IAM để thêm vai trò.

Nâng cấp phiên bản tiện ích 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ế. Nếu tiện ích của bạn không được nâng cấp, thì có thể có những thay đổi đáng kể, có thể gây lỗi giữa phiên bản tiện ích và bộ công cụ thay thế. Cấu hình đã xuất có thể không khớp với cấu hình mà bộ công cụ dự kiến do các thay đổi về tham số giữa các phiên bản.

Sử dụng một trong các lựa chọn sau để cập nhật tiện ích, tuỳ thuộc vào nơi cài đặt tiện ích:

  • Từ Firebase console
  • Từ Firebase CLI 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.

Phân nhánh tiện ích thành một bộ hàm cục bộ

Trước khi bắt đầu chuyển đổi một tiện ích thành bộ hàm cục bộ, hãy đảm bảo rằng mã nguồn của tiện ích nằm trong dự án Firebase của bạn. Để thực hiện việc này, hãy sao chép kho lưu trữ tiện ích từ GitHub, tạo một thư mục bên trong thư mục gốc của dự án Firebase, rồi sao chép thư mục functions/ và extension.yaml của tiện ích vào đó:

mkdir -p path/to/kit
cp -r /path/to/extension-source/functions/* path/to/kit/
cp /path/to/extension-source/extension.yaml path/to/kit/.

Làm theo các bước từ 1 đến 8 trong hướng dẫn di chuyển của nhà xuất bản để di chuyển mã nguồn của tiện ích sang hàm thế hệ thứ 2. Sau đó, hãy tiếp tục thực hiện các bước sau.

Điều chỉnh bộ công cụ cục bộ để hỗ trợ khu vực hàm được xuất và các tham số nâng cao

Trong bộ hàm cục bộ, CLI Firebase không tạo tệp index.ts để thiết lập gói và định cấu hình gói đó để sử dụng các tham số hệ thống đã di chuyển. Để sử dụng khu vực hàm và các tham số nâng cao đã được định cấu hình cho tiện ích, hãy thiết lập tệp index.ts để đọc định dạng do firebase ext:export --mode functions xuất vào tệp biến môi trường.

Cụ thể, trong tệp index.ts cấp cao nhất xuất các hàm của bạn, hãy xác định một tham số cho FUNCTION_DEFAULT_REGION và gọi setGlobalOptions bằng các biến môi trường của biểu mẫu EXT_MIGRATED_SYSTEM_<GLOBAL_OPTION>, tương tự như mẫu index-kit-migration.ts mà CLI sử dụng:

import { setGlobalOptions } from "firebase-functions";
import { MemoryOption, VpcEgressSetting, IngressSetting } from "firebase-functions/v2/options";
import { defineString } from "firebase-functions/params";

export const regionParam = defineString("FUNCTION_DEFAULT_REGION", {
  input: { text: { nonEmpty: true } },
  description: "Global default region where functions should be deployed. Can be overridden per-function.",
});

setGlobalOptions({
  region: regionParam,
  memory: (process.env.EXT_MIGRATED_SYSTEM_MEMORY as MemoryOption) ?? undefined,
  timeoutSeconds: process.env.EXT_MIGRATED_SYSTEM_TIMEOUTSECONDS
    ? Number(process.env.EXT_MIGRATED_SYSTEM_TIMEOUTSECONDS)
    : undefined,
  vpcConnectorEgressSettings:
    process.env.EXT_MIGRATED_SYSTEM_VPCCONNECTOREGRESSSETTINGS &&
    process.env.EXT_MIGRATED_SYSTEM_VPCCONNECTOREGRESSSETTINGS !== "VPC_CONNECTOR_EGRESS_SETTINGS_UNSPECIFIED"
      ? (process.env.EXT_MIGRATED_SYSTEM_VPCCONNECTOREGRESSSETTINGS as VpcEgressSetting)
      : undefined,
  vpcConnector: process.env.EXT_MIGRATED_SYSTEM_VPCCONNECTOR ?? undefined,
  maxInstances: process.env.EXT_MIGRATED_SYSTEM_MAXINSTANCES
    ? Number(process.env.EXT_MIGRATED_SYSTEM_MAXINSTANCES)
    : undefined,
  minInstances: process.env.EXT_MIGRATED_SYSTEM_MININSTANCES
    ? Number(process.env.EXT_MIGRATED_SYSTEM_MININSTANCES)
    : undefined,
  ingressSettings: (process.env.EXT_MIGRATED_SYSTEM_INGRESSSETTINGS as IngressSetting) ?? undefined,
  // Parses a comma-separated string of key:value pairs into a key-value object
  // (for example, "key1:value1,key2:value2" -> { key1: "value1", key2: "value2" }).
  labels: process.env.EXT_MIGRATED_SYSTEM_LABELS
    ? process.env.EXT_MIGRATED_SYSTEM_LABELS.split(",").reduce<Record<string, string> | undefined>(
        (acc, curr) => {
          const [key, value] = curr.split(":");
          const trimmedKey = key?.trim();
          const trimmedValue = value?.trim();
          if (!trimmedKey || !trimmedValue) {
            return acc;
          }
          acc = acc ?? {};
          acc[trimmedKey] = trimmedValue;
          return acc;
        },
        undefined,
      )
    : undefined,
});

// Re-export all functions so the Firebase CLI can deploy them
export * from "./your-functions";

Kiểm thử bộ công cụ trước khi di chuyển

Giờ đây, bạn đã có một bộ hàm cục bộ mà khi được triển khai, bộ hàm này sẽ hoạt động giống hệt như một bản cài đặt mới của tiện ích. Bước tiếp theo là xác minh và khắc phục mọi vấn đề vô tình xảy ra trong quá trình di chuyển trước khi di chuyển các phiên bản tiện ích chính thức sang phiên bản đó.

Trước tiên, hãy thêm nhánh của bạn dưới dạng bộ công cụ cục bộ, định cấu hình và triển khai bộ công cụ đó cho một dự án thử nghiệm. Bộ công cụ hàm cục bộ phải nằm trong dự án Firebase của bạn, vì vậy, nếu kho lưu trữ tiện ích được sao chép nằm ngoài dự án Firebase, hãy di chuyển kho lưu trữ đó vào trong thư mục dự án. Sau đó, hãy chạy lệnh cài đặt bộ công cụ sau để cài đặt bộ công cụ đó dưới dạng bộ công cụ cục bộ:

firebase functions:kits:install --directory <path-to-your-fork> --project <test-project-id>

Lệnh này hướng dẫn bạn chọn mã bộ công cụ, mã thực thể và cấu hình cho thực thể thử nghiệm đầu tiên. Sau đó, công cụ này sẽ sửa đổi tệp firebase.json của bạn để đăng ký một bộ công cụ cục bộ trỏ đến thư mục đã phân nhánh, với cấu hình cho mỗi thực thể được lưu trữ trong tệp .env tại function-kits/<kit-id>/config-<instance-id>.

Triển khai bộ công cụ cục bộ vào một dự án thử nghiệm có các tài nguyên thích hợp để kiểm thử hành vi của bộ công cụ đó. Nếu bạn đã thiết lập một dự án thử nghiệm để thử nghiệm tiện ích, hãy chạy lệnh sau:

firebase deploy --only functions:<kit-instance-id> --project <test-project-id>

Ví dụ thực tế: Phát trực tuyến Cloud Firestore đến BigQuery (firestore-bigquery-export)

Xác minh quá trình đồng bộ hoá từ Cloud Firestore sang BigQuery từ đầu đến cuối:

  1. Trong trang Cloud Firestore của bảng điều khiển Firebase, hãy tạo tập hợp mà bạn đặt làm COLLECTION_PATH (users) nếu tập hợp đó chưa tồn tại.
  2. Tạo một tài liệu có tên bigquery-mirror-test chứa bất kỳ trường nào có giá trị bất kỳ.
  3. Trong trang BigQuery của bảng điều khiển Google Cloud, hãy truy vấn bảng nhật ký thay đổi thô. Tệp này phải chứa một hàng duy nhất ghi lại quá trình tạo tài liệu:

    SELECT * FROM `PROJECT_ID.analytics.users_raw_changelog`
    
  4. Truy vấn chế độ xem mới nhất, chế độ này sẽ trả về sự kiện thay đổi mới nhất cho tài liệu duy nhất hiện có (bigquery-mirror-test):

    SELECT * FROM `PROJECT_ID.analytics.users_raw_latest`
    
  5. Xoá tài liệu bigquery-mirror-test trong Cloud Firestore. Hàng này sẽ biến mất khỏi chế độ xem mới nhất và một sự kiện DELETE sẽ được thêm vào bảng nhật ký thay đổi thô.

    Bạn có thể kiểm tra toàn bộ nhật ký của một tài liệu bằng:

    SELECT *
       FROM `PROJECT_ID.analytics.users_raw_changelog`
       WHERE document_name = "bigquery-mirror-test"
       ORDER BY timestamp ASC
    

Sự khác biệt so với việc thử nghiệm tiện ích:

  • Điều kiện kích hoạt triển khai dưới dạng kit-<kit-instance-id>-fsexportbigquery, chứ không phải ext-<instanceId>-fsexportbigquery. Tìm tên đó trong trang tổng quan và nhật ký của Cloud Functions.
  • Mã của bạn chạy trong Firebase Local Emulator Suite dưới dạng các hàm chuẩn. Bạn có thể đặt giá trị tham số để sử dụng trong trình mô phỏng bằng .env.local. Bạn cũng có thể kiểm thử đơn vị mã của mình bằng SDK firebase-functions-test như mô tả trong phần Kiểm thử đơn vị của Cloud Functions.
  • Việc cấp phép không còn do thời gian chạy của Tiện ích điều khiển nữa. Nếu bảng nhật ký thay đổi bị thiếu sau khi triển khai, hãy chạy lại tác vụ thiết lập theo cách thủ công: firebase functions:lifecycle:run afterFirstDeploy <kit-instance-id>. Tác vụ này có tính chất luỹ đẳng, vì vậy, việc chạy lại tác vụ này sẽ điều chỉnh tập dữ liệu, bảng và khung hiển thị.
  • Giá trị tham số đến từ .env thay vì biểu mẫu cài đặt, vì vậy, việc chạy lại firebase deploy sẽ không có tính tương tác sau khi .env hoàn tất.

(Không bắt buộc) Dọn dẹp sau khi thử nghiệm

Nếu bạn muốn xoá phiên bản thử nghiệm này sau khi kiểm thử, hãy gỡ cài đặt phiên bản đó:

firebase functions:kits:uninstall --instance <kit-instance-id> --project <test-project-id>

Thao tác này sẽ xoá tất cả tài nguyên trên đám mây được tạo bằng cách triển khai bộ công cụ và xoá cấu hình thực thể của bộ công cụ đó. Nếu bạn chỉ có một thực thể của bộ công cụ, thì thao tác này cũng sẽ xoá mục nhập bộ công cụ khỏi firebase.json. Thao tác này không xoá thư mục mã nguồn cục bộ của bạn. Khi cài đặt bộ công cụ để di chuyển sang môi trường thực tế, bạn có thể chọn lại mã nhận dạng bộ công cụ.

Di chuyển từ tiện ích sang bộ công cụ cục bộ

Giờ đây, khi đã kiểm thử bộ công cụ cục bộ, bạn có thể di chuyển phiên bản tiện ích đã triển khai trực tiếp.

1. Cài đặt phiên bản bộ chức năng thay thế

Cài đặt bộ chức năng cục bộ, truyền --no-configure để bỏ qua cấu hình thủ công để bước tiếp theo có thể xuất cấu hình tiện ích hiện có của bạn trực tiếp vào phiên bản bộ chức năng này:

firebase functions:kits:install --no-configure --directory <path-to-your-fork> --project <project-id>

2. Định cấu hình thực thể bộ hàm giống hệt với tiện ích

Bạn cần tuỳ chỉnh thực thể bộ công cụ này bằng một cấu hình giống hệt với tiện ích mà nó thay thế. Bạn có thể xuất cấu hình thực thể tiện ích vào tệp .env. Tệp này lưu trữ dữ liệu cấu hình tham chiếu bí mật, biến môi trường và tham số cho tất cả Cloud Functions, bao gồm 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 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>

3. Triển khai và xác minh bộ thay thế

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 bộ công cụ thay thế. Bộ hàm hoạt động giống như các hàm tiêu chuẩn, trong đó mỗi thực thể của 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 thực thể bộ công cụ cụ thể. Trong khi di chuyển một phiên bản tiện ích, 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ì Firebase CLI sẽ nhắc bạn về các tham số đó khi bắt đầu quá trình triển khai. Điều này không nằm trong dự kiến của ví dụ thực tế 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 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ập nhật sẽ sử dụng các hàm thế hệ thứ 2, trong khi trước đây các tiện ích sử dụng các hàm thế hệ thứ 1. 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 tham số bổ sung. Trong các bản cập nhật sau này, nếu có thêm tham số mới, 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

Kết quả:

=== 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ó trình kích hoạt vòng đời nào được kích hoạt hay không. Các tiện ích phổ biến, chẳng hạn như Stream Cloud Firestore to BigQuery, sử dụng hook vòng đời. Sau đây là ví dụ về giao diện của một hook vòng đời 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 điệp nhật ký này xác nhận những điều sau:

  • Đã tìm thấy và thực thi một hook vòng đời.
  • Một tác vụ đã được đưa vào hàng đợi trong hàng đợi tác vụ liên kết với trình nối vòng đời.
  • Đườ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 có lỗi.

Hãy nhấp vào đường liên kết đến nhật ký trong 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 sự kiện đó bằng cách chạy:

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

Nếu bạn triển khai một thực thể bộ hàm lần đầu tiên, hãy chạy lệnh:

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

Nếu tại bất kỳ thời điểm nào trong quá trình xác thực, bạn quyết định muốn dừng hoặc huỷ quá trình di chuyển này, 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.

Sau khi xác minh rằng quá trình triển khai ban đầu của bộ hàm đã hoàn tất thành công, bạn cần xác thực rằng chức năng của bộ hàm thực sự hoạt động như mong đợi. Vì bản thân tiện ích vẫn đang chạy, bạn cần cẩn thận để đảm bảo rằng những gì bạn đang kiểm tra không chỉ là một trong hai đã hoạt động, vì tiện ích đã và sẽ tiếp tục hoạt động.

Trong trường hợp quá trình xử lý không thay đổi và bạn không thấy kết quả trùng lặp từ tiện ích và bộ công cụ, thì cách tốt nhất là trực tiếp kiểm tra nhật ký của bộ công cụ sau khi kích hoạt chức năng của bộ công cụ.

Ví dụ thực tế: Chuyển đổi luồng Cloud Firestore thành BigQuery

Với tiện ích Stream Cloud Firestore to BigQuery, các lượt ghi vào cả Bảng nhật ký thay đổi thô (*_raw_changelog) và bảng chế độ xem mới nhất (*_raw_latest) sẽ loại bỏ trùng lặp nếu cùng một sự kiện được phân phối đến bộ công cụ và tiện ích. Vì vậy, bạn không thể sử dụng sự hiện diện của bất kỳ hàng hoặc hàng trùng lặp nào trong BigQuery để xác thực bộ công cụ đang hoạt động.

Bạn có thể xem nhật ký hàm ngay sau khi ghi vào tập hợp Firestore bằng firebase functions:logs và tìm một mục nhập nhật ký cho biết hàm đã xử lý thành công một thao tác ghi. Đối với bộ công cụ này, mã thực thể mặc định firestore-bigquery-export sẽ có dạng như sau:

2026-09-25T19:52:46.328612Z I kit-firestore-bigquery-export-fsexportbigquery: Started execution of extension
2026-09-25T19:52:46.328644Z I kit-firestore-bigquery-export-fsexportbigquery: {"message":"Firestore event received by onDocumentWritten trigger","document_name":"projects/extensions-eventarc-testing/databases/(default)/documents/exported-messages/cmGP6XLyksqGdw2OgTOq","operation":0,"event_id":"9f59a2a4-1a5e-4c41-a32d-561e3c734502"}
2026-09-25T19:52:46.616064Z I kit-firestore-bigquery-export-fsexportbigquery: Completed execution of extension
2026-09-2

Nếu có nhiều nhật ký, bạn có thể lọc ra một hàm cụ thể của bộ công cụ bằng lệnh sau:

firebase functions:log --only <function name>

Để tìm tên hàm cụ thể cho một thực thể bộ công cụ, bạn có thể sử dụng lệnh sau:

firebase functions:list | grep kit-<kit instance id>

Trong ví dụ này:

firebase functions:list | grep kit-firestore-bigquery-export
│ kit-firestore-bigquery-export-fsexportbigquery  │ v2      │ google.cloud.firestore.document.v1.written                    │
│ kit-firestore-bigquery-export-initBigQuerySync  │ v2      │ taskQueue                                                     │
│ kit-firestore-bigquery-export-setupBigQuerySync │ v2      │ taskQueue                                                     │
│ kit-firestore-bigquery-export-syncBigQuery      │ v2      │ taskQueue                                                     │

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

Sau khi xác minh bộ hàm đã triển khai, bạn có thể gỡ cài đặt tiện ích để không lặp lại hành vi của tiện ích một lần cho bộ hàm và một lần cho tiện ích. Bạn có thể gỡ cài đặt tất 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

Kết quả:

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 bạn 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 thực thể documents Cloud Firestore mà bạn xuất sang BigQuery, thì bạn có thể đã cài đặt hai thực thể của tiện ích firestore-bigquery-export:

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

Nếu bạn di chuyển hai thực thể tiện ích này sang hai thực thể bộ hàm 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, mỗi lần triển khai sẽ tạo hai thực thể trong cả môi trường testing và production.

Thay vào đó, hãy thay thế hai phiên bản tiện ích bằng một phiên bản bộ hàm của 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 cho testing và production sẽ tạo một thực thể 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ể bộ công cụ duy nhất đượ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 bạn 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ẽ được nhắc chọn sử dụng lại thực thể đã định cấu hình cho testing hoặc cài đặt thực thể thứ hai.