Emplacements des fonctions Cloud

Cloud Functions est régional , ce qui signifie que l'infrastructure qui exécute votre Cloud Function est située dans des régions spécifiques et est gérée par Google pour être disponible de manière redondante dans toutes les zones de ces régions .

Lorsque vous sélectionnez les régions dans lesquelles exécuter vos fonctions, vos principales considérations doivent être la latence et la disponibilité. Vous pouvez généralement sélectionner des régions proches de vos utilisateurs, mais vous devez également tenir compte de l'emplacement des autres produits et services utilisés par votre application. L'utilisation de services dans plusieurs régions peut affecter la latence de votre application, ainsi que les tarifs .

Régions prises en charge

Dans les listes de cette section, l'icôneenergy_ savings_leaf indique que l'électricité de cette région est produite avec de faibles émissions de carbone. Pour plus d'informations, consultez Énergie sans carbone pour les régions Google Cloud .

Cloud Functions est disponible dans les régions suivantes avec une tarification de niveau 1 :

  • asia-east1 (Taïwan)
  • asia-east2 (Hong Kong) 1ère génération uniquement
  • asia-northeast1 (Tokyo)
  • asia-northeast2 (Osaka)
  • europe-north1 (Finlande) energy_ savings_leaf 2e génération uniquement
  • europe-west1 (Belgique) energy_ savings_leaf
  • europe-west2 (Londres) 1ère génération uniquement
  • us-central1 (Iowa) énergie_économies_leaf
  • us-east1 (Caroline du Sud)
  • us-east4 (Virginie du Nord)
  • us-west1 (Oregon) énergie_économies_leaf

Cloud Functions est disponible dans les régions suivantes avec une tarification de niveau 2 :

  • asia-east2 (Hong Kong) 2e génération uniquement
  • asia-northeast3 (Séoul)
  • asia-southeast1 (Singapour)
  • asia-southeast2 (Jakarta)
  • asia-south1 (Mumbai) 2e génération uniquement
  • australia-southeast1 (Sydney)
  • australia-southeast2 (Melbourne) 2e génération uniquement
  • europe-central2 (Varsovie)
  • europe-west2 (Londres) 2e génération uniquement
  • europe-west3 (Francfort)
  • europe-west6 (Zurich) energy_ savings_leaf
  • northamerica-northeast1 (Montréal) energy_ savings_leaf
  • northamerica-northeast2 (Toronto) energy_ savings_leaf 2e génération uniquement
  • southamerica-east1 (Sao Paulo) Energy_Savings_leaf
  • southamerica-west1 (Santiago, Chili) 2e génération uniquement
  • us-west2 (Los Angeles)
  • us-west3 (Salt Lake City)
  • us-west4 (Las Vegas)

Les fonctions d'une région donnée dans un projet donné doivent avoir des noms uniques (insensibles à la casse), mais les fonctions d'une région ou d'un projet à l'autre peuvent partager le même nom.

Meilleures pratiques pour spécifier une région

Par défaut, les fonctions s'exécutent dans la région us-central1 . Notez que cela peut être différent de la région d'une source d'événement, telle qu'un bucket Cloud Storage. Si vous devez spécifier la région dans laquelle une fonction s'exécute, suivez les recommandations de cette section pour chaque type de déclencheur de fonction.

Pour définir la région dans laquelle une fonction s'exécute, définissez le paramètre region dans la définition de la fonction comme indiqué :

Noeud.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

Vous pouvez spécifier plusieurs régions en transmettant plusieurs chaînes de région séparées par des virgules dans region . Notez également que lorsque vous spécifiez une région pour de nombreux types de déclencheurs en arrière-plan, vous devrez spécifier le filtre d'événement correct ainsi que la région. Dans l'exemple ci-dessus, c'est le document Cloud Firestore qui émet l'événement. Pour un déclencheur Cloud Storage, le filtre d'événement peut être bucket ; pour un déclencheur Pub/Sub, ce serait topic , et ainsi de suite.

Consultez modifier la région d’une fonction pour plus d’informations sur la modification de la région d’une fonction qui gère le trafic de production.

Fonctions HTTP et appelables par le client

