ก่อนที่จะเชื่อมต่อแอปกับโปรแกรมจำลอง Cloud Functions โปรดตรวจสอบว่าคุณเข้าใจเวิร์กโฟลว์โดยรวมของ Firebase Local Emulator Suite รวมถึงได้ติดตั้งและกำหนดค่า Local Emulator Suite และตรวจสอบคำสั่ง CLI แล้ว
เลือกโปรเจ็กต์ Firebase
Firebase Local Emulator Suite จะจำลองผลิตภัณฑ์สำหรับโปรเจ็กต์ Firebase โปรเจ็กต์เดียว
หากต้องการเลือกโปรเจ็กต์ที่จะใช้ ก่อนที่คุณจะเริ่มโปรแกรมจำลอง ในการเรียกใช้ CLI
firebase use
ในไดเรกทอรีการทำงาน หรือจะส่งธง --project
ไปยังคำสั่งโปรแกรมจำลองแต่ละคำสั่งก็ได้
ชุดโปรแกรมจำลองภายในรองรับการจำลองโปรเจ็กต์ Firebase จริงและโปรเจ็กต์สาธิต
ประเภทโปรเจ็กต์ | ฟีเจอร์ | ใช้กับโปรแกรมจำลอง |
---|---|---|
จริง |
โปรเจ็กต์ Firebase จริงคือโปรเจ็กต์ที่คุณสร้างและกำหนดค่า (ส่วนใหญ่จะผ่านคอนโซล Firebase) โปรเจ็กต์จริงจะมีทรัพยากรที่เผยแพร่อยู่ เช่น อินสแตนซ์ฐานข้อมูล ที่เก็บข้อมูลของพื้นที่เก็บข้อมูล ฟังก์ชัน หรือทรัพยากรอื่นๆ ที่คุณตั้งค่าไว้สำหรับโปรเจ็กต์ Firebase นั้น |
เมื่อทำงานกับโปรเจ็กต์ Firebase จริง คุณจะเรียกใช้โปรแกรมจำลองสำหรับผลิตภัณฑ์ที่รองรับบางรายการหรือทั้งหมดก็ได้ สำหรับผลิตภัณฑ์ที่คุณไม่ได้จำลอง แอปและโค้ดจะโต้ตอบกับทรัพยากรที่เผยแพร่อยู่ (อินสแตนซ์ฐานข้อมูล ที่เก็บข้อมูลของพื้นที่เก็บข้อมูล ฟังก์ชัน ฯลฯ) |
เดโม |
โปรเจ็กต์สาธิต Firebase ไม่มีการกำหนดค่า Firebase จริง และไม่มีทรัพยากรที่เผยแพร่อยู่ โดยปกติแล้วโปรเจ็กต์เหล่านี้จะเข้าถึงได้ผ่าน Codelab หรือบทแนะนำอื่นๆ รหัสโปรเจ็กต์สำหรับโปรเจ็กต์สาธิตจะมี |
เมื่อทำงานกับโปรเจ็กต์ Firebase สาธิต แอปและโค้ดจะโต้ตอบกับโปรแกรมจำลองเท่านั้น หากแอปพยายามโต้ตอบกับทรัพยากรที่โปรแกรมจำลองไม่ได้ทำงานอยู่ โค้ดนั้นจะล้มเหลว |
เราขอแนะนำให้คุณใช้โปรเจ็กต์เดโมเมื่อเป็นไปได้ สิทธิประโยชน์มีดังนี้
- ตั้งค่าได้ง่ายขึ้น เนื่องจากคุณเรียกใช้โปรแกรมจำลองได้โดยไม่ต้องสร้างโปรเจ็กต์ Firebase
- ความปลอดภัยที่แข็งแกร่งขึ้นคือ หากโค้ดของคุณเรียกใช้ทรัพยากรที่ไม่ได้จำลอง (เวอร์ชันที่ใช้งานจริง) โดยไม่ตั้งใจ การเปลี่ยนแปลงข้อมูล การใช้งาน และการเรียกเก็บเงินจะไม่เกิดขึ้น
- รองรับการใช้งานแบบออฟไลน์ได้ดีกว่า เนื่องจากไม่จำเป็นต้องเข้าถึงอินเทอร์เน็ตเพื่อดาวน์โหลดการกำหนดค่า SDK
ใช้เครื่องดนตรีกับแอปเพื่อพูดคุยกับโปรแกรมจำลอง
ใช้เครื่องวัดการทำงานของแอปสำหรับฟังก์ชันที่เรียกใช้ได้
หากกิจกรรมต้นแบบและกิจกรรมทดสอบของคุณเกี่ยวข้องกับฟังก์ชันแบ็กเอนด์ที่เรียกใช้ได้ ให้กำหนดค่าการโต้ตอบกับโปรแกรมจำลองฟังก์ชันระบบคลาวด์สำหรับ Firebase ดังนี้
Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. val functions = Firebase.functions functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of // the host computer from an Android emulator. FirebaseFunctions functions = FirebaseFunctions.getInstance(); functions.useEmulator("10.0.2.2", 5001);
Swift
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")
Web
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "127.0.0.1", 5001);
Web
firebase.functions().useEmulator("127.0.0.1", 5001);
วัดเครื่องมือสำหรับแอปของคุณสำหรับการจำลองฟังก์ชัน HTTPS
ฟังก์ชัน HTTPS แต่ละฟังก์ชันในโค้ดของคุณจะแสดงจากโปรแกรมจำลองภายในโดยใช้รูปแบบ URL ต่อไปนี้
http://$HOST:$PORT/$PROJECT/$REGION/$NAME
ตัวอย่างเช่น ฟังก์ชัน helloWorld
แบบง่ายที่มีพอร์ตและภูมิภาคของโฮสต์เริ่มต้นจะแสดงที่
https://localhost:5001/$PROJECT/us-central1/helloWorld
วัดคุมแอปสำหรับการจำลองฟังก์ชันที่ทริกเกอร์ในเบื้องหลัง
โปรแกรมจำลอง Cloud Functions รองรับฟังก์ชันที่ทริกเกอร์ในเบื้องหลังจากแหล่งที่มาต่อไปนี้
- โปรแกรมจำลอง Realtime Database
- โปรแกรมจำลอง Cloud Firestore
- โปรแกรมจำลองการตรวจสอบสิทธิ์
- โปรแกรมจำลอง Pub/Sub
หากต้องการทริกเกอร์เหตุการณ์ในเบื้องหลัง ให้แก้ไขทรัพยากรแบ็กเอนด์โดยใช้ UI ชุดโปรแกรมจำลอง หรือโดยการเชื่อมต่อแอปหรือโค้ดทดสอบกับโปรแกรมจำลองโดยใช้ SDK สำหรับแพลตฟอร์มของคุณ
เครื่องจัดการทดสอบสำหรับเหตุการณ์ที่กำหนดเองที่เกิดจากส่วนขยาย
สำหรับฟังก์ชันที่คุณใช้เพื่อจัดการเหตุการณ์ที่กำหนดเองของ Firebase Extensions ด้วย Cloud Functions v2 โปรแกรมจำลอง Cloud Functions จะจับคู่กับโปรแกรมจำลอง Eventarc เพื่อรองรับทริกเกอร์ Eventarc
หากต้องการทดสอบเครื่องจัดการเหตุการณ์ที่กำหนดเองสำหรับส่วนขยายที่แสดงเหตุการณ์ คุณต้องติดตั้งโปรแกรมจำลอง Cloud Functions และ Eventarc
รันไทม์ของ Cloud Functions จะตั้งค่าตัวแปรสภาพแวดล้อม EVENTARC_EMULATOR
เป็น localhost:9299
ในกระบวนการปัจจุบันหากโปรแกรมจำลอง Eventarc ทำงานอยู่ Firebase Admin SDK จะเชื่อมต่อกับโปรแกรมจำลอง Eventarc โดยอัตโนมัติเมื่อตั้งค่าตัวแปรสภาพแวดล้อม EVENTARC_EMULATOR
คุณแก้ไขพอร์ตเริ่มต้นได้ตามที่อธิบายไว้ในส่วนกำหนดค่าชุดโปรแกรมจำลองภายใน
เมื่อกำหนดค่าตัวแปรสภาพแวดล้อมอย่างถูกต้อง Firebase Admin SDK จะส่งเหตุการณ์ไปยังโปรแกรมจำลอง Eventarc โดยอัตโนมัติ โปรแกรมจำลอง Eventarc จะเรียกกลับไปที่โปรแกรมจำลอง Cloud Functions เพื่อทริกเกอร์เครื่องจัดการที่ลงทะเบียนทั้งหมด
คุณสามารถตรวจสอบบันทึกฟังก์ชันใน UI ชุดโปรแกรมจำลองเพื่อดูรายละเอียดเกี่ยวกับการทำงานของแฮนเดิล
กำหนดค่าสภาพแวดล้อมการทดสอบในเครื่อง
หากฟังก์ชันใช้การกำหนดค่าสภาพแวดล้อมที่อิงตาม Dotenv คุณจะจำลองลักษณะการทำงานดังกล่าวในสภาพแวดล้อมการทดสอบในเครื่องได้
เมื่อใช้โปรแกรมจำลอง Cloud Functions ภายในเครื่อง คุณจะลบล้างตัวแปรสภาพแวดล้อมสำหรับโปรเจ็กต์ได้โดยการตั้งค่าไฟล์ .env.local
เนื้อหาของ .env.local
มีลำดับความสำคัญเหนือ .env
และไฟล์ .env
เฉพาะโปรเจ็กต์
เช่น โปรเจ็กต์อาจรวม 3 ไฟล์นี้ที่มีค่าที่แตกต่างกันเล็กน้อยสำหรับการพัฒนาและการทดสอบในเครื่อง
.env
|
.env.dev
|
.env.local
|
PLANET=โลก
AUDIENCE=มนุษย์ |
AUDIENCE=มนุษย์พัฒนา | AUDIENCE มนุษย์ท้องถิ่น |
เมื่อเริ่มต้นในบริบทเฉพาะเครื่อง โปรแกรมจำลองจะโหลดตัวแปรสภาพแวดล้อมตามที่แสดง
$ firebase emulators:start
i emulators: Starting emulators: functions
# Starts emulator with following environment variables:
# PLANET=Earth
# AUDIENCE=Local Humans
ข้อมูลลับและข้อมูลเข้าสู่ระบบในโปรแกรมจำลอง Cloud Functions
โปรแกรมจำลอง Cloud Functions รองรับการใช้ข้อมูลลับเพื่อจัดเก็บและเข้าถึงข้อมูลการกำหนดค่าที่ละเอียดอ่อน โดยค่าเริ่มต้น โปรแกรมจำลองจะพยายามเข้าถึงข้อมูลลับที่ใช้งานจริงโดยใช้ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน ในบางสถานการณ์ เช่น สภาพแวดล้อม CI โปรแกรมจำลองอาจเข้าถึงค่าลับไม่สำเร็จเนื่องจากข้อจำกัดสิทธิ์
คุณลบล้างค่าข้อมูลลับได้โดยตั้งค่าไฟล์ .secret.local
ซึ่งคล้ายกับการรองรับโปรแกรมจำลอง Cloud Functions สำหรับตัวแปรสภาพแวดล้อม ซึ่งทำให้ทดสอบฟังก์ชันในเครื่องได้ง่าย โดยเฉพาะอย่างยิ่งหากคุณไม่มีสิทธิ์เข้าถึงค่าข้อมูลลับ
มีเครื่องมือใดสำหรับการทดสอบ Cloud Functions อีกบ้าง
โปรแกรมจำลอง Cloud Functions เสริมด้วยต้นแบบและเครื่องมือทดสอบอื่นๆ
- Shell ฟังก์ชันระบบคลาวด์ ซึ่งช่วยให้สร้างต้นแบบและการพัฒนาฟังก์ชันแบบอินเทอร์แอกทีฟและทำซ้ำได้ Shell ใช้โปรแกรมจำลอง Cloud Functions ที่มีอินเทอร์เฟซรูปแบบ REPL สำหรับการพัฒนา ไม่มีการผสานรวมกับ Cloud Firestore หรือโปรแกรมจำลอง Realtime Database คุณสามารถใช้ Shell เพื่อจำลองข้อมูลและเรียกใช้ฟังก์ชันเพื่อจำลองการโต้ตอบกับผลิตภัณฑ์ที่ชุดโปรแกรมจำลองภายในยังไม่รองรับ ซึ่งได้แก่ Analytics, การกำหนดค่าระยะไกล และ Crashlytics
- Firebase Test SDK สำหรับ Cloud Functions ซึ่งเป็น Node.js ที่มีเฟรมเวิร์ก Mocha สำหรับการพัฒนาฟังก์ชัน Cloud Functions Test SDK จะทำให้ระบบทำงานอัตโนมัติบนเชลล์ Cloud Functions
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Shell ฟังก์ชัน Cloud และ Cloud Functions Test SDK ได้ที่ทดสอบฟังก์ชันแบบอินเทอร์แอกทีฟและการทดสอบหน่วยของ Cloud Functions
ความแตกต่างระหว่างโปรแกรมจำลอง Cloud Functions กับเวอร์ชันที่ใช้งานจริง
โปรแกรมจำลอง Cloud Functions ค่อนข้างใกล้เคียงกับสภาพแวดล้อมที่ใช้งานจริงสำหรับกรณีการใช้งานส่วนใหญ่ เราได้ทำงานอย่างหนักเพื่อให้มั่นใจว่าทุกอย่างภายในรันไทม์ของโหนดมีความใกล้เคียงกับการผลิตมากที่สุดเท่าที่จะเป็นไปได้ อย่างไรก็ตาม โปรแกรมจำลองจะไม่เลียนแบบสภาพแวดล้อมที่ใช้งานจริงที่สร้างโดยใช้คอนเทนเนอร์โดยสมบูรณ์ ดังนั้นในขณะที่โค้ดฟังก์ชันจะทำงานอย่างสมจริง ลักษณะอื่นๆ ของสภาพแวดล้อม (เช่น ไฟล์ในเครื่อง ลักษณะการทำงานหลังจากฟังก์ชันขัดข้อง ฯลฯ) จะแตกต่างกัน
Cloud IAM
ชุดโปรแกรมจำลอง Firebase จะไม่พยายามจำลองหรือทำตามลักษณะการทำงานที่เกี่ยวข้องกับ IAM สำหรับการเรียกใช้ โปรแกรมจำลองปฏิบัติตามกฎการรักษาความปลอดภัยของ Firebase ที่ให้ไว้ แต่ในสถานการณ์ที่ปกติแล้วจะใช้ IAM เช่น เพื่อตั้งค่าการเรียกใช้บัญชีบริการ Cloud Functions และด้วยเหตุดังกล่าว โปรแกรมจำลองจะกำหนดค่าไม่ได้และจะใช้บัญชีที่พร้อมใช้งานทั่วโลกในเครื่องของนักพัฒนาซอฟต์แวร์ ซึ่งคล้ายกับการเรียกใช้สคริปต์ในเครื่องโดยตรง
ข้อจำกัดของหน่วยความจำและโปรเซสเซอร์
โปรแกรมจำลองจะไม่บังคับใช้ข้อจำกัดของหน่วยความจำหรือโปรเซสเซอร์สำหรับฟังก์ชันของคุณ แต่โปรแกรมจำลองรองรับฟังก์ชันการหมดเวลาผ่านทางอาร์กิวเมนต์รันไทม์ timeoutSeconds
โปรดทราบว่าเวลาดำเนินการของฟังก์ชันอาจแตกต่างจากเวอร์ชันที่ใช้งานจริงเมื่อเรียกใช้ฟังก์ชันในโปรแกรมจําลอง เราขอแนะนำให้ทำการทดสอบแบบจำกัดในการใช้งานจริงเพื่อยืนยันเวลาดำเนินการหลังจากออกแบบและทดสอบฟังก์ชันกับโปรแกรมจำลองแล้ว
การวางแผนสำหรับความแตกต่างในสภาพแวดล้อมในเครื่องและสภาพแวดล้อมการใช้งานจริง
เนื่องจากโปรแกรมจำลองจะทำงานบนเครื่องของคุณ จึงขึ้นอยู่กับสภาพแวดล้อมในเครื่องสำหรับแอปพลิเคชันและโปรแกรมและยูทิลิตีในตัว
โปรดทราบว่าสภาพแวดล้อมในเครื่องสำหรับการพัฒนา Cloud Functions อาจแตกต่างจากสภาพแวดล้อมที่ใช้งานจริงของ Google ดังนี้
แอปพลิเคชันที่คุณติดตั้งในเครื่องเพื่อจำลองสภาพแวดล้อมที่ใช้งานจริง (เช่น ImageMagick จากบทแนะนำนี้) อาจมีลักษณะการทำงานที่แตกต่างจากเวอร์ชันที่ใช้งานจริง โดยเฉพาะอย่างยิ่งหากคุณต้องใช้เวอร์ชันอื่นหรือพัฒนาในสภาพแวดล้อมที่ไม่ใช่ Linux พิจารณาทำให้สำเนาไบนารีของโปรแกรมที่หายไปใช้งานได้ควบคู่กับการทำให้ฟังก์ชันใช้งานได้
ในทำนองเดียวกัน ยูทิลิตีในตัว (เช่น คำสั่ง Shell อย่าง
ls
,mkdir
) อาจแตกต่างจากเวอร์ชันที่พร้อมใช้งานในเวอร์ชันที่ใช้งานจริง โดยเฉพาะอย่างยิ่งหากคุณพัฒนาในสภาพแวดล้อมที่ไม่ใช่ Linux (เช่น macOS) คุณสามารถจัดการปัญหานี้โดยใช้ทางเลือกเฉพาะโหนดแทนคำสั่งแบบเนทีฟ หรือสร้างไบนารีของ Linux เพื่อรวมกับการติดตั้งใช้งาน
กำลังลองอีกครั้ง
โปรแกรมจำลอง Cloud Functions ไม่รองรับการพยายามลองใช้ฟังก์ชันอีกครั้งเมื่อล้มเหลว
ฉันควรทำอย่างไรต่อไป
- หากต้องการดูชุดวิดีโอที่มีการดูแลจัดการและตัวอย่างวิธีการโดยละเอียด ให้ทำตามเพลย์ลิสต์การฝึกอบรมของ Firebase Emulators
- ดูข้อมูลเพิ่มเติมเกี่ยวกับโปรแกรมจำลอง Cloud Functions for Firebase ได้ที่เรียกใช้ฟังก์ชันในเครื่อง