Местоположения 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 Йоханнесбург Только 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