ย้ายข้อมูล Firebase Extensions ไปยังชุดฟังก์ชันที่สร้างขึ้นเอง

เลือกเส้นทางการย้ายข้อมูล: ย้ายข้อมูลไปยังชุดฟังก์ชันใน 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.editor
  • roles/cloudbuild.builds.editor
  • roles/artifactregistry.writer
  • roles/run.developer
  • roles/iam.serviceAccountUser
  • roles/iam.serviceAccountCreator
  • roles/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 จากต้นทางถึงปลายทาง

  1. ในCloud Firestoreหน้าของคอนโซล Firebase ให้สร้างคอลเล็กชัน ที่คุณตั้งค่าเป็น COLLECTION_PATH (users) หากยังไม่มี
  2. สร้างเอกสารชื่อ bigquery-mirror-test ที่มีช่องที่มีค่าใดก็ได้
  3. ในBigQueryหน้าของคอนโซล Google Cloud ให้ค้นหาตารางบันทึกการเปลี่ยนแปลงดิบ โดยควรมีแถวเดียวที่บันทึกการสร้างเอกสาร ดังนี้

    SELECT * FROM `PROJECT_ID.analytics.users_raw_changelog`
    
  4. ค้นหามุมมองล่าสุด ซึ่งควรแสดงผลเหตุการณ์การเปลี่ยนแปลงล่าสุดสำหรับ เอกสารเดียวที่มีอยู่ (bigquery-mirror-test)

    SELECT * FROM `PROJECT_ID.analytics.users_raw_latest`
    
  5. ลบเอกสาร 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 คุณยังสามารถ ทดสอบหน่วยโค้ดโดยใช้ firebase-functions-test SDK ตามที่ อธิบายไว้ในการทดสอบหน่วยของ 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. ติดตั้งใช้งานและยืนยันการเปลี่ยนชุดอุปกรณ์

เมื่อติดตั้งชุดอุปกรณ์และพร้อมใช้งานเป็นชุดฟังก์ชันแล้ว คุณจะ ติดตั้งการเปลี่ยนชุดอุปกรณ์ได้ ชุดฟังก์ชันทำงานเหมือนฟังก์ชันมาตรฐาน โดยแต่ละอินสแตนซ์ของชุดจะทำหน้าที่เป็นโค้ดเบสแยกต่างหาก สำหรับจัดระเบียบฟังก์ชัน คุณเลือกที่จะติดตั้งใช้งานฟังก์ชันทั้งหมดหรือ เฉพาะอินสแตนซ์ของชุดอุปกรณ์ก็ได้ ขณะย้ายข้อมูลอินสแตนซ์ส่วนขยายเดียว ให้ติดตั้งใช้งานเฉพาะอินสแตนซ์ชุดนั้น

หากชุดเครื่องมือใช้พารามิเตอร์ใหม่ที่ไม่มีอยู่ในอินสแตนซ์ส่วนขยาย ที่คุณย้ายข้อมูลมาจาก Firebase CLI จะแจ้งให้คุณระบุพารามิเตอร์เหล่านั้นที่ จุดเริ่มต้นของกระบวนการติดตั้งใช้งาน ซึ่งไม่คาดว่าจะเกิดขึ้นในตัวอย่างที่ใช้งานได้นี้ จากส่วนขยาย 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 ของชุดไม่มีข้อผิดพลาด ให้ตรวจสอบ บันทึกการติดตั้งใช้งานเพื่อดูว่ามีการเรียกใช้ฮุกลงในวงจรหรือไม่ ส่วนขยายยอดนิยม เช่น Stream Cloud Firestore to 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>

หากตัดสินใจที่จะหยุดหรือยกเลิกการย้ายข้อมูลนี้เมื่อใดก็ตามในระหว่างการตรวจสอบ คุณสามารถถอนการติดตั้งชุดเครื่องมือได้โดยใช้คำสั่งในถอนการติดตั้งส่วนขยาย

4. ถอนการติดตั้งส่วนขยาย

เมื่อยืนยันชุดฟังก์ชันที่ติดตั้งใช้งานแล้ว คุณจะถอนการติดตั้ง ส่วนขยายได้เพื่อไม่ให้มีการทำซ้ำลักษณะการทำงานของส่วนขยาย 1 ครั้งสำหรับชุดฟังก์ชันและอีก 1 ครั้ง สำหรับส่วนขยาย คุณถอนการติดตั้งส่วนขยายทั้งหมดจาก Firebase CLI ได้ ไม่ว่าคุณจะติดตั้งส่วนขยายเหล่านั้นด้วยวิธีใดก็ตาม หากส่งแฟล็ก --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-testing
  • export-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