Ubicaciones de Cloud Functions

Cloud Functions es regional, lo que significa que la infraestructura que ejecuta tus funciones se ubica en regiones específicas y Google la administra para que esté disponible de manera redundante en todas las zonas de esas regiones.

Cuando elijas las regiones en las quieres que se ejecuten tus funciones, los aspectos principales que debes tener en cuenta son la latencia y la disponibilidad. Por lo general, puedes seleccionar regiones cercanas a tus usuarios, pero también debes tener en cuenta la ubicación de otros productos y servicios que tu app use. El uso de servicios en múltiples regiones puede afectar la latencia de la app y los precios.

Según la configuración predeterminada, las funciones se ejecutan en la región us-central1. Ten presente que puede ser distinta a la región de la fuente de un evento, por ejemplo, un bucket de Cloud Storage. Obtén información para especificar la región en la que se ejecuta una función más adelante en esta página.

Regiones admitidas

En las listas de esta sección, el ícono de hoja_de_ahorro_de_energía indica que la electricidad de esta región se produce con bajas emisiones de carbono. Si quieres obtener más información, consulta Energía sin emisiones de carbono para las regiones de Google Cloud.

Precios del nivel 1

Cloud Functions está disponible con precios de nivel 1 en las siguientes regiones:

Región Ubicación Versiones de productos compatibles Emisiones de CO2
asia-east1 Taiwán 1st gen, 2nd gen
asia-east2 Hong Kong Solo para la 1ª gen.
asia-northeast1 Tokio 1st gen, 2nd gen
asia-northeast2 Osaka 1st gen, 2nd gen
europe-north1 Finlandia Solo para la 2ª gen. energy_savings_leaf
europe-southwest1 Madrid Solo para la 2ª gen.
europe-west1 Bélgica 1st gen, 2nd gen energy_savings_leaf
europe-west4 Países Bajos Solo para la 2ª gen.
europe-west8 Milán Solo para la 2ª gen.
europe-west9 París Solo para la 2ª gen. energy_savings_leaf
me-west1 Tel Aviv Solo para la 2ª gen.
europe-west2 Londres Solo para la 1ª gen.
us-central1 Iowa 1st gen, 2nd gen energy_savings_leaf
us-east1 Carolina del Sur 1st gen, 2nd gen
us-east4 Virginia del Norte 1st gen, 2nd gen
us-east5 Columbus Solo para la 2ª gen.
us-south1 Dallas Solo para la 2ª gen.
us-west1 Oregón 1st gen, 2nd gen energy_savings_leaf

Precios del nivel 2

Cloud Functions está disponible con precios de nivel 2 en las siguientes regiones:

Región Ubicación Versiones de productos compatibles Emisiones de CO2
asia-east2 Hong Kong Solo para la 2ª gen.
asia-northeast3 Seúl 1st gen, 2nd gen
asia-southeast1 Singapur 1st gen, 2nd gen
asia-southeast2 Yakarta 1st gen, 2nd gen
asia-south1 Bombay Solo para la 2ª gen.
asia-south2 Delhi, India Solo para la 2ª gen.
australia-southeast1 Sídney 1st gen, 2nd gen
australia-southeast2 Melbourne Solo para la 2ª gen.
europe-central2 Varsovia 1st gen, 2nd gen
europe-west2 Londres Solo para la 2ª gen.
europe-west3 Fráncfort 1st gen, 2nd gen energy_savings_leaf
europe-west6 Zúrich 1st gen, 2nd gen energy_savings_leaf
europe-west10 Berlín Solo para la 2ª gen.
europe-west12 Turín Solo para la 2ª gen.
me-central1 Doha Solo para la 2ª gen.
me-central2 Dammam Solo para la 2ª gen.
northamerica-northeast1 Montreal 1st gen, 2nd gen energy_savings_leaf
northamerica-northeast2 Toronto Solo para la 2ª gen. energy_savings_leaf
southamerica-east1 Sao Paulo 1st gen, 2nd gen energy_savings_leaf
southamerica-west1 Santiago, Chile Solo para la 2ª gen.
us-west2 Los Ángeles 1st gen, 2nd gen
us-west3 Salt Lake City 1st gen, 2nd gen
us-west4 Las Vegas 1st gen, 2nd gen

Las funciones en una región o proyecto determinados deben tener nombres únicos (no distinguen mayúsculas de minúsculas), pero las funciones entre regiones o proyectos pueden compartir el mismo nombre.

Prácticas recomendadas para especificar una región

Según la configuración predeterminada, las funciones se ejecutan en la región us-central1. Ten presente que puede ser distinta a la región de la fuente de un evento, por ejemplo, un bucket de Cloud Storage. Si necesitas cambiar la región en la que se ejecuta una función, sigue las recomendaciones de esta sección según el tipo de activador de función.

