Lokalizacje Cloud Functions

Cloud Functions mają charakter regionalny , co oznacza, że ​​infrastruktura, na której działa funkcja Cloud Functions, jest zlokalizowana w określonych regionach i jest zarządzana przez firmę Google w sposób zapewniający nadmiarową dostępność we wszystkich strefach w tych regionach .

Wybierając regiony, w których mają być uruchamiane funkcje, należy przede wszystkim wziąć pod uwagę opóźnienia i dostępność. Zasadniczo możesz wybrać regiony znajdujące się blisko użytkowników, ale powinieneś także 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 mieć wpływ na opóźnienie aplikacji i cenę .

Obsługiwane regiony

Na listach w tej sekcji ikona liścia_oszczędności energii wskazuje, że energia elektryczna dla tego regionu jest wytwarzana przy niskiej emisji dwutlenku węgla. Więcej informacji znajdziesz w artykule Energia bezemisyjna dla regionów Google Cloud .

Usługa Cloud Functions jest dostępna w następujących regionach z cenami poziomu 1 :

  • asia-east1 (Tajwan)
  • asia-east2 (Hongkong) tylko pierwszej generacji
  • asia-northeast1 (Tokio)
  • asia-northeast2 (Osaka)
  • europe-north1 (Finlandia) Energy_savings_leaf Tylko druga generacja
  • europe-west1 (Belgia) Energy_savings_leaf
  • europe-west2 (Londyn) tylko pierwszej generacji
  • us-central1 (Iowa) Energy_savings_leaf
  • us-east1 (Karolina Południowa)
  • us-east4 (Północna Wirginia)
  • us-west1 (Oregon) Energy_savings_leaf

Usługa Cloud Functions jest dostępna w następujących regionach z cenami poziomu 2 :

  • asia-east2 (Hongkong) tylko 2. generacji
  • asia-northeast3 (Seul)
  • asia-southeast1 (Singapur)
  • asia-southeast2 (Dżakarta)
  • asia-south1 (Bombaj) tylko 2. generacji
  • australia-southeast1 (Sydney)
  • australia-southeast2 (Melbourne) Tylko 2. generacji
  • europe-central2 (Warszawa)
  • europe-west2 (Londyn) tylko 2. generacji
  • europe-west3 (Frankfurt)
  • europe-west6 (Zurych) Energy_savings_leaf
  • northamerica-northeast1 (Montreal) Energy_savings_leaf
  • northamerica-northeast2 (Toronto) Energy_savings_leaf Tylko druga generacja
  • southamerica-east1 (Sao Paulo) Energy_savings_leaf
  • southamerica-west1 (Santiago, Chile) Tylko druga generacja
  • us-west2 (Los Angeles)
  • us-west3 (Salt Lake City)
  • us-west4 (Las Vegas)

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

Najlepsze praktyki dotyczące określania 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 chcesz określić region, w którym działa funkcja, postępuj zgodnie z zaleceniami zawartymi 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:

Node.js

exports.firestoreAsia = onDocumentCreated(
  {
    document: "my-collection/{docId}",
    region: "asia-northeast1",
  },
  (event) => {},
);

Pyton

# 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żna określić wiele regionów, przekazując wiele ciągów regionów rozdzielonych przecinkami w region . Należy również pamiętać, że podczas określania regionu dla wielu typów wyzwalaczy w tle należy określić wraz z regionem poprawny filtr zdarzeń. W powyższym przykładzie jest to document Cloud Firestore, który emituje zdarzenie. W przypadku wyzwalacza Cloud Storage filtrem zdarzeń może być bucket ; w przypadku wyzwalacza Pub/Sub będzie to topic i tak dalej.

Zobacz zmianę regionu funkcji, aby uzyskać więcej informacji na temat zmiany regionu funkcji obsługującej ruch produkcyjny.

Funkcje wywoływane przez HTTP i klienta

W przypadku funkcji HTTP i wywoływalnych zalecamy najpierw ustawić funkcję na region docelowy lub najbliżej miejsca, w którym znajduje się większość oczekiwanych klientów, a następnie zmienić pierwotną funkcję w celu przekierowania jej żądań HTTP do nowej funkcji (mogą mieć takie same nazwa). Jeśli klienci Twojej funkcji HTTP obsługują przekierowania, możesz po prostu zmienić oryginalną funkcję, aby zwracała status przekierowania HTTP (301) wraz z adresem URL nowej funkcji. Jeśli Twoi klienci nie radzą sobie dobrze z przekierowaniami, możesz przekazać żądanie z oryginalnej funkcji do nowej funkcji, inicjując nowe żądanie z oryginalnej 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ływalnych

Jeśli chodzi o funkcję wywoływalną, konfiguracje wywoływalne przez klienta powinny spełniać te same wytyczne, co funkcje HTTP. Klient może również określić region i musi to zrobić, jeśli funkcja działa w jakimkolwiek regionie innym 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 tła

Funkcje działające w tle przyjmują semantykę dostarczania zdarzeń co najmniej raz, co oznacza, że ​​w pewnych okolicznościach mogą otrzymywać zduplikowane zdarzenia. Powinieneś więc zaimplementować funkcje idempotentne . Jeśli Twoja funkcja jest już idempotentna, możesz ponownie wdrożyć ją w nowym regionie z tym samym wyzwalaczem zdarzenia i usunąć starą funkcję po sprawdzeniu, czy nowa funkcja poprawnie odbiera ruch. Podczas tego przejścia obie funkcje będą odbierać zdarzenia. Zobacz zmianę regionu funkcji , aby zapoznać się z zalecaną sekwencją poleceń umożliwiających zmianę regionów funkcji.

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

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

Typ wyzwalacza Rekomendacja regionu
Chmura 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 (zobacz następną sekcję)
Inni Jeśli korzystasz z instancji Realtime Database, instancji Cloud Firestore lub zasobnika Cloud Storage w ramach tej funkcji, zalecany region jest taki sam, jak w przypadku funkcji uruchamianej przez jeden z tych zasobów. W przeciwnym razie użyj domyślnego regionu us-central1 . Funkcje połączone z Hostingiem Firebase mogą znajdować się w dowolnym regionie, ale zalecenia można znaleźć w omówieniu hostingu bezserwerowego .

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

Dostępne regiony dla funkcji nie zawsze odpowiadają regionom dostępnym dla Twojej bazy danych Cloud Firestore i segmentó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 rozliczeniowych .

Oto mapowanie najbliższych regionów obsługiwanych funkcji 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 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 (Bombaj) asia-east2
asia-south2 (Delhi) asia-east2
australia-southeast2 (Melbourne) australia-southeast1