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

ก่อนเชื่อมต่อแอปของคุณกับโปรแกรมจำลอง 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 จริง และไม่มีทรัพยากรจริง โครงการเหล่านี้มักจะเข้าถึงได้ผ่าน codelabs หรือบทช่วยสอนอื่นๆ

รหัสโครงการสำหรับโครงการสาธิตมี demo- หน้าการสาธิต

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

เราขอแนะนำให้คุณใช้โปรเจ็กต์สาธิตในทุกที่ที่ทำได้ ประโยชน์รวมถึง:

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

เครื่องมือแอปของคุณเพื่อพูดคุยกับอีมูเลเตอร์

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

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

Android
        // 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://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
  • ตัวจำลองการตรวจสอบสิทธิ์
  • โปรแกรมจำลองผับ/ย่อย

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

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

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

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

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

.env .env.dev .env.local
PLANET=โลก

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

ผู้ชม = 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 โปรแกรมจำลองอาจล้มเหลวในการเข้าถึงค่าลับอันเนื่องมาจากข้อจำกัดการอนุญาต

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

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

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

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

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

Cloud Function emulator แตกต่างจากการผลิตอย่างไร

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

คลาวด์ IAM

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

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

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

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

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

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

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

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

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

กำลังลองใหม่

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

อะไรต่อไป?