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 |
Йоханнесбург | Только 2-е поколение | |
asia-east1 |
Тайвань | первое поколение, второе поколение | |
asia-east2 |
Гонконг | Только первое поколение | |
asia-northeast1 |
Токио | первое поколение, второе поколение | |
asia-northeast2 |
Осака | первое поколение, второе поколение | |
europe-north1 |
Финляндия | Только 2-е поколение | energy_savings_leaf |
europe-southwest1 |
Мадрид | Только 2-е поколение | |
europe-west1 |
Бельгия | первое поколение, второе поколение | energy_savings_leaf |
europe-west4 |
Нидерланды | Только 2-е поколение | |
europe-west8 |
Милан | Только 2-е поколение | |
europe-west9 |
Париж | Только 2-е поколение | energy_savings_leaf |
me-west1 |
Тель-Авив | Только 2-е поколение | |
europe-west2 |
Лондон | Только первое поколение | |
us-central1 |
Айова | первое поколение, второе поколение | energy_savings_leaf |
us-east1 |
Южная Каролина | первое поколение, второе поколение | |
us-east4 |
Северная Вирджиния | первое поколение, второе поколение | |
us-east5 |
Колумбус | Только 2-е поколение | |
us-south1 |
Даллас | Только 2-е поколение | |
us-west1 |
Орегон | первое поколение, второе поколение | energy_savings_leaf |
Цены уровня 2
Cloud Functions доступен в следующих регионах по цене уровня 2:
| Регион | Местоположение | Поддерживаемые версии продуктов | Выбросы CO2 |
|---|---|---|---|
asia-east2 |
Гонконг | Только 2-е поколение | |
asia-northeast3 |
Сеул | первое поколение, второе поколение | |
asia-southeast1 |
Сингапур | первое поколение, второе поколение | |
asia-southeast2 |
Джакарта | первое поколение, второе поколение | |
asia-south1 |
Мумбай | Только 2-е поколение | |
asia-south2 |
Дели, Индия | Только 2-е поколение | |
australia-southeast1 |
Сидней | первое поколение, второе поколение | |
australia-southeast2 |
Мельбурн | Только 2-е поколение | |
europe-central2 |
Варшава | первое поколение, второе поколение | |
europe-west2 |
Лондон | Только 2-е поколение | |
europe-west3 |
Франкфурт | первое поколение, второе поколение | energy_savings_leaf |
europe-west6 |
Цюрих | первое поколение, второе поколение | energy_savings_leaf |
europe-west10 |
Берлин | Только 2-е поколение | |
europe-west12 |
Турин | Только 2-е поколение | |
me-central1 |
Доха | Только 2-е поколение | |
me-central2 |
Даммам | Только 2-е поколение | |
northamerica-northeast1 |
Монреаль | первое поколение, второе поколение | energy_savings_leaf |
northamerica-northeast2 |
Торонто | Только 2-е поколение | energy_savings_leaf |
southamerica-east1 |
Сан-Пауло | первое поколение, второе поколение | energy_savings_leaf |
southamerica-west1 |
Сантьяго, Чили | Только 2-е поколение | |
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 |