متصل کردن برنامه به «شبیه‌ساز Cloud Functions»

قبل‌از متصل کردن برنامه‌تان به شبیه‌ساز 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 اجرا کنید
  • ایمنی قوی‌تر، زیرا اگر کد شما به‌طور تصادفی منابع شبیه‌سازی‌نشده (تولید) را فراخوانی کند، هیچ احتمالی برای تغییر داده، استفاده، و صدور صورت‌حساب وجود ندارد
  • پشتیبانی آفلاین بهتر، زیرا برای بارگیری پیکربندی کیت توسعه نرم‌افزار نیازی به دسترسی به اینترنت نیست.

برنامه‌تان را برای صحبت با شبیه‌سازها آماده کنید

برنامه‌تان را برای توابع قابل‌فراخوانی آماده کنید

اگر فعالیت‌های نمونه اولیه و آزمایشی شما شامل توابع قابل‌فراخوانی پس‌نگر است، تعامل با شبیه‌ساز Cloud Functions for Firebase را به‌این‌صورت پیکربندی کنید:

Kotlin
// 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);
Swift
Functions.functions().useEmulator(withHost: "localhost", port: 5001)
Unity
FirebaseFunctions functions = FirebaseFunctions.DefaultInstance;
// Connects to the Functions Emulator running on port 5001
functions.UseFunctionsEmulator("http://127.0.0.1:5001");

Web

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

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

Web

firebase.functions().useEmulator("127.0.0.1", 5001);

ابزارسازی برنامه برای شبیه‌سازی کارکردهای HTTPS

هر تابع HTTPS در کد شما از شبیه‌ساز محلی بااستفاده از قالب نشانی وب زیر ارائه خواهد شد:

http://$HOST:$PORT/$PROJECT/$REGION/$NAME

برای مثال، تابع ساده helloWorld با درگاه میزبان و منطقه پیش‌فرض در نشانی زیر ارائه می‌شود:

https://localhost:5001/$PROJECT/us-central1/helloWorld

ابزارسازی برنامه برای شبیه‌سازی کارکردهای صف تکلیف

شبیه‌ساز به‌طور خودکار صف‌های تکلیف شبیه‌سازی‌شده را براساس تعاریف راه‌انداز راه‌اندازی می‌کند، و «کیت توسعه نرم‌افزار سرپرست» درخواست‌های صف‌بندی‌شده را به شبیه‌ساز هدایت می‌کند اگر تشخیص دهد که ازطریق متغیر محیطی CLOUD_TASKS_EMULATOR_HOST درحال اجرا است.

توجه داشته باشید که سیستم ارسال استفاده‌شده در تولید پیچیده‌تر از سیستم پیاده‌سازی‌شده در شبیه‌ساز است، بنابراین نباید انتظار داشته باشید که رفتار شبیه‌سازی‌شده دقیقاً محیط‌های تولید را منعکس کند. پارامترهای موجود در شبیه‌ساز، حد بالایی برای نرخی که تکالیف ارسال و دوباره امتحان می‌شوند ارائه می‌دهد.

ابزارسازی برنامه برای شبیه‌سازی توابع راه‌اندازی‌شده در پس‌زمینه

شبیه‌ساز Cloud Functions از توابع راه‌اندازی‌شده در پس‌زمینه از منابع زیر پشتیبانی می‌کند:

  • شبیه‌ساز Realtime Database
  • شبیه‌ساز Cloud Firestore
  • شبیه‌ساز Authentication
  • شبیه‌ساز Pub/Sub
  • شبیه‌ساز هشدارهای Firebase

برای راه‌اندازی رویدادهای پس‌زمینه، منابع پس‌زمینه را بااستفاده از Emulator Suite UI یا با متصل کردن برنامه یا کد آزمایشی به شبیه‌سازها بااستفاده از کیت توسعه نرم‌افزار برای پلاتفرم خود اصلاح کنید.

گرداننده‌های آزمایشی برای رویدادهای سفارشی منتشرشده توسط «افزونه‌ها»