Para configurar la región en la que se ejecuta una función, configura el parámetro region en la definición de la función como se muestra a continuación:

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

Si quieres especificar varias regiones, pasa múltiples strings de regiones separadas por comas en el método region. Además, ten en cuenta que, cuando especifiques una región para muchos tipos de activadores en segundo plano, deberás especificar el filtro de eventos correcto junto con la región. En el ejemplo anterior, este es el document de Cloud Firestore que emite el evento. Para un activador de Cloud Storage, el filtro de eventos podría ser bucket; para un activador de Pub/Sub, sería topic, y así sucesivamente.

Consulta Cambia la región de una función para obtener más información sobre cómo cambiar la región de una función que controla el tráfico de producción.

Funciones de HTTP y funciones que admiten llamadas de clientes

Para las funciones de HTTP y las funciones que admiten llamadas, te recomendamos que primero configures tu función con la región de destino o la región más cercana en la que se ubica la mayoría de los clientes estimados y, a continuación, alteres la función original para redireccionar su solicitud de HTTP a la función nueva (pueden tener el mismo nombre). Si los clientes de tu función de HTTP admiten redireccionamientos, simplemente cambia tu función original para volver a un estado de redireccionamiento de HTTP (301), además de la URL de tu función nueva. Si tus clientes no controlan de buena forma los redireccionamientos, puedes realizar la solicitud mediante un proxy desde la función original hasta la función nueva si inicializas una solicitud nueva desde la función original hasta la función nueva. El paso final es asegurarse de que todos los clientes llamen a la función nueva.

Selección de la ubicación del cliente para funciones que admiten llamadas

En cuanto a la función que admite llamadas, la configuración que admite llamadas de clientes debe seguir los mismos lineamientos de las funciones de HTTP. Además, el cliente puede especificar una región y debe hacerlo si la función se ejecuta en una región que no sea us-central1.

Para configurar las regiones del cliente, debes especificar la región deseada en el momento de la inicialización:

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

Funciones en segundo plano

Las funciones en segundo plano adoptan una semántica de entrega de eventos de “al menos una vez”, lo que significa que, en algunas circunstancias, es posible que reciban eventos duplicados. Por lo tanto, debes implementar funciones que sean idempotentes. Si tu función ya es idempotente, puedes volver a implementarla en la región nueva con el mismo activador de eventos y quitar la función anterior luego de verificar que la función nueva recibe tráfico correctamente. Durante esta transición ambas funciones recibirán eventos. Consulta Cambia la región de una función a fin de obtener más información sobre la secuencia recomendada de comandos para cambiar las regiones de las funciones.

Si tu función no es idempotente, o si su idempotencia no va más allá de la región, te recomendamos que primero implementes la idempotencia antes de mover la función.

Las recomendaciones de las regiones óptimas varían según el tipo de activador de evento:

Tipo de activador Recomendación de región
Cloud Firestore La región más cercana a la ubicación la instancia de Cloud Firestore (consulta la siguiente sección)
Realtime Database Siempre us-central1
Cloud Storage La región más cercana a la ubicación del bucket de Cloud Storage (consulta la siguiente sección)
Otros Si interactúas con una instancia de Realtime Database, una instancia de Cloud Firestore o un bucket de Cloud Storage dentro de la función, la región recomendada es la misma que si una función tuya se activara a través de uno de esos recursos. En caso contrario, usa la región predeterminada de us-central1. Las funciones conectadas a Firebase Hosting pueden estar en cualquier región, pero consulta la descripción general de hosting sin servidores para obtener recomendaciones.

Selecciona regiones según las ubicaciones de Cloud Firestore y Cloud Storage

Las regiones disponibles para las funciones no siempre coinciden de forma precisa con las de la base de datos de Cloud Firestore y los buckets de Cloud Storage.

Ten en cuenta que, si tu función y recurso (instancia de base de datos o bucket de Cloud Storage) se encuentran en ubicaciones distintas, es posible que observes aumentos en la latencia y en los costos de facturación.

Aquí se muestra una asignación de las regiones más cercanas que admiten funciones para Cloud Firestore y Cloud Storage en casos en los que no se admite la misma región:

Región o multirregión para Cloud Firestore y Cloud Storage Región más cercana para las funciones
nam5 o us-central (multirregión) us-central1
eur3 o europe-west (multirregión) europe-west1
europe-west4 (Países Bajos) europe-west1
asia-south1 (Bombay) asia-east2
asia-south2 (Delhi) asia-east2
australia-southeast2 (Melbourne) australia-southeast1