Cloud Functions, bölgesel bir hizmettir. Yani işlevinizi çalıştıran altyapı belirli bölgelerde bulunur ve Google tarafından yönetilerek bu bölgelerdeki tüm alt bölgelerde yedekli olarak kullanılabilir.
İşlevlerinizi çalıştıracağınız bölgeleri seçerken öncelikli olarak gecikme ve kullanılabilirliği göz önünde bulundurmanız gerekir. Genellikle kullanıcılarınıza yakın bölgeleri seçebilirsiniz ancak uygulamanızın kullandığı diğer ürün ve hizmetlerin konumunu da göz önünde bulundurmanız gerekir. Hizmetleri birden fazla bölgede kullanmak, uygulamanızın gecikme süresini ve fiyatlandırmayı etkileyebilir.
Firebase CLI, işlevleri varsayılan olarak projenizin yapılandırmasına göre bir bölgeye dağıtır. Etkinliğe dayalı işlevler genellikle tetikleyici veri kaynağının bölgesindeki (ör. Cloud Firestore veritabanı veya Cloud Storage paketi) bir bölgeye dağıtılır ve yedek olarak us-central1 bölgesine dağıtılır.
Dağıtımdan sonra bölgeyi Firebase konsolunda veya firebase functions:list komutunu çalıştırarak doğrulayabilirsiniz. İşlevinizin farklı bir bölgede çalışmasını istiyorsanız bölgesini değiştirebilirsiniz.
Desteklenen bölgeler
Bu bölümdeki listelerde energy_savings_leaf simgesi, bu bölgedeki elektriğin düşük karbon emisyonuyla üretildiğini gösterir. Daha fazla bilgi için Google Cloud bölgeleri için karbonsuz enerji başlıklı makaleyi inceleyin.
1. kademe fiyatlandırma
Cloud Functions, aşağıdaki bölgelerde 1. kademe fiyatlandırma ile kullanılabilir:
| Bölge | Konum | Desteklenen ürün sürümleri | CO2 emisyonları |
|---|---|---|---|
africa-south1 |
Johannesburg | Yalnızca 2. nesil | |
asia-east1 |
Tayvan | 1. nesil, 2. nesil | |
asia-east2 |
Hong Kong | Yalnızca 1. nesil | |
asia-northeast1 |
Tokyo | 1. nesil, 2. nesil | |
asia-northeast2 |
Osaka | 1. nesil, 2. nesil | |
europe-north1 |
Finlandiya | Yalnızca 2. nesil | energy_savings_leaf |
europe-southwest1 |
Madrid | Yalnızca 2. nesil | |
europe-west1 |
Belçika | 1. nesil, 2. nesil | energy_savings_leaf |
europe-west4 |
Hollanda | Yalnızca 2. nesil | |
europe-west8 |
Milano | Yalnızca 2. nesil | |
europe-west9 |
Paris | Yalnızca 2. nesil | energy_savings_leaf |
me-west1 |
Tel Aviv | Yalnızca 2. nesil | |
europe-west2 |
Londra | Yalnızca 1. nesil | |
us-central1 |
Iowa | 1. nesil, 2. nesil | energy_savings_leaf |
us-east1 |
Güney Carolina | 1. nesil, 2. nesil | |
us-east4 |
Kuzey Virginia | 1. nesil, 2. nesil | |
us-east5 |
Columbus | Yalnızca 2. nesil | |
us-south1 |
Dallas | Yalnızca 2. nesil | |
us-west1 |
Oregon | 1. nesil, 2. nesil | energy_savings_leaf |
2. katman fiyatlandırması
Cloud Functions, aşağıdaki bölgelerde 2. katman fiyatlandırmasıyla kullanılabilir:
| Bölge | Konum | Desteklenen ürün sürümleri | CO2 emisyonları |
|---|---|---|---|
asia-east2 |
Hong Kong | Yalnızca 2. nesil | |
asia-northeast3 |
Seul | 1. nesil, 2. nesil | |
asia-southeast1 |
Singapur | 1. nesil, 2. nesil | |
asia-southeast2 |
Cakarta | 1. nesil, 2. nesil | |
asia-south1 |
Mumbai | Yalnızca 2. nesil | |
asia-south2 |
Delhi, Hindistan | Yalnızca 2. nesil | |
australia-southeast1 |
Sidney | 1. nesil, 2. nesil | |
australia-southeast2 |
Melbourne | Yalnızca 2. nesil | |
europe-central2 |
Varşova | 1. nesil, 2. nesil | |
europe-west2 |
Londra | Yalnızca 2. nesil | |
europe-west3 |
Frankfurt | 1. nesil, 2. nesil | energy_savings_leaf |
europe-west6 |
Zürih | 1. nesil, 2. nesil | energy_savings_leaf |
europe-west10 |
Berlin | Yalnızca 2. nesil | |
europe-west12 |
Turin | Yalnızca 2. nesil | |
me-central1 |
Doha | Yalnızca 2. nesil | |
me-central2 |
Dammam | Yalnızca 2. nesil | |
northamerica-northeast1 |
Montreal | 1. nesil, 2. nesil | energy_savings_leaf |
northamerica-northeast2 |
Toronto | Yalnızca 2. nesil | energy_savings_leaf |
southamerica-east1 |
Sao Paulo | 1. nesil, 2. nesil | energy_savings_leaf |
southamerica-west1 |
Santiago, Şili | Yalnızca 2. nesil | |
us-west2 |
Los Angeles | 1. nesil, 2. nesil | |
us-west3 |
Salt Lake City | 1. nesil, 2. nesil | |
us-west4 |
Las Vegas | 1. nesil, 2. nesil |
Belirli bir projedeki belirli bir bölgede bulunan işlevlerin benzersiz (büyük/küçük harfe duyarlı olmayan) adları olmalıdır ancak farklı bölgelerdeki veya farklı projelerdeki işlevler aynı adı paylaşabilir.
Bölge belirtmeyle ilgili en iyi uygulamalar
Firebase CLI, işlevleri varsayılan olarak projenizin yapılandırmasına göre bir bölgeye dağıtır. Etkinliğe dayalı işlevler genellikle tetikleyici veri kaynağının bölgesindeki (ör. Cloud Firestore veritabanı veya Cloud Storage paketi) bir bölgeye dağıtılır ve yedek olarak us-central1 bölgesine dağıtılır.
Zaman içinde değişebilecek Firebase varsayılanlarına güvenmek yerine belirli bölgeler ayarlamanız önerilir. Bölgeleri ayarlarken her tetikleyici türü için bu bölümdeki önerileri uygulayın.
Bir işlevin çalıştırılacağı bölgeyi ayarlamak için işlev tanımındaki region parametresini aşağıdaki gibi ayarlayın:
Node.js
exports.firestoreAsia = onDocumentCreated(
{
document: "my-collection/{docId}",
region: "asia-northeast1",
},
(event) => {},
);
Python
# 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 içinde virgülle ayrılmış birden fazla bölge dizesi ileterek birden fazla bölge belirtebilirsiniz. Ayrıca, birçok arka plan tetikleyici türü için bölge belirtirken bölgeyle birlikte doğru etkinlik filtresini de belirtmeniz gerekir. Yukarıdaki örnekte bu, etkinliği yayınlayan Cloud Firestore document. Cloud Storage tetikleyicisi için etkinlik filtresi bucket olabilir. Pub/Sub tetikleyicisi için ise topic olabilir.
Üretim trafiğini işleyen bir işlevin bölgesini değiştirme hakkında daha fazla bilgi için bir işlevin bölgesini değiştirme başlıklı makaleyi inceleyin.
HTTP ve istemci tarafından çağrılabilir işlevler
HTTP ve çağrılabilir işlevler için öncelikle işlevinizi hedef bölgeye veya beklenen müşterilerin çoğunun bulunduğu yere en yakın bölgeye ayarlamanızı, ardından orijinal işlevinizi HTTP isteğini yeni işleve yönlendirecek şekilde değiştirmenizi öneririz (aynı ada sahip olabilirler). HTTP işlevinizin istemcileri yönlendirmeleri destekliyorsa orijinal işlevinizi, yeni işlevinizin URL'siyle birlikte bir HTTP yönlendirme durumu (301) döndürecek şekilde değiştirebilirsiniz. İstemcileriniz yönlendirmeleri iyi işlemiyorsa orijinal işlevden yeni işleve yeni bir istek başlatarak orijinal işlevdeki isteği yeni işleve proxy olarak gönderebilirsiniz. Son adım, tüm istemcilerin yeni işlevi çağırdığından emin olmaktır.
Çağrılabilir işlevler için istemci tarafı konum seçimi
Çağrılabilir işlevle ilgili olarak, istemci tarafından çağrılabilir kurulumlar, HTTP işlevleriyle aynı kurallara uymalıdır. İstemci bir bölge de belirtebilir ve işlev, projenin varsayılan bölgesi dışında bir bölgede çalışıyorsa bunu yapmalıdır.
İstemcide bölgeleri ayarlamak için başlatma sırasında istediğiniz bölgeyi belirtin:
Swift
lazy var functions = Functions.functions(region:"europe-west1")
Objective-C
@property(strong, nonatomic) FIRFunctions *functions;
// ...
self.functions = [FIRFunctions functionsWithRegion:@"europe-west1"];
Web
var functions = firebase.app().functions('europe-west1');
Android
private FirebaseFunctions mFunctions;
// ...
mFunctions = FirebaseFunctions.getInstance("europe-west1");
C++
firebase::functions::Functions* functions;
// ...
functions = firebase::functions::Functions::GetInstance("europe-west1");
Unity
firebase.Functions.FirebaseFunctions functions;
functions = Firebase.Functions.FirebaseFunctions.GetInstance("europe-west1");
Arka plan işlevleri
Arka plan işlevleri, en az bir kez etkinlik yayınlama semantiğini benimser. Bu, bazı durumlarda yinelenen etkinlikler alabilecekleri anlamına gelir. Bu nedenle, işlevleri idempotent olacak şekilde uygulamanız gerekir. İşleviniz zaten idempotent ise işlevi aynı etkinlik tetikleyicisiyle yeni bölgede yeniden dağıtabilir ve yeni işlevin trafiği doğru şekilde aldığını doğruladıktan sonra eski işlevi kaldırabilirsiniz. Bu geçiş sırasında her iki işlev de etkinlikleri alır. İşlevlerin bölgelerini değiştirmek için önerilen komut sırasını bir işlevin bölgesini değiştirme bölümünde bulabilirsiniz.
İşleviniz şu anda idempotent değilse veya idempotency bölgenin dışına çıkmıyorsa işlevi taşımadan önce idempotency uygulamanızı öneririz.
En uygun bölge önerileri, etkinlik tetikleyici türüne göre farklılık gösterir:
| Tetikleyici Türü | Bölge Önerisi |
|---|---|
| Cloud Firestore | Cloud Firestore örneğinin konumuna en yakın bölge (sonraki bölüme bakın) |
| Realtime Database | Realtime Database örneğiyle aynı bölge |
| Cloud Storage | Cloud Storage paketi konumuna en yakın bölge (sonraki bölüme bakın) |
| Diğer | İşlev içinde bir Realtime Database örneği, Cloud Firestore örneği veya Cloud Storage paketiyle etkileşim kuruyorsanız önerilen bölge, bu kaynaklardan biri tarafından tetiklenen bir işleviniz varmış gibi aynıdır. Firebase Hosting hizmetine bağlı Functions herhangi bir bölgede olabilir ancak öneriler için sunucusuz barındırmaya genel bakış bölümüne bakın. |
Cloud Firestore ve Cloud Storage konumlarına göre bölgeler seçiliyor
İşlevler için kullanılabilen bölgeler, Cloud Firestore veritabanınız ve Cloud Storage paketleriniz için kullanılabilen bölgelerle her zaman tam olarak eşleşmez.
İşleviniz ve kaynağınız (veritabanı örneği veya Cloud Storage paket) farklı konumlardaysa daha uzun gecikme süreleri ve daha yüksek faturalandırma maliyetleri ile karşılaşabilirsiniz.
Aynı bölgenin desteklenmediği durumlarda Cloud Firestore ve Cloud Storage için işlevleri destekleyen en yakın bölgelerin eşlemesini aşağıda bulabilirsiniz:
| Cloud Firestore ve Cloud Storage için bölge/çoklu bölge | İşlevler için en yakın bölge |
|---|---|
nam5 veya us-central (çoklu bölge) |
us-central1 |
eur3 veya europe-west (çoklu bölge) |
europe-west1 |
europe-west4 (Hollanda) |
europe-west1 |
asia-south1 (Mumbai) |
asia-east2 |
asia-south2 (Delhi) |
asia-east2 |
australia-southeast2 (Melbourne) |
australia-southeast1 |