برنامه خود را به شبیه ساز توابع ابری متصل کنید

قبل از اتصال برنامه خود به شبیه ساز 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 نیازی به دسترسی به اینترنت نیست.

برنامه خود را برای صحبت با شبیه سازها ابزار کنید

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

اگر نمونه اولیه و فعالیت های آزمایشی شما شامل توابع پشتیبان قابل فراخوانی است، تعامل با شبیه ساز Cloud Functions for 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

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 در کد شما از شبیه ساز محلی با استفاده از فرمت URL زیر ارائه می شود:

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

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

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

برنامه خود را برای شبیه سازی توابع صف کار ابزار کنید

شبیه‌ساز به‌طور خودکار صف‌های کار شبیه‌سازی‌شده را بر اساس تعاریف ماشه تنظیم می‌کند، و Admin SDK درخواست‌های ردیف‌شده را در صورتی که تشخیص دهد که از طریق متغیر محیطی CLOUD_TASKS_EMULATOR_HOST در حال اجرا است، مجدداً به سمت شبیه‌ساز هدایت می‌کند.

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

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

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

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

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

کنترل کننده ها را برای رویدادهای سفارشی منتشر شده توسط Extensions آزمایش کنید

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

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

اگر شبیه‌ساز Eventarc در حال اجرا باشد، زمان اجرا Cloud Functions متغیر محیطی EVENTARC_EMULATOR را روی localhost:9299 تنظیم می‌کند. هنگامی که متغیر محیطی EVENTARC_EMULATOR تنظیم شود، Firebase Admin SDK به طور خودکار به شبیه ساز Eventarc متصل می شود. می‌توانید پورت پیش‌فرض را همانطور که در Configure 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=زمین

AUDIENCE=انسان

AUDIENCE = Dev Humans AUDIENCE=انسان های محلی

هنگامی که در زمینه محلی شروع به کار کرد، شبیه ساز متغیرهای محیطی را همانطور که نشان داده شده بارگیری می کند:

  $ 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 با یک رابط به سبک REPL برای توسعه استفاده می کند. هیچ ادغام با شبیه سازهای Cloud Firestore یا Realtime Database ارائه نشده است. با استفاده از پوسته، داده ها را مسخره می کنید و برای شبیه سازی تعامل با محصولاتی که Local Emulator Suite در حال حاضر از آنها پشتیبانی نمی کند، فراخوانی های تابع را انجام می دهید: Analytics، Remote Config و Crashlytics.
  • Firebase Test SDK برای توابع ابری، یک Node.js با چارچوب موکا برای توسعه توابع. در واقع، Cloud Functions Test SDK اتوماسیون را در بالای پوسته Cloud Functions فراهم می کند.

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

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

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

Cloud IAM

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

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

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

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

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

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

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

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

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

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

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

بعدش چی؟