برای توابعی که برای رسیدگی به رویدادهای سفارشی Firebase Extensions با Cloud Functions نسخه ۲ پیاده‌سازی می‌کنید، شبیه‌ساز Cloud Functions با شبیه‌ساز Eventarc جفت می‌شود تا از راه‌اندازهای Eventarc پشتیبانی کند.

برای آزمایش کردن گرداننده‌های رویداد سفارشی برای افزونه‌هایی که رویدادها را منتشر می‌کنند، باید شبیه‌سازهای Cloud Functions و Eventarc را نصب کنید.

اگر شبیه‌ساز Eventarc درحال اجرا باشد، زمان اجرای Cloud Functions متغیر محیطی EVENTARC_EMULATOR را در فرایند فعلی روی localhost:9299 تنظیم می‌کند. وقتی متغیر محیطی EVENTARC_EMULATOR تنظیم شود، Firebase Admin SDK به‌طور خودکار به شبیه‌ساز Eventarc متصل می‌شود. می‌توانید درگاه پیش‌فرض را همان‌طور که در بخش پیکربندی Local Emulator Suite توضیح داده شده است تغییر دهید.

وقتی متغیرهای محیطی به‌درستی پیکربندی شده باشند، Firebase Admin SDK به‌طور خودکار رویدادها را به شبیه‌ساز Eventarc ارسال می‌کند. به‌نوبه خود، شبیه‌ساز Eventarc با شبیه‌ساز Cloud Functions تماس می‌گیرد تا هرگونه گرداننده ثبت‌شده را راه‌اندازی کند.

برای جزئیات مربوط به اجرای گرداننده، می‌توانید گزارش‌های Functions را در Emulator Suite UI بررسی کنید.

پیکربندی محیط آزمایش محلی

اگر توابع شما به پیکربندی محیط مبتنی بر dotenv متکی هستند، می‌توانید آن رفتار را در محیط آزمایش محلی خود شبیه‌سازی کنید.

هنگام استفاده از شبیه‌ساز محلی Cloud Functions، می‌توانید متغیرهای محیطی را برای پروژه‌تان با راه‌اندازی فایل .env.local لغو کنید. محتوای .env.local بر .env و فایل .env مختص پروژه اولویت دارد.

برای مثال، یک پروژه می‌تواند شامل این سه فایل باشد که مقادیر کمی متفاوت برای توسعه و آزمایش محلی دارند:

.env .env.dev .env.local
PLANET=Earth

AUDIENCE=Humans

AUDIENCE=Dev Humans AUDIENCE=Local 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 از متغیرهای محیطی، می‌توانید مقادیر اسرار را با راه‌اندازی فایل .secret.local لغو کنید. این کار آزمایش کردن توابع را به‌صورت محلی برای شما آسان می‌کند، به‌ویژه اگر به مقدار محرمانه دسترسی نداشته باشید.

چه ابزارهای دیگری برای آزمایش Cloud Functions وجود دارد؟

شبیه‌ساز Cloud Functions با نمونه‌های اولیه و ابزارهای آزمایشی دیگر تکمیل می‌شود:

  • پوسته Cloud Functions که امکان نمونه‌سازی و توسعه توابع تعاملی و تکراری را فراهم می‌کند. این پوسته از شبیه‌ساز Cloud Functions با میانای سبک REPL برای توسعه استفاده می‌کند. هیچ ادغامی با شبیه‌سازهای Cloud Firestore یا Realtime Database ارائه نشده است. بااستفاده از پوسته، داده‌های ساختگی ایجاد می‌کنید و فراخوانی‌های تابع را برای شبیه‌سازی تعامل با محصولاتی که Local Emulator Suite درحال‌حاضر از آن‌ها پشتیبانی نمی‌کند انجام می‌دهید: Analytics، Remote Config، و Crashlytics.
  • کیت توسعه نرم‌افزار Firebase Test برای Cloud Functions، یک Node.js با چارچوب mocha برای توسعه توابع. درواقع، Cloud Functions Test SDK اتوماسیون را در بالای پوسته Cloud Functions ارائه می‌دهد.

