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

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

ติดตั้งแอปของคุณเพื่อพูดคุยกับโปรแกรมจำลอง

ติดตั้งแอปของคุณสำหรับฟังก์ชันที่สามารถเรียกได้

หากกิจกรรมต้นแบบและการทดสอบของคุณเกี่ยวข้องกับ ฟังก์ชันแบ็กเอนด์ที่เรียกได้ ให้ กำหนดค่าการโต้ตอบกับฟังก์ชันคลาวด์สำหรับโปรแกรมจำลอง 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 Firestore
  • โปรแกรมจำลองการรับรองความถูกต้อง
  • โปรแกรมจำลองผับ/ย่อย

หากต้องการทริกเกอร์เหตุการณ์เบื้องหลัง ให้แก้ไขทรัพยากรแบ็คเอนด์โดยใช้ Emulator Suite UI หรือโดยการเชื่อมต่อแอปหรือโค้ดทดสอบของคุณกับโปรแกรมจำลองโดยใช้ SDK สำหรับแพลตฟอร์มของคุณ

ตัวจัดการทดสอบสำหรับเหตุการณ์ที่กำหนดเองที่ปล่อยออกมาโดยส่วนขยาย

สำหรับฟังก์ชันที่คุณใช้เพื่อจัดการเหตุการณ์ที่กำหนดเองของ Firebase Extensions ด้วย Cloud Functions v2 ตัวจำลองฟังก์ชันคลาวด์จะจับคู่กับตัวจำลอง Eventarc เพื่อรองรับ ทริกเกอร์ Eventarc

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

รันไทม์ของฟังก์ชันคลาวด์จะตั้งค่าตัวแปรสภาพแวดล้อม EVENTARC_EMULATOR เป็น localhost:9299 ในกระบวนการปัจจุบัน หากตัวจำลอง Eventarc กำลังทำงานอยู่ Firebase Admin SDK จะเชื่อมต่อกับโปรแกรมจำลอง Eventarc โดยอัตโนมัติเมื่อมีการตั้งค่าตัวแปรสภาพแวดล้อม EVENTARC_EMULATOR คุณสามารถแก้ไขพอร์ตเริ่มต้นตามที่กล่าวไว้ใน Configure Local Emulator Suite

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

คุณสามารถตรวจสอบบันทึกฟังก์ชันใน Emulator Suite UI เพื่อดูรายละเอียดเกี่ยวกับการดำเนินการของตัวจัดการได้

กำหนดค่าสภาพแวดล้อมการทดสอบในเครื่อง

หากฟังก์ชันของคุณอาศัย การกำหนดค่าสภาพแวดล้อม แบบ dotenv คุณสามารถจำลองลักษณะการทำงานดังกล่าวได้ในสภาพแวดล้อมการทดสอบในเครื่องของคุณ

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

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

.env .env.dev .env.local
แพลนเน็ต=โลก

ผู้ชม=มนุษย์

ผู้ชม = มนุษย์ Dev ผู้ชม=มนุษย์ในท้องถิ่น

เมื่อเริ่มต้นในบริบทเฉพาะที่ โปรแกรมจำลองจะโหลดตัวแปรสภาพแวดล้อมดังที่แสดง:

  $ firebase emulators:start
  i  emulators: Starting emulators: functions
  # Starts emulator with following environment variables:
  #  PLANET=Earth
  #  AUDIENCE=Local Humans

ข้อมูลลับและข้อมูลรับรองในโปรแกรมจำลอง Cloud Functions

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

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

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

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

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

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

โปรแกรมจำลอง Cloud Functions แตกต่างจากการใช้งานจริงอย่างไร

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

คลาวด์ไอเอเอ็ม

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

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

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

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

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

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

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

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

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

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

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

อะไรต่อไป?