Catch up on everthing we announced at this year's Firebase Summit. Learn more

Locais do Cloud Functions

O Cloud Functions é regional, ou seja, a infraestrutura que o executa está localizada em regiões específicas e é gerenciada pelo Google para estar disponível de maneira redundante em todas as zonas dessas regiões.

Ao selecionar em qual região suas funções serão executadas, os principais fatores para considerar são a latência e a disponibilidade. Geralmente, é possível selecionar a região mais próxima dos usuários, mas pense também no local dos outros produtos e serviços usados pelo seu app. Se você usa os serviços em várias regiões, a latência e o preço do app podem ser afetados.

O Cloud Functions está disponível nas seguintes regiões com os preços da Camada 1:

  • us-central1 (Iowa)
  • us-east1 (Carolina do Sul)
  • us-east4 (Virgínia do Norte)
  • europe-west1 (Bélgica)
  • europe-west2 (Londres)
  • asia-east1 (Taiwan)
  • asia-east2 (Hong Kong)
  • asia-northeast1 (Tóquio)
  • asia-northeast2 (Osaka)

O Cloud Functions está disponível nas seguintes regiões com os preços do Nível 2:

  • us-west2 (Los Angeles)
  • us-west3 (Salt Lake City)
  • us-west4 (Las Vegas)
  • northamerica-northeast1 (Montreal)
  • southamerica-east1 (São Paulo)
  • europe-west3 (Frankfurt)
  • europe-west6 (Zurique)
  • europe-central2 (Varsóvia)
  • australia-southeast1 (Sydney)
  • asia-south1 (Mumbai)
  • asia-southeast1 (Singapura)
  • asia-southeast2 (Jacarta)
  • asia-northeast3 (Seul)

As funções em uma determinada região e para um determinado projeto precisam ter nomes exclusivos (indiferentes a maiúsculas), mas as funções entre regiões ou entre projetos podem ter o mesmo nome.

Práticas recomendadas para alterar a região

Por padrão, as funções são executadas na região us-central1. Ela pode ser diferente da região de uma fonte de eventos, como um bucket do Cloud Storage. Se você precisar alterar a região em que uma função é executada, siga as recomendações nesta seção para cada tipo de acionador de função.

Para definir a região em que uma função é executada, defina o parâmetro region na definição da função, conforme mostrado:

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

É possível especificar várias regiões passando várias strings de região separadas por vírgulas em functions.region(). Veja alterar a região de uma função para ver mais informações sobre os procedimentos recomendados.

Funções HTTP e chamáveis pelo cliente

Para funções HTTP e chamáveis, recomendamos que, primeiro, você defina sua função para a região de destino ou mais próxima do local em que se espera que os clientes estejam e, em seguida, altere sua função original para redirecionar a solicitação HTTP para a nova função. Elas podem ter o mesmo nome. Se os clientes da função HTTP aceitarem redirecionamentos, basta alterar sua função original para que retorne um status de redirecionamento de HTTP (301) com o URL da nova função. Caso seus clientes não lidem com redirecionamentos muito bem, faça proxy da solicitação da função original para a nova função. Para isso, faça uma nova solicitação da função original para a nova. A etapa final é garantir que todos os clientes estejam chamando a nova função.

Seleção de localização de clientes para funções chamáveis

Em relação à função chamável, as configurações chamáveis do cliente devem seguir as mesmas diretrizes das funções HTTP. O cliente também pode especificar uma região e precisa fazer isso se a função for executada em qualquer região diferente de us-central1.

Para definir regiões no cliente, especifique a região desejada na inicialização:

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

Funções de segundo plano

As funções de segundo plano adotam uma semântica de entrega de evento pelo menos uma vez, o que significa que, em algumas situações, elas podem receber eventos duplicados. Portanto, implemente funções para serem idempotentes. Caso sua função já esteja idempotente, reimplemente a função na nova região com o mesmo acionador de evento e remover a função antiga depois de verificar se a nova função está recebendo tráfego corretamente. Durante essa transição, ambas as funções receberão eventos. Veja como alterar a região de uma função para a sequência recomendada de comandos para trocar regiões por funções.

Caso sua função não esteja idempotente, ou a idempotência não se estender além da região, recomendamos que você implemente a idempotência antes de mover a função.

As recomendações da região ideal diferem de acordo com o tipo de acionador de evento:

Tipo de acionador Recomendação de região
Cloud Firestore Região mais próxima do local da instância do Cloud Firestore (consulte a próxima seção)
Realtime Database Sempre us-central1.
Cloud Storage Região mais próxima do local do bucket do Cloud Storage (consulte a próxima seção)
Outros Se você estiver interagindo com uma instância do Realtime Database, do Cloud Firestore ou um bucket do Cloud Storage dentro da função, a região recomendada será a mesma de uma função acionada por um desses recursos. Caso contrário, use a região padrão de us-central1. As funções conectadas ao Firebase Hosting precisam estar localizadas em us-central1.

Como selecionar regiões com base nos locais do Cloud Firestore e Cloud Storage

As regiões disponíveis para funções não correspondem precisamente às disponíveis para seu banco de dados do Cloud Firestore e buckets do Cloud Storage.

Se a função e o recurso (instância de banco de dados ou bucket do Cloud Storage) estiverem em locais diferentes, você poderá ter um aumento de latência e custos de faturamento.

Veja abaixo um mapeamento das regiões mais compatíveis com funções para o Cloud Firestore e o Cloud Storage para casos em que a mesma região não é compatível:

Região/multirregião para Cloud Firestore e Cloud Storage Região mais próxima para funções
nam5 ou us-central (multirregião) us-central1
eur3 ou europe-west (multirregião) europe-west1
asia-south1 (Mumbai) asia-east2