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 |