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

قبل از اتصال برنامه خود به شبیه ساز Cloud Functions، مطمئن شوید که گردش کار مجموعه محلی شبیه ساز محلی Firebase را درک کرده اید و مجموعه شبیه ساز محلی را نصب و پیکربندی کرده و دستورات CLI آن را مرور می کنید.

یک پروژه Firebase را انتخاب کنید

مجموعه شبیه ساز محلی Firebase محصولات را برای یک پروژه 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 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
  • شبیه ساز احراز هویت
  • شبیه ساز Pub/Sub

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

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

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

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

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

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

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

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

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

هنگام استفاده از شبیه ساز توابع Cloud محلی، می توانید با تنظیم یک فایل .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 با یک رابط به سبک REPL برای توسعه استفاده می کند. هیچ ادغام با شبیه سازهای Cloud Firestore یا پایگاه داده Realtime ارائه نشده است. با استفاده از پوسته، داده ها را مسخره می کنید و برای شبیه سازی تعامل با محصولاتی که 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 به طور معمول مورد استفاده قرار می گیرد، به عنوان مثال برای تنظیم عملکردهای ابری که حساب سرویس را فراخوانی می کند و بنابراین مجوزها، شبیه ساز قابل پیکربندی نیست و از حساب جهانی در دسترس در دستگاه توسعه دهنده شما استفاده می کند. مشابه اجرای مستقیم یک اسکریپت محلی.

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

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

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

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

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

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

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

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

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

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

بعدش چی؟