Locais do Cloud Functions

O Cloud Functions é regional, o que significa que a infraestrutura que executa sua função 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 levar em consideração 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:

  • us-central1 (Iowa)
  • us-east1 (Carolina do Sul)
  • europe-west1 (Bélgica)
  • asia-northeast1 (Tóquio)

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 intervalo de armazenamento. 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 a seguir:

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

É possível especificar várias regiões passando várias strings de regiões separadas por vírgula 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, você pode simplesmente 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, você poderá fazer 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 que não seja us-central1.

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

Swift

lazy var functions = Functions.functions(region:"us-central1")

Objective-C

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

Web


var functions = firebase.app().functions('us-central1');

Android

private FirebaseFunctions mFunctions;
// ...
mFunctions = FirebaseFunctions.getInstance("us-central1");

C++

firebase::functions::Functions* functions;
// ...
functions = firebase::functions::Functions::GetInstance("us-central1");

Unity

firebase.Functions.FirebaseFunctions functions;

functions = Firebase.Functions.FirebaseFunctions.GetInstance("us-central1");

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, você poderá reimplementar 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
Storage Região mais próxima do local do intervalo do Storage (consulte a próxima seção)
Outros Se você estiver interagindo com uma instância do Realtime Database, do Firestore ou um intervalo de armazenamento dentro da função, a região recomendada será a mesma que se você tivesse uma função acionada por um desses recursos. Caso contrário, use a região padrão de us-central1. Observe também que as funções conectadas ao Firebase Hosting precisam estar localizadas em us-central1.

Selecionar regiões para o Cloud Firestore e o Storage

As regiões de funções não correspondem exatamente às regiões disponíveis para projetos do Firebase. Se você especificou uma região ao criar seu projeto do Firebase, essa é a mesma região em que o Firebase cria sua instância do Cloud Firestore e também a região padrão para intervalos do Storage. Veja abaixo um mapeamento da região de funções mais próxima para funções do Cloud Firestore e acionadas por armazenamento:

Região/multirregião do Cloud Firestore/Storage Região de funções mais próxima
Multirregião nam5/us-central us-central1
us-east1 (Carolina do Sul) us-east1
us-east4 (Virgínia do Norte) us-east1
northamerica-northeast1 (Montreal) us-central1
Multirregião eur3/europe-west europe-west1
europe-west2 (Londres) europe-west1
europe-west3 (Frankfurt) europe-west1
asia-northeast1 (Tóquio) asia-northeast1
asia-south1 (Mumbai) asia-northeast1
australia-southeast1 (Sydney) asia-northeast1
southamerica-east1 (São Paulo) us-east1

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.