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 de 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 .

Regiões suportadas

Nas listas desta secção, o ícone energy_ savings_leaf indica que a eletricidade para esta região é produzida com baixas emissões de carbono. Para obter mais informações, consulte Energia livre de carbono para regiões do Google Cloud .

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

  • asia-east1 (Taiwan)
  • asia-east2 (Hong Kong) apenas 1ª geração
  • asia-northeast1 (Tóquio)
  • asia-northeast2 (Osaka)
  • europe-north1 (Finlândia) energy_ savings_leaf apenas 2ª geração
  • europe-west1 (Bélgica) energy_ savings_leaf
  • europe-west2 (Londres) apenas 1ª geração
  • us-central1 (Iowa) energy_ savings_leaf
  • us-east1 (Carolina do Sul)
  • us-east4 (Norte da Virgínia)
  • us-west1 (Oregon) energy_ savings_leaf

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

  • asia-east2 (Hong Kong) apenas 2ª geração
  • asia-northeast3 (Seul)
  • asia-southeast1 (Cingapura)
  • asia-southeast2 (Jacarta)
  • asia-south1 (Mumbai) apenas 2ª geração
  • australia-southeast1 (Sydney)
  • australia-southeast2 (Melbourne) apenas 2ª geração
  • europe-central2 (Varsóvia)
  • europe-west2 (Londres) apenas 2ª geração
  • europe-west3 (Frankfurt)
  • europe-west6 (Zurique) energy_ savings_leaf
  • northamerica-northeast1 (Montreal) energy_ savings_leaf
  • northamerica-northeast2 (Toronto) energy_ savings_leaf somente 2ª geração
  • southamerica-east1 (São Paulo) energy_ savings_leaf
  • southamerica-west1 (Santiago, Chile) somente 2ª geração
  • us-west2 (Los Angeles)
  • us-west3 (Salt Lake City)
  • us-west4 (Las Vegas)

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

Melhores práticas para especificar uma 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 fonte de evento, como um bucket do Cloud Storage. Se precisar especificar a região onde uma função é executada, siga as recomendações nesta seção para cada tipo de gatilho 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:

Node.js

exports.firestoreAsia = onDocumentCreated(
  {
    document: "my-collection/{docId}",
    region: "asia-northeast1",
  },
  (event) => {},
);

Pitão

# 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

Você pode especificar diversas regiões passando diversas sequências de regiões separadas por vírgula em region . Observe também que, ao especificar uma região para muitos tipos de acionadores em segundo plano, você precisará especificar o filtro de eventos correto junto com a região. No exemplo acima, este é o document do Cloud Firestore que emite o evento. Para um acionador do Cloud Storage, o filtro de evento pode ser bucket ; para um gatilho do Pub/Sub, seria topic e assim por diante.

Consulte alterar a região de uma função para obter mais informações sobre como alterar a região de uma função que lida com o tráfego de produção.

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

Para funções HTTP e que podem ser chamadas, recomendamos que você primeiro defina sua função para a região de destino, ou mais próxima de onde os clientes mais esperados estão localizados, e então 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 da sua função HTTP suportam redirecionamentos, você pode simplesmente alterar sua função original para retornar um status de redirecionamento HTTP (301) junto com o URL da sua nova função. Se seus clientes não lidam bem com redirecionamentos, você pode 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

Em 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 deverá fazê-lo 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:

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 de fundo

As funções de 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 gatilho 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 as regiões das funções.

Se a sua função não for atualmente idempotente ou se 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 de acordo com o 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 (veja 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 (veja 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 que se você tivesse uma função acionada por um desses recursos. Caso contrário, use a região padrão us-central1 . As funções conectadas ao Firebase Hosting podem estar em qualquer região, mas consulte a visão geral da hospedagem sem servidor para recomendações.

Seleção de regiões com base nos locais do Cloud Firestore e do Cloud Storage

As regiões disponíveis para funções nem sempre correspondem exatamente à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 intervalo do Cloud Storage) estiverem em locais diferentes, você poderá enfrentar aumento na latência e nos custos de faturamento .

Aqui está um mapeamento das regiões com suporte de funções mais próximas para Cloud Firestore e 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
europe-west4 (Holanda) europe-west1
asia-south1 (Mumbai) asia-east2
asia-south2 (Delhi) asia-east2
australia-southeast2 (Melbourne) australia-southeast1