قم بتوصيل تطبيقك بمحاكي الوظائف السحابية

قبل توصيل تطبيقك بمحاكي 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 حقيقية ولا موارد مباشرة. يتم الوصول إلى هذه المشاريع عادةً عبر مختبرات الرموز أو البرامج التعليمية الأخرى.

معرفات المشروع للمشاريع التجريبية لها البادئة 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

صك تطبيقك لمضاهاة الوظائف التي يتم تشغيلها في الخلفية

يدعم محاكي وظائف السحابة الوظائف التي يتم تشغيلها في الخلفية من المصادر التالية:

  • محاكي Realtime Database
  • محاكي Cloud Firestore
  • محاكي المصادقة
  • محاكي Pub / Sub

لتشغيل أحداث الخلفية ، قم بتعديل الموارد الخلفية باستخدام Emulator Suite UI ، أو عن طريق توصيل تطبيقك أو رمز الاختبار بالمحاكيات باستخدام SDK للنظام الأساسي الخاص بك.

معالجات الاختبار للأحداث المخصصة المنبعثة من الإضافات

بالنسبة للوظائف التي تنفذها للتعامل مع أحداث Firebase Extensions المخصصة باستخدام Cloud Functions v2 ، فإن محاكي Cloud Functions أزواج مع محاكي Eventarc لدعم مشغلات Eventarc .

لاختبار معالجات الأحداث المخصصة للامتدادات التي تصدر الأحداث ، يجب عليك تثبيت وظائف Cloud ومحاكيات Eventarc.

يعيّن وقت تشغيل وظائف السحابة EVENTARC_EMULATOR متغير البيئة إلى localhost:9299 في العملية الحالية إذا كان محاكي Eventarc قيد التشغيل. تتصل مجموعات Firebase Admin SDK تلقائيًا بمحاكي Eventarc عند تعيين متغير البيئة EVENTARC_EMULATOR . يمكنك تعديل المنفذ الافتراضي كما تمت مناقشته ضمن تكوين مجموعة المحاكي المحلي .

عندما يتم تكوين متغيرات البيئة بشكل صحيح ، يرسل Firebase Admin SDK الأحداث تلقائيًا إلى محاكي Eventarc. بدوره ، يقوم محاكي Eventarc بإعادة الاتصال بمحاكي وظائف السحابة لتشغيل أي معالجات مسجلة.

يمكنك التحقق من سجلات الوظائف في Emulator Suite UI للحصول على تفاصيل حول تنفيذ المعالج.

تكوين بيئة اختبار محلية

إذا كانت وظائفك تعتمد على تكوين البيئة المستند إلى dotenv ، فيمكنك محاكاة هذا السلوك في بيئة الاختبار المحلية الخاصة بك.

عند استخدام محاكي وظائف السحابة المحلي ، يمكنك تجاوز متغيرات البيئة لمشروعك من خلال إعداد ملف .env.local . محتويات .env.local لها الأسبقية على .env وملف .env الخاص بالمشروع.

على سبيل المثال ، يمكن أن يتضمن المشروع هذه الملفات الثلاثة التي تحتوي على قيم مختلفة قليلاً للتطوير والاختبار المحلي:

.env .env.dev .env.local
الكوكب = الأرض

الحضور = البشر

الجمهور = ديف البشر AUDIENCE = البشر المحليين

عند البدء في السياق المحلي ، يقوم المحاكي بتحميل متغيرات البيئة كما هو موضح:

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

الأسرار وبيانات الاعتماد في محاكي وظائف السحابة

يدعم محاكي وظائف السحابة استخدام الأسرار لتخزين معلومات التكوين الحساسة والوصول إليها . بشكل افتراضي ، سيحاول المحاكي الوصول إلى أسرار الإنتاج الخاصة بك باستخدام بيانات الاعتماد الافتراضية للتطبيق . في مواقف معينة مثل بيئات CI ، قد يفشل المحاكي في الوصول إلى القيم السرية بسبب قيود الأذونات.

على غرار دعم محاكي Cloud Functions لمتغيرات البيئة ، يمكنك تجاوز قيم الأسرار من خلال إعداد ملف .secret.local . هذا يجعل من السهل عليك اختبار وظائفك محليًا ، خاصةً إذا لم يكن لديك وصول إلى القيمة السرية.

ما هي الأدوات الأخرى الموجودة لاختبار وظائف السحابة؟

يتم استكمال محاكي Cloud Functions بنماذج أولية وأدوات اختبار أخرى:

  • هيكل وظائف السحابة ، والذي يسمح بالنماذج الأولية والوظائف التكرارية التفاعلية وتطويرها. تستخدم القشرة محاكي وظائف السحابة بواجهة REPL للتطوير. لا يوجد تكامل مع محاكيات Cloud Firestore أو Realtime Database. باستخدام shell ، يمكنك محاكاة البيانات وإجراء استدعاءات وظيفية لمحاكاة التفاعل مع المنتجات التي لا تدعمها Local Emulator Suite حاليًا: التحليلات والتكوين عن بُعد و Crashlytics.
  • Firebase Test SDK لوظائف السحابة ، Node.js مع إطار عمل mocha لتطوير الوظائف. في الواقع ، توفر SDK لاختبار وظائف السحابة أتمتة أعلى هيكل وظائف السحابة.

يمكنك العثور على المزيد حول هيكل وظائف السحابة و SDK لاختبار وظائف السحابة في وظائف الاختبار بشكل تفاعلي واختبار الوحدة لوظائف السحابة .

كيف يختلف محاكي وظائف السحابة عن الإنتاج

محاكي وظائف السحابة قريب إلى حد ما من بيئة الإنتاج لغالبية حالات الاستخدام. لقد بذلنا جهودًا مكثفة لضمان أن يكون كل شيء في وقت تشغيل Node قريبًا من الإنتاج قدر الإمكان. ومع ذلك ، فإن المحاكي لا يقلد بيئة الإنتاج المعبأة بالكامل ، لذلك بينما سيتم تنفيذ كود وظيفتك بشكل واقعي ، ستختلف جوانب أخرى من بيئتك (مثل الملفات المحلية ، والسلوك بعد تعطل الوظائف ، وما إلى ذلك).

سحابة IAM

لا يحاول Firebase Emulator Suite تكرار أو احترام أي سلوك متعلق بـ IAM للتشغيل. تلتزم المحاكيات بقواعد أمان Firebase المقدمة ، ولكن في المواقف التي يتم فيها استخدام IAM عادةً ، على سبيل المثال لتعيين وظائف السحابة التي تستدعي حساب الخدمة وبالتالي الأذونات ، فإن المحاكي غير قابل للتكوين وسيستخدم الحساب المتوفر عالميًا على جهاز المطور الخاص بك ، مشابه لتشغيل برنامج نصي محلي مباشرة.

قيود الذاكرة والمعالج

لا يفرض المحاكي قيودًا على الذاكرة أو المعالج لوظائفك. ومع ذلك ، يدعم المحاكي وظائف المهلة عبر وسيطة وقت التشغيل timeoutSeconds .

لاحظ أن وقت تنفيذ الوظيفة قد يختلف عن الإنتاج عند تشغيل الوظائف في المحاكي. نوصي بعد تصميم الوظائف واختبارها باستخدام المحاكي ، بإجراء اختبارات محدودة في الإنتاج لتأكيد أوقات التنفيذ.

التخطيط للاختلافات في البيئة المحلية والإنتاجية

نظرًا لأن المحاكي يعمل على جهازك المحلي ، فإنه يعتمد على بيئتك المحلية للتطبيقات والبرامج والأدوات المساعدة المضمنة.

اعلم أن بيئتك المحلية لتطوير وظائف السحابة قد تختلف عن بيئة إنتاج Google:

  • قد تختلف التطبيقات التي تقوم بتثبيتها محليًا لمحاكاة بيئة الإنتاج (على سبيل المثال ، ImageMagick من هذا البرنامج التعليمي ) في سلوكها عن الإنتاج ، خاصةً إذا كنت تحتاج إلى إصدارات مختلفة أو يتم تطويرها في بيئة غير Linux. ضع في اعتبارك نشر نسختك الثنائية من البرنامج المفقود جنبًا إلى جنب مع نشر وظيفتك.

  • وبالمثل ، قد تختلف الأدوات المساعدة المضمنة (على سبيل المثال ، أوامر shell مثل ls و mkdir ) عن الإصدارات المتوفرة في الإنتاج ، خاصةً إذا كنت تقوم بالتطوير في بيئة غير Linux (على سبيل المثال ، macOS). يمكنك معالجة هذه المشكلة باستخدام بدائل Node-only للأوامر الأصلية ، أو عن طريق إنشاء ثنائيات Linux لتتوافق مع النشر الخاص بك.

إعادة المحاولة

لا يدعم محاكي وظائف السحابة وظائف إعادة المحاولة عند الفشل.

ماذا بعد؟