می‌توانید اطلاعات بیشتری درباره پوسته Cloud Functions و Cloud Functions Test SDK در آزمایش کردن توابع به‌صورت تعاملی و آزمایش واحد Cloud Functions پیدا کنید.

تفاوت شبیه‌ساز Cloud Functions با تولید

شبیه‌ساز Cloud Functions برای اکثر موارد استفاده، بسیار نزدیک به محیط تولید است. ما تلاش زیادی کرده‌ایم تا مطمئن شویم همه چیز در زمان اجرای Node تا حد امکان به محیط تولید نزدیک باشد. بااین‌حال، شبیه‌ساز محیط تولید کانتینری‌شده کامل را تقلید نمی‌کند، بنابراین درحالی‌که کد تابع شما به‌طور واقع‌بینانه اجرا می‌شود، جنبه‌های دیگر محیط شما (یعنی فایل‌های محلی، رفتار پس‌از خرابی توابع، و غیره) متفاوت خواهد بود.

Cloud IAM

مجموعه شبیه‌ساز Firebase برای اجرا، هیچ‌گونه رفتار مرتبط با IAM را تکرار یا رعایت نمی‌کند. شبیه‌سازها از «قوانین امنیتی Firebase» ارائه‌شده پیروی می‌کنند، اما در شرایطی که معمولاً از IAM استفاده می‌شود، برای مثال برای تنظیم حساب سرویس فراخواننده Cloud Functions و درنتیجه اجازه‌ها، شبیه‌ساز قابل‌پیکربندی نیست و از حساب دردسترس جهانی در ماشین توسعه‌دهنده شما استفاده می‌کند، مشابه اجرای مستقیم اسکریپت محلی.

محدودیت‌های حافظه و پردازنده

شبیه‌ساز محدودیت‌های حافظه یا پردازنده را برای توابع شما اعمال نمی‌کند. بااین‌حال، شبیه‌ساز از عملکردهای زمان‌بندی ازطریق آرگومان زمان اجرای timeoutSeconds پشتیبانی می‌کند.

توجه داشته باشید که زمان اجرای تابع ممکن است با زمان تولید متفاوت باشد وقتی توابع در شبیه‌ساز اجرا می‌شوند. توصیه می‌کنیم پس‌از طراحی و آزمایش توابع با شبیه‌ساز، آزمایش‌های محدودی را در تولید اجرا کنید تا زمان‌های اجرا را تأیید کنید.

برنامه‌ریزی برای تفاوت‌های محیط‌های محلی و تولید

ازآنجایی‌که شبیه‌ساز در ماشین محلی شما اجرا می‌شود، برای برنامه‌ها و برنامه‌های داخلی و ابزارها به محیط محلی شما وابسته است.

توجه داشته باشید که محیط محلی شما برای توسعه Cloud Functions ممکن است با محیط تولید Google متفاوت باشد:

  • برنامه‌هایی که به‌صورت محلی برای شبیه‌سازی محیط تولید نصب می‌کنید (مثلاً ImageMagick از این آموزش) ممکن است ازنظر رفتار با تولید متفاوت باشند، به‌ویژه اگر به نسخه‌های متفاوتی نیاز داشته باشید یا در محیطی غیر از Linux توسعه دهید. می‌توانید نسخه دودویی برنامه گم‌شده را در کنار استقرار تابع خودتان مستقر کنید.

  • به‌طور مشابه، ابزارهای داخلی (مثلاً فرمان‌های پوسته مانند ls، mkdir) ممکن است با نسخه‌های موجود در تولید متفاوت باشند، به‌ویژه اگر در محیطی غیر از Linux (مثلاً macOS) توسعه می‌دهید. می‌توانید این مشکل را بااستفاده از جایگزین‌های فقط Node برای فرمان‌های بومی، یا با ساختن باینری‌های Linux برای بسته‌بندی با استقرار خود برطرف کنید.

در حال امتحان مجدد

شبیه‌ساز Cloud Functions از امتحان مجدد توابع درصورت ناموفق بودن پشتیبانی نمی‌کند.

بعد چه می‌شود؟