获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

เชื่อมต่อแอพของคุณกับ Cloud Function Emulator

ก่อนเชื่อมต่อแอปของคุณกับโปรแกรมจำลอง 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 หรือบทช่วยสอนอื่นๆ

รหัสโครงการสำหรับโครงการสาธิตมี 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);
สวิฟต์
Functions.functions().useFunctionsEmulator(origin: "http://localhost:5001")

Web version 9

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "localhost", 5001);

Web version 8

firebase.functions().useEmulator("localhost", 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 ไม่รองรับฟังก์ชันการลองใหม่เมื่อเกิดความล้มเหลว

อะไรต่อไป?