Cloud Functions — это региональная инфраструктура , то есть инфраструктура, на которой работает ваша функция, расположена в определенных регионах и управляется Google для обеспечения резервной доступности во всех зонах этих регионов.
При выборе регионов для запуска ваших функций в первую очередь следует учитывать задержку и доступность. Как правило, можно выбирать регионы, расположенные близко к пользователям, но также следует учитывать расположение других продуктов и услуг , которые использует ваше приложение. Использование сервисов в нескольких регионах может повлиять на задержку вашего приложения, а также на ценообразование .
По умолчанию функции выполняются в регионе us-central1 . Обратите внимание, что он может отличаться от региона источника событий, например, хранилища Cloud Storage . Подробнее о том, как указать регион выполнения функции, вы узнаете далее на этой странице.
Поддерживаемые регионы
В списках этого раздела значок energy_savings_leaf указывает на то, что электроэнергия для этого региона производится с низким уровнем выбросов углекислого газа. Для получения дополнительной информации см. раздел «Энергия без выбросов углекислого газа для регионов Google Cloud» .
Ценообразование первого уровня
Cloud Functions доступен в следующих регионах по тарифам уровня 1 :
| Область | Расположение | Поддерживаемые версии продукта | Выбросы CO₂ |
|---|---|---|---|
africa-south1 | Йоханнесбург | Только для 2-го поколения | |
asia-east1 | Тайвань | 1-е поколение, 2-е поколение | |
asia-east2 | Гонконг | Только для первого поколения | |
asia-northeast1 | Токио | 1-е поколение, 2-е поколение | |
asia-northeast2 | Осака | 1-е поколение, 2-е поколение | |
europe-north1 | Финляндия | Только для 2-го поколения | энергосбережение_лист |
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 | Лондон | Только для первого поколения | |
us-central1 | Айова | 1-е поколение, 2-е поколение | энергосбережение_лист |
us-east1 | Южная Каролина | 1-е поколение, 2-е поколение | |
us-east4 | Северная Вирджиния | 1-е поколение, 2-е поколение | |
us-east5 | Колумб | Только для 2-го поколения | |
us-south1 | Даллас | Только для 2-го поколения | |
us-west1 | Орегон | 1-е поколение, 2-е поколение | energy_savings_leaf |
Ценообразование второго уровня
Cloud Functions доступен в следующих регионах по тарифам уровня 2 :
| Область | Расположение | Поддерживаемые версии продукта | Выбросы CO₂ |
|---|---|---|---|
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) => {},
);
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
You can specify multiple regions by passing multiple comma-separated region strings in region . Also note that, when specifying a region for many background trigger types, you'll need to specify the correct event filter along with the region. In the example above, this is the Cloud Firestore document that emits the event. For a Cloud Storage trigger the event filter could be bucket ; for a Pub/Sub trigger it would be topic , and so on.
Дополнительную информацию об изменении региона для функции, обрабатывающей производственный трафик, см. в разделе «Изменение региона функции».
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');
Android
private FirebaseFunctions mFunctions;
// ...
mFunctions = FirebaseFunctions.getInstance("europe-west1");
C++
firebase::functions::Functions* functions;
// ...
functions = firebase::functions::Functions::GetInstance("europe-west1");
Единство
firebase.Functions.FirebaseFunctions functions;
functions = Firebase.Functions.FirebaseFunctions.GetInstance("europe-west1");
Фоновые функции
Background functions adopt an at-least-once event delivery semantic, which means that under some circumstances they may receive duplicate events. So, you should implement functions to be idempotent . If your function is already idempotent, then you can redeploy the function in the new region with the same event trigger and remove the old function after you verify that the new function is correctly receiving traffic. During this transition, both functions will receive events. See change a function's region for the recommended sequence of commands to change regions for functions.
Если ваша функция в данный момент не является идемпотентной или её идемпотентность не распространяется за пределы указанного региона, мы рекомендуем сначала реализовать идемпотентность, прежде чем перемещать функцию.
Рекомендации по оптимальному региону различаются в зависимости от типа триггера события:
| Тип триггера | Рекомендации по региону |
|---|---|
| Cloud Firestore | Ближайший регион к местоположению экземпляра Cloud Firestore (см. следующий раздел) |
| Realtime Database | Тот же регион, что и экземпляр Realtime Database |
| 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 |