เราเลิกใช้งานบริการ Firebase Extensions แล้วและจะปิดให้บริการในวันที่ 31 มีนาคม 2027 แม้ว่าส่วนขยายที่ติดตั้งไว้แล้วจะทำงานต่อไปได้เรื่อยๆ แต่ ฟีเจอร์การจัดการคีย์จะใช้งานไม่ได้อีกต่อไปหลังจากวันที่ดังกล่าว เราจะเผยแพร่คำแนะนำและเครื่องมือเพิ่มเติมสำหรับการย้ายข้อมูลในเดือนกันยายน 2026
ภาพรวมการเลิกใช้งาน
เหตุใดเราจึงเลิกใช้งาน Firebase Extensions
เนื่องจากการเปลี่ยนแปลงและการเลิกใช้งานที่กำลังจะเกิดขึ้นภายในGoogle Cloud โครงสร้างพื้นฐานเบื้องหลัง เราจึงจะหยุดให้บริการFirebase Extensions ที่มีการจัดการ
ส่วนขยายที่ติดตั้งใช้งานอยู่จะหยุดทำงานหลังจากวันที่ 31 มีนาคม 2027 ไหม
ไม่ ส่วนขยายที่ติดตั้งใช้งานแล้วจะทำงานบนโครงสร้างพื้นฐาน Google Cloud มาตรฐานโดยตรง (เช่น Cloud Functions, Eventarc, Cloud Run และ Cloud Tasks) และจะทำงานต่อไป อย่างไม่มีกำหนด
อย่างไรก็ตาม หลังจากวันที่ 31 มีนาคม 2027 คุณจะสูญเสียความสามารถทั้งหมดในการ อัปเดต กำหนดค่าใหม่ หรือถอนการติดตั้งส่วนขยายเหล่านี้ผ่านคอนโซล Firebase หรือ CLI นอกจากนี้ คุณจะเสียสิทธิ์ในการดาวน์โหลดการกำหนดค่าส่วนขยายที่มีอยู่เพื่อช่วยในการย้ายข้อมูลไปยังชุดฟังก์ชันด้วย เราขอแนะนำเป็นอย่างยิ่งให้ย้ายข้อมูลหรือส่งออกการกำหนดค่าส่วนขยายภายในวันที่ 31 มีนาคม 2027
จะเกิดอะไรขึ้นหากผู้ใช้ไม่ดำเนินการใดๆ
หากผู้ใช้ไม่ดำเนินการใดๆ ฟังก์ชันที่ใช้งานอยู่จะยังคงทำงานเป็นชิ้นงานมาตรฐานต่อไป อย่างไรก็ตาม หลังจากวันที่ 31 มีนาคม 2027
- แต่จะเปลี่ยนพารามิเตอร์การกำหนดค่าหรืออัปเดตตัวแปรสภาพแวดล้อมไม่ได้
- โดยจะใช้การแก้ไขข้อบกพร่อง แพตช์ความปลอดภัย หรือการอัปเกรดทรัพยากร Dependency ไม่ได้
- และไม่สามารถดาวน์โหลดการกำหนดค่าส่วนขยายเพื่อช่วยกำหนดค่าชุดฟังก์ชันทดแทนให้เหมือนกันได้
- ปัจจุบันส่วนขยายส่วนใหญ่สร้างขึ้นบน Cloud Functions v1 SDK รุ่นเดิม ซึ่งเชื่อมโยงกับรันไทม์ Node.js รุ่นเก่า เมื่อ Google Cloud เลิกใช้งานรันไทม์เดิมเหล่านี้ อย่างสมบูรณ์แล้ว ฟังก์ชันอาจหยุดทำงานหรือ ถูกปิดใช้ ดูการสนับสนุนรันไทม์
มีอะไรมาแทนที่ Firebase Extensions ไหม
เราได้เพิ่มฟีเจอร์มากมายใน Cloud Functions เพื่อให้สามารถ แทนที่ส่วนขยายได้ โดยเฉพาะอย่างยิ่งชุดฟังก์ชันที่สามารถเผยแพร่ได้โดยใช้ npm และช่วยให้คุณสามารถติดตั้งใช้งานฟังก์ชันหลายอินสแตนซ์ได้ในลักษณะเดียวกับที่คุณ ติดตั้งส่วนขยายหลายครั้งในโปรเจ็กต์เดียวได้
อย่างไรก็ตาม ผู้เผยแพร่ส่วนขยายแต่ละรายจะเป็นผู้พิจารณาว่าจะ เผยแพร่ชุดฟังก์ชันอย่างเป็นทางการที่ใช้แทนใน npm หรือไม่ เนื่องจากส่วนขยายเป็นโอเพนซอร์ส หากผู้เผยแพร่ไม่ต้องการสร้างส่วนขยายอย่างเป็นทางการ นักพัฒนาแอปรายใดก็ตามสามารถ Fork ส่วนขยายดังกล่าวเพื่อสร้างส่วนขยายที่ไม่เป็นทางการได้โดยCloud Functions ใช้ API รุ่นที่ 2 ใน Node SDK
ผู้เผยแพร่โฆษณาที่ต้องการเปลี่ยนควรทำตามวิธีการในคู่มือการย้ายข้อมูลสำหรับผู้เผยแพร่โฆษณา
ผู้ใช้ที่ต้องการใช้ประโยชน์จากแพ็กเกจการแทนที่อย่างเป็นทางการหรือสร้างแพ็กเกจการแทนที่ของตนเองสามารถทำตามวิธีการในคู่มือการย้ายข้อมูลสำหรับผู้ใช้
ฉันควรทำอย่างไรในฐานะผู้ใช้ส่วนขยาย
หากคุณเป็นผู้ใช้ส่วนขยายและไม่ได้ใช้ส่วนขยายที่ติดตั้งไว้อีกต่อไป ถอนการติดตั้งส่วนขยายเหล่านั้นก่อน วันที่ 31 มีนาคม 2027
หลังจากเลิกใช้งานแล้ว ระบบจะนำปุ่ม "ถอนการติดตั้ง" ในFirebaseคอนโซล และคำสั่ง CLI ที่เกี่ยวข้องออก คุณต้องลบGoogle Cloudทรัพยากรที่เชื่อมโยงทั้งหมดCloud Functionsด้วยตนเอง ซึ่งรวมถึงSecret ManagerSecretCloud Tasks คิว และบัญชีบริการ IAM ที่กำหนดเองโดยใช้Google Cloudคอนโซล
อย่างไรก็ตาม หากคุณใช้ส่วนขยายที่ติดตั้งไว้อยู่เป็นประจำ เราขอแนะนำเป็นอย่างยิ่งให้ ย้ายข้อมูลไปยังชุดฟังก์ชัน หากต้องการย้ายไปใช้ชุดฟังก์ชัน ให้ทำตามวิธีการในคำแนะนำในการย้ายข้อมูลสำหรับผู้ใช้
คุณเลือกที่จะไม่ย้ายข้อมูลไปยังชุดฟังก์ชันได้ ในกรณีนี้ เราขอแนะนำให้คุณอัปเดตส่วนขยายทั้งหมดเป็นเวอร์ชันล่าสุด อัปเดตส่วนขยายอย่างต่อเนื่อง และส่งออกการกำหนดค่าส่วนขยายที่มีอยู่ ในกรณีที่คุณต้องการย้ายข้อมูลในภายหลัง
ฉันควรทำอย่างไรในฐานะผู้เผยแพร่ส่วนขยาย
เราขอแนะนำให้คุณย้ายข้อมูลส่วนขยายที่เผยแพร่ไปยังชุดฟังก์ชัน ที่เผยแพร่ใน npm คุณเริ่มต้นได้โดยการย้ายข้อมูลส่วนขยายไปยังฟังก์ชันรุ่นที่ 2 ซึ่งเป็นข้อกำหนดเบื้องต้นสำหรับการสร้างชุดฟังก์ชัน ซึ่งเกี่ยวข้องกับการ แพ็กเกจตรรกะของส่วนขยายโดยใช้ Cloud Functions v2 SDK เราได้อัปเดต Cloud Functions v2 SDK ให้รองรับฟีเจอร์ต่างๆ เช่น เหตุการณ์ด้านความปลอดภัยและวงจรของประกาศ ตอนนี้คุณสามารถย้ายข้อมูลโค้ดส่วนขยายที่มีอยู่ไปยังฟังก์ชันรุ่นที่ 2 ได้โดยมีการเปลี่ยนแปลงตรรกะหลักของธุรกิจน้อยที่สุด คุณสามารถเผยแพร่ฟังก์ชันเหล่านี้ได้โดยใช้แพ็กเกจ npm ดูรายละเอียดได้จากคำแนะนำในการย้ายข้อมูลสำหรับผู้เผยแพร่โฆษณา
ฉันต้องทำอย่างไรหากมีคำถามอื่นๆ
ผู้ใช้ที่มีข้อสงสัยสามารถใช้คู่มือการย้ายข้อมูลผู้ใช้ของเรา หากยังมีข้อสงสัยหลังจากใช้ คำแนะนำ โปรดติดต่อทีมสนับสนุนของ Firebase
ผู้เผยแพร่โฆษณาที่มีข้อสงสัยเกี่ยวกับวิธีย้ายข้อมูล Firebase Extensions สามารถใช้ คู่มือการย้ายข้อมูลสำหรับผู้เผยแพร่โฆษณา คู่มือนี้มีวิธีการที่คุณจะใช้เพื่อรับทราบข้อมูลอัปเดตและรับความช่วยเหลือในการจัดหาส่วนขยายทางเลือกแทนส่วนขยายที่เผยแพร่
ตัวเลือกการย้ายข้อมูลและการดำเนินการทางเทคนิค
เส้นทางการย้ายข้อมูลหลักที่ใช้ได้มีอะไรบ้าง
ตั้งแต่เดือนกันยายน 2026 เป็นต้นไป Firebase จะรองรับเส้นทางการย้ายข้อมูลหลัก 2 เส้นทางอย่างเป็นทางการ
- ย้ายข้อมูลไปยังฟังก์ชันที่แชร์ใน NPM ("ชุดฟังก์ชัน"): ขอแนะนำสำหรับ การสตรีม Firestore ไปยัง BigQuery และชุดฟังก์ชันอื่นๆ ที่พร้อมใช้งาน ใน npm ตรรกะหลักจะรวมอยู่ในไลบรารี NPM มาตรฐานโดยใช้ Cloud Functions v2 SDK ผู้ใช้เริ่มต้นฐานของโค้ดมาตรฐาน Cloud Functions ติดตั้งแพ็กเกจ ส่งออกฟังก์ชันอีกครั้ง และทำให้ใช้งานได้โดยอิสระโดยใช้ CLI
- Fork และจัดการด้วยตนเอง: แนะนำสำหรับส่วนขยายทั้งหมดที่ไม่มีชุดฟังก์ชันใน npm ผู้ใช้จะคัดลอกหรือฟอร์กซอร์สโค้ดของส่วนขยายโอเพนซอร์ส ปรับโครงสร้างทริกเกอร์เป็นฟังก์ชัน Firebase v2 มาตรฐานโดยใช้ทักษะการย้ายข้อมูล AI แบบสุดความสามารถหรือคำแนะนำแบบทีละขั้นตอน และรับสิทธิ์การเป็นเจ้าของฐานของโค้ดและการบำรุงรักษาอย่างต่อเนื่องทั้งหมด
ส่วนขยายใดบ้างที่จะย้ายข้อมูลไปยังชุดฟังก์ชัน
เราได้ย้ายข้อมูลส่วนขยายสตรีม Firestore ไปยัง
BigQuery
ไปยังชุดฟังก์ชันที่พร้อมใช้งานเป็นแพ็กเกจ npm
@firebase-function-kits/firestore-bigquery-export แล้ว
เหตุใดการย้ายข้อมูลจึงต้องอัปเกรดจาก Cloud Functions v1 เป็น v2
Cloud Functions การสนับสนุนมาตรฐาน v1 จะสิ้นสุดพร้อมกับรันไทม์ Node.js 22 เพื่อป้องกัน "การย้ายข้อมูลซ้ำ" ที่นักพัฒนาซอฟต์แวร์ย้ายข้อมูลออกจาก Firebase Extensions แต่ถูกบังคับให้ทำการรีแฟกเตอร์ด้วยตนเองเป็นครั้งที่ 2 เมื่อรันไทม์เดิมหยุดให้บริการ Firebase ขอแนะนำอย่างยิ่งให้อัปเกรดฟังก์ชันที่ย้ายข้อมูลทั้งหมดเป็น SDK v2 ทันทีในระหว่างการเปลี่ยนผ่านนี้ และจำเป็นต้องใช้สำหรับชุดฟังก์ชัน
ในฐานะผู้ใช้ส่วนขยาย คุณยังสร้างชุดฟังก์ชันของคุณเองได้โดยใช้คู่มือการย้ายข้อมูลผู้ใช้
การเรียกเก็บเงินและการกำหนดราคา
การย้ายข้อมูลไปยัง Cloud Functions ที่จัดการด้วยตนเองจะเปลี่ยนการเรียกเก็บเงินของลูกค้าไหม
โดยทั่วไปแล้ว ไม่ ส่วนขยายที่ติดตั้งใช้งานจะเรียกเก็บเงินจากลูกค้าสำหรับGoogle Cloudทรัพยากรพื้นฐานที่ใช้ เช่น Cloud Functionsการเรียกใช้ Cloud Storage หรือBigQueryพื้นที่เก็บข้อมูลและการค้นหา อย่างไรก็ตาม ในช่วงเวลาการย้ายข้อมูล ลูกค้าอาจมีค่าใช้จ่ายเพิ่มเติมชั่วคราวเล็กน้อยหากเรียกใช้ทั้งFirebase Extensionsรุ่นเดิมและฟังก์ชันทดแทนที่เพิ่งติดตั้งใช้งานใหม่ควบคู่กันเพื่อให้การเปลี่ยนระบบเป็นไปอย่างปลอดภัย
การเรียกเก็บเงินสำหรับบัญชี Mandiant หรือบัญชีองค์กรเฉพาะทางอื่นๆ มีการจัดการอย่างไร
การเลิกใช้งานนี้เป็นการเปลี่ยนแปลงทั่วทั้งแพลตฟอร์มซึ่งส่งผลต่อโปรเจ็กต์ Firebase และ Google Cloud ทั้งหมด การจัดการการเรียกเก็บเงินและการสมัครใช้บริการมาตรฐานจะไม่ได้รับผลกระทบ หากลูกค้าขอเครดิต SLA เนื่องจากช่วงหยุดทำงานของการเลิกใช้งานหรือพบข้อยกเว้นการเรียกเก็บเงินที่ซับซ้อน ให้ส่งต่อเคสผ่านช่องทางการสนับสนุนการเรียกเก็บเงินปกติโดยตรง
การแก้ปัญหาและการลดความเสี่ยง
ความเสี่ยงในการสูญเสียข้อมูลหรือการหยุดทำงานของบริการระหว่างการย้ายข้อมูลคืออะไร
การเปลี่ยนทรัพยากรที่มีการจัดการเป็นโค้ดเบสที่จัดการด้วยตนเองมีความเสี่ยงเล็กน้อยที่จะเกิด การหยุดชะงักของบริการหรือการสูญเสียเหตุการณ์
- ทริกเกอร์การหยุดชะงัก: หากลบทริกเกอร์เก่าก่อนที่ทริกเกอร์ใหม่จะ ใช้งานได้ ระบบจะสร้างช่องว่างที่ทำให้พลาดเหตุการณ์ (เช่น Cloud Firestoreการเขียนเอกสาร ) และสูญเสียเหตุการณ์อย่างถาวร เราขอแนะนำให้ติดตั้งชุดอุปกรณ์ทดแทนและตรวจสอบความถูกต้องก่อนที่จะนำส่วนขยายออกเพื่อหลีกเลี่ยงการสูญเสียข้อมูล
- ช่องโหว่ด้านสิทธิ์: หากฐานของโค้ดที่เพิ่งทำให้ใช้งานได้ไม่มีสิทธิ์ IAM ที่จำเป็น การดำเนินการต่างๆ เช่น การเขียนไปยัง BigQuery จะล้มเหลวโดยไม่มีข้อความแจ้ง หรือเกิดข้อขัดข้องขณะรันไทม์ เราได้เพิ่มการรักษาความปลอดภัยแบบประกาศสำหรับฟังก์ชัน ดังนั้น การติดตั้งชุดเครื่องมือครั้งแรกที่ดำเนินการโดยบัญชีที่สามารถค้นหาและตั้งค่าบทบาท รวมถึงสร้าง บัญชีบริการได้จะช่วยลดปัญหานี้
เราจะป้องกันการสูญเสียข้อมูลสำหรับส่วนขยายการส่งออกที่สำคัญจาก Cloud Firestore ไปยัง BigQuery ได้อย่างไร
เพื่อให้การเปลี่ยนผ่านเป็นไปอย่างปลอดภัยและไม่มีการสูญเสียข้อมูล ทีมสนับสนุนต้องแนะนําให้ผู้ใช้ ทําตามการตัดเปลี่ยนตามการทับซ้อนแทนการตัดเปลี่ยนตามช่องว่าง ซึ่งเป็น ค่าเริ่มต้นเมื่อย้ายข้อมูลไปยังชุดเครื่องมือ
- ติดตั้งชุดฟังก์ชันการแทนที่ในขณะที่ยังติดตั้งและเรียกใช้ส่วนขยายอยู่ รอสักครู่เพื่อให้ Eventarc จัดสรรทรัพยากรอย่างเต็มรูปแบบ
- เขียนเอกสารทดสอบไปยังคอลเล็กชัน Cloud Firestore ที่ดูอยู่ และตรวจสอบ ว่าฟังก์ชันที่จัดการด้วยตนเองใหม่เขียนแถวที่เกี่ยวข้องลงใน ตารางบันทึกการเปลี่ยนแปลง BigQuery ได้สำเร็จ (โดยมีรหัสเหตุการณ์ใหม่)
- เมื่อยืนยันว่าการติดตั้งใช้งานใหม่ทํางานได้แล้ว ให้ถอนการติดตั้งหรือ ปิดใช้ส่วนขยายเดิมทันทีเพื่อหยุดพฤติกรรมการเขียนซ้ำ
- รักษากรอบเวลาที่ทับซ้อนกันให้สั้นที่สุดเพื่อลดต้นทุนของ การประมวลผลที่ซ้ำกันของการเขียนแต่ละครั้งและความเป็นไปได้ที่จะมีแถวที่ซ้ำกันใน บันทึกการเปลี่ยนแปลงBigQueryดิบ
- ในกรณีส่วนใหญ่ ตารางบันทึกการเปลี่ยนแปลงแบบดิบ (
*_raw_changelog) จะขจัดข้อมูลที่ซ้ำกันตามinsertIDและแม้ในกรณีที่คุณได้รับแถวที่ซ้ำกันใน บันทึกการเปลี่ยนแปลง มุมมองล่าสุดของตาราง (*_raw_latest) จะถูกต้อง
ดูข้อมูลเพิ่มเติมเกี่ยวกับการย้ายข้อมูลส่วนขยายนี้โดยเฉพาะและวิธีแก้ไขเมื่อข้อมูลสูญหายได้ใน README.md ของชุดเครื่องมือ
ฉันควรทำอย่างไรหากขั้นตอนการจัดสรรวงจรการใช้งานไม่สำเร็จ
ภายใต้บริการที่มีการจัดการ ระบบจะจัดการงานการตั้งค่า (เช่น การสร้างBigQuery
ชุดข้อมูล ตาราง และมุมมอง) โดยอัตโนมัติ ในโมเดล NPM ที่จัดการด้วยตนเอง ระบบจะทริกเกอร์ฟังก์ชันคิวงานวงจรนี้โดยใช้ฟังก์ชันคิวงานวงจร ตัวอย่างเช่น ใน firestore-bigquery-export จะเรียกว่า initBigQuerySync
หากขั้นตอนนี้ล้มเหลวหรือไม่ได้ทำงานโดยอัตโนมัติ ให้ทำดังนี้
ตรวจสอบว่าCloud Functionsบัญชีบริการรันไทม์ได้รับ บทบาท IAM ที่จำเป็นแล้ว เช่น สำหรับ
firestore-bigquery-exportรายการต่อไปนี้ จะรวมอยู่ด้วย- วิธีสร้างทรัพยากรและแทรกแถว
roles/bigquery.dataEditor - วิธีเรียกใช้งานและสร้างมุมมอง
roles/bigquery.user - หากต้องการจัดคิวงานการจัดสรร ให้ทำดังนี้
roles/cloudtasks.enqueuer
- วิธีสร้างทรัพยากรและแทรกแถว
ยืนยันว่าผู้โทรมี
roles/cloudtasks.enqueuerเรียกใช้คำสั่งการเริ่มต้นวงจรลูกค้าอีกครั้งด้วยตนเองโดยใช้ CLI
firebase functions:lifecycle:run afterInstall KIT_INSTANCE_IDตรวจสอบCloud Loggingบันทึกของทั้งฟังก์ชันทริกเกอร์และการดำเนินการคิวงานเพื่อวินิจฉัยข้อผิดพลาดเกี่ยวกับสิทธิ์หรือการกำหนดค่า
วิธีการย้ายข้อมูลเข้าสู่ระบบของ Secret Manager
ภายใต้โมเดลที่มีการจัดการ Secret Manager ระบบจะเชื่อมโยงทรัพยากรกับอินสแตนซ์ส่วนขยายโดยอัตโนมัติ
เมื่อคุณใช้คำสั่ง ext:migrate หรือ ext:export
--mode functions เพื่อส่งออกการกำหนดค่าส่วนขยายไปยัง Function
kit เราจะหยุดไม่ให้ส่วนขยายจัดการข้อมูลลับเหล่านี้เพื่อให้ข้อมูลลับยังคงอยู่ในโปรเจ็กต์
หลังจากถอนการติดตั้งส่วนขยายแล้ว หากต้องการนำข้อมูลลับเหล่านี้ออกในอนาคต คุณจะต้องดำเนินการด้วยตนเองในGoogle Cloudคอนโซล
จะเกิดอะไรขึ้นหากผู้ใช้ต้องการเรียกใช้ส่วนขยายที่ย้ายข้อมูลหลายอินสแตนซ์
เราได้เปิดตัวชุดฟังก์ชันเพื่อรองรับฟังก์ชันหลายอินสแตนซ์
คล้ายกับที่คุณมีส่วนขยายหลายเวอร์ชันได้ แต่ละชุดจะ
ได้รับรหัสอินสแตนซ์ของชุดที่ไม่ซ้ำกัน ซึ่งคล้ายกับโค้ดเบสและใช้
สลับกับโค้ดเบสในคำสั่ง CLI ได้ เมื่อติดตั้งใช้งาน ฟังก์ชันทั้งหมดในอินสแตนซ์ของชุดเครื่องมือจะขึ้นต้นด้วย kit-<instance-id>- เพื่อให้มั่นใจว่าทุกฟังก์ชันจะมีชื่อที่ไม่ซ้ำกัน ซึ่งคล้ายกับคำนำหน้า ext-<extension-instance-id>- ในส่วนขยาย ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ชุดฟังก์ชันเป็นส่วนหนึ่งของการย้ายข้อมูลได้ในคู่มือการย้ายข้อมูลผู้ใช้
การติดตั้ง Kit ใช้ npm แล้วจะเกิดอะไรขึ้นหากฉันต้องการใช้ Yarn หรือเครื่องมือจัดการแพ็กเกจอื่นๆ ที่เข้ากันได้กับ Node
ขณะนี้เรายังไม่มีแผนที่จะรองรับ Yarn หรือเครื่องมือจัดการแพ็กเกจอื่นๆ การติดตั้งชุดเครื่องมือ ทำงานโดยการเรียกใช้คำสั่ง npm โดยตรงเมื่อตั้งค่าซอร์สโค้ดของชุดเครื่องมือ ในการติดตั้งครั้งแรก
หรือคุณจะสร้างไดเรกทอรีต้นทาง ติดตั้งแพ็กเกจ npm ของชุดเครื่องมือด้วยตนเอง และตั้งค่าด้วยบิลด์และการส่งออกที่เหมาะสมก็ได้ ดูเทมเพลต TypeScript index-kit ของเราได้ใน
firebase-tools
หรือดูตัวอย่างชุดเครื่องมือที่ติดตั้งผ่าน npm เมื่อดำเนินการนี้แล้ว คุณจะติดตั้ง
ได้เหมือนชุดเครื่องมือในเครื่องโดยใช้ --directory แทน --package หลังจากนี้
คุณจะต้องระบุชุดเครื่องมือตามไดเรกทอรีหรือรหัส แต่คุณสามารถใช้คำสั่งชุดเครื่องมือ
เพื่อเพิ่มและนำอินสแตนซ์ออกได้
ส่วนขยายของฉันใช้พารามิเตอร์ระบบขั้นสูงของที่เก็บ Docker หรือคีย์ KMS ฉันจะกำหนดค่านี้ในชุดฟังก์ชันได้อย่างไร
ขณะนี้เรายังไม่รองรับการกำหนดค่าที่เก็บ Docker หรือคีย์ KMS ใน Cloud Functions สำหรับ Firebase หากคุณย้ายข้อมูลจากส่วนขยาย ที่มีการกำหนดค่าพารามิเตอร์ระบบเหล่านี้และต้องการรักษาฟังก์ชันนี้ไว้ คุณสามารถใช้พารามิเตอร์กับฟังก์ชันของชุดเครื่องมือใหม่ได้โดยใช้ gcloud CLI
ข้อกำหนดเบื้องต้น
- ติดตั้งชุดฟังก์ชันในตอนแรกตามคำแนะนำในการย้ายข้อมูลเพื่อให้ฟังก์ชันอยู่ใน Google Cloud
กําหนดตัวแปรสภาพแวดล้อมในเทอร์มินัล
export PROJECT_ID="YOUR_PROJECT_ID" export FUNCTION_REGION="YOUR_REGION" # e.g. us-east1 export KIT_NAME="YOUR_KIT_NAME" # e.g. firestore-bigquery-export export SOURCE_DIR="YOUR_KIT_SOURCE_DIR" # e.g. "./function-kits/${KIT_NAME}/source" export REPO_NAME="YOUR_DOCKER_REPO_NAME" export KEY_RING="YOUR_KMS_KEY_RING" export KEY_NAME="YOUR_KMS_KEY_NAME" # Retrieve Project Number automatically export PROJECT_NUMBER=$(gcloud projects describe "$PROJECT_ID" --format="value(projectNumber)")สร้าง
.gcloudignoreล่วงหน้าในรูทของแหล่งที่มาของชุดเครื่องมือเพื่อให้.gitignoreไม่สนใจไฟล์บิลด์ที่คอมไพล์แล้วcat << 'EOF' > "${SOURCE_DIR}/.gcloudignore" .gcloudignore .git .gitignore node_modules #!include:.gitignore !lib/** EOFให้สิทธิ์ IAM ที่จำเป็น
สำหรับคีย์ KMS (ให้สิทธิ์เข้าถึงการถอดรหัสแก่ตัวแทนบริการ) ให้ทำดังนี้
for SERVICE_ACCOUNT in \ "service-${PROJECT_NUMBER}@serverless-robot-prod.iam.gserviceaccount.com" \ "service-${PROJECT_NUMBER}@gcf-admin-robot.iam.gserviceaccount.com" \ "service-${PROJECT_NUMBER}@gcp-sa-artifactregistry.iam.gserviceaccount.com" do gcloud kms keys add-iam-policy-binding "$KEY_NAME" \ --keyring="$KEY_RING" \ --location="$FUNCTION_REGION" \ --project="$PROJECT_ID" \ --member="serviceAccount:${SERVICE_ACCOUNT}" \ --role="roles/cloudkms.cryptoKeyEncrypterDecrypter" doneสำหรับ Artifact Registry (ให้สิทธิ์เขียนแก่ Cloud Build และสิทธิ์อ่าน แก่ Cloud Run) ให้ทำดังนี้
# Grant the Cloud Build / Compute Service Account permission to write images to the repository gcloud artifacts repositories add-iam-policy-binding "$REPO_NAME" \ --location="$FUNCTION_REGION" \ --project="$PROJECT_ID" \ --member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --role="roles/artifactregistry.writer" # Grant Cloud Run permission to pull images from the repository gcloud artifacts repositories add-iam-policy-binding "$REPO_NAME" \ --location="$FUNCTION_REGION" \ --project="$PROJECT_ID" \ --member="serviceAccount:service-${PROJECT_NUMBER}@serverless-robot-prod.iam.gserviceaccount.com" \ --role="roles/artifactregistry.reader"
การใช้การตั้งค่าโดยใช้ gcloud CLI
เรียกใช้ gcloud functions deploy สำหรับแต่ละฟังก์ชันในชุดเครื่องมือ
gcloud functions deploy FUNCTION_NAME \
--project="$PROJECT_ID" \
--region="$FUNCTION_REGION" \
--source="./function-kits/${KIT_NAME}/source" \
--docker-repository="projects/${PROJECT_ID}/locations/${FUNCTION_REGION}/repositories/${REPO_NAME}" \
--kms-key="projects/${PROJECT_ID}/locations/${FUNCTION_REGION}/keyRings/${KEY_RING}/cryptoKeys/${KEY_NAME}"
โปรดทราบว่าวิธีแก้ปัญหานี้จะใช้ไม่ได้ในกรณีต่อไปนี้
- อินสแตนซ์ชุดอุปกรณ์ใหม่: การเพิ่มอินสแตนซ์ใน
firebase.jsonจะสร้างทรัพยากร Cloud Functions v2 ใหม่ซึ่งใช้คีย์ที่ Google จัดการและgcf-artifactsเป็นค่าเริ่มต้น คุณต้องเรียกใช้gcloudสำหรับอินสแตนซ์ใหม่แต่ละรายการ - การสร้างฟังก์ชันใหม่: การเปลี่ยนประเภททริกเกอร์ (เช่น จาก HTTPS เป็นทริกเกอร์ Cloud Firestore) การเปลี่ยนจุดแรกเข้า หรือการเปลี่ยนชื่อจะทำให้ Firebase CLI ลบฟังก์ชันเก่าและสร้างฟังก์ชันใหม่ ฟังก์ชันใหม่
จะสูญเสียการตั้งค่าเหล่านี้จนกว่าคุณจะเรียกใช้
gcloudอีกครั้ง - การเปลี่ยนแปลงการกำหนดค่า: Firebase CLI ไม่แสดงสถานะ KMS หรือที่เก็บ Docker ใน
firebase functions:listหรือบันทึก diff ซึ่งทำให้การตรวจสอบโครงสร้างพื้นฐานเป็นเรื่องยาก
การยืนยันความสำเร็จ
หากต้องการยืนยันว่าได้ใช้ที่เก็บและคีย์การเข้ารหัสแล้ว ให้เรียกใช้คำสั่งต่อไปนี้
gcloud functions describe FUNCTION_NAME \
--region="$FUNCTION_REGION" \
--project="$PROJECT_ID" \
--format="yaml(state, buildConfig.dockerRepository, kmsKeyName)"