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

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

اندروید
        // 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://localhost:5001")

Web version 9

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

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

Web version 8

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

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

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

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

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

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

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

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

  • شبیه ساز پایگاه داده بیدرنگ
  • شبیه ساز Cloud Firestore
  • شبیه ساز احراز هویت
  • شبیه ساز Pub/Sub

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

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

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

مشابه پشتیبانی شبیه ساز توابع ابری برای متغیرهای محیطی، می توانید با تنظیم یک فایل .secret.local ، مقادیر مخفی را نادیده بگیرید. این امر به شما امکان می دهد عملکردهای خود را به صورت محلی آزمایش کنید، به خصوص اگر به مقدار مخفی دسترسی ندارید.

چه ابزار دیگری برای آزمایش عملکردهای ابری وجود دارد؟

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

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

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

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

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

Cloud IAM

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

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

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

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

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

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

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

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

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

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

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

بعدش چی؟