Cloud Functions являются региональными . Это означает, что инфраструктура, в которой выполняется ваша функция, расположена в определенных регионах и управляется Google, чтобы обеспечить резервную доступность во всех зонах в этих регионах .
При выборе регионов для запуска ваших функций в первую очередь следует учитывать задержку и доступность. Обычно вы можете выбирать регионы, близкие к вашим пользователям, но вам также следует учитывать расположение других продуктов и услуг , которые использует ваше приложение. Использование сервисов в нескольких регионах может повлиять на задержку вашего приложения, а также на цены .
По умолчанию функции выполняются в регионе us-central1
. Обратите внимание, что это может отличаться от региона источника событий, например сегмента Cloud Storage . Узнайте, как указать регион, в котором выполняется функция, далее на этой странице.
Поддерживаемые регионы
В списках этого раздела значок Energy_savings_leaf указывает, что электроэнергия для этого региона производится с низким уровнем выбросов углекислого газа. Дополнительную информацию см. в разделе «Безуглеродная энергия для регионов Google Cloud» .
Цены уровня 1
Cloud Functions доступны в следующих регионах по ценам уровня 1 :
Область | Расположение | Поддерживаемые версии продукта | Выбросы CO 2 |
---|---|---|---|
asia-east1 | Тайвань | 1-го поколения, 2-го поколения | |
asia-east2 | Гонконг | только 1-го поколения | |
asia-northeast1 | Токио | 1-го поколения, 2-го поколения | |
asia-northeast2 | Осака | 1-го поколения, 2-го поколения | |
europe-north1 | Финляндия | только 2-е поколение | Energy_savings_leaf |
europe-southwest1 | Мадрид | только 2-е поколение | |
europe-west1 | Бельгия | 1-го поколения, 2-го поколения | Energy_savings_leaf |
europe-west4 | Нидерланды | только 2-е поколение | |
europe-west8 | Милан | только 2-е поколение | |
europe-west9 | Париж | только 2-е поколение | Energy_savings_leaf |
me-west1 | Тель-Авив | только 2-е поколение | |
europe-west2 | Лондон | только 1-го поколения | |
us-central1 | Айова | 1-го поколения, 2-го поколения | Energy_savings_leaf |
us-east1 | Южная Каролина | 1-го поколения, 2-го поколения | |
us-east4 | Северная Вирджиния | 1-го поколения, 2-го поколения | |
us-east5 | Колумбус | только 2-е поколение | |
us-south1 | Даллас | только 2-е поколение | |
us-west1 | Орегон | 1-го поколения, 2-го поколения | Energy_savings_leaf |
Цены уровня 2
Cloud Functions доступны в следующих регионах по ценам уровня 2 :
Область | Расположение | Поддерживаемые версии продукта | Выбросы CO 2 |
---|---|---|---|
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-го поколения | Energy_savings_leaf |
europe-west6 | Цюрих | 1-го поколения, 2-го поколения | Energy_savings_leaf |
europe-west10 | Берлин | только 2-е поколение | |
europe-west12 | Турин | только 2-е поколение | |
me-central1 | Доха | только 2-е поколение | |
me-central2 | Даммам | только 2-е поколение | |
northamerica-northeast1 | Монреаль | 1-го поколения, 2-го поколения | Energy_savings_leaf |
northamerica-northeast2 | Торонто | только 2-е поколение | Energy_savings_leaf |
southamerica-east1 | Сан-Паулу | 1-го поколения, 2-го поколения | Energy_savings_leaf |
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")
Цель-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 |