Cloud Functions منطقهای هستند، به این معنی که زیرساختی که عملکرد شما را اجرا میکند در مناطق خاصی قرار دارد و توسط گوگل مدیریت میشود تا به طور مداوم در تمام مناطق درون آن مناطق در دسترس باشد.
هنگام انتخاب مناطقی که میخواهید توابع خود را در آنها اجرا کنید، ملاحظات اصلی شما باید تأخیر و در دسترس بودن باشد. شما معمولاً میتوانید مناطقی نزدیک به کاربران خود را انتخاب کنید، اما باید موقعیت مکانی سایر محصولات و خدماتی را که برنامه شما از آنها استفاده میکند نیز در نظر بگیرید. استفاده از خدمات در چندین منطقه میتواند بر تأخیر برنامه شما و همچنین قیمتگذاری تأثیر بگذارد.
به طور پیشفرض، توابع در ناحیه us-central1 اجرا میشوند. توجه داشته باشید که این ممکن است با ناحیه یک منبع رویداد، مانند یک مخزن Cloud Storage متفاوت باشد. در ادامه این صفحه، نحوه تعیین ناحیهای که یک تابع در آن اجرا میشود را بیاموزید.
مناطق پشتیبانی شده
در فهرستهای این بخش، آیکون energy_savings_leaf نشان میدهد که برق این منطقه با انتشار کم کربن تولید میشود. برای اطلاعات بیشتر، به بخش انرژی بدون کربن برای مناطق Google Cloud مراجعه کنید.
قیمتگذاری سطح ۱
Cloud Functions با قیمت گذاری سطح ۱ در مناطق زیر موجود است:
| منطقه | مکان | نسخههای پشتیبانیشده محصول | انتشار CO2 |
|---|---|---|---|
africa-south1 | ژوهانسبورگ | فقط نسل دوم | |
asia-east1 | تایوان | نسل اول، نسل دوم | |
asia-east2 | هنگ کنگ | فقط نسل اول | |
asia-northeast1 | توکیو | نسل اول، نسل دوم | |
asia-northeast2 | اوساکا | نسل اول، نسل دوم | |
europe-north1 | فنلاند | فقط نسل دوم | برگ_صرفه_جویی_انرژی |
europe-southwest1 | مادرید | فقط نسل دوم | |
europe-west1 | بلژیک | نسل اول، نسل دوم | برگ_صرفه_جویی_انرژی |
europe-west4 | هلند | فقط نسل دوم | |
europe-west8 | میلان | فقط نسل دوم | |
europe-west9 | پاریس | فقط نسل دوم | برگ_صرفه_جویی_انرژی |
me-west1 | تل آویو | فقط نسل دوم | |
europe-west2 | لندن | فقط نسل اول | |
us-central1 | آیووا | نسل اول، نسل دوم | برگ_صرفه_جویی_انرژی |
us-east1 | کارولینای جنوبی | نسل اول، نسل دوم | |
us-east4 | ویرجینیای شمالی | نسل اول، نسل دوم | |
us-east5 | کلمبوس | فقط نسل دوم | |
us-south1 | دالاس | فقط نسل دوم | |
us-west1 | اورگان | نسل اول، نسل دوم | برگ_صرفه_جویی_انرژی |
قیمتگذاری سطح ۲
Cloud Functions با قیمت گذاری سطح ۲ در مناطق زیر موجود است:
| منطقه | مکان | نسخههای پشتیبانیشده محصول | انتشار CO2 |
|---|---|---|---|
asia-east2 | هنگ کنگ | فقط نسل دوم | |
asia-northeast3 | سئول | نسل اول، نسل دوم | |
asia-southeast1 | سنگاپور | نسل اول، نسل دوم | |
asia-southeast2 | جاکارتا | نسل اول، نسل دوم | |
asia-south1 | بمبئی | فقط نسل دوم | |
asia-south2 | دهلی، هند | فقط نسل دوم | |
australia-southeast1 | سیدنی | نسل اول، نسل دوم | |
australia-southeast2 | ملبورن | فقط نسل دوم | |
europe-central2 | ورشو | نسل اول، نسل دوم | |
europe-west2 | لندن | فقط نسل دوم | |
europe-west3 | فرانکفورت | نسل اول، نسل دوم | برگ_صرفه_جویی_انرژی |
europe-west6 | زوریخ | نسل اول، نسل دوم | برگ_صرفه_جویی_انرژی |
europe-west10 | برلین | فقط نسل دوم | |
europe-west12 | تورین | فقط نسل دوم | |
me-central1 | دوحه | فقط نسل دوم | |
me-central2 | دمام | فقط نسل دوم | |
northamerica-northeast1 | مونترال | نسل اول، نسل دوم | برگ_صرفه_جویی_انرژی |
northamerica-northeast2 | تورنتو | فقط نسل دوم | برگ_صرفه_جویی_انرژی |
southamerica-east1 | سائو پائولو | نسل اول، نسل دوم | برگ_صرفه_جویی_انرژی |
southamerica-west1 | سانتیاگو، شیلی | فقط نسل دوم | |
us-west2 | لس آنجلس | نسل اول، نسل دوم | |
us-west3 | سالت لیک سیتی | نسل اول، نسل دوم | |
us-west4 | لاس وگاس | نسل اول، نسل دوم |
توابع در یک منطقه مشخص در یک پروژه مشخص باید نامهای منحصر به فرد (بدون حساسیت به حروف بزرگ و کوچک) داشته باشند، اما توابع در مناطق مختلف یا در پروژههای مختلف میتوانند نام یکسانی داشته باشند.
بهترین شیوهها برای مشخص کردن یک منطقه
به طور پیشفرض، توابع در ناحیه us-central1 اجرا میشوند. توجه داشته باشید که این ممکن است با ناحیه یک منبع رویداد، مانند یک مخزن Cloud Storage ، متفاوت باشد. اگر نیاز به مشخص کردن ناحیهای دارید که یک تابع در آن اجرا میشود، توصیههای این بخش را برای هر نوع ماشه تابع دنبال کنید.
برای تنظیم ناحیهای که یک تابع در آن اجرا میشود، پارامتر region را در تعریف تابع مطابق شکل تنظیم کنید:
نود جی اس
exports.firestoreAsia = onDocumentCreated(
{
document: "my-collection/{docId}",
region: "asia-northeast1",
},
(event) => {},
);
پایتون
# Before
@firestore_fn.on_document_created("my-collection/{docId}")
def firestore_trigger(event):
pass
# After
@firestore_fn.on_document_created("my-collection/{docId}",
region="asia-northeast1")
def firestore_trigger_asia(event):
pass
شما میتوانید با ارسال چندین رشته ناحیه جدا شده با کاما در region ، چندین ناحیه را مشخص کنید. همچنین توجه داشته باشید که هنگام مشخص کردن یک ناحیه برای انواع مختلف تریگر پسزمینه، باید فیلتر رویداد صحیح را به همراه ناحیه مشخص کنید. در مثال بالا، این document Cloud Firestore است که رویداد را منتشر میکند. برای یک تریگر Cloud Storage ، فیلتر رویداد میتواند bucket باشد؛ برای یک تریگر Pub/Sub، میتواند topic باشد و به همین ترتیب ادامه یابد.
برای اطلاعات بیشتر در مورد تغییر ناحیه برای تابعی که ترافیک عملیاتی را مدیریت میکند، به بخش تغییر ناحیه تابع مراجعه کنید.
HTTP و توابع قابل فراخوانی توسط کلاینت
برای HTTP و توابع قابل فراخوانی، توصیه میکنیم ابتدا تابع خود را روی منطقه مقصد یا نزدیکترین به جایی که اکثر مشتریان مورد انتظار در آن قرار دارند تنظیم کنید و سپس تابع اصلی خود را طوری تغییر دهید که درخواست HTTP آن به تابع جدید (میتوانند نام یکسانی داشته باشند) هدایت شود. اگر کلاینتهای تابع HTTP شما از هدایتها پشتیبانی میکنند، میتوانید به سادگی تابع اصلی خود را تغییر دهید تا وضعیت هدایت HTTP (301) را به همراه URL تابع جدید خود برگرداند. اگر کلاینتهای شما به خوبی هدایتها را مدیریت نمیکنند، میتوانید با شروع یک درخواست جدید از تابع اصلی به تابع جدید، درخواست را از تابع اصلی به تابع جدید پروکسی کنید . مرحله آخر این است که مطمئن شوید همه کلاینتها تابع جدید را فراخوانی میکنند.
انتخاب مکان سمت کلاینت برای توابع قابل فراخوانی
در مورد تابع قابل فراخوانی، تنظیمات قابل فراخوانی کلاینت باید از همان دستورالعملهای توابع HTTP پیروی کنند. کلاینت همچنین میتواند یک منطقه را مشخص کند و اگر تابع در هر منطقهای غیر از us-central1 اجرا شود، باید این کار را انجام دهد.
برای تنظیم مناطق روی کلاینت، منطقه مورد نظر را در هنگام مقداردهی اولیه مشخص کنید:
سویفت
lazy var functions = Functions.functions(region:"europe-west1")
هدف-سی
@property(strong, nonatomic) FIRFunctions *functions;
// ...
self.functions = [FIRFunctions functionsWithRegion:@"europe-west1"];
وب
var functions = firebase.app().functions('europe-west1');
اندروید
private FirebaseFunctions mFunctions;
// ...
mFunctions = FirebaseFunctions.getInstance("europe-west1");
سی++
firebase::functions::Functions* functions;
// ...
functions = firebase::functions::Functions::GetInstance("europe-west1");
وحدت
firebase.Functions.FirebaseFunctions functions;
functions = Firebase.Functions.FirebaseFunctions.GetInstance("europe-west1");
توابع پسزمینه
توابع پسزمینه از مفهوم تحویل رویداد حداقل یک بار پیروی میکنند، به این معنی که تحت برخی شرایط ممکن است رویدادهای تکراری دریافت کنند. بنابراین، شما باید توابع را طوری پیادهسازی کنید که خودتوان باشند. اگر تابع شما از قبل خودتوان است، میتوانید تابع را در ناحیه جدید با همان تریگر رویداد مجدداً مستقر کنید و پس از تأیید دریافت صحیح ترافیک توسط تابع جدید، تابع قدیمی را حذف کنید. در طول این انتقال، هر دو تابع رویدادها را دریافت میکنند. برای مشاهده توالی توصیهشده دستورات برای تغییر ناحیه توابع، به بخش تغییر ناحیه یک تابع مراجعه کنید.
اگر تابع شما در حال حاضر خودتوان نیست، یا خودتوانی آن فراتر از ناحیه مورد نظر گسترش نمییابد، توصیه میکنیم قبل از انتقال تابع، ابتدا خودتوانی را پیادهسازی کنید.
توصیههای منطقه بهینه بر اساس نوع ماشه رویداد متفاوت است:
| نوع ماشه | توصیه منطقه |
|---|---|
| Cloud Firestore | نزدیکترین منطقه به محل نمونه Cloud Firestore (به بخش بعدی مراجعه کنید) |
| Realtime Database | همان ناحیهای که نمونه Realtime Database در آن قرار دارد |
| Cloud Storage | نزدیکترین منطقه به محل قرارگیری مخزن Cloud Storage (به بخش بعدی مراجعه کنید) |
| دیگران | اگر در داخل تابع با یک نمونه Realtime Database ، یک نمونه Cloud Firestore یا یک مخزن Cloud Storage تعامل دارید، ناحیه توصیه شده همان ناحیهای است که اگر تابعی توسط یکی از آن منابع فعال شده باشد، در نظر گرفته میشود. در غیر این صورت، از ناحیه پیشفرض us-central1 استفاده کنید. توابع متصل به Firebase Hosting میتوانند در هر ناحیهای باشند، اما برای توصیهها به مرور کلی serverless در hosting مراجعه کنید. |
انتخاب مناطق بر اساس مکانهای Cloud Firestore و Cloud Storage
مناطق موجود برای توابع همیشه دقیقاً با مناطق موجود برای پایگاه داده Cloud Firestore و سطلهای Cloud Storage شما مطابقت ندارند.
توجه داشته باشید که اگر تابع و منبع شما (نمونه پایگاه داده یا مخزن Cloud Storage ) در مکانهای مختلفی قرار داشته باشند، ممکن است با افزایش تأخیر و هزینههای صدور صورتحساب مواجه شوید.
در اینجا نقشهای از نزدیکترین مناطق پشتیبانیشده توسط توابع برای Cloud Firestore و Cloud Storage برای مواردی که همان منطقه پشتیبانی نمیشود ، آورده شده است:
| منطقه/چند منطقه برای Cloud Firestore و Cloud Storage | نزدیکترین منطقه برای توابع |
|---|---|
nam5 یا us-central (چند منطقهای) | us-central1 |
eur3 یا europe-west (چند منطقهای) | europe-west1 |
europe-west4 (هلند) | europe-west1 |
asia-south1 (بمبئی) | asia-east2 |
asia-south2 (دهلی) | asia-east2 |
australia-southeast2 (ملبورن) | australia-southeast1 |