| เลือกเส้นทางการย้ายข้อมูล | ย้ายข้อมูลไปยังชุดฟังก์ชันใน npm ย้ายข้อมูลไปยังชุดฟังก์ชันที่สร้างขึ้นเอง |
หากผู้เผยแพร่เนื้อหายังไม่ได้สร้างชุดทดแทนอย่างเป็นทางการที่เผยแพร่ใน npm คู่มือนี้จะแนะนำขั้นตอนในการแยกส่วนขยายและตั้งค่าเป็นชุดฟังก์ชันในเครื่อง
ตรวจสอบข้อจำกัดที่ทราบเกี่ยวกับการย้ายข้อมูล
ก่อนเริ่มย้ายข้อมูลอินสแตนซ์ส่วนขยาย ให้ตรวจสอบว่าการตั้งค่าของคุณใช้ฟีเจอร์ต่อไปนี้ที่ต้องใช้วิธีแก้ปัญหาชั่วคราวหรือยังไม่รองรับในชุดฟังก์ชันหรือไม่
- ที่เก็บ Docker และคีย์ KMS ที่กำหนดเองต้องใช้วิธีแก้ปัญหาชั่วคราวด้วยตนเอง Cloud Functions for Firebase ไม่รองรับพารามิเตอร์ระบบทดแทนสำหรับการกำหนดค่าที่เก็บ Docker ที่กำหนดเองหรือคีย์การเข้ารหัสที่ลูกค้าจัดการ (คีย์ KMS) หากส่วนขยายของคุณกำหนดค่าพารามิเตอร์เหล่านี้ โปรดดูวิธีแก้ปัญหาชั่วคราวในคำถามที่พบบ่อย
ก่อนเริ่มต้น
คุณต้องตั้งค่า Firebase CLI และเริ่มต้นโปรเจ็กต์ Firebase เมื่อใช้ CLI ให้ตรวจสอบว่าคุณใช้ firebase-tools เวอร์ชัน >= 15.32.0 ซึ่งมีคำสั่งการย้ายข้อมูลและชุดฟังก์ชันใหม่
สิทธิ์และบทบาทในบัญชีที่จำเป็น
บัญชีที่คุณใช้ตรวจสอบสิทธิ์กับ Firebase และ Google Cloud ต้องมีบทบาทต่อไปนี้ ทั้งนี้ขึ้นอยู่กับสิ่งที่ต้องสร้างและกำหนดค่าโดย Firebase CLI ในระหว่างการย้ายข้อมูล
roles/firebaseextensions.editorroles/cloudbuild.builds.editorroles/artifactregistry.writerroles/run.developerroles/iam.serviceAccountUserroles/iam.serviceAccountCreatorroles/cloudfunctions.admin(หากคุณต้องทำsetIamPermissionsสำหรับปลายทางสาธารณะ)roles/secretmanager.admin(หากใช้ข้อมูลลับ)roles/serviceusage.serviceUsageAdmin(หากต้องการเปิดใช้ API ใหม่)
เราขอแนะนำให้ใช้บัญชีที่ติดตั้งส่วนขยายและติดตั้งใช้งานฟังก์ชันไว้ก่อนหน้านี้ เนื่องจากสิทธิ์เหล่านี้ส่วนใหญ่จะได้รับอนุญาตแล้ว หากบัญชีที่ย้ายข้อมูลต้องการบทบาทเพิ่มเติม ให้ทำตามวิธีการของ Google Cloud IAM เพื่อเพิ่มบทบาท
อัปเกรดอินสแตนซ์ส่วนขยายเป็นเวอร์ชันล่าสุด
คุณต้องอัปเดตส่วนขยายเป็นเวอร์ชันล่าสุดเพื่อลดความแตกต่างระหว่างอินสแตนซ์ส่วนขยายกับชุดทดแทน หากไม่ได้อัปเกรดส่วนขยาย อาจมีการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบอย่างมีนัยสำคัญระหว่างอินสแตนซ์ส่วนขยายและชุดทดแทน การกำหนดค่าที่ส่งออกอาจไม่ตรงกับที่ชุดต้องการเนื่องจากการเปลี่ยนแปลงพารามิเตอร์ในเวอร์ชันต่างๆ
ใช้ตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้เพื่ออัปเดตส่วนขยาย โดยขึ้นอยู่กับตำแหน่งที่ติดตั้งส่วนขยาย
- จากคอนโซล Firebase
- จาก Firebase CLI โดยใช้คำสั่งต่อไปนี้
firebase ext:update <extension-instance-id> --project <project-id> firebase deploy --only extensions --project <project-id>
หากข้ามขั้นตอนนี้ CLI จะแจ้งให้คุณอัปเกรดเมื่อส่งออกการกำหนดค่าหากส่วนขยายไม่ได้ใช้เวอร์ชันล่าสุด
แยกส่วนขยายเป็นชุดฟังก์ชันในเครื่อง
ก่อนเริ่มแปลงส่วนขยายเป็นชุดฟังก์ชันในเครื่อง ให้ตรวจสอบว่าซอร์สโค้ดของส่วนขยายอยู่ในโปรเจ็กต์ Firebase โดยโคลนที่เก็บส่วนขยายจาก GitHub, สร้างไดเรกทอรีภายในรูทโปรเจ็กต์ Firebase และคัดลอกโฟลเดอร์ functions/ และ extension.yaml ของส่วนขยายลงในไดเรกทอรีดังกล่าว
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/.
ทำตามขั้นตอนที่ 1 ถึง 8 จากคำแนะนำในการย้ายข้อมูลของผู้เผยแพร่เนื้อหาเพื่อย้ายข้อมูลซอร์สโค้ดของส่วนขยายไปยังฟังก์ชันรุ่นที่ 2 จากนั้นทำตามขั้นตอนต่อไปนี้
ทำให้ชุดอุปกรณ์ในเครื่องรองรับภูมิภาคของฟังก์ชันที่ส่งออกและพารามิเตอร์ขั้นสูง
ในชุดฟังก์ชันภายในเครื่อง Firebase CLI จะไม่สร้างไฟล์ index.ts เพื่อตั้งค่าแพ็กเกจและกำหนดค่าให้ใช้พารามิเตอร์ระบบที่ย้ายข้อมูล
หากต้องการใช้ภูมิภาคของฟังก์ชันและพารามิเตอร์ขั้นสูงที่กำหนดค่าไว้สำหรับ
ส่วนขยาย ให้ตั้งค่าไฟล์ index.ts ให้อ่านรูปแบบที่ firebase
ext:export --mode functions ส่งออกเป็นไฟล์ตัวแปรสภาพแวดล้อม
โดยเฉพาะอย่างยิ่ง ในไฟล์ index.ts ระดับบนสุดที่ส่งออกฟังก์ชัน ให้กำหนดพารามิเตอร์สำหรับ FUNCTION_DEFAULT_REGION และเรียกใช้ setGlobalOptions ด้วยตัวแปรสภาพแวดล้อมของแบบฟอร์ม EXT_MIGRATED_SYSTEM_<GLOBAL_OPTION> ซึ่งคล้ายกับเทมเพลต index-kit-migration.ts ที่ CLI ใช้
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";
ทดสอบชุดอุปกรณ์ก่อนการย้ายข้อมูล
ตอนนี้คุณมีชุดฟังก์ชันในเครื่องแล้ว ซึ่งเมื่อติดตั้งใช้งานจะทำงานเหมือนกับการติดตั้งส่วนขยายใหม่ ขั้นตอนถัดไปคือการตรวจสอบและแก้ไขปัญหาที่เกิดขึ้นโดยไม่ตั้งใจระหว่างดำเนินการก่อนที่จะย้ายข้อมูลอินสแตนซ์ส่วนขยายเวอร์ชันที่ใช้งานจริงไปยังส่วนขยายดังกล่าว
ก่อนอื่น ให้เพิ่ม Fork เป็นชุดเครื่องมือในเครื่อง กำหนดค่า และทำให้ใช้งานได้ในโปรเจ็กต์ทดสอบ ชุดฟังก์ชันในเครื่องต้องอยู่ในโปรเจ็กต์ Firebase ดังนั้นหากที่เก็บส่วนขยายที่โคลนอยู่นอกโปรเจ็กต์ Firebase ให้ย้ายไปไว้ในไดเรกทอรีโปรเจ็กต์ จากนั้นเรียกใช้คำสั่งการติดตั้งชุดต่อไปนี้เพื่อติดตั้งเป็นชุดในเครื่อง
firebase functions:kits:install --directory <path-to-your-fork> --project <test-project-id>
คำสั่งนี้จะแนะนำคุณในการเลือกรหัสชุดอุปกรณ์ รหัสอินสแตนซ์ และการกำหนดค่าสำหรับอินสแตนซ์ทดสอบแรก จากนั้นจะแก้ไขไฟล์ firebase.json เพื่อลงทะเบียนชุดเครื่องมือในเครื่องที่ชี้ไปยังไดเรกทอรีที่แยกไว้ โดยมีการกำหนดค่าสำหรับแต่ละอินสแตนซ์ที่จัดเก็บไว้ในไฟล์ .env ที่ function-kits/<kit-id>/config-<instance-id>
ทำให้ชุดอุปกรณ์ในเครื่องใช้งานได้ในโปรเจ็กต์ทดสอบที่มีทรัพยากรที่เหมาะสมเพื่อทดสอบลักษณะการทำงาน หากคุณตั้งค่าโปรเจ็กต์ทดสอบจากการทดสอบส่วนขยายไว้แล้ว ให้เรียกใช้คำสั่งต่อไปนี้
firebase deploy --only functions:<kit-instance-id> --project <test-project-id>
ตัวอย่างที่ใช้ได้จริง: สตรีม Cloud Firestore ไปยัง BigQuery
(firestore-bigquery-export)
ยืนยันการซิงค์จากต้นทางถึงปลายทางระหว่าง Cloud Firestore กับ BigQuery โดยทำดังนี้
- ในหน้า Cloud Firestore ของคอนโซล Firebase ให้สร้างคอลเล็กชันที่คุณตั้งค่าเป็น
COLLECTION_PATH(users) หากยังไม่มี - สร้างเอกสารชื่อ
bigquery-mirror-testที่มีช่องใดก็ได้พร้อมค่าใดก็ได้ ในหน้า BigQuery ของคอนโซล Google Cloud ให้ค้นหาตารางบันทึกการเปลี่ยนแปลงดิบ โดยควรมีแถวเดียวที่บันทึกการสร้างเอกสาร ดังนี้
SELECT * FROM `PROJECT_ID.analytics.users_raw_changelog`ค้นหามุมมองล่าสุด ซึ่งควรแสดงเหตุการณ์การเปลี่ยนแปลงล่าสุดสำหรับเอกสารเดียวที่มีอยู่ (
bigquery-mirror-test) ดังนี้SELECT * FROM `PROJECT_ID.analytics.users_raw_latest`ลบเอกสาร
bigquery-mirror-testใน Cloud Firestore โดยจะหายไปจากมุมมองล่าสุด และระบบจะเพิ่มเหตุการณ์DELETEต่อท้ายตารางบันทึกการเปลี่ยนแปลงดิบคุณสามารถตรวจสอบประวัติทั้งหมดของเอกสารรายการเดียวได้โดยทำดังนี้
SELECT * FROM `PROJECT_ID.analytics.users_raw_changelog` WHERE document_name = "bigquery-mirror-test" ORDER BY timestamp ASC
ความแตกต่างจากการทดสอบส่วนขยาย
- ทริกเกอร์จะทํางานเป็น
kit-<kit-instance-id>-fsexportbigqueryไม่ใช่ext-<instanceId>-fsexportbigqueryมองหาชื่อนั้นในแดชบอร์ดและบันทึกของ Cloud Functions - โค้ดของคุณจะทำงานใน Firebase Local Emulator Suite เป็นฟังก์ชันมาตรฐาน คุณสามารถตั้งค่าพารามิเตอร์เพื่อใช้ในโปรแกรมจำลองด้วย
.env.localนอกจากนี้ คุณยังทำ Unit Test โค้ดโดยใช้ SDK ของfirebase-functions-testได้ตามที่อธิบายไว้ในการทำ Unit Test ของ Cloud Functions - รันไทม์ของส่วนขยายจะไม่ขับเคลื่อนการจัดสรรอีกต่อไป หากตารางบันทึกการเปลี่ยนแปลงหายไปหลังจากติดตั้งใช้งาน ให้เรียกใช้งานการตั้งค่าอีกครั้งด้วยตนเอง:
firebase functions:lifecycle:run afterFirstDeploy <kit-instance-id>งานนี้เป็นแบบ Idempotent ดังนั้นการเรียกใช้อีกครั้งจะปรับยอดชุดข้อมูล ตาราง และมุมมอง - ค่าพารามิเตอร์มาจาก
.envแทนที่จะเป็นแบบฟอร์มการติดตั้ง ดังนั้นการเรียกใช้firebase deployซ้ำจึงไม่จำเป็นต้องมีการโต้ตอบเมื่อ.envเสร็จสมบูรณ์แล้ว
(ไม่บังคับ) ล้างข้อมูลจากการทดสอบ
หากต้องการนำอินสแตนซ์ทดสอบนี้ออกหลังจากการทดสอบ ให้ถอนการติดตั้งโดยทำดังนี้
firebase functions:kits:uninstall --instance <kit-instance-id> --project <test-project-id>
การดำเนินการนี้จะลบทรัพยากรระบบคลาวด์ทั้งหมดที่สร้างขึ้นโดยการติดตั้งใช้งานชุดเครื่องมือและนำการกำหนดค่าอินสแตนซ์ออก หากคุณมีชุดอุปกรณ์เพียงชุดเดียว การดำเนินการนี้จะนำรายการชุดอุปกรณ์ออกจาก firebase.json ด้วย แต่จะไม่ลบไดเรกทอรีซอร์สโค้ดในเครื่อง เมื่อติดตั้งชุดสำหรับการย้ายข้อมูลเวอร์ชันที่ใช้งานจริง คุณจะเลือกรหัสชุดอีกครั้งได้
ย้ายข้อมูลจากส่วนขยายไปยังชุดเครื่องมือในเครื่อง
เมื่อทดสอบชุดเครื่องมือในเครื่องแล้ว คุณสามารถย้ายข้อมูลอินสแตนซ์ส่วนขยายที่ติดตั้งใช้งานจริงได้
1. ติดตั้งอินสแตนซ์ชุดฟังก์ชันการเปลี่ยนทดแทน
ติดตั้งชุดฟังก์ชันในเครื่อง โดยส่ง --no-configure เพื่อข้ามการกำหนดค่าด้วยตนเอง เพื่อให้ขั้นตอนถัดไปสามารถส่งออกการกำหนดค่าส่วนขยายที่มีอยู่ไปยังอินสแตนซ์ชุดนี้ได้โดยตรง
firebase functions:kits:install --no-configure --directory <path-to-your-fork> --project <project-id>
2. กำหนดค่าอินสแตนซ์ชุดฟังก์ชันให้เหมือนกับส่วนขยาย
คุณต้องปรับแต่งอินสแตนซ์ชุดนี้ด้วยการกำหนดค่าที่เหมือนกับส่วนขยายที่กำลังจะแทนที่ คุณสามารถส่งออกการกำหนดค่าอินสแตนซ์ส่วนขยายไปยังไฟล์ .env ซึ่งจะจัดเก็บข้อมูลการกำหนดค่าพารามิเตอร์ ตัวแปรสภาพแวดล้อม และข้อมูลอ้างอิงข้อมูลลับสำหรับ Cloud Functions ทั้งหมด รวมถึงชุดเครื่องมือ หากต้องการส่งออกไปยังไฟล์การกำหนดค่าของชุดโดยตรง ให้เรียกใช้คำสั่งต่อไปนี้
firebase ext:export --mode functions --instance <extension-instance-id> --kit-instance <kit-instance-id> --project <project-id>
เมื่อสิ้นสุดขั้นตอนนี้ ข้อมูลการกำหนดค่าสำหรับอินสแตนซ์นี้จะจัดเก็บไว้ในไฟล์ .env เฉพาะโปรเจ็กต์ในไดเรกทอรีการกำหนดค่าอินสแตนซ์ เช่น
function-kits/<kit-name>/config-<instance-id>/.env.<project-id>
3. ติดตั้งใช้งานและยืนยันการเปลี่ยนชุดอุปกรณ์
เมื่อติดตั้งชุดเครื่องมือและพร้อมใช้งานเป็นชุดฟังก์ชันแล้ว คุณจะติดตั้งใช้งานชุดเครื่องมือทดแทนได้ ชุดฟังก์ชันทำงานเหมือนกับฟังก์ชันมาตรฐาน โดยอินสแตนซ์ชุดแต่ละรายการจะทำหน้าที่เป็นฐานของโค้ดแยกต่างหากสำหรับจัดระเบียบฟังก์ชัน คุณเลือกที่จะทำให้ฟังก์ชันทั้งหมดใช้งานได้หรือเฉพาะอินสแตนซ์ชุดที่เจาะจงก็ได้ ขณะย้ายข้อมูลอินสแตนซ์ส่วนขยายรายการเดียว ให้ติดตั้งใช้งานเฉพาะอินสแตนซ์ชุดนั้น
หากชุดของคุณใช้พารามิเตอร์ใหม่ที่ไม่มีอยู่ในอินสแตนซ์ส่วนขยายที่คุณย้ายข้อมูลมา CLI ของ Firebase จะแจ้งให้คุณป้อนพารามิเตอร์เหล่านั้นเมื่อเริ่มกระบวนการติดตั้งใช้งาน ซึ่งไม่ควรเกิดขึ้นในตัวอย่างที่ใช้งานได้นี้จากส่วนขยาย firestore-bigquery-export ที่อัปเดตแล้ว แต่ชุดเครื่องมือจำนวนมากจะแจ้งให้ป้อนพารามิเตอร์ใหม่สำหรับแหล่งที่มาของทริกเกอร์เหตุการณ์ที่ชุดเครื่องมือใช้ ในการย้ายข้อมูลนี้ ชุดที่อัปเดตจะใช้ฟังก์ชันรุ่นที่ 2 โดยที่ก่อนหน้านี้ส่วนขยายใช้ฟังก์ชันรุ่นที่ 1 ในรุ่นที่ 2 ฟังก์ชันจะอยู่ใกล้กับแหล่งที่มาของเหตุการณ์และเพิ่มเป็นพารามิเตอร์เพิ่มเติม ในการอัปเดตในอนาคต หากมีการเพิ่มพารามิเตอร์ใหม่ CLI จะแจ้งให้คุณทราบในการติดตั้งใช้งานครั้งถัดไป
ตัวอย่างที่อธิบายอย่างละเอียด
firebase deploy --only functions:firestore-bigquery-export --project my-project
เอาต์พุต:
=== 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!
หากต้องการยืนยันว่า firebase deploy ของชุดไม่มีข้อผิดพลาด ให้ตรวจสอบบันทึกการติดตั้งใช้งานเพื่อดูว่ามีการทริกเกอร์ Lifecycle Hook หรือไม่ ส่วนขยายยอดนิยม เช่น สตรีม Cloud Firestore ไปยัง BigQuery จะใช้ฮุกวงจร ตัวอย่างต่อไปนี้แสดงลักษณะของ Lifecycle Hook เมื่อทริกเกอร์
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
ข้อความในบันทึกเหล่านี้จะยืนยันสิ่งต่อไปนี้
- พบและดำเนินการ Lifecycle Hook แล้ว
- มีการจัดคิวงานในคิวงานที่เชื่อมโยงของฮุกวงจร
- ระบบจะแสดงลิงก์ไปยัง Cloud Logging เพื่อให้คุณตรวจสอบได้ว่างานเสร็จสมบูรณ์โดยไม่มีข้อผิดพลาด
ไปที่ลิงก์บันทึกไปยังคอนโซล Google Cloud เพื่อตรวจสอบว่าไม่มีข้อผิดพลาดในบันทึกและระบบประมวลผลเหตุการณ์คิวงานเรียบร้อยแล้ว หากเหตุการณ์ในวงจรดำเนินการไม่สำเร็จ คุณสามารถเรียกให้ทำงานอีกครั้งได้โดยเรียกใช้คำสั่งต่อไปนี้
firebase functions:lifecycle:run <hook-name> <codebase>
หากคุณกำลังติดตั้งใช้งานอินสแตนซ์ชุดฟังก์ชันเป็นครั้งแรก ให้เรียกใช้คำสั่งต่อไปนี้
firebase functions:lifecycle:run afterFirstDeploy <kit-instance-id>
หากในระหว่างการตรวจสอบ คุณตัดสินใจว่าต้องการหยุดหรือยกเลิกการย้ายข้อมูลนี้ คุณสามารถถอนการติดตั้งชุดเครื่องมือได้โดยทำตามวิธีการในหัวข้อถอนการติดตั้งส่วนขยาย
เมื่อยืนยันแล้วว่าการติดตั้งใช้งานชุดฟังก์ชันครั้งแรกเสร็จสมบูรณ์ คุณต้องตรวจสอบว่าฟังก์ชันการทำงานของชุดฟังก์ชันทำงานตามที่คาดไว้จริง เนื่องจากส่วนขยายยังคงทำงานอยู่ คุณจึงต้องระมัดระวังว่าสิ่งที่กำลังตรวจสอบไม่ใช่แค่ว่าส่วนขยายใดส่วนขยายหนึ่งทำงานได้ เนื่องจากส่วนขยายทำงานอยู่และจะทำงานต่อไป
ในกรณีที่การประมวลผลไม่มีการเปลี่ยนแปลงและคุณไม่เห็นผลลัพธ์ที่ซ้ำกันจากส่วนขยายและชุดเครื่องมือ ตัวเลือกที่ดีที่สุดคือการตรวจสอบบันทึกของชุดเครื่องมือโดยตรงหลังจากเรียกใช้ฟังก์ชันการทำงานของชุดเครื่องมือ
ตัวอย่างการทำงาน: สตรีม Cloud Firestore ไปยัง BigQuery
เมื่อใช้ส่วนขยาย Stream Cloud Firestore to BigQuery การเขียนลงในทั้งตารางบันทึกการเปลี่ยนแปลงดิบ (*_raw_changelog) และตารางมุมมองล่าสุด (*_raw_latest) จะกรองข้อมูลที่ซ้ำกันออกหากมีการส่งเหตุการณ์เดียวกันไปยังชุดและส่วนขยาย ดังนั้นคุณจึงไม่สามารถใช้การมีอยู่ของแถวหรือแถวที่ซ้ำกันใน BigQuery เพื่อตรวจสอบว่าชุดเครื่องมือทำงานอยู่หรือไม่
คุณสามารถดูบันทึกฟังก์ชันได้ไม่นานหลังจากเขียนลงในคอลเล็กชัน Firestore โดยใช้ firebase functions:logs และมองหารายการบันทึกที่ระบุว่าประมวลผลการเขียนสำเร็จ สำหรับชุดอุปกรณ์นี้ที่มีรหัสอินสแตนซ์เริ่มต้นเป็น firestore-bigquery-export จะมีลักษณะดังนี้
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
หากมีบันทึกจำนวนมาก คุณสามารถกรองลงมาให้เหลือเฉพาะฟังก์ชันชุดที่ต้องการได้โดยใช้คำสั่งต่อไปนี้
firebase functions:log --only <function name>
หากต้องการค้นหาชื่อฟังก์ชันที่เฉพาะเจาะจงสำหรับอินสแตนซ์ชุดอุปกรณ์ คุณสามารถใช้คำสั่งต่อไปนี้
firebase functions:list | grep kit-<kit instance id>
สำหรับตัวอย่างนี้
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. ถอนการติดตั้งส่วนขยาย
เมื่อยืนยันชุดฟังก์ชันที่ติดตั้งใช้งานแล้ว คุณสามารถถอนการติดตั้งส่วนขยายเพื่อไม่ให้เกิดการทำงานซ้ำซ้อนทั้งในชุดและในส่วนขยาย คุณสามารถถอนการติดตั้งส่วนขยายทั้งหมดจาก CLI ของ Firebase ได้ไม่ว่าจะติดตั้งด้วยวิธีใดก็ตาม หากคุณส่งแฟล็ก --immediate ดังนี้
firebase ext:uninstall <extension-instance-id> --project <project-id> --immediate
ตัวอย่างที่อธิบายอย่างละเอียด
firebase ext:uninstall firestore-bigquery-export --project my-project --immediate
เอาต์พุต:
i extensions: uninstalling firestore-bigquery-export...
i extensions: deleting extension instance resources in project my-project...
✔ extensions: successfully uninstalled firestore-bigquery-export
การย้ายข้อมูลขั้นสูง
คุณสามารถมีส่วนขยายในโปรเจ็กต์ Firebase หลายโปรเจ็กต์ที่ต้องการจัดการด้วยฐานของโค้ดเดียว ตัวอย่างเช่น หากคุณติดตั้งใช้งานโครงสร้างพื้นฐานเดียวกันในสภาพแวดล้อม testing และสภาพแวดล้อม production ซึ่งแต่ละสภาพแวดล้อมมีอินสแตนซ์ documents Cloud Firestore ที่คุณส่งออกไปยัง BigQuery คุณอาจติดตั้งส่วนขยาย firestore-bigquery-export ไว้ 2 อินสแตนซ์ ดังนี้
export-documents-testingexport-documents-production
หากคุณย้ายข้อมูลอินสแตนซ์ส่วนขยาย 2 รายการนี้ไปยังอินสแตนซ์ชุดฟังก์ชัน 2 รายการในฐานของโค้ดเดียวเมื่อทำงานกับ Firebase CLI และทำให้ใช้งานได้โดยใช้ firebase deploy --project testing และ firebase deploy --project production การทำให้ใช้งานได้แต่ละครั้งจะสร้างอินสแตนซ์ 2 รายการทั้งในสภาพแวดล้อม testing และ production
แต่ให้แทนที่อินสแตนซ์ส่วนขยาย 2 รายการด้วยอินสแตนซ์ชุดฟังก์ชัน 1 รายการของ firestore-bigquery-export ที่ติดตั้งใช้งานในหลายโปรเจ็กต์ โดยแต่ละโปรเจ็กต์มีการกำหนดค่าของตัวเอง ไดเรกทอรีการกำหนดค่าสำหรับอินสแตนซ์ควรมีลักษณะดังนี้
config-export-documents/.env.testing.env.production
การติดตั้งใช้งานแต่ละครั้งใน testing และ production จะสร้างอินสแตนซ์ของชุดอุปกรณ์ 1 รายการพร้อมการกำหนดค่าที่เกี่ยวข้อง คำสั่ง CLI ที่มีอยู่จะสร้างการตั้งค่านี้ตราบใดที่คุณส่งแฟล็ก --project ในการเรียกใช้ ext:migrate หรือ functions:kits:install แต่ละครั้ง
ตัวอย่างที่อธิบายอย่างละเอียด
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
ตอนนี้คุณมีอินสแตนซ์ชุดเครื่องมือเดียวที่กำหนดค่าให้ติดตั้งใช้งานในโปรเจ็กต์ testing และ production พร้อมการกำหนดค่าที่เกี่ยวข้องแล้ว หากคุณสร้างอินสแตนซ์ในโปรเจ็กต์ testing และเรียกใช้คำสั่ง functions:kits:install สำหรับแพ็กเกจเดียวกันในโปรเจ็กต์ production ระบบจะแสดงข้อความแจ้งพร้อมตัวเลือกในการใช้อินสแตนซ์ที่กำหนดค่าไว้สำหรับ testing ซ้ำหรือติดตั้งอินสแตนซ์ที่ 2