获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

Locais do Cloud Functions

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

Ao selecionar em quais regiões executar suas funções, suas principais considerações devem ser a latência e a disponibilidade. Geralmente, você pode selecionar regiões próximas aos seus usuários, mas também deve considerar a localização dos outros produtos e serviços que seu aplicativo usa. O uso de serviços em várias regiões pode afetar a latência do seu aplicativo, bem como os preços .

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

  • us-central1 (Iowa)
  • us-east1 (Carolina do Sul)
  • us-east4 (Norte da Virgínia)
  • us-west1 (Oregon)
  • 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 preços de 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 (Cingapura)
  • asia-southeast2 (Jacarta)
  • asia-northeast3 (Seul)

As funções em uma determinada região em um determinado projeto devem ter nomes exclusivos (não diferenciam maiúsculas de minúsculas), mas funções entre regiões ou projetos podem compartilhar o mesmo nome.

Práticas recomendadas para mudar de região

Por padrão, as funções são executadas na região us-central1 . Observe que isso pode ser diferente da região de uma origem de evento, 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 onde 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) => {
      // ...
    });

Você pode especificar várias regiões passando várias strings de região separadas por vírgula em functions.region() . Consulte alterar a região de uma função para obter mais informações sobre os procedimentos recomendados.

Funções HTTP e que podem ser chamadas pelo cliente

Para HTTP e funções que podem ser chamadas, recomendamos que você primeiro defina sua função para a região de destino, ou mais próxima de onde a maioria dos clientes esperados estão localizados e, em seguida, altere sua função original para redirecionar sua solicitação HTTP para a nova função (eles podem ter o mesmo nome). Se os clientes de sua função HTTP suportarem redirecionamentos, você pode simplesmente alterar sua função original para retornar um status de redirecionamento HTTP (301) junto com o URL de sua nova função. Se seus clientes não lidarem bem com redirecionamentos, você poderá fazer proxy da solicitação da função original para a nova função iniciando uma nova solicitação da função original para a nova função. A etapa final é garantir que todos os clientes estejam chamando a nova função.

Seleção de localização do lado do cliente para funções que podem ser chamadas

Com relação à função que pode ser chamada, as configurações que podem ser chamadas pelo cliente devem seguir as mesmas diretrizes das funções HTTP. O cliente também pode especificar uma região e deve fazê-lo se a função for executada em qualquer região que não us-central1 .

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

Rápido

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

Objetivo-C

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

Rede


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

Unidade

firebase.Functions.FirebaseFunctions functions;

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

Funções em segundo plano

As funções em segundo plano adotam uma semântica de entrega de eventos pelo menos uma vez, o que significa que, em algumas circunstâncias, elas podem receber eventos duplicados. Portanto, você deve implementar funções para serem idempotentes . Se sua função já for idempotente, você poderá reimplantar 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 esta transição, ambas as funções receberão eventos. Consulte alterar a região de uma função para obter a sequência recomendada de comandos para alterar regiões para funções.

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

As recomendações de região ideal diferem por tipo de acionador de evento:

Tipo de gatilho 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)
Banco de dados em tempo real Sempre us-central1
Armazenamento na núvem 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, uma instância 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 . Observe também que as funções conectadas ao Firebase Hosting devem estar localizadas em us-central1 .

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

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

Observe que, se sua função e seu recurso (instância de banco de dados ou bucket do Cloud Storage) estiverem em locais diferentes, você poderá experimentar um aumento na latência e nos custos de faturamento .

Veja um mapeamento das regiões compatíveis com funções mais próximas do Cloud Firestore e do 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 (multi-região) us-central1
eur3 ou europe-west (multi-região) europe-west1
asia-south1 (Mumbai) asia-east2