ก่อนเชื่อมต่อแอปของคุณกับโปรแกรมจำลอง 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 จริง และไม่มีทรัพยากรที่ใช้งานอยู่ โครงการเหล่านี้มักจะเข้าถึงได้ผ่าน codelabs หรือบทช่วยสอนอื่นๆ รหัสโครงการสำหรับโครงการสาธิตมีคำนำหน้า | เมื่อทำงานกับโปรเจ็กต์ Firebase สาธิต แอปและโค้ดของคุณจะโต้ตอบกับโปรแกรมจำลอง เท่านั้น หากแอปของคุณพยายามโต้ตอบกับทรัพยากรที่โปรแกรมจำลองไม่ได้ทำงานอยู่ โค้ดนั้นจะล้มเหลว |
เราขอแนะนำให้คุณใช้โครงการสาธิตหากเป็นไปได้ สิทธิประโยชน์รวมถึง:
- ตั้งค่าได้ง่ายขึ้น เนื่องจากคุณสามารถรันโปรแกรมจำลองได้โดยไม่ต้องสร้างโปรเจ็กต์ Firebase
- ความปลอดภัยที่แข็งแกร่งยิ่งขึ้น เนื่องจากหากรหัสของคุณเรียกใช้ทรัพยากรที่ไม่ได้จำลอง (การผลิต) โดยไม่ตั้งใจ จะไม่มีโอกาสที่ข้อมูลจะเปลี่ยนแปลง ใช้งาน และเรียกเก็บเงิน
- การสนับสนุนแบบออฟไลน์ที่ดีกว่า เนื่องจากไม่จำเป็นต้องเข้าถึงอินเทอร์เน็ตเพื่อดาวน์โหลดการกำหนดค่า SDK ของคุณ
เครื่องมือให้แอปของคุณพูดคุยกับผู้เลียนแบบ
เครื่องมือสำหรับแอปของคุณสำหรับฟังก์ชันที่เรียกได้
หากต้นแบบและกิจกรรมการทดสอบของคุณเกี่ยวข้องกับ ฟังก์ชันแบ็กเอนด์ที่เรียกได้ ให้ กำหนดค่าการโต้ตอบกับโปรแกรมจำลอง Cloud Functions for 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);
สวิฟต์
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")
Web modular API
import { getApp } from "firebase/app"; import { getFunctions, connectFunctionsEmulator } from "firebase/functions"; const functions = getFunctions(getApp()); connectFunctionsEmulator(functions, "127.0.0.1", 5001);
Web namespaced API
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 รองรับฟังก์ชันที่ทริกเกอร์พื้นหลังจากแหล่งที่มาต่อไปนี้:
- โปรแกรมจำลองฐานข้อมูลเรียลไทม์
- โปรแกรมจำลอง Cloud Firestore
- โปรแกรมจำลองการตรวจสอบสิทธิ์
- โปรแกรมจำลอง Pub/Sub
หากต้องการทริกเกอร์เหตุการณ์เบื้องหลัง ให้แก้ไขทรัพยากรส่วนหลังโดยใช้ 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
คุณสามารถแก้ไขพอร์ตเริ่มต้นตามที่อธิบายไว้ใน Configure Local Emulator Suite
เมื่อกำหนดค่าตัวแปรสภาพแวดล้อมอย่างถูกต้อง Firebase Admin SDK จะส่งเหตุการณ์ไปยังโปรแกรมจำลอง Eventarc โดยอัตโนมัติ ในทางกลับกัน อีมูเลเตอร์ Eventarc จะโทรกลับไปยังโปรแกรมจำลอง Cloud Functions เพื่อทริกเกอร์ตัวจัดการที่ลงทะเบียนไว้
คุณสามารถตรวจสอบบันทึกของฟังก์ชันใน Emulator Suite UI เพื่อดูรายละเอียดเกี่ยวกับการดำเนินการของตัวจัดการ
กำหนดค่าสภาพแวดล้อมการทดสอบในเครื่อง
หากฟังก์ชันของคุณใช้ การกำหนดค่าสภาพแวดล้อม แบบ dotenv คุณสามารถจำลองลักษณะการทำงานนั้นในสภาพแวดล้อมการทดสอบในเครื่องของคุณได้
เมื่อใช้โปรแกรมจำลอง Cloud Functions ในเครื่อง คุณจะแทนที่ตัวแปรสภาพแวดล้อมสำหรับโครงการได้โดยตั้งค่าไฟล์ .env.local
เนื้อหาของ .env.local
มีความสำคัญเหนือ .env
และไฟล์ .env
เฉพาะโครงการ
ตัวอย่างเช่น โปรเจ็กต์อาจรวมไฟล์สามไฟล์นี้ที่มีค่าต่างกันเล็กน้อยสำหรับการพัฒนาและการทดสอบในเครื่อง:
.env | .env.dev | .env.local |
PLANET = โลก AUDIENCE=มนุษย์ | AUDIENCE=Dev มนุษย์ | 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 ตัวจำลองอาจไม่สามารถเข้าถึงค่าลับได้เนื่องจากข้อจำกัดสิทธิ์
เช่นเดียวกับการรองรับโปรแกรมจำลอง Cloud Functions สำหรับตัวแปรสภาพแวดล้อม คุณสามารถแทนที่ค่าความลับได้โดยการตั้งค่าไฟล์ .secret.local
ซึ่งทำให้ง่ายต่อการทดสอบฟังก์ชันของคุณในเครื่อง โดยเฉพาะอย่างยิ่งหากคุณไม่มีสิทธิ์เข้าถึงค่าลับ
มีเครื่องมืออื่นใดอีกบ้างสำหรับการทดสอบ Cloud Functions
ตัวจำลอง Cloud Functions เสริมด้วยเครื่องมือต้นแบบและเครื่องมือทดสอบอื่นๆ:
- เชลล์ของ Cloud Functions ซึ่งช่วยให้สามารถสร้างต้นแบบและพัฒนาฟังก์ชันแบบโต้ตอบและวนซ้ำได้ เชลล์ใช้โปรแกรมจำลอง Cloud Functions พร้อมอินเทอร์เฟซสไตล์ REPL สำหรับการพัฒนา ไม่มีการผสานรวมกับตัวจำลอง Cloud Firestore หรือฐานข้อมูลเรียลไทม์ เมื่อใช้เชลล์ คุณจะจำลองข้อมูลและเรียกใช้ฟังก์ชันเพื่อจำลองการโต้ตอบกับผลิตภัณฑ์ที่ Local Emulator Suite ไม่รองรับในขณะนี้: Analytics, Remote Config และ Crashlytics
- Firebase Test SDK สำหรับ Cloud Functions ซึ่งเป็น Node.js ที่มี mocha framework สำหรับการพัฒนาฟังก์ชัน ผลก็คือ Cloud Functions Test SDK มอบการทำงานอัตโนมัติบนเปลือก Cloud Functions
คุณสามารถค้นหาเพิ่มเติมเกี่ยวกับ Cloud Functions shell และ Cloud Functions Test SDK ได้ที่ ทดสอบฟังก์ชันแบบโต้ตอบ และ การทดสอบหน่วยของ Cloud Functions
ตัวจำลอง Cloud Functions แตกต่างจากเวอร์ชันที่ใช้งานจริงอย่างไร
ตัวจำลอง Cloud Functions ค่อนข้างใกล้เคียงกับสภาพแวดล้อมการใช้งานจริงสำหรับกรณีการใช้งานส่วนใหญ่ เราได้ทำงานอย่างหนักเพื่อให้แน่ใจว่าทุกอย่างภายในรันไทม์ของโหนดนั้นใกล้เคียงกับการผลิตมากที่สุด อย่างไรก็ตาม ตัวจำลองไม่ได้เลียนแบบสภาพแวดล้อมการผลิตแบบบรรจุคอนเทนเนอร์ทั้งหมด ดังนั้นในขณะที่โค้ดฟังก์ชันของคุณจะทำงานตามความเป็นจริง สภาพแวดล้อมด้านอื่นๆ ของคุณ (เช่น ไฟล์ในเครื่อง พฤติกรรมหลังจากฟังก์ชันขัดข้อง ฯลฯ) จะแตกต่างออกไป
คลาวด์ไอแอม
Firebase Emulator Suite ไม่พยายามทำซ้ำหรือปฏิบัติตามพฤติกรรมที่เกี่ยวข้องกับ IAM สำหรับการเรียกใช้ Emulators ปฏิบัติตามกฎความปลอดภัยของ Firebase ที่มีให้ แต่ในสถานการณ์ที่ปกติแล้ว IAM จะถูกใช้ เช่น เพื่อตั้งค่า Cloud Functions ที่เรียกใช้บัญชีบริการและด้วยเหตุนี้ การอนุญาต Emulator จะไม่สามารถกำหนดค่าได้ และจะใช้บัญชีที่มีอยู่ทั่วโลกในเครื่องผู้พัฒนาของคุณ คล้ายกับการรันสคริปต์ในเครื่องโดยตรง
ข้อจำกัดของหน่วยความจำและโปรเซสเซอร์
โปรแกรมจำลองไม่ได้บังคับใช้ข้อจำกัดของหน่วยความจำหรือตัวประมวลผลสำหรับฟังก์ชันของคุณ อย่างไรก็ตาม ตัวจำลองสนับสนุนฟังก์ชันการหมดเวลาผ่านอาร์กิวเมนต์รันไทม์ timeoutSeconds
โปรดทราบว่าเวลาดำเนินการของฟังก์ชันอาจแตกต่างจากการใช้งานจริงเมื่อเรียกใช้ฟังก์ชันในโปรแกรมจำลอง เราขอแนะนำว่าหลังจากที่คุณออกแบบและทดสอบฟังก์ชันด้วยโปรแกรมจำลองแล้ว ให้เรียกใช้การทดสอบแบบจำกัดในการผลิตเพื่อยืนยันเวลาดำเนินการ
การวางแผนสำหรับความแตกต่างของสภาพแวดล้อมในท้องถิ่นและการผลิต
เนื่องจากอีมูเลเตอร์ทำงานบนเครื่องโลคัลของคุณ จึงขึ้นอยู่กับสภาพแวดล้อมโลคัลของคุณสำหรับแอปพลิเคชันและโปรแกรมและยูทิลิตี้ในตัว
โปรดทราบว่าสภาพแวดล้อมในเครื่องของคุณสำหรับการพัฒนา Cloud Functions อาจแตกต่างจากสภาพแวดล้อมการผลิตของ Google:
แอปพลิเคชันที่คุณติดตั้งในเครื่องเพื่อจำลองสภาพแวดล้อมการใช้งานจริง (เช่น ImageMagick จาก บทช่วยสอนนี้ ) อาจมีลักษณะการทำงานแตกต่างจากการใช้งานจริง โดยเฉพาะอย่างยิ่งหากคุณต้องการเวอร์ชันอื่นหรือพัฒนาในสภาพแวดล้อมที่ไม่ใช่ Linux พิจารณาปรับใช้สำเนาไบนารีของโปรแกรมที่ขาดหายไปควบคู่ไปกับการปรับใช้ฟังก์ชันของคุณ
ในทำนองเดียวกัน ยูทิลิตี้ในตัว (เช่น คำสั่งเชลล์ เช่น
ls
,mkdir
) อาจแตกต่างจากเวอร์ชันที่ใช้งานจริง โดยเฉพาะอย่างยิ่งหากคุณกำลังพัฒนาในสภาพแวดล้อมที่ไม่ใช่ Linux (เช่น macOS) คุณสามารถจัดการปัญหานี้ได้โดยใช้ทางเลือกเฉพาะโหนดแทนคำสั่งเนทีฟ หรือโดยการสร้างไบนารีของ Linux เพื่อรวมเข้ากับการปรับใช้ของคุณ
กำลังลองใหม่
โปรแกรมจำลอง Cloud Functions ไม่รองรับฟังก์ชันการลองใหม่เมื่อเกิดความล้มเหลว
อะไรต่อไป?
- สำหรับชุดวิดีโอที่คัดสรรมาอย่างดีและตัวอย่างวิธีใช้อย่างละเอียด โปรดติดตาม เพลย์ลิสต์การฝึกอบรม Firebase Emulators
- เรียนรู้เพิ่มเติมเกี่ยวกับ Cloud Functions for Firebase emulator ที่ Run functions locally