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-е поколение | энергосбережение_лист |
europe-west4 | Нидерланды | Только для 2-го поколения | |
europe-west8 | Милан | Только для 2-го поколения | |
europe-west9 | Париж | Только для 2-го поколения | энергосбережение_лист |
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-е поколение | энергосбережение_лист |
Ценообразование второго уровня
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-е поколение | энергосбережение_лист |
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) => {},
);
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 . Также обратите внимание, что при указании региона для многих типов фоновых триггеров вам потребуется указать правильный фильтр событий вместе с регионом. В приведенном выше примере это 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');
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");
Фоновые функции
Фоновые функции используют семантику доставки событий «как минимум один раз», что означает, что при определенных обстоятельствах они могут получать дублирующиеся события. Поэтому следует реализовывать функции как идемпотентные . Если ваша функция уже идемпотентна, вы можете повторно развернуть ее в новом регионе с тем же триггером событий и удалить старую функцию после того, как убедитесь, что новая функция корректно принимает трафик. Во время этого перехода обе функции будут получать события. См. раздел «Изменение региона функции» для рекомендуемой последовательности команд для смены региона функций.
Если ваша функция в данный момент не является идемпотентной или её идемпотентность не распространяется за пределы указанного региона, мы рекомендуем сначала реализовать идемпотентность, прежде чем перемещать функцию.
Рекомендации по оптимальному региону различаются в зависимости от типа триггера события:
| Тип триггера | Рекомендации по региону |
|---|---|
| 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 |