ก่อนเชื่อมต่อแอปกับโปรแกรมจำลอง 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)
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
ตั้งค่าแอปสำหรับการจำลองฟังก์ชันคิวงาน
โปรแกรมจำลองจะตั้งค่าคิวงานที่จำลองขึ้นโดยอัตโนมัติตามคำจำกัดความของทริกเกอร์ และ 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 ได้ที่หัวข้อทดสอบฟังก์ชันแบบโต้ตอบ และ การทำ Unit Test ของ Cloud Functions
ความแตกต่างระหว่างโปรแกรมจำลอง Cloud Functions กับเวอร์ชันที่ใช้งานจริง
โปรแกรมจำลอง Cloud Functions ค่อนข้างใกล้เคียงกับสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์ สำหรับกรณีการใช้งานส่วนใหญ่ เราได้ทุ่มเทอย่างเต็มที่เพื่อให้แน่ใจว่าทุกอย่างภายในรันไทม์ Node จะใกล้เคียงกับเวอร์ชันที่ใช้งานจริงมากที่สุด อย่างไรก็ตาม โปรแกรมจำลองไม่ได้จำลองสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์เวอร์ชันที่สร้างโดยใช้คอนเทนเนอร์ทั้งหมด ดังนั้นแม้ว่าโค้ดฟังก์ชันจะทำงานได้อย่างสมจริง แต่ลักษณะอื่นๆ ของสภาพแวดล้อม (เช่น ไฟล์ภายในเครื่อง ลักษณะการทำงานหลังจากฟังก์ชันขัดข้อง ฯลฯ) จะแตกต่างกัน
Cloud IAM
Firebase Emulator Suite ไม่ได้พยายามจำลองหรือปฏิบัติตามลักษณะการทำงานที่เกี่ยวข้องกับ 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 ได้ที่หัวข้อ เรียกใช้ฟังก์ชันภายในเครื่อง