Check out what’s new from Firebase at Google I/O 2022. Learn more

Lokalizacje Cloud Functions

Cloud Functions ma charakter regionalny , co oznacza, że ​​infrastruktura, na której działa usługa Cloud Functions, znajduje się w określonych regionach i jest zarządzana przez Google, aby była nadmiarowo dostępna we wszystkich strefach w tych regionach .

Wybierając regiony, w których mają być uruchamiane funkcje, należy przede wszystkim wziąć pod uwagę opóźnienie i dostępność. Generalnie możesz wybrać regiony znajdujące się blisko Twoich użytkowników, ale powinieneś również wziąć pod uwagę 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 Twojej aplikacji, a także na ceny .

Cloud Functions jest dostępny w następujących regionach z cenami poziomu 1 :

  • us-central1 (Iowa)
  • us-east1 (Karolina Południowa)
  • us-east4 (północna Wirginia)
  • europe-west1 (Belgia)
  • europe-west2 (Londyn)
  • asia-east1 (Tajwan)
  • asia-east2 (Hongkong)
  • asia-northeast1 (Tokio)
  • asia-northeast2 (Osaka)

Cloud Functions jest dostępny w następujących regionach z cenami poziomu 2 :

  • us-west2 (Los Angeles)
  • us-west3 (Salt Lake City)
  • us-west4 (Las Vegas)
  • northamerica-northeast1 (Montreal)
  • southamerica-east1 (Sao Paulo)
  • europe-west3 (Frankfurt)
  • europe-west6 (Zurych)
  • europe-central2 (Warszawa)
  • australia-southeast1 (Sydney)
  • asia-south1 (Bombaj)
  • asia-southeast1 (Singapur)
  • asia-southeast2 (Dżakarta)
  • asia-northeast3 (Seul)

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

Najlepsze praktyki dotyczące zmiany regionu

Domyślnie funkcje działają w regionie us-central1 . Pamiętaj, że może się to różnić od regionu źródła zdarzenia, takiego jak zasobnik Cloud Storage. Jeśli musisz zmienić region, w którym działa funkcja, postępuj zgodnie z zaleceniami w tej sekcji dla każdego typu wyzwalacza funkcji.

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

exports.myStorageFunction = functions
    .region('europe-west1')
    .storage
    .object()
    .onFinalize((object) => {
      // ...
    });

Możesz określić wiele regionów, przekazując wiele ciągów regionów oddzielonych przecinkami w functions.region() . Więcej informacji na temat zalecanych procedur można znaleźć w części Zmiana regionu funkcji .

Funkcje HTTP i możliwe do wywołania przez klienta

W przypadku funkcji HTTP i funkcji wywoływanych zalecamy najpierw ustawienie funkcji w regionie docelowym lub najbliżej miejsca, w którym znajdują się najbardziej oczekiwani klienci, a następnie zmodyfikowanie oryginalnej funkcji w celu przekierowania żądania HTTP do nowej funkcji (mogą mieć to samo Nazwa). Jeśli klienci Twojej funkcji HTTP obsługują przekierowania, możesz po prostu zmienić oryginalną funkcję, aby zwracała stan przekierowania HTTP (301) wraz z adresem URL nowej funkcji. Jeśli Twoi klienci nie radzą sobie dobrze z przekierowaniami, możesz przekazać żądanie z pierwotnej funkcji do nowej funkcji, inicjując nowe żądanie z pierwotnej funkcji do nowej funkcji. Ostatnim krokiem jest upewnienie się, że wszyscy klienci wywołują nową funkcję.

Wybór lokalizacji po stronie klienta dla funkcji wywoływanych

Jeśli chodzi o funkcję wywoływalną, konfiguracje wywoływane przez klienta powinny być zgodne z tymi samymi wytycznymi, co funkcje HTTP. Klient może również określić region i musi to zrobić, jeśli funkcja działa w innym regionie niż us-central1 .

Aby ustawić regiony na kliencie, określ żądany region podczas inicjalizacji:

Szybki

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

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

Jedność

firebase.Functions.FirebaseFunctions functions;

functions = Firebase.Functions.FirebaseFunctions.GetInstance("europe-west1");

Funkcje w tle

Funkcje działające w tle przyjmują semantykę dostarczania co najmniej jednego zdarzenia, co oznacza, że ​​w pewnych okolicznościach mogą otrzymywać zduplikowane zdarzenia. Dlatego powinieneś zaimplementować funkcje, aby były idempotentne . Jeśli Twoja funkcja jest już idempotentna, możesz ponownie wdrożyć funkcję w nowym regionie z tym samym wyzwalaczem zdarzenia i usunąć starą funkcję po sprawdzeniu, czy nowa funkcja prawidłowo odbiera ruch. Podczas tego przejścia obie funkcje będą otrzymywać zdarzenia. Zobacz Zmień region funkcji, aby zapoznać się z zalecaną sekwencją poleceń, aby zmienić regiony dla funkcji.

Jeśli funkcja nie jest obecnie idempotentna lub jej idempotentność nie wykracza poza region, zalecamy najpierw zaimplementować idempotentność przed przeniesieniem funkcji.

Rekomendacje dotyczące optymalnego regionu różnią się w zależności od typu wyzwalacza zdarzenia:

Typ wyzwalacza Rekomendacja dla regionu
Cloud Firestore Region najbliższy lokalizacji instancji Cloud Firestore (patrz następna sekcja)
Baza danych czasu rzeczywistego Zawsze us-central1
Magazyn w chmurze Region najbliższy lokalizacji zasobnika Cloud Storage (patrz następna sekcja)
Inni Jeśli wchodzisz w interakcję z instancją Bazy danych czasu rzeczywistego, instancją Cloud Firestore lub zasobnikiem Cloud Storage w ramach funkcji, zalecany region jest taki sam, jak w przypadku wyzwolenia funkcji przez jeden z tych zasobów. W przeciwnym razie użyj domyślnego regionu us-central1 . Pamiętaj też, że funkcje połączone z Hostingiem Firebase muszą znajdować się w us-central1 .

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

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

Pamiętaj, że jeśli Twoja funkcja i zasób (instancja bazy danych lub zasobnik Cloud Storage) znajdują się w różnych lokalizacjach, możesz potencjalnie doświadczyć zwiększonych opóźnień i kosztów rozliczeń .

Oto mapowanie najbliższych regionów obsługiwanych przez funkcje dla 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 funkcji
nam5 lub us-central (wiele regionów) us-central1
eur3 lub europe-west (wiele regionów) europe-west1
asia-south1 (Bombaj) asia-east2