Lokalizacje Cloud Functions

Cloud Functions działa regionalnie, co oznacza, że infrastruktura umożliwiająca uruchamianie funkcji znajduje się w określonych regionach i jest zarządzana przez Google w taki sposób, aby zapewnić redundantną dostępność we wszystkich strefach w tych regionach.

Przy wyborze regionów, w których mają być uruchamiane funkcje, należy przede wszystkim wziąć pod uwagę czas oczekiwania i dostępność. Zazwyczaj możesz wybrać regiony znajdujące się blisko użytkowników, ale musisz też uwzględnić lokalizację innych produktów i usług , z których korzysta Twoja aplikacja. Korzystanie z usług w wielu regionach może wpłynąć na czas oczekiwania w aplikacji oraz na ceny.

Domyślnie wiersz poleceń Firebase wdraża funkcje w regionie na podstawie konfiguracji projektu. W przypadku funkcji opartych na zdarzeniach zwykle wdraża je w regionie źródła danych wywołujących (np. bazy danych Cloud Firestore lub Cloud Storage zasobnika), a w razie potrzeby wdraża je w regionie us-central1.

Po wdrożeniu możesz sprawdzić region w konsoli Firebase lub uruchamiając firebase functions:list. Jeśli chcesz, aby funkcja działała w innym regionie, możesz go zmienić.

Obsługiwane regiony

Na listach w tej sekcji ikona energy_savings_leaf oznacza, że energia elektryczna w tym regionie jest wytwarzana przy niskiej emisji dwutlenku węgla. Więcej informacji znajdziesz w artykule Energia bezemisyjna w regionach Google Cloud.

Ceny poziomu 1

Cloud Functions jest dostępna w tych regionach z cenami poziomu 1:

Region Lokalizacja Obsługiwane wersje produktu Emisja CO2
africa-south1 Johannesburg Tylko 2. generacja
asia-east1 Tajwan 1. i 2. generacja
asia-east2 Hongkong Tylko 1. generacja
asia-northeast1 Tokio 1. i 2. generacja
asia-northeast2 Osaka 1. i 2. generacja
europe-north1 Finlandia Tylko 2. generacja energy_savings_leaf
europe-southwest1 Madryt Tylko 2. generacja
europe-west1 Belgia 1. i 2. generacja energy_savings_leaf
europe-west4 Holandia Tylko 2. generacja
europe-west8 Mediolan Tylko 2. generacja
europe-west9 Paryż Tylko 2. generacja energy_savings_leaf
me-west1 Tel Awiw Tylko 2. generacja
europe-west2 Londyn Tylko 1. generacja
us-central1 Iowa 1. i 2. generacja energy_savings_leaf
us-east1 Karolina Południowa 1. i 2. generacja
us-east4 Północna Wirginia 1. i 2. generacja
us-east5 Columbus Tylko 2. generacja
us-south1 Dallas Tylko 2. generacja
us-west1 Oregon 1. i 2. generacja energy_savings_leaf

Ceny poziomu 2

Cloud Functions jest dostępna w tych regionach z cenami poziomu 2:

Region Lokalizacja Obsługiwane wersje produktu Emisja CO2
asia-east2 Hongkong Tylko 2. generacja
asia-northeast3 Seul 1. i 2. generacja
asia-southeast1 Singapur 1. i 2. generacja
asia-southeast2 Dżakarta 1. i 2. generacja
asia-south1 Mumbaj Tylko 2. generacja
asia-south2 Delhi, Indie Tylko 2. generacja
australia-southeast1 Sydney 1. i 2. generacja
australia-southeast2 Melbourne Tylko 2. generacja
europe-central2 Warszawa 1. i 2. generacja
europe-west2 Londyn Tylko 2. generacja
europe-west3 Frankfurt 1. i 2. generacja energy_savings_leaf
europe-west6 Zurych 1. i 2. generacja energy_savings_leaf
europe-west10 Berlin Tylko 2. generacja
europe-west12 Turyn Tylko 2. generacja
me-central1 Doha Tylko 2. generacja
me-central2 Dammam Tylko 2. generacja
northamerica-northeast1 Montreal 1. i 2. generacja energy_savings_leaf
northamerica-northeast2 Toronto Tylko 2. generacja energy_savings_leaf
southamerica-east1 Săo Paulo 1. i 2. generacja energy_savings_leaf
southamerica-west1 Santiago, Chile Tylko 2. generacja
us-west2 Los Angeles 1. i 2. generacja
us-west3 Salt Lake City 1. i 2. generacja
us-west4 Las Vegas 1. i 2. generacja

Funkcje w danym regionie w danym projekcie muszą mieć unikalne nazwy (z uwzględnieniem wielkości liter), ale funkcje w różnych regionach lub w różnych projektach mogą mieć tę samą nazwę.

Sprawdzone metody określania regionu

Domyślnie wiersz poleceń Firebase wdraża funkcje w regionie na podstawie konfiguracji projektu. W przypadku funkcji opartych na zdarzeniach zwykle wdraża je w regionie źródła danych wywołujących (np. bazy danych Cloud Firestore lub Cloud Storage zasobnika), a w razie potrzeby wdraża je w regionie us-central1.

Zalecamy ustawienie konkretnych regionów zamiast polegania na ustawieniach domyślnych Firebase, które mogą się z czasem zmieniać. Podczas ustawiania regionów postępuj zgodnie z zaleceniami w tej sekcji dotyczącymi każdego typu reguły.

