ก่อนเชื่อมต่อแอปกับโปรแกรมจำลอง Cloud Functions โปรดตรวจสอบว่า คุณ เข้าใจเวิร์กโฟลว์โดยรวมของ Firebase Local Emulator Suite, รวมถึงติดตั้งและกำหนดค่า Local Emulator Suite และตรวจสอบ คำสั่ง CLI
เลือกโปรเจ็กต์ Firebase
Firebase Local Emulator Suite จะจำลองผลิตภัณฑ์สำหรับโปรเจ็กต์ Firebase เดียว
หากต้องการเลือกโปรเจ็กต์ที่จะใช้ ให้เรียกใช้ firebase use ในไดเรกทอรีงานใน CLI ก่อนเริ่มโปรแกรมจำลอง หรือจะส่ง
แฟล็ก --project ไปยังคำสั่งโปรแกรมจำลองแต่ละรายการ
ก็ได้
Local Emulator Suite รองรับการจำลองโปรเจ็กต์ Firebase จริง และ โปรเจ็กต์ สาธิต
| ประเภทโปรเจ็กต์ | ฟีเจอร์ | ใช้กับโปรแกรมจำลอง |
|---|---|---|
| จริง |
โปรเจ็กต์ Firebase จริงคือโปรเจ็กต์ที่คุณสร้างและกำหนดค่า (ส่วนใหญ่ ผ่าน Firebase คอนโซล) โปรเจ็กต์จริงมีทรัพยากรที่ใช้งานจริง เช่น อินสแตนซ์ฐานข้อมูล บัคเก็ตพื้นที่เก็บข้อมูล ฟังก์ชัน หรือทรัพยากรอื่นๆ ที่คุณตั้งค่าไว้สำหรับโปรเจ็กต์ Firebase นั้น |
เมื่อทำงานกับโปรเจ็กต์ Firebase จริง คุณสามารถเรียกใช้โปรแกรมจำลองสำหรับผลิตภัณฑ์ที่รองรับทั้งหมดหรือบางส่วนก็ได้ สำหรับผลิตภัณฑ์ที่คุณไม่ได้จำลอง แอปและโค้ดจะ โต้ตอบกับทรัพยากรที่ ใช้งานจริง (อินสแตนซ์ฐานข้อมูล บัคเก็ตพื้นที่เก็บข้อมูล ฟังก์ชัน ฯลฯ) |
| สาธิต |
โปรเจ็กต์ Firebase สาธิตไม่มีการกำหนดค่า Firebase จริง และ ไม่มีทรัพยากรที่ใช้งานจริง โดยปกติแล้ว คุณจะเข้าถึงโปรเจ็กต์เหล่านี้ผ่าน Codelab หรือ บทแนะนำอื่นๆ รหัสโปรเจ็กต์สำหรับโปรเจ็กต์สาธิตจะมีคำนำหน้า |
เมื่อทำงานกับโปรเจ็กต์ Firebase สาธิต แอปและโค้ดจะโต้ตอบกับ โปรแกรมจำลอง เท่านั้น หากแอปพยายามโต้ตอบกับทรัพยากร ที่ไม่มีโปรแกรมจำลองทำงานอยู่ โค้ดดังกล่าวจะล้มเหลว |
เราขอแนะนำให้คุณใช้โปรเจ็กต์สาธิตทุกครั้งที่เป็นไปได้ สิทธิประโยชน์มีดังนี้
- ตั้งค่าได้ง่ายขึ้น เนื่องจากคุณสามารถเรียกใช้โปรแกรมจำลองได้โดยไม่ต้องสร้างโปรเจ็กต์ Firebase
- ปลอดภัยมากขึ้น เนื่องจากหากโค้ดเรียกใช้ทรัพยากรที่ไม่ใช่โปรแกรมจำลอง (เวอร์ชันที่ใช้งานจริง) โดยไม่ได้ตั้งใจ ก็จะไม่มีโอกาสที่ข้อมูลจะเปลี่ยนแปลง การใช้งาน และการเรียกเก็บเงิน
- รองรับการทำงานแบบออฟไลน์ได้ดีขึ้น เนื่องจากไม่จำเป็นต้องเข้าถึงอินเทอร์เน็ตเพื่อดาวน์โหลดการกำหนดค่า SDK
ตั้งค่าแอปให้สื่อสารกับโปรแกรมจำลอง
ตั้งค่าแอปสำหรับฟังก์ชันที่เรียกใช้ได้
หากกิจกรรมการสร้างต้นแบบและการทดสอบเกี่ยวข้องกับฟังก์ชันแบ็กเอนด์ที่เรียกใช้ได้ ให้กำหนดค่าการโต้ตอบกับCloud Functions for Firebaseโปรแกรมจำลองดังนี้
Kotlin
// 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().useEmulator(withHost: "localhost", port: 5001)
Unity
FirebaseFunctions functions = FirebaseFunctions.DefaultInstance; // Connects to the Functions Emulator running on port 5001 functions.UseFunctionsEmulator("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 อย่างง่ายที่มีพอร์ตโฮสต์และภูมิภาคเริ่มต้นที่ URL ต่อไปนี้
https://localhost:5001/$PROJECT/us-central1/helloWorld
ตั้งค่าแอปสำหรับการจำลองฟังก์ชันคิวงาน
โปรแกรมจำลองจะตั้งค่าคิวงานที่จำลองขึ้นโดยอัตโนมัติตามคำจำกัดความของทริกเกอร์ และ Admin SDK จะเปลี่ยนเส้นทางคำขอที่เข้าคิวไปยังโปรแกรมจำลองหากตรวจพบว่าโปรแกรมจำลองกำลังทำงานผ่านตัวแปรสภาพแวดล้อม CLOUD_TASKS_EMULATOR_HOST
โปรดทราบว่าระบบการส่งงานที่ใช้ในเวอร์ชันที่ใช้งานจริงมีความซับซ้อนกว่าระบบที่ติดตั้งใช้งานในโปรแกรมจำลอง ดังนั้นคุณจึงไม่ควรคาดหวังว่าลักษณะการทำงานที่จำลองขึ้นจะเหมือนกับสภาพแวดล้อมเวอร์ชันที่ใช้งานจริงทุกประการ พารามิเตอร์ภายในโปรแกรมจำลองจะกำหนดขอบเขตบนของอัตราที่งานจะถูกส่งและลองอีกครั้ง
ตั้งค่าแอปสำหรับการจำลองฟังก์ชันที่ทริกเกอร์โดยพื้นหลัง
โปรแกรมจำลอง Cloud Functions รองรับฟังก์ชันที่ทริกเกอร์โดยพื้นหลังจากแหล่งที่มาต่อไปนี้
- โปรแกรมจำลอง Realtime Database
- โปรแกรมจำลอง Cloud Firestore
- โปรแกรมจำลอง Authentication
- โปรแกรมจำลอง Pub/Sub
- โปรแกรมจำลองการแจ้งเตือนของ Firebase
หากต้องการทริกเกอร์เหตุการณ์พื้นหลัง ให้แก้ไขทรัพยากรแบ็กเอนด์โดยใช้ Emulator Suite 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 คุณสามารถ
แก้ไขพอร์ตเริ่มต้นได้ตามที่อธิบายไว้ในหัวข้อกำหนดค่า Local Emulator Suite
เมื่อกำหนดค่าตัวแปรสภาพแวดล้อมอย่างถูกต้องแล้ว Firebase Admin SDK จะส่งเหตุการณ์ไปยังโปรแกรมจำลอง Eventarc โดยอัตโนมัติ จากนั้นโปรแกรมจำลอง Eventarc จะเรียกกลับไปยังโปรแกรมจำลอง Cloud Functions เพื่อทริกเกอร์แฮนเดิลอร์ที่ ลงทะเบียนไว้
คุณสามารถตรวจสอบบันทึกของฟังก์ชันใน Emulator Suite UI เพื่อดูรายละเอียดเกี่ยวกับการดำเนินการของแฮนเดิลอร์
กำหนดค่าสภาพแวดล้อมการทดสอบในเครื่อง
หากฟังก์ชันของคุณต้องอาศัยการกำหนดค่าสภาพแวดล้อมที่อิงตาม dotenv คุณสามารถจำลองลักษณะการทำงานดังกล่าวในสภาพแวดล้อมการทดสอบในเครื่องได้
เมื่อใช้โปรแกรมจำลอง Cloud Functions ในเครื่อง คุณสามารถลบล้างตัวแปรสภาพแวดล้อม
สำหรับโปรเจ็กต์ได้โดยการตั้งค่าไฟล์ .env.local เนื้อหาของ
.env.local จะมีความสำคัญเหนือกว่า .env และไฟล์ .env ที่เฉพาะเจาะจงกับโปรเจ็กต์
ตัวอย่างเช่น โปรเจ็กต์อาจมีไฟล์ 3 ไฟล์ต่อไปนี้ซึ่งมีค่าที่แตกต่างกันเล็กน้อยสำหรับการพัฒนาและการทดสอบในเครื่อง
.env
|
.env.dev
|
.env.local
|
| PLANET=Earth
AUDIENCE=Humans |
AUDIENCE=Dev Humans | AUDIENCE=Local Humans |
เมื่อเริ่มต้นในบริบทภายใน โปรแกรมจำลองจะโหลดตัวแปรสภาพแวดล้อมตามที่แสดงด้านล่าง
$ firebase emulators:start
i emulators: Starting emulators: functions
# Starts emulator with following environment variables:
# PLANET=Earth
# AUDIENCE=Local Humans
ข้อมูลลับและข้อมูลเข้าสู่ระบบในโปรแกรมจำลอง Cloud Functions
โปรแกรมจำลอง Cloud Functions รองรับการใช้ข้อมูลลับเพื่อ จัดเก็บและเข้าถึงข้อมูลการกำหนดค่าที่ละเอียดอ่อน โดยค่าเริ่มต้น โปรแกรมจำลองจะพยายามเข้าถึงข้อมูลลับเวอร์ชันที่ใช้งานจริงโดยใช้ ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน ในบางสถานการณ์ เช่น สภาพแวดล้อม CI โปรแกรมจำลองอาจเข้าถึงค่าข้อมูลลับไม่สำเร็จเนื่องจากข้อจำกัดด้านสิทธิ์
เช่นเดียวกับการรองรับตัวแปรสภาพแวดล้อมของโปรแกรมจำลอง Cloud Functions คุณสามารถ
ลบล้างค่าข้อมูลลับได้โดยการตั้งค่าไฟล์ .secret.local ซึ่งจะช่วยให้คุณทดสอบฟังก์ชันในเครื่องได้ง่าย โดยเฉพาะอย่างยิ่งหากคุณไม่มีสิทธิ์เข้าถึงค่าข้อมูลลับ
มีเครื่องมืออื่นๆ สำหรับทดสอบ Cloud Functions หรือไม่
โปรแกรมจำลอง Cloud Functions มีเครื่องมืออื่นๆ สำหรับการสร้างต้นแบบและการทดสอบ ดังนี้
- เชลล์ Cloud Functions ซึ่งช่วยให้สามารถสร้างต้นแบบและพัฒนาฟังก์ชันแบบโต้ตอบและวนซ้ำได้ เชลล์ใช้โปรแกรมจำลอง Cloud Functions ที่มีอินเทอร์เฟซสไตล์ REPL สำหรับการพัฒนา ไม่มีการผสานรวมกับโปรแกรมจำลอง Cloud Firestore หรือ Realtime Database เมื่อใช้เชลล์ คุณจะจำลองข้อมูลและเรียกใช้ฟังก์ชันเพื่อจำลองการโต้ตอบกับผลิตภัณฑ์ที่ Local Emulator Suite ยังไม่รองรับในปัจจุบัน ได้แก่ Analytics, การกำหนดค่าระยะไกล และ Crashlytics
- Firebase Test SDK สำหรับ Cloud Functions ซึ่งเป็น Node.js ที่มีเฟรมเวิร์ก Mocha สำหรับการพัฒนาฟังก์ชัน โดยพื้นฐานแล้ว Cloud Functions Test SDK จะให้ระบบอัตโนมัติเพิ่มเติมจากเชลล์ Cloud Functions
ดูข้อมูลเพิ่มเติมเกี่ยวกับเชลล์ Cloud Functions และ Cloud Functions Test SDK ได้ที่หัวข้อทดสอบฟังก์ชันแบบโต้ตอบ และ การทดสอบหน่วยของ Cloud Functions
โปรแกรมจำลอง Cloud Functions แตกต่างจากเวอร์ชันที่ใช้งานจริงอย่างไร
โปรแกรมจำลอง Cloud Functions ค่อนข้างใกล้เคียงกับสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์ สำหรับการใช้งานส่วนใหญ่ เราได้ทุ่มเทอย่างเต็มที่เพื่อให้แน่ใจว่าทุกอย่างภายในรันไทม์ Node จะใกล้เคียงกับเวอร์ชันที่ใช้งานจริงมากที่สุด อย่างไรก็ตาม โปรแกรมจำลองไม่ได้จำลองสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์เวอร์ชันที่ใช้งานจริงแบบ Containerized ทั้งหมด ดังนั้นแม้ว่าโค้ดฟังก์ชันจะทำงานได้อย่างสมจริง แต่ลักษณะอื่นๆ ของสภาพแวดล้อม (เช่น ไฟล์ในเครื่อง ลักษณะการทำงานหลังจากฟังก์ชันขัดข้อง ฯลฯ) จะแตกต่างกัน
Cloud IAM
Firebase ชุดโปรแกรมจำลอง ไม่ได้พยายามจำลองหรือคำนึงถึงลักษณะการทำงานที่เกี่ยวข้องกับ IAM สำหรับการทำงาน โปรแกรมจำลองจะปฏิบัติตามกฎการรักษาความปลอดภัยของ Firebase ที่ให้ไว้ แต่ในสถานการณ์ที่โดยปกติแล้วจะใช้ IAM เช่น เพื่อตั้งค่าบัญชีบริการที่เรียกใช้ Cloud Functions และสิทธิ์ต่างๆ โปรแกรมจำลองจะกำหนดค่าไม่ได้และจะใช้บัญชีที่พร้อมใช้งานทั่วโลกในเครื่องของนักพัฒนาแอป ซึ่งคล้ายกับการเรียกใช้สคริปต์ในเครื่องโดยตรง
ข้อจำกัดด้านหน่วยความจำและโปรเซสเซอร์
โปรแกรมจำลองไม่ได้บังคับใช้ข้อจำกัดด้านหน่วยความจำหรือโปรเซสเซอร์สำหรับฟังก์ชัน อย่างไรก็ตาม โปรแกรมจำลองรองรับการหมดเวลาของฟังก์ชันผ่านอาร์กิวเมนต์รันไทม์ timeoutSeconds
โปรดทราบว่าเวลาในการดำเนินการของฟังก์ชันอาจแตกต่างจากเวอร์ชันที่ใช้งานจริงเมื่อเรียกใช้ฟังก์ชันในโปรแกรมจำลอง เราขอแนะนำให้คุณเรียกใช้การทดสอบแบบจำกัดในเวอร์ชันที่ใช้งานจริงหลังจากออกแบบและทดสอบฟังก์ชันด้วยโปรแกรมจำลองแล้ว เพื่อยืนยันเวลาในการดำเนินการ
การวางแผนสำหรับความแตกต่างระหว่างสภาพแวดล้อมในเครื่องและสภาพแวดล้อมเวอร์ชันที่ใช้งานจริง
เนื่องจากโปรแกรมจำลองทำงานในเครื่องของคุณ จึงขึ้นอยู่กับสภาพแวดล้อมในเครื่องสำหรับแอปพลิเคชัน โปรแกรมและยูทิลิตีในตัว
โปรดทราบว่าสภาพแวดล้อมในเครื่องสำหรับการพัฒนา Cloud Functions อาจแตกต่างจากสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์ของ Google ดังนี้
แอปพลิเคชันที่คุณติดตั้งในเครื่องเพื่อจำลองสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์ (เช่น ImageMagick จาก บทแนะนำนี้) อาจมีลักษณะการทำงานแตกต่างจากสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์ โดยเฉพาะอย่างยิ่งหากคุณต้องการเวอร์ชันอื่นหรือพัฒนาในสภาพแวดล้อมที่ไม่ใช่ Linux ลองพิจารณาการติดตั้งใช้งานสำเนาไบนารีของคุณเองของโปรแกรมที่ขาดหายไปพร้อมกับการติดตั้งใช้งานฟังก์ชัน
ในทำนองเดียวกัน ยูทิลิตีในตัว (เช่น คำสั่งเชลล์อย่าง
ls,mkdir) อาจแตกต่างจากเวอร์ชันที่พร้อมใช้งานในเวอร์ชันที่ใช้งานจริง โดยเฉพาะอย่างยิ่งหากคุณกำลังพัฒนาในสภาพแวดล้อมที่ไม่ใช่ Linux (เช่น macOS) คุณสามารถจัดการปัญหานี้ได้โดยใช้ตัวเลือกเฉพาะ Node แทนคำสั่งเนทีฟ หรือสร้างไบนารี Linux เพื่อรวมไว้กับการติดตั้งใช้งาน
กำลังลองอีกครั้ง
โปรแกรมจำลอง Cloud Functions ไม่รองรับการลองฟังก์ชันอีกครั้งเมื่อล้มเหลว
ฉันควรทำอย่างไรต่อไป
- หากต้องการดูชุดวิดีโอที่ดูแลและตัวอย่างวิธีใช้อย่างละเอียด ให้ดูเพลย์ลิสต์การฝึกของ Firebase Emulators
- ดูข้อมูลเพิ่มเติมเกี่ยวกับโปรแกรมจำลอง Cloud Functions for Firebase ได้ที่หัวข้อ เรียกใช้ฟังก์ชันในเครื่อง