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

ก่อนที่จะเชื่อมต่อแอปกับโปรแกรมจำลอง Cloud Functions โปรดตรวจสอบว่า คุณเข้าใจเวิร์กโฟลว์ Firebase Local Emulator Suite โดยรวม คุณติดตั้งและกำหนดค่าแล้ว Local Emulator Suite และตรวจสอบคำสั่ง CLI

เลือกโปรเจ็กต์ Firebase

Firebase Local Emulator Suite จะจำลองผลิตภัณฑ์สำหรับโปรเจ็กต์ Firebase โปรเจ็กต์เดียว

หากต้องการเลือกโปรเจ็กต์ที่จะใช้ ในการเรียกใช้ CLI ก่อนที่คุณจะเริ่มโปรแกรมจำลอง firebase use ในไดเรกทอรีที่ใช้งานอยู่ หรือคุณสามารถส่ง ธง --project ไปยังโปรแกรมจำลองแต่ละตัว คำสั่ง

Local Emulator Suite รองรับการจำลองโปรเจ็กต์ Firebase จริงและ สาธิต

ประเภทโปรเจ็กต์ ฟีเจอร์ ใช้กับโปรแกรมจำลอง
จริง

โปรเจ็กต์ Firebase จริงคือโปรเจ็กต์ที่คุณสร้างและกำหนดค่า (มีแนวโน้ม ผ่านคอนโซล Firebase)

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

เมื่อทำงานกับโปรเจ็กต์ Firebase จริง คุณสามารถเรียกใช้โปรแกรมจำลองสำหรับ หรือผลิตภัณฑ์ที่รองรับทั้งหมด

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

เดโม

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

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

เมื่อทำงานกับโปรเจ็กต์ 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);
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

ใช้เครื่องวัดการทำงานของแอปสำหรับการจำลองฟังก์ชันคิวงาน

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

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

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

มีเครื่องมือใดสำหรับการทดสอบ Cloud Functions อีกบ้าง

โปรแกรมจำลอง Cloud Functions เสริมด้วยต้นแบบและการทดสอบอื่นๆ เครื่องมือ:

  • เชลล์ Cloud Functions ซึ่งช่วยให้ใช้ฟังก์ชันซ้ำแบบอินเทอร์แอกทีฟ การสร้างต้นแบบและพัฒนา Shell ใช้โปรแกรมจำลอง Cloud Functions ที่มี อินเทอร์เฟซแบบ REPL สำหรับการพัฒนา ไม่มีการผสานรวมกับ มีการระบุโปรแกรมจำลอง Cloud Firestore หรือ Realtime Database เมื่อใช้เปลือกหอย จำลองข้อมูลและดำเนินการเรียกฟังก์ชันเพื่อจำลองการโต้ตอบกับผลิตภัณฑ์ที่ ปัจจุบัน Local Emulator Suite ไม่รองรับรายการต่อไปนี้ Analytics การกำหนดค่าระยะไกลและ Crashlytics
  • Firebase Test SDK สำหรับ Cloud Functions ซึ่งเป็น Node.js ที่มีเฟรมเวิร์กมอคค่า สำหรับการพัฒนาฟังก์ชัน ผลที่ได้คือ Cloud Functions Test SDK จะมี การทำงานอัตโนมัติบนเชลล์ Cloud Functions

คุณดูข้อมูลเพิ่มเติมเกี่ยวกับ Shell ฟังก์ชันระบบคลาวด์และ Cloud Functions Test SDK ได้ ที่ฟังก์ชันทดสอบแบบอินเทอร์แอกทีฟ และ การทดสอบหน่วยของ Cloud Functions

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

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

Cloud IAM

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

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

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

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

การวางแผนสำหรับความแตกต่างในสภาพแวดล้อมในเครื่องและสภาพแวดล้อมการใช้งานจริง

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

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

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

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

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

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

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