Pour les fonctions HTTP et appelables, nous vous recommandons de définir d'abord votre fonction sur la région de destination, ou la plus proche de l'endroit où se trouvent la plupart des clients attendus, puis de modifier votre fonction d'origine pour rediriger sa requête HTTP vers la nouvelle fonction (ils peuvent avoir le même nom). Si les clients de votre fonction HTTP prennent en charge les redirections, vous pouvez simplement modifier votre fonction d'origine pour renvoyer un statut de redirection HTTP (301) ainsi que l'URL de votre nouvelle fonction. Si vos clients ne gèrent pas bien les redirections, vous pouvez proxy la requête de la fonction d'origine vers la nouvelle fonction en lançant une nouvelle requête de la fonction d'origine vers la nouvelle fonction. La dernière étape consiste à s'assurer que tous les clients appellent la nouvelle fonction.

Sélection d'emplacement côté client pour les fonctions appelables

Concernant la fonction appelable, les configurations appelables par le client doivent suivre les mêmes directives que les fonctions HTTP. Le client peut également spécifier une région, et doit le faire si la fonction s'exécute dans une région autre que us-central1 .

Pour définir des régions sur le client, spécifiez la région souhaitée lors de l'initialisation :

Rapide

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

Objectif c

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

la toile


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

Unité

firebase.Functions.FirebaseFunctions functions;

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

Fonctions d'arrière-plan

Les fonctions d'arrière-plan adoptent une sémantique de livraison d'événements au moins une fois, ce qui signifie que dans certaines circonstances, elles peuvent recevoir des événements en double. Vous devez donc implémenter des fonctions pour être idempotentes . Si votre fonction est déjà idempotente, vous pouvez redéployer la fonction dans la nouvelle région avec le même déclencheur d'événement et supprimer l'ancienne fonction après avoir vérifié que la nouvelle fonction reçoit correctement le trafic. Durant cette transition, les deux fonctions recevront des événements. Voir modifier la région d'une fonction pour connaître la séquence de commandes recommandée pour modifier les régions des fonctions.

Si votre fonction n'est pas actuellement idempotente, ou si son idempotence ne s'étend pas au-delà de la région, nous vous recommandons d'implémenter d'abord l'idempotence avant de déplacer la fonction.

Les recommandations de régions optimales diffèrent selon le type de déclencheur d'événement :

Type de déclencheur Recommandation régionale
Cloud Firestore Région la plus proche de l'emplacement de l'instance Cloud Firestore (voir la section suivante)
Base de données en temps réel Toujours us-central1
Stockage en ligne Région la plus proche de l'emplacement du bucket Cloud Storage (voir la section suivante)
Autres Si vous interagissez avec une instance de Realtime Database, une instance Cloud Firestore ou un bucket Cloud Storage à l'intérieur de la fonction, la région recommandée est la même que si vous aviez une fonction déclenchée par l'une de ces ressources. Sinon, utilisez la région par défaut de us-central1 . Les fonctions connectées à Firebase Hosting peuvent se trouver dans n'importe quelle région, mais consultez la présentation de l'hébergement sans serveur pour les recommandations.

Sélection de régions en fonction des emplacements Cloud Firestore et Cloud Storage

Les régions disponibles pour les fonctions ne correspondent pas toujours précisément aux régions disponibles pour votre base de données Cloud Firestore et vos buckets Cloud Storage.

Notez que si votre fonction et votre ressource (instance de base de données ou compartiment Cloud Storage) se trouvent dans des emplacements différents, vous pourriez alors subir une augmentation de la latence et des coûts de facturation .

Voici un mappage des régions les plus proches prises en charge par les fonctions pour Cloud Firestore et Cloud Storage, pour les cas où la même région n'est pas prise en charge :

Région/Multi-région pour Cloud Firestore et Cloud Storage Région la plus proche pour les fonctions
nam5 ou us-central (multi-région) us-central1
eur3 ou europe-west (multi-région) europe-west1
europe-west4 (Pays-Bas) europe-west1
asia-south1 (Bombay) asia-east2
asia-south2 (Delhi) asia-east2
australia-southeast2 (Melbourne) australia-southeast1