Aby ustawić region, w którym ma działać funkcja, ustaw parametr region w definicji funkcji, jak pokazano poniżej:

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

Możesz określić wiele regionów, przekazując w parametrze region kilka ciągów znaków regionu oddzielonych przecinkami. Pamiętaj też, że podczas określania regionu dla wielu typów reguł w tle musisz podać prawidłowy filtr zdarzeń wraz z regionem. W powyższym przykładzie jest to Cloud Firestore document który emituje zdarzenie. W przypadku reguły Cloud Storage filtr zdarzeń może mieć postać bucket, w przypadku reguły Pub/Sub – topic itd.

Więcej informacji o zmianie regionu funkcji obsługującej ruch produkcyjny znajdziesz w artykule Zmienianie regionu funkcji.

Funkcje HTTP i funkcje wywoływane przez klienta

W przypadku funkcji HTTP i funkcji wywoływanych zalecamy najpierw ustawienie funkcji w regionie docelowym lub najbliższym regionie, w którym znajduje się większość oczekiwanych klientów, a następnie zmianę oryginalnej funkcji tak, aby przekierowywała żądanie HTTP do nowej funkcji (mogą one mieć tę samą nazwę). Jeśli klienci funkcji HTTP obsługują przekierowania, możesz po prostu zmienić oryginalną funkcję tak, aby zwracała stan przekierowania HTTP (301) wraz z adresem URL nowej funkcji. Jeśli klienci nie obsługują dobrze przekierowań, możesz przekierować żądanie z oryginalnej funkcji do nowej, inicjując nowe żądanie z oryginalnej funkcji do nowej. Ostatnim krokiem jest upewnienie się, że wszyscy klienci wywołują nową funkcję.

Wybór lokalizacji po stronie klienta w przypadku funkcji wywoływanych

W przypadku funkcji wywoływanych konfiguracje wywoływane przez klienta powinny być zgodne z tymi samymi wytycznymi co funkcje HTTP. Klient może też określić region i powinien to zrobić, jeśli funkcja działa w regionie innym niż domyślny region projektu.

Aby ustawić regiony po stronie klienta, określ żądany region podczas inicjowania:

Swift

lazy var functions = Functions.functions(region:"europe-west1")

Objective-C

@property(strong, nonatomic) FIRFunctions *functions;
// ...
self.functions = [FIRFunctions functionsWithRegion:@"europe-west1"];

Sieć


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");

Funkcje w tle

Funkcje w tle przyjmują semantykę dostarczania zdarzeń co najmniej raz, co oznacza, że w pewnych okolicznościach mogą otrzymywać zduplikowane zdarzenia. Dlatego należy zaimplementować funkcje tak, aby były idempotentne. Jeśli funkcja jest już idempotentna, możesz ponownie wdrożyć ją w nowym regionie z tą samą regułą zdarzeń i usunąć starą funkcję po sprawdzeniu, czy nowa funkcja prawidłowo odbiera ruch. Podczas tego przejścia obie funkcje będą otrzymywać zdarzenia. Zalecaną kolejność poleceń do zmiany regionów funkcji znajdziesz w artykule Zmienianie regionu funkcji.

Jeśli funkcja nie jest obecnie idempotentna lub jej idempotencja nie wykracza poza region, zalecamy najpierw zaimplementowanie idempotencji przed przeniesieniem funkcji.

Zalecenia dotyczące optymalnego regionu różnią się w zależności od typu reguły zdarzeń:

Typ aktywatora Zalecany region
Cloud Firestore Region najbliższy lokalizacji instancji Cloud Firestore (patrz następna sekcja)
Realtime Database Ten sam region co instancja Realtime Database
Cloud Storage Region najbliższy lokalizacji zasobnika Cloud Storage (patrz następna sekcja)
Inne Jeśli w funkcji korzystasz z inst Realtime Databaseancji, inst Cloud Firestore ancji lub zasobnika Cloud Storage, zalecany region jest taki sam jak w przypadku funkcji wywoływanej przez jeden z tych zasobów. Funkcje połączone z Firebase Hosting mogą znajdować się w dowolnym regionie, ale zalecenia znajdziesz w artykule Omówienie hostingu bezserwerowego.

Wybieranie regionów na podstawie Cloud Firestore i Cloud Storage lokalizacji

Dostępne regiony dla funkcji nie zawsze dokładnie odpowiadają regionom dostępnym dla bazy danych Cloud Firestore i zasobników Cloud Storage.

Pamiętaj, że jeśli Twoja funkcja i zasób (instancja bazy danych lub Cloud Storage zasobnik) znajdują się w różnych lokalizacjach, czas oczekiwania i koszty mogą być większe.

Oto mapowanie najbliższych regionów obsługiwanych przez funkcje w Cloud Firestore i Cloud Storage, w przypadkach, gdy ten sam region nie jest obsługiwany:

Region/wiele regionów dla Cloud Firestore i Cloud Storage Najbliższy region dla funkcji
nam5 lub us-central (wiele regionów) us-central1
eur3 lub europe-west (wiele regionów) europe-west1
europe-west4 (Holandia) europe-west1
asia-south1 (Mumbaj) asia-east2
asia-south2 (Delhi) asia-east2
australia-southeast2 (Melbourne) australia-southeast1