Cloud Functions è regionale, il che significa che l'infrastruttura che esegue la tua funzione si trova in regioni specifiche ed è gestita da Google per essere disponibile in modo ridondante in tutte le zone all'interno di queste regioni.
Quando selezioni le regioni in cui eseguire le funzioni, le considerazioni principali devono essere la latenza e la disponibilità. In genere puoi selezionare regioni vicine ai tuoi utenti, ma devi anche considerare la posizione degli altri prodotti e servizi utilizzati dall'app. L'utilizzo di servizi in più regioni può influire sulla latenza dell'app, nonché sui prezzi.
Per impostazione predefinita, l'interfaccia a riga di comando di Firebase esegue il deployment delle funzioni in una regione in base alla configurazione del progetto. Per le funzioni basate su eventi, il deployment viene in genere eseguito in una regione all'interno della regione dell'origine dati di attivazione (ad esempio un database Cloud Firestore o un bucket Cloud Storage) e, come fallback, in us-central1.
Dopo il deployment, puoi verificare la regione nella console Firebase o eseguendo firebase functions:list. Se vuoi che la funzione venga eseguita in una regione diversa, puoi modificare la regione.
Aree geografiche supportate
Negli elenchi di questa sezione, l'icona energy_savings_leaf indica che l'elettricità per questa regione viene prodotta con basse emissioni di anidride carbonica. Per saperne di più, consulta Energia a zero emissioni di CO2 per le regioni Google Cloud.
Prezzi del livello 1
Cloud Functions è disponibile nelle seguenti regioni con prezzi del livello 1:
| Regione | Località | Versioni dei prodotti supportate | Emissioni di CO2 |
|---|---|---|---|
africa-south1 |
Johannesburg | Solo 2ª gen. | |
asia-east1 |
Taiwan | 1ª gen., 2ª gen. | |
asia-east2 |
Hong Kong | Solo 1ª gen. | |
asia-northeast1 |
Tokyo | 1ª gen., 2ª gen. | |
asia-northeast2 |
Osaka | 1ª gen., 2ª gen. | |
europe-north1 |
Finlandia | Solo 2ª gen. | energy_savings_leaf |
europe-southwest1 |
Madrid | Solo 2ª gen. | |
europe-west1 |
Belgio | 1ª gen., 2ª gen. | energy_savings_leaf |
europe-west4 |
Paesi Bassi | Solo 2ª gen. | |
europe-west8 |
Milano | Solo 2ª gen. | |
europe-west9 |
Parigi | Solo 2ª gen. | energy_savings_leaf |
me-west1 |
Tel Aviv | Solo 2ª gen. | |
europe-west2 |
Londra | Solo 1ª gen. | |
us-central1 |
Iowa | 1ª gen., 2ª gen. | energy_savings_leaf |
us-east1 |
Carolina del Sud | 1ª gen., 2ª gen. | |
us-east4 |
Virginia del Nord | 1ª gen., 2ª gen. | |
us-east5 |
Columbus | Solo 2ª gen. | |
us-south1 |
Dallas | Solo 2ª gen. | |
us-west1 |
Oregon | 1ª gen., 2ª gen. | energy_savings_leaf |
Prezzi del livello 2
Cloud Functions è disponibile nelle seguenti regioni con prezzi del livello 2:
| Regione | Località | Versioni dei prodotti supportate | Emissioni di CO2 |
|---|---|---|---|
asia-east2 |
Hong Kong | Solo 2ª gen. | |
asia-northeast3 |
Seul | 1ª gen., 2ª gen. | |
asia-southeast1 |
Singapore | 1ª gen., 2ª gen. | |
asia-southeast2 |
Giacarta | 1ª gen., 2ª gen. | |
asia-south1 |
Mumbai | Solo 2ª gen. | |
asia-south2 |
Delhi, India | Solo 2ª gen. | |
australia-southeast1 |
Sydney | 1ª gen., 2ª gen. | |
australia-southeast2 |
Melbourne | Solo 2ª gen. | |
europe-central2 |
Varsavia | 1ª gen., 2ª gen. | |
europe-west2 |
Londra | Solo 2ª gen. | |
europe-west3 |
Francoforte | 1ª gen., 2ª gen. | energy_savings_leaf |
europe-west6 |
Zurigo | 1ª gen., 2ª gen. | energy_savings_leaf |
europe-west10 |
Berlino | Solo 2ª gen. | |
europe-west12 |
Torino | Solo 2ª gen. | |
me-central1 |
Doha | Solo 2ª gen. | |
me-central2 |
Dammam | Solo 2ª gen. | |
northamerica-northeast1 |
Montreal | 1ª gen., 2ª gen. | energy_savings_leaf |
northamerica-northeast2 |
Toronto | Solo 2ª gen. | energy_savings_leaf |
southamerica-east1 |
San Paolo | 1ª gen., 2ª gen. | energy_savings_leaf |
southamerica-west1 |
Santiago, Cile | Solo 2ª gen. | |
us-west2 |
Los Angeles | 1ª gen., 2ª gen. | |
us-west3 |
Salt Lake City | 1ª gen., 2ª gen. | |
us-west4 |
Las Vegas | 1ª gen., 2ª gen. |
Le funzioni in una determinata regione di un progetto specifico devono avere nomi univoci (senza distinzione tra maiuscole e minuscole), ma le funzioni in regioni o progetti diversi possono condividere lo stesso nome.
Best practice per la specifica di una regione
Per impostazione predefinita, l'interfaccia a riga di comando di Firebase esegue il deployment delle funzioni in una regione in base alla configurazione del progetto. Per le funzioni basate su eventi, il deployment viene in genere eseguito in una regione all'interno della regione dell'origine dati di attivazione (come un database Cloud Firestore o un bucket Cloud Storage) e, come fallback, in us-central1.
Ti consigliamo di impostare regioni specifiche anziché fare affidamento sulle impostazioni predefinite di Firebase, che potrebbero cambiare nel tempo. Quando imposti le regioni, segui i suggerimenti riportati in questa sezione per ogni tipo di trigger
Per impostare la regione in cui viene eseguita una funzione, imposta il parametro region nella definizione della funzione come mostrato di seguito:
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
Puoi specificare più regioni passando più stringhe di regioni separate da virgole in region. Tieni presente inoltre che, quando specifichi una regione per molti tipi di trigger in background, devi specificare il filtro eventi corretto insieme alla regione. Nell'esempio precedente, si tratta di Cloud Firestore document che emette l'evento. Per un trigger Cloud Storage, il filtro eventi potrebbe essere bucket; per un trigger Pub/Sub, sarebbe topic e così via.
Per saperne di più sulla modifica della regione per una funzione che gestisce il traffico di produzione, consulta Modifica la regione di una funzione.
Funzioni HTTP e richiamabili dal client
Per le funzioni HTTP e richiamabili, ti consigliamo di impostare prima la funzione sulla regione di destinazione o su quella più vicina alla posizione della maggior parte dei clienti previsti, quindi di modificare la funzione originale in modo da reindirizzare la richiesta HTTP alla nuova funzione (possono avere lo stesso nome). Se i client della funzione HTTP supportano i reindirizzamenti, puoi semplicemente modificare la funzione originale in modo che restituisca uno stato di reindirizzamento HTTP (301) insieme all'URL della nuova funzione. Se i client non gestiscono bene i reindirizzamenti, puoi delegare la richiesta dalla funzione originale alla nuova funzione avviando una nuova richiesta dalla funzione originale alla nuova funzione. Il passaggio finale consiste nell'assicurarsi che tutti i client chiamino la nuova funzione.
Selezione della località lato client per le funzioni richiamabili
Per quanto riguarda la funzione richiamabile, le configurazioni richiamabili dal client devono seguire le stesse linee guida delle funzioni HTTP. Il client può anche specificare una regione e deve farlo se la funzione viene eseguita in una regione diversa da quella predefinita del progetto.
Per impostare le regioni sul client, specifica la regione desiderata durante l'inizializzazione:
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");
Funzioni in background
Le funzioni in background adottano una semantica di distribuzione degli eventi "at least once", il che significa che in alcune circostanze possono ricevere eventi duplicati. Pertanto, devi implementare le funzioni in modo che siano idempotenti. Se la funzione è già idempotente, puoi rifare il deployment nella nuova regione con lo stesso trigger di eventi e rimuovere la vecchia funzione, dopo aver verificato che quella nuova riceve correttamente il traffico. Durante questa transizione, entrambe le funzioni riceveranno eventi. Consulta Modifica la regione di una funzione per la sequenza di comandi consigliata per modificare le regioni delle funzioni.
Se la funzione non è attualmente idempotente o la sua idempotenza non si estende oltre la regione, ti consigliamo di implementare l'idempotenza prima di spostare la funzione.
I suggerimenti per la regione ottimale variano in base al tipo di trigger di evento:
| Tipo di trigger | Suggerimento per la regione |
|---|---|
| Cloud Firestore | Regione più vicina alla località dell'istanza Cloud Firestore (vedi la sezione successiva) |
| Realtime Database | Stessa regione dell'istanza Realtime Database |
| Cloud Storage | Regione più vicina alla località del bucket Cloud Storage (vedi la sezione successiva) |
| Altro | Se interagisci con un'istanza Realtime Database, un'istanza Cloud Firestore o un bucket Cloud Storage all'interno della funzione, la regione consigliata è la stessa che utilizzeresti se una di queste risorse attivasse una funzione. Le funzioni connesse a Firebase Hosting possono trovarsi in qualsiasi regione, ma consulta la panoramica dell'hosting serverless per i suggerimenti. |
Selezione delle regioni in base alle località Cloud Firestore e Cloud Storage
Le regioni disponibili per le funzioni non corrispondono sempre esattamente alle regioni disponibili per il tuo database Cloud Firestore e i tuoi bucket Cloud Storage.
Tieni presente che se la funzione e la risorsa (istanza di database o bucket Cloud Storage) si trovano in località diverse, potresti notare un incremento della latenza e dei costi fatturati.
Ecco una mappatura delle regioni più vicine supportate da Functions per Cloud Firestore e Cloud Storage, per i casi in cui la stessa regione non è supportata:
| Regione/Multiregione per Cloud Firestore e Cloud Storage | Regione più vicina per le funzioni |
|---|---|
nam5 o us-central (multiregione) |
us-central1 |
eur3 o europe-west (multiregione) |
europe-west1 |
europe-west4 (Paesi Bassi) |
europe-west1 |
asia-south1 (Mumbai) |
asia-east2 |
asia-south2 (Delhi) |
asia-east2 |
australia-southeast2 (Melbourne) |
australia-southeast1 |