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

ก่อนที่จะเชื่อมต่อแอปกับโปรแกรมจำลอง 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 หรือบทแนะนำอื่นๆ

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

เมื่อทำงานกับโปรเจ็กต์ 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 ไม่รองรับการพยายามลองใช้ฟังก์ชันอีกครั้งเมื่อล้มเหลว

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