Это была насыщенная неделя для безсерверных вычислений в Google Cloud Next '18 в Сан-Франциско. В дополнение к обновлениям, которые мы поделились с шоу, мы рассмотрели технологию облачных функций в более чем 15 технических сессиях. Есть много вещей для распаковки, начиная от новых выпусков функций и заканчивая передовыми методами. Этот пост — это одноразовое резюме функций облака: что нового, инструкции по регистрации для ранних функций доступа и некоторые советы о том, где вы можете найти дополнительную информацию о полезных технических сессиях и проницательности из следующего «18».
Облачные функции — это серверная платформа, управляемая событиями Google Cloud, которая предлагает гибкую и быструю разработку облачных приложений. Мы запустили Cloud Function для бета-версии в прошлом году в Google Cloud Next'17 с использованием среды исполнения Node.js и важных функций, таких как HTTP / S, что позволяет вам развернуть функцию и вызвать ее напрямую без каких-либо дополнительных услуг. Cloud Function beta также поставляется с мелкозернистым ценообразованием, поэтому вы платите только за то, что ваш код работает, выставленный счету до ближайших 100 миллисекунд. Облачные функции также были разработаны, чтобы хорошо работать с существующими облачными платформами Google (GCP), такими как Cloud Storage, Cloud Pub / Sub и Stackdriver. В то время между нами и сейчас мы много работаем, добавляя новые возможности на платформу и повышая ее надежность и производительность.
В течение следующего '18 мы объявили, что облачные функции теперь в целом доступны и готовы к производству, с предсказуемым сервисом, гарантированным SLA и глобальным охватом с новыми регионами в Европе и Азии. Вот что еще нового.
Теперь вы можете писать функции облаков с помощью Node 8, который поддерживает поддержку async / await и новую подпись функции. Облачные функции теперь предоставляют данные и контекст, а не событие, и вы можете использовать ключевое слово ожидания для ожидания результатов асинхронных операций. Это делает гораздо лучшую ментальную модель для работы с несколькими асинхронными операциями. Вот посмотрите на различия кода между порядком Node 6 и Node 8:
Current (Node 6) behavior
exports.helloCallback = (event, callback) => {
const payload = event.data.data;
doSomething(payload, callback);
};
exports.helloPromise = (event) => {
const payload = event.data.data;
return doSomethingWithAPromise(payload)
};
New (Node 8+) behavior
// Note the new (optional) context object
exports.helloPubsub = async (data, context) => {
return await doSomethingAsynchronous(data)
};
// HTTP Functions are unchanged, but also support async/await
exports.helloHTTP = async (req, res) => {
return await doSomethingAsynchronous(req)
};
Вы также можете теперь записывать облачные функции с помощью Python 3.7. Как и в случае с узлом, вы получаете данные и контекст для своих фоновых функций и запрашиваете HTTP. Python HTTP-функции основаны на популярной микрофрейме Flask, которая позволяет вам быстро и быстро вставать и работать. Вот посмотрите на запрос к фляге:
def hello_pubsub(data, context):
return do_something(data)
def hello_http(request):
return do_something(request)
Запросы основаны на flask.Request и ответы просто должны быть совместимы с flask.make_response. Как и в случае с узлом, вы получаете данные (dict) с фоновыми функциями и контекстом Python (google.cloud.functions.Context). Для завершения сигнала вам просто нужно вернуться из вашей функции или вызвать исключение, а обработка ошибок Stackdriver начнется. И, подобно Node (package.json), Cloud Function автоматически выполнит установку всех ваших зависимостей Python (требования .txt) и построить в облаке.
Облачные функции для Firebase также доступны и имеют полную поддержку узла 8, включая ECMAScript 2017 и async / await. Этот выпуск также поставляется с дополнительными подробными элементами управления для параметров конфигурации времени выполнения, включая регион, память и тайм-аут, что позволяет вам точно настраивать поведение ваших приложений. Здесь вы можете найти более подробную информацию.
События Firebase (Analytics, Firestore, Realtime Database, Authentication) также доступны непосредственно в консоли Cloud Functions на GCP. Это обеспечивает дополнительную степень гибкости в вашем стеке приложений, позволяя вам запускать ваши функции в ответ на события Firebase непосредственно из вашего проекта GCP.
Мы также перезаряжаем базовую операционную систему Cloud Functions на Ubuntu 18.04 LTS, чтобы расширить объем доступных библиотек. В дополнение к imagemagick, доступному с момента запуска бета-версии, теперь вы получаете доступ к дополнительным системным библиотекам, таким как ffmpeg и libcairo2, а также ко всему, что требуется для запуска Chrome без Chrome. Например, теперь вы можете обрабатывать видео и снимать скриншоты веб-страниц в Chrome из облачных функций.
Теперь вы можете передать конфигурацию своим функциям, указав пары ключ-значение, привязанные к функции, но не существующие в вашем исходном коде. Переменные среды устанавливаются во время развертывания с использованием аргумента -set-env-vars и вводятся в среду во время выполнения. Здесь вы можете найти более подробную информацию.
cloud.google.com/functions/docs/env-var
Скоро в облачные функции
У нас также есть много новых функций, которые скоро появятся в Cloud Function. Вот что вы можете ожидать:
Масштабирование
С добавлением управления масштабированием -max-экземпляров вы можете ограничить количество экземпляров для каждой функции, чтобы ограничить трафик. Это может помочь справиться с внезапными сценариями роста трафика, когда функции облачности быстро масштабируются и перегружают базу данных или общую приоритизацию между более и менее важными частями вашей системы. Подпишитесь на альфа здесь.
Безсерверное планирование
С Cloud Scheduler вы сможете запланировать облачные функции до одноминутных интервалов, вызываемых через HTTP (S) или Pub / Sub. Это позволяет выполнять функции Cloud в повторяющемся расписании, что особенно полезно для таких вещей, как ежедневное создание отчетов или регулярная обработка очередей мертвых букв. Подпишитесь на альфа здесь.
Вычислить доступ VM VM
Теперь вы можете подключиться к компьютерам Compute Engine, работающим в частной сети, используя опцию --connected-vpc. Это обеспечивает прямое подключение для вычисления ресурсов во внутреннем диапазоне IP-адресов. Подпишитесь на альфа здесь.
Контроль безопасности IAM
Облачные функции упрощают показ конечной точки HTTP (ов): просто разверните свою функцию с помощью триггера HTTP, и мы предоставим выделенный URL HTTPS. Новая роль IAM для функций Cloud Function Invoke позволяет вам добавить защиту IAM к этому URL-адресу, чтобы вы могли контролировать, кто может вызывать эту функцию, используя те же элементы управления безопасностью, которые вы используете в других местах Cloud Platform. Подпишитесь на альфа здесь.
Бесконтактные контейнеры
В безсерверных контейнерах мы предоставляем одну и ту же базовую инфраструктуру, которая обеспечивает функции облачных функций, но вы сможете просто предоставить изображение Docker в качестве входных данных. Это позволит вам развернуть произвольные среды выполнения и произвольные системные библиотеки в произвольных дистрибутивах Linux, сохраняя при этом те же самые серверные характеристики, что и облачные функции. Подпишитесь на альфа здесь.