Cloud Functions является региональным , то есть инфраструктура, на которой работает ваша функция, расположена в определенных регионах и управляется Google, чтобы быть избыточно доступной во всех зонах внутри этих регионов.
При выборе регионов для запуска ваших функций в первую очередь следует учитывать задержку и доступность. Как правило, можно выбирать регионы, близкие к вашим пользователям, но следует также учитывать расположение других продуктов и сервисов , используемых вашим приложением. Использование сервисов в нескольких регионах может повлиять на задержку и стоимость вашего приложения.
По умолчанию функции выполняются в регионе us-central1
. Обратите внимание, что он может отличаться от региона источника событий, например, контейнера Cloud Storage . Подробнее о том, как указать регион, в котором выполняется функция, см. далее на этой странице.
Поддерживаемые регионы
В списках этого раздела значок energy_savings_leaf указывает на то, что электроэнергия для этого региона производится с низким уровнем выбросов углерода. Подробнее см. в разделе «Энергия без выбросов углерода для регионов Google Cloud» .
Ценообразование уровня 1
Cloud Functions доступен в следующих регионах по цене Tier 1 :
Область | Расположение | Поддерживаемые версии продукта | Выбросы CO2 |
---|---|---|---|
africa-south1 | Йоханнесбург | только 2-го поколения | |
asia-east1 | Тайвань | 1-го поколения, 2-го поколения | |
asia-east2 | Гонконг | только 1-го поколения | |
asia-northeast1 | Токио | 1-го поколения, 2-го поколения | |
asia-northeast2 | Осака | 1-го поколения, 2-го поколения | |
europe-north1 | Финляндия | только 2-го поколения | лист_сбережения_энергии |
europe-southwest1 | Мадрид | только 2-го поколения | |
europe-west1 | Бельгия | 1-го поколения, 2-го поколения | лист_сбережения_энергии |
europe-west4 | Нидерланды | только 2-го поколения | |
europe-west8 | Милан | только 2-го поколения | |
europe-west9 | Париж | только 2-го поколения | лист_сбережения_энергии |
me-west1 | Тель-Авив | только 2-го поколения | |
europe-west2 | Лондон | только 1-го поколения | |
us-central1 | Айова | 1-го поколения, 2-го поколения | лист_сбережения_энергии |
us-east1 | Южная Каролина | 1-го поколения, 2-го поколения | |
us-east4 | Северная Вирджиния | 1-го поколения, 2-го поколения | |
us-east5 | Колумбус | только 2-го поколения | |
us-south1 | Даллас | только 2-го поколения | |
us-west1 | Орегон | 1-го поколения, 2-го поколения | лист_сбережения_энергии |
Ценообразование уровня 2
Cloud Functions доступен в следующих регионах по цене Tier 2 :
Область | Расположение | Поддерживаемые версии продукта | Выбросы CO2 |
---|---|---|---|
asia-east2 | Гонконг | только 2-го поколения | |
asia-northeast3 | Сеул | 1-го поколения, 2-го поколения | |
asia-southeast1 | Сингапур | 1-го поколения, 2-го поколения | |
asia-southeast2 | Джакарта | 1-го поколения, 2-го поколения | |
asia-south1 | Мумбаи | только 2-го поколения | |
asia-south2 | Дели, Индия | только 2-го поколения | |
australia-southeast1 | Сидней | 1-го поколения, 2-го поколения | |
australia-southeast2 | Мельбурн | только 2-го поколения | |
europe-central2 | Варшава | 1-го поколения, 2-го поколения | |
europe-west2 | Лондон | только 2-го поколения | |
europe-west3 | Франкфурт | 1-го поколения, 2-го поколения | лист_сбережения_энергии |
europe-west6 | Цюрих | 1-го поколения, 2-го поколения | лист_сбережения_энергии |
europe-west10 | Берлин | только 2-го поколения | |
europe-west12 | Турин | только 2-го поколения | |
me-central1 | Доха | только 2-го поколения | |
me-central2 | Даммам | только 2-го поколения | |
northamerica-northeast1 | Монреаль | 1-го поколения, 2-го поколения | лист_сбережения_энергии |
northamerica-northeast2 | Торонто | только 2-го поколения | лист_сбережения_энергии |
southamerica-east1 | Сан-Паулу | 1-го поколения, 2-го поколения | лист_сбережения_энергии |
southamerica-west1 | Сантьяго, Чили | только 2-го поколения | |
us-west2 | Лос-Анджелес | 1-го поколения, 2-го поколения | |
us-west3 | Солт-Лейк-Сити | 1-го поколения, 2-го поколения | |
us-west4 | Лас-Вегас | 1-го поколения, 2-го поколения |
Функции в определенном регионе определенного проекта должны иметь уникальные (без учета регистра) имена, но функции в разных регионах или проектах могут иметь одно и то же имя.
Лучшие практики по указанию региона
По умолчанию функции запускаются в регионе us-central1
. Обратите внимание, что он может отличаться от региона источника событий, например, контейнера Cloud Storage . Если вам необходимо указать регион, в котором запускается функция, следуйте рекомендациям в этом разделе для каждого типа триггера функции.
Чтобы задать область, в которой выполняется функция, задайте параметр region
в определении функции, как показано:
Node.js
exports.firestoreAsia = onDocumentCreated(
{
document: "my-collection/{docId}",
region: "asia-northeast1",
},
(event) => {},
);
Питон
# 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
. Также обратите внимание, что при указании региона для многих типов фоновых триггеров необходимо указать правильный фильтр событий вместе с регионом. В приведенном выше примере это document
Cloud Firestore , который генерирует событие. Для триггера Cloud Storage фильтром событий может быть bucket
, для триггера Pub/Sub topic
и т. д.
Дополнительные сведения об изменении региона для функции, обрабатывающей производственный трафик, см. в разделе Изменение региона функции.
HTTP и вызываемые клиентом функции
Для HTTP-функций и вызываемых функций мы рекомендуем сначала указать в функции регион назначения или ближайший к нему регион, где ожидается присутствие большинства клиентов, а затем изменить исходную функцию так, чтобы она перенаправляла HTTP-запросы в новую функцию (они могут иметь одинаковые имена). Если клиенты вашей HTTP-функции поддерживают перенаправления, вы можете просто изменить исходную функцию так, чтобы она возвращала код перенаправления HTTP (301) вместе с URL-адресом новой функции. Если ваши клиенты плохо обрабатывают перенаправления, вы можете проксировать запрос из исходной функции в новую, инициировав новый запрос из исходной функции в новую функцию. Последний шаг — убедиться, что все клиенты вызывают новую функцию.
Выбор местоположения вызываемых функций на стороне клиента
Что касается вызываемой функции, настройки вызываемых функций на клиенте должны соответствовать тем же правилам, что и для HTTP-функций. Клиент также может указать регион и обязан это сделать, если функция выполняется в любом регионе, отличном от us-central1
.
Чтобы установить регионы на клиенте, укажите нужный регион при инициализации:
Быстрый
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');
Андроид
private FirebaseFunctions mFunctions;
// ...
mFunctions = FirebaseFunctions.getInstance("europe-west1");
С++
firebase::functions::Functions* functions;
// ...
functions = firebase::functions::Functions::GetInstance("europe-west1");
Единство
firebase.Functions.FirebaseFunctions functions;
functions = Firebase.Functions.FirebaseFunctions.GetInstance("europe-west1");
Фоновые функции
Фоновые функции используют семантику доставки событий по крайней мере один раз, что означает, что при некоторых обстоятельствах они могут получать дублирующиеся события. Поэтому следует реализовать функции так, чтобы они были идемпотентными . Если ваша функция уже идемпотентна, вы можете повторно развернуть её в новом регионе с тем же триггером события и удалить старую функцию после проверки того, что новая функция корректно получает трафик. Во время этого перехода обе функции будут получать события. См. раздел «Изменение региона функции» для получения рекомендуемой последовательности команд для изменения регионов функций.
Если ваша функция в данный момент не является идемпотентной или ее идемпотентность не распространяется за пределы региона, то мы рекомендуем вам сначала реализовать идемпотентность, прежде чем перемещать функцию.
Оптимальные рекомендации по региону различаются в зависимости от типа триггера события:
Тип триггера | Рекомендация региона |
---|---|
Cloud Firestore | Ближайший регион к местоположению экземпляра Cloud Firestore (см. следующий раздел) |
Realtime Database | Всегда us-central1 |
Cloud Storage | Ближайший регион к расположению контейнера Cloud Storage (см. следующий раздел) |
Другие | Если вы взаимодействуете с экземпляром Realtime Database , экземпляром Cloud Firestore или контейнером Cloud Storage внутри функции, рекомендуемый регион такой же, как и при вызове функции одним из этих ресурсов. В противном случае используйте регион по умолчанию us-central1 . Функции, подключенные к 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 |