Местоположения Cloud Functions

Cloud Functions – региональный сервис. Это означает, что инфраструктура, на которой работает ваша функция, находится в определенных регионах и управляется Google таким образом, чтобы быть избыточно доступной во всех зонах этих регионов.

При выборе регионов для выполнения функций в первую очередь следует учитывать задержку и доступность. Обычно можно выбирать регионы, расположенные рядом с пользователями, но также следует учитывать местоположение других продуктов и сервисов, которые использует ваше приложение. Использование сервисов в нескольких регионах может повлиять на задержку в работе приложения, а также на цену.

По умолчанию интерфейс командной строки Firebase развертывает функции в регионе, указанном в конфигурации проекта. Для функций, управляемых событиями, обычно выполняется развертывание в регионе источника данных, который активирует функцию (например, в базе данных Cloud Firestore или сегменте Cloud Storage), а в качестве резервного варианта используется регион us-central1.

После развертывания вы можете проверить регион в консоли Firebase или выполнив команду firebase functions:list. Если вы хотите, чтобы функция выполнялась в другом регионе, вы можете изменить ее регион.

Поддерживаемые регионы

В списках в этом разделе значок energy_savings_leaf означает, что электроэнергия в этом регионе производится с низким уровнем выбросов углерода. Подробнее о безуглеродной энергии для регионов Google Cloud…

Цены уровня 1

Cloud Functions доступен в следующих регионах с ценами уровня 1:

Регион Местоположение Поддерживаемые версии продуктов Выбросы CO2
africa-south1 Йоханнесбург Только второе поколение
asia-east1 Тайвань первого и второго поколений;
asia-east2 Гонконг Только первое поколение
asia-northeast1 Токио первого и второго поколений;
asia-northeast2 Осака первого и второго поколений;
europe-north1 Финляндия Только второе поколение Лист энергоэффективности
europe-southwest1 Мадрид Только второе поколение
europe-west1 Бельгия первого и второго поколений; Лист энергоэффективности
europe-west4 Нидерланды Только второе поколение
europe-west8 Милан Только второе поколение
europe-west9 Париж Только второе поколение Лист энергоэффективности
me-west1 Тель-Авив Только второе поколение
europe-west2 Лондон Только первое поколение
us-central1 Айова первого и второго поколений; Лист энергоэффективности
us-east1 Южная Каролина первого и второго поколений;
us-east4 Северная Вирджиния первого и второго поколений;
us-east5 Колумбус Только второе поколение
us-south1 Даллас Только второе поколение
us-west1 Орегон первого и второго поколений; Лист энергоэффективности

Цены уровня 2

Cloud Functions доступен в следующих регионах с ценами уровня 2:

Регион Местоположение Поддерживаемые версии продуктов Выбросы CO2
asia-east2 Гонконг Только второе поколение
asia-northeast3 Сеул первого и второго поколений;
asia-southeast1 Сингапур первого и второго поколений;
asia-southeast2 Джакарта первого и второго поколений;
asia-south1 Мумбай Только второе поколение
asia-south2 Дели, Индия Только второе поколение
australia-southeast1 Сидней первого и второго поколений;
australia-southeast2 Мельбурн Только второе поколение
europe-central2 Варшава первого и второго поколений;
europe-west2 Лондон Только второе поколение
europe-west3 Франкфурт первого и второго поколений; Лист энергоэффективности
europe-west6 Цюрих первого и второго поколений; Лист энергоэффективности
europe-west10 Берлин Только второе поколение
europe-west12 Турин Только второе поколение
me-central1 Доха Только второе поколение
me-central2 Даммам Только второе поколение
northamerica-northeast1 Монреаль первого и второго поколений; Лист энергоэффективности
northamerica-northeast2 Торонто Только второе поколение Лист энергоэффективности
southamerica-east1 Сан-Пауло первого и второго поколений; Лист энергоэффективности
southamerica-west1 Сантьяго, Чили Только второе поколение
us-west2 Лос-Анджелес первого и второго поколений;
us-west3 Солт-Лейк-Сити первого и второго поколений;
us-west4 Лас-Вегас первого и второго поколений;

Функции в определенном регионе в определенном проекте должны иметь уникальные имена (без учета регистра), но функции в разных регионах или разных проектах могут иметь одинаковые имена.

Рекомендации по указанию региона

По умолчанию интерфейс командной строки Firebase развертывает функции в регионе, указанном в конфигурации проекта. Для функций, управляемых событиями, обычно выполняется развертывание в регионе источника данных, который активирует функцию (например, в базе данных Cloud Firestore или сегменте Cloud Storage), а в качестве резервного варианта используется регион us-central1.

