เชื่อมต่อแอปกับโปรแกรมจำลอง Cloud Functions

ก่อนเชื่อมต่อแอปกับโปรแกรมจำลอง 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 จริง คุณจะเรียกใช้โปรแกรมจำลองสําหรับผลิตภัณฑ์ที่รองรับทั้งหมดหรือบางส่วนได้

สำหรับผลิตภัณฑ์ที่คุณไม่ได้จำลอง แอปและโค้ดจะโต้ตอบกับทรัพยากรที่ใช้งานจริง (อินสแตนซ์ฐานข้อมูล, Bucket ที่เก็บข้อมูล, ฟังก์ชัน ฯลฯ)

เดโม

โปรเจ็กต์ Firebase สาธิตไม่มีการกําหนดค่า Firebase จริงและ ไม่มีทรัพยากรที่ใช้งานจริง โดยปกติแล้วจะเข้าถึงโปรเจ็กต์เหล่านี้ผ่าน Codelab หรือ บทแนะนำอื่นๆ

รหัสโปรเจ็กต์สำหรับโปรเจ็กต์เดโมจะมีคำนำหน้า demo-

เมื่อใช้โปรเจ็กต์ 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 อย่างง่ายที่มีพอร์ตโฮสต์และภูมิภาคเริ่มต้นจะแสดงที่

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=Dev 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 โปรแกรมจำลองอาจเข้าถึงค่าลับไม่ได้เนื่องจากข้อจำกัดด้านสิทธิ์

คุณสามารถลบล้างค่าลับได้โดยการตั้งค่าไฟล์ .secret.local เช่นเดียวกับCloud Functionsการรองรับตัวแปรสภาพแวดล้อมของโปรแกรมจำลอง ซึ่งจะช่วยให้คุณทดสอบฟังก์ชันในเครื่องได้ง่าย โดยเฉพาะในกรณีที่คุณไม่มีสิทธิ์เข้าถึงค่าลับ

มีเครื่องมืออื่นๆ สำหรับการทดสอบ 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 และ SDK การทดสอบ Cloud Functions ได้ที่ทดสอบฟังก์ชันแบบอินเทอร์แอกทีฟและการทดสอบหน่วยของ Cloud Functions

Cloud Functionsโปรแกรมจำลองแตกต่างจากเวอร์ชันที่ใช้งานจริงอย่างไร

Cloud Functionsโปรแกรมจำลองค่อนข้างใกล้เคียงกับสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์ สำหรับกรณีการใช้งานส่วนใหญ่ เราได้ทุ่มเทอย่างเต็มที่เพื่อให้ทุกอย่าง ภายในรันไทม์ของ Node ใกล้เคียงกับการใช้งานจริงมากที่สุด อย่างไรก็ตาม โปรแกรมจำลองไม่ได้จำลองสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์แบบสร้างโดยใช้คอนเทนเนอร์ทั้งหมด ดังนั้นแม้ว่าโค้ดฟังก์ชันจะทำงานได้อย่างสมจริง แต่เฉพาะด้านอื่นๆ ของสภาพแวดล้อม (เช่น ไฟล์ในเครื่อง พฤติกรรมหลังจากฟังก์ชันขัดข้อง ฯลฯ) จะแตกต่างกัน

Cloud IAM

Firebase Emulator Suite ไม่พยายามจำลองหรือคำนึงถึงลักษณะการทำงานที่เกี่ยวข้องกับ IAM สำหรับการเรียกใช้ โปรแกรมจำลองจะปฏิบัติตามกฎความปลอดภัยของ Firebase ที่ระบุไว้ แต่ในกรณีที่ปกติจะใช้ IAM เช่น เพื่อตั้งค่าบัญชีบริการที่เรียกใช้ Cloud Functions และสิทธิ์ต่างๆ โปรแกรมจำลองจะกำหนดค่าไม่ได้และจะใช้บัญชีที่พร้อมใช้งานทั่วโลกในเครื่องสำหรับนักพัฒนาซอฟต์แวร์ของคุณ ซึ่งคล้ายกับการเรียกใช้สคริปต์ในเครื่องโดยตรง

ข้อจำกัดเกี่ยวกับหน่วยความจำและโปรเซสเซอร์

โปรแกรมจำลองจะไม่บังคับใช้ข้อจำกัดด้านหน่วยความจำหรือโปรเซสเซอร์สำหรับฟังก์ชัน ของคุณ อย่างไรก็ตาม โปรแกรมจำลองรองรับฟังก์ชันการหมดเวลาผ่านtimeoutSecondsอาร์กิวเมนต์รันไทม์

โปรดทราบว่าเวลาในการเรียกใช้ฟังก์ชันอาจแตกต่างจากเวลาในการใช้งานจริงเมื่อเรียกใช้ฟังก์ชันในโปรแกรมจำลอง เราขอแนะนำว่าหลังจากออกแบบและทดสอบฟังก์ชันด้วยโปรแกรมจำลองแล้ว ให้ทำการทดสอบแบบจำกัดในเวอร์ชันที่ใช้งานจริงเพื่อยืนยันเวลาในการดำเนินการ

การวางแผนความแตกต่างในสภาพแวดล้อมในพื้นที่และสภาพแวดล้อมที่ใช้งานจริง

เนื่องจากโปรแกรมจำลองทำงานในเครื่องของคุณ จึงขึ้นอยู่กับสภาพแวดล้อมในเครื่องสำหรับแอปพลิเคชัน โปรแกรมในตัว และยูทิลิตี

โปรดทราบว่าสภาพแวดล้อมในเครื่องสำหรับการพัฒนา Cloud Functions อาจแตกต่างจากสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์ของ Google ดังนี้

  • แอปพลิเคชันที่คุณติดตั้งในเครื่องเพื่อจำลองสภาพแวดล้อมฮาร์ดแวร์และซอฟต์แวร์ (เช่น ImageMagick จากบทแนะนำนี้) อาจมีลักษณะการทำงานแตกต่างจากเวอร์ชันที่ใช้งานจริง โดยเฉพาะอย่างยิ่งหากคุณต้องการใช้เวอร์ชันอื่นหรือพัฒนาในสภาพแวดล้อมที่ไม่ใช่ Linux ลองใช้ สำเนาไบนารีของโปรแกรมที่ขาดหายไปพร้อมกับการติดตั้งใช้งานฟังก์ชัน

  • ในทำนองเดียวกัน ยูทิลิตีในตัว (เช่น คำสั่ง Shell อย่าง ls, mkdir) อาจ แตกต่างจากเวอร์ชันที่ใช้งานจริง โดยเฉพาะอย่างยิ่งหากคุณพัฒนาใน สภาพแวดล้อมที่ไม่ใช่ Linux (เช่น macOS) คุณสามารถจัดการปัญหานี้ได้โดยใช้ ทางเลือกเฉพาะ Node สำหรับคำสั่งดั้งเดิม หรือโดยการสร้างไบนารี Linux เพื่อ รวมไว้กับการติดตั้งใช้งาน

กำลังลองอีกครั้ง

โปรแกรมจำลอง Cloud Functions ไม่รองรับการลองฟังก์ชันอีกครั้งเมื่อล้มเหลว

ฉันควรทำอย่างไรต่อไป