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

قبل توصيل تطبيقك بمحاكي 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 لمحاكي 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 Functions الوظائف التي يتم تشغيلها في الخلفية من المصادر التالية:

  • محاكي قاعدة البيانات في الوقت الحقيقي
  • محاكي Cloud Firestore
  • محاكي المصادقة
  • محاكي الحانة/الفرعية

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

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

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

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

يقوم وقت تشغيل Cloud Functions بتعيين متغير البيئة EVENTARC_EMULATOR على localhost:9299 في العملية الحالية إذا كان محاكي Eventarc قيد التشغيل. تتصل حزم SDK الخاصة بإدارة Firebase تلقائيًا بمحاكي Eventarc عند تعيين متغير البيئة EVENTARC_EMULATOR . يمكنك تعديل المنفذ الافتراضي كما تمت مناقشته ضمن تكوين 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
الكوكب=الأرض

الجمهور = البشر

الجمهور = البشر المطورون الجمهور = البشر المحليين

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

  $ 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، الذي يسمح بوضع نماذج أولية تفاعلية ومتكررة للوظائف وتطويرها. يستخدم Shell محاكي Cloud Functions مع واجهة نمط REPL للتطوير. لا يتم توفير التكامل مع محاكيات Cloud Firestore أو Realtime Database. باستخدام الصدفة، يمكنك محاكاة البيانات وإجراء استدعاءات الوظائف لمحاكاة التفاعل مع المنتجات التي لا يدعمها Local Emulator Suite حاليًا: Analytics وRemote Config وCrashlytics.
  • Firebase Test SDK للوظائف السحابية، وهو Node.js مع إطار عمل mocha لتطوير الوظائف. في الواقع، يوفر Cloud Functions Test SDK أتمتة أعلى غلاف Cloud Functions.

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

كيف يختلف محاكي Cloud Functions عن الإنتاج

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

سحابة IAM

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

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

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

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

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

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

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

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

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

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

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

ماذا بعد؟