Рекомендуем задавать определенные регионы, а не полагаться на настройки Firebase по умолчанию, которые могут меняться. При настройке регионов следуйте рекомендациям в этом разделе для каждого типа триггера.

Чтобы задать регион, в котором будет выполняться функция, укажите параметр region в определении функции, как показано ниже:

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

Вы можете указать несколько регионов, передав в region несколько строк с названиями регионов, разделенных запятыми. Обратите внимание, что при указании региона для многих типов триггеров, срабатывающих в фоновом режиме, вам также потребуется задать правильный фильтр событий. В примере выше событие запускает код Cloud Firestore document. Для триггера Cloud Storage фильтр событий может быть bucket, для триггера издатель-подписчик – topic и т. д.

Подробнее о том, как изменить регион функции, которая обрабатывает производственный трафик…

Функции, вызываемые клиентом, и HTTP

Для HTTP-функций и вызываемых функций мы рекомендуем сначала задать для функции целевой регион или регион, ближайший к местоположению большинства ожидаемых клиентов, а затем изменить исходную функцию, чтобы перенаправлять ее HTTP-запрос на новую функцию (у них может быть одно и то же название). Если клиенты вашей функции HTTP поддерживают переадресацию, вы можете просто изменить исходную функцию, чтобы она возвращала статус переадресации HTTP (301) вместе с URL новой функции. Если клиенты плохо обрабатывают переадресацию, вы можете проксировать запрос из исходной функции в новую, инициировав новый запрос из исходной функции в новую. На последнем этапе нужно убедиться, что все клиенты вызывают новую функцию.

Выбор местоположения на стороне клиента для вызываемых функций

Что касается вызываемой функции, то при настройке вызываемых клиентом функций следует соблюдать те же правила, что и для функций HTTP. Клиент также может указать регион, и ему следует это сделать, если функция выполняется в регионе, отличном от региона проекта по умолчанию.

Чтобы задать регионы для клиента, укажите нужный регион при инициализации:

Swift

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

Objective-C

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

Веб-приложение


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

Фоновые функции

Фоновые функции используют семантику доставки событий "не менее одного раза", а это значит, что в некоторых случаях они могут получать дублирующиеся события. Поэтому вам следует реализовать идемпотентные функции. Если ваша функция уже идемпотентна, вы можете повторно развернуть ее в новом регионе с тем же триггером событий и удалить старую функцию после того, как убедитесь, что новая функция правильно получает трафик. Во время перехода события будут получать обе функции. Рекомендуемую последовательность команд для изменения региона функций можно найти в разделе Как изменить регион функции.

Если ваша функция не является идемпотентной или ее идемпотентность не распространяется за пределы региона, мы рекомендуем сначала реализовать идемпотентность, а затем переместить функцию.

Рекомендации по выбору оптимального региона зависят от типа триггера события:

Тип триггера Рекомендации по регионам
Cloud Firestore Ближайший регион к местоположению экземпляра Cloud Firestore (см. следующий раздел)
Realtime Database Тот же регион, что и у экземпляра Realtime Database
Cloud Storage Ближайший регион к местоположению сегмента Cloud Storage (см. следующий раздел)
Другие Если вы взаимодействуете с экземпляром Realtime Database, экземпляром Cloud Firestore или сегментом Cloud Storage внутри функции, то рекомендуемый регион будет таким же, как если бы функция была активирована одним из этих ресурсов. Функции, подключенные к Firebase Hosting, могут находиться в любом регионе, но ознакомьтесь с обзором бессерверного хостинга, чтобы узнать рекомендации.

Выбор регионов на основе местоположений Cloud Firestore и Cloud Storage

Доступные регионы для функций не всегда совпадают с регионами, доступными для базы данных Cloud Firestore и сегментов Cloud Storage.

Обратите внимание, что если функция и ресурс (экземпляр базы данных или сегмент Cloud Storage) находятся в разных регионах, то может увеличиться задержка и стоимость.

Ниже приведено сопоставление ближайших регионов, поддерживающих функции Cloud Firestore и Cloud Storage, в случаях, когда один и тот же регион не поддерживается:

Регион/мультирегион для Cloud Firestore и Cloud Storage Ближайший регион для функций
nam5 или us-central (несколько регионов) us-central1
eur3 или europe-west (несколько регионов) europe-west1
europe-west4 (Нидерланды) europe-west1
asia-south1 (Мумбаи) asia-east2
asia-south2 (Дели) asia-east2
australia-southeast2 (Мельбурн) australia-southeast1