1. Обзор
Google Cloud Functions — это бессерверная вычислительная платформа, управляемая событиями. Облачные функции позволяют вам писать код, не беспокоясь о предоставлении ресурсов или масштабировании для удовлетворения меняющихся требований.
Облачные функции, написанные на Javascript, выполняются в среде Node.js на Google Cloud Platform. Вы можете запустить свою облачную функцию в любой стандартной среде выполнения Node.js, чтобы обеспечить переносимость и локальное тестирование.
Прохождение
В этой лаборатории кода вы создадите облачную функцию для Node.js, которая сообщает, является ли указанная температура приемлемой или слишком высокой. Вы будете создавать, тестировать и отлаживать свою облачную функцию с помощью кода Visual Studio на своем локальном компьютере. Наконец, вы развернете свою функцию в Google Cloud Platform.
Что вы узнаете
- Фреймворк функций для Node.js.
- Создайте и протестируйте облачную функцию HTTP локально.
- Отладьте функцию HTTP на своем локальном компьютере.
- Разверните функцию HTTP на своем локальном компьютере.
2. Настройка и требования
Предварительные условия
- Облачный SDK
- Код Visual Studio
- Node.js 8.6.0 или выше (чтобы установить Node.js, используйте nvm , чтобы проверить свою версию, запустите node –version)
- Завершение руководства «Моя первая функция: Node.js»
Затраты
Хотя для этой лаборатории кода требуется только один вызов развернутой облачной функции, вам все равно следует обратиться к информации о ценах API облачных функций , чтобы понять, как работает выставление счетов.
Хотя многие API Google можно использовать бесплатно, использование Google Cloud Platform (т. е. ее продуктов и API) не является бесплатным. Для использования облачных функций вам понадобится активная учетная запись для выставления счетов. Имейте в виду, что некоторые продукты Google Cloud Platform (GCP) имеют уровень «Всегда бесплатно», превышение которого необходимо для выставления счетов. Для целей лаборатории кода каждый вызов облачных функций учитывается в рамках этого уровня бесплатного пользования. Пока вы остаетесь в пределах его совокупного лимита (в течение каждого месяца), вы не должны нести никаких расходов.
3. Установите платформу функций для Node.js.
Платформа функций для Node.js — это платформа FaaS (функция как услуга) с открытым исходным кодом для написания переносимых функций Node.js, которую предлагает вам команда Google Cloud Functions.
Платформа функций позволяет писать облегченные функции, которые выполняются в самых разных средах, в том числе:
- Облачные функции Google
- Ваша локальная машина разработки
- Cloud Run и Cloud Run на GKE
- Knative-среды
Создайте новое приложение node.js.
npm init
Принимая значения по умолчанию, обязательно используйте index.js
в качестве точки входа для вашего приложения.
Теперь установите Functions Framework для Node.js.
npm install @google-cloud/functions-framework
Откройте свой package.json. Убедитесь, что вы видите структуру функций, указанную в качестве зависимости, как показано в примере ниже.
"dependencies": { "@google-cloud/functions-framework": "^1.7.1" }
Теперь Functions Framework успешно установлен. Теперь вы готовы создать свою облачную функцию.
4. Создайте и протестируйте облачную функцию HTTP локально.
Создайте локальную облачную функцию
В этом разделе вы создадите и протестируете функцию HTTP, которая отвечает на запросы HTTP.
Создайте новый файл с именем index.js
в том же каталоге, что и ваш файл package.json.
Добавьте следующее:
exports.validateTemperature = async (req, res) => { try { if (req.body.temp < 100) { res.status(200).send("Temperature OK"); } else { res.status(200).send("Too hot"); } } catch (error) { //return an error console.log("got error: ", error); res.status(500).send(error); } };
Теперь вы готовы протестировать функцию.
Функция тестирования в коде Visual Studio
С этого момента эта лаборатория кода использует интегрированный терминал в Visual Studio Code.
В Visual Studio Code откройте окно терминала.
Выполните следующую команду:
node node_modules/@google-cloud/functions-framework --target=validateTemperature
Эта команда запускает локальный сервер, который готов вызвать функцию validateTemperature
, когда сервер получает HTTP-запрос.
В окне терминала вы должны увидеть следующий вывод:
Serving function... Function: validateTemperature URL: http://localhost:8080/
Создайте второе окно терминала в VS Code, щелкнув значок New Terminal
плюс» на панели окна терминала. Вы будете переключаться между этими двумя окнами терминала: первое для обслуживания функции и второе для вызова функции с помощью Curl.
Вы можете переключаться между окнами терминала, используя раскрывающийся список. Если окно терминала в данный момент выполняет функцию, раскрывающийся список ссылается на нее как node
. В противном случае это относится к zsh
(или к используемой вами оболочке).
Во втором окне терминала выполните следующую команду, чтобы отправить полезную нагрузку температуры 50 на локальный сервер, обслуживающий функцию validateTemperature
.
curl -X POST http://localhost:8080 -H "Content-Type:application/json" -d '{"temp":"50"}'
Вы должны получить следующий ответ от облачной функции:
Temperature OK
Во втором окне терминала снова протестируйте функцию, отправив полезную нагрузку «слишком высокая» температура, как показано ниже:
curl -X POST http://localhost:8080 -H "Content-Type:application/json" -d '{"temp":"120"}'
Вы должны получить следующий ответ от облачной функции:
Too hot
Наконец, протестируйте функцию, вызвав ее с отсутствующими полезными данными.
curl -X POST http://localhost:8080
Вы должны получить следующий ответ от облачной функции:
Too hot
В идеале функция не должна возвращать значение «слишком жарко», если температура не указана. Вы обнаружили ошибку в коде.
Обязательно остановите запуск вашей функции, нажав Ctrl + C
в первом окне терминала, обслуживающем вашу функцию.
5. Отладка функции HTTP на локальном компьютере.
Откройте палитру команд в Visual Studio Code. Если вы используете Mac, используйте Cmd + Shift + P
Если вы используете Windows, используйте Ctrl + Shift + P.
Введите auto attach
в палитре команд и выберите верхний элемент в списке.
Для этой кодовой лаборатории выберите Only With Flag
, как показано на рисунке ниже:
Теперь перезагрузите окно терминала, которое вы использовали в VS Code, чтобы выполнять свою функцию, наведя курсор на значок предупреждения, который появляется в дальнем правом углу.
Нажмите Relaunch Terminal
.
В перезагруженном окне терминала перезапустите структуру функций для выполнения вашей функции, используя следующую команду:
node --inspect node_modules/.bin/functions-framework --target=validateTemperature
где флаг --inspect
сообщает Node.js о необходимости прослушивания клиента отладки. Дополнительную информацию см. в документации Node по отладке .
Обратите внимание, что вы используете node_modules/ .bin /functions-framework вместо node_modules/ @google-cloud /functions-framework. Для использования режима проверки вам необходимо использовать исполняемый файл с автоматическими символическими ссылками в /node_modules/.bin.
На этот раз вы должны увидеть оранжевую строку состояния в VS Code, указывающую, что отладчик подключен.
Установите точку останова в строке 3, щелкнув внутри поля слева от номера строки.
Значок точки останова должен загореться ярко-красным светом, указывая на то, что эта строка кода доступна отладчику.
Во втором окне терминала нажмите точку останова, выполнив следующую команду Curl.
curl -X POST http://localhost:8080
Над строкой 3 появится желтая подсветка. Эта подсветка указывает, что эта строка является текущим оператором, оцениваемым отладчиком.
Наведите указатель мыши на переменную temp, чтобы убедиться, что ее содержимое undefined
, поскольку запрос не предоставил полезную информацию о температуре.
Щелкните значок перехода, чтобы выполнить следующий оператор.
Вы увидите, что текущий оператор перейдет к другой части оператора if.
Для этой демонстрации вы можете предположить, что спецификация требует, чтобы все запросы отправляли показания температуры. В том маловероятном случае, когда показания температуры не предоставляются, функция должна выдать исключение.
Нажмите кнопку «Отключить», чтобы отключить отладчик.
В первом окне терминала прекратите выполнение функции, нажав Ctrl + C
Обновите свою функцию, добавив оператор if для выдачи исключения, если температура не определена, как показано ниже:
exports.validateTemperature = async (req, res) => { try { // add this if statement below line #2 if (!req.body.temp) { throw "Temperature is undefined"; } ...
В первом окне терминала снова запустите облачную функцию, выполнив следующую команду без флага –inspect, чтобы избежать подключения отладчика.
node node_modules/@google-cloud/functions-framework --target=validateTemperature
Убедитесь, что исключение создано, выполнив следующую команду во втором окне терминала:
curl -X POST http://localhost:8080
Вы должны увидеть следующий результат вашего запроса:
Temperature is undefined
В первом окне терминала вы также увидите ошибку, зарегистрированную вашей функцией.
Serving function... Function: validateTemperature URL: http://localhost:8080/ got error: Temperature is undefined
Теперь вы можете остановить выполнение функции, нажав Ctrl + C в первом окне терминала.
6. Разверните функцию HTTP со своего локального компьютера в Google Cloud.
Теперь, когда вы создали, протестировали и отладили облачную функцию на своем локальном компьютере, вы готовы развернуть ее в Google Cloud.
Убедитесь, что вы используете проект, созданный на шаге 2, локально, выполнив следующую команду:
gcloud config get-value project
Если проект, указанный на шаге 2, не является активной конфигурацией, выполните следующую команду:
gcloud config set project <project-name-created-step-2>
В любом окне терминала выполните следующую команду:
gcloud functions deploy validateTemperature --trigger-http --runtime nodejs12 --allow-unauthenticated
где параметры объясняются следующим образом:
-
deploy validateTemperature
— подкоманда gcloud для развертывания облачной функции с именемvalidateTemperature
с точкой входа с именемvalidateTemperature
-
--trigger-http
— тип триггерного события -
--runtime nodejs12
— целевая среда выполнения этой функции -
--allow-unauthenticated
— разрешает публичный доступ для вызова функции
Вам будет предложено включить API облачных функций. Введите y
, чтобы включить API.
API [cloudfunctions.googleapis.com] not enabled on project [1057316433766]. Would you like to enable and retry (this will take a few minutes)? (y/N)? y
После завершения развертывания вы увидите следующее:
Deploying function (may take a while - up to 2 minutes)...done. availableMemoryMb: 256 buildId: <your-build-id> entryPoint: validateTemperature httpsTrigger: url: https://<your-region-and-project>.cloudfunctions.net/validateTemperature ...
В окне терминала используйте Curl для вызова этой общедоступной конечной точки.
curl -X POST https://<your-region-and-project>.cloudfunctions.net/validateTemperature -H "Content-Type:application/json" -d '{"temp":"50"}'
и подтвердите, что ваша облачная функция была успешно развернута, проверив соответствующий ответ.
Temperature OK
7. Очистка
Чтобы избежать непреднамеренных расходов, например, эта облачная функция случайно вызывается больше раз, чем ежемесячно выделено количество вызовов облачной функции на уровне бесплатного пользования , вы можете либо удалить облачную функцию, либо удалить проект, созданный на шаге 2.
Чтобы удалить облачную функцию, перейдите в облачную консоль облачных функций по адресу https://console.cloud.google.com/functions/. Убедитесь, что проект, созданный вами на шаге 2, является текущим выбранным проектом.
Выберите функцию validateTemperature, которую вы развернули на шаге 6. Затем нажмите «Удалить».
Если вы решите удалить весь проект, вы можете перейти на https://console.cloud.google.com/cloud-resource-manager , выбрать проект, созданный на шаге 2, и нажать «Удалить». Если вы удалите проект, вам придется изменить проекты в Cloud SDK. Вы можете просмотреть список всех доступных проектов, запустив список проектов gcloud.
8. Поздравляем!
Поздравляем с завершением работы над кодом. Вы можете узнать больше о том, как Cloud Functions поддерживает среду выполнения Node.js и как локальная отладка работает с Cloud Functions .
Что мы рассмотрели
- Фреймворк функций для Node.js.
- Создайте и протестируйте облачную функцию HTTP локально.
- Отладка функции HTTP на локальном компьютере.
- Разверните функцию HTTP на своем локальном компьютере.