Давайте попробуем создать и развернуть облачную функцию Google с помощью Go!

Google Cloud недавно добавила язык Go в свой список сред выполнения для бессерверной вычислительной платформы Cloud Functions. Среда выполнения Go использует версию 1.11 и в настоящее время находится в стадии бета-тестирования, но доступна для всех. Если он будет следовать по пути среды выполнения Python и Node.js 8, я ожидаю, что он проведет короткое время в бета-версии, прежде чем будет переведен в общую доступность.

В этой статье я кратко расскажу, как написать и развернуть простую функцию на Go.

Кодирование

Давайте воспользуемся средой выполнения Go для размещения функции HTTP, которая выполняет ту же задачу, что и моя Демо-версия Node.js 8 Cloud Functions (или, если вы предпочитаете Python 3, взгляните на этот пример). Я воспользуюсь API randomuser.me для вывода объекта JSON, представляющего данные об одном пользователе, а затем добавлю один дополнительный ключ с именемgenerator

Здесь я использую модель функции HTTP (в отличие от фоновой функции, которая может быть вызвана событием, например сообщением pub / sub или изменением файла в сегменте Google Cloud Storage). В этой модели ожидается предоставление функции, которая может принимать два параметра: http.ResponseWriter и указатель на http.Request.

При развертывании функция будет привязана к URL-адресу. Когда что-то запрашивает этот URL, вызывается функция. Он должен выполнить всю необходимую работу, прежде чем что-то вернуть через http.ResponseWriter.

В этом примере тело функции захватывает документ JSON из randomuser.me, демаршалирует его, а затем получает первый объект из массива «results». Я добавляю дополнительный ключ с именем generator и устанавливаю его значение google-cloud-function.

Я не буду здесь вдаваться в подробности обработки произвольного JSON в Go. Если интересно, то предлагаю прочитать эту статью, которая мне помогла.

Развертывание

При развертывании этой функции Google необходимо знать, что она предназначена для среды выполнения Go. Для этого мне нужно установить последние gcloud бета-команды:

$ gcloud components update
$ gcloud components install beta

Развертывание простое (используйте команды beta и явно укажите среду выполнения Go):

$ gcloud beta functions deploy getUserDetails --runtime go111 --entry-point F --trigger-http --project <projectId>

Где <projectId> - это идентификатор моего проекта Google Cloud. Функцию можно вызвать, просто посетив ее URL-адрес, который будет выглядеть примерно так:

https://<region>-<projectId>.cloudfunctions.net/getUserDetails

<region> и <projectId> будут зависеть от настройки проекта Google Cloud. Команда gcloud отображает полный URL-адрес вызова в конце успешного развертывания.

Результат выглядит так:

Консоль Cloud Functions также показывает, что функция использует среду выполнения Go:

Вот и все!

Если вы хотите использовать или изучить код из этой статьи, не стесняйтесь: я выложил его для вас на GitHub. Объявление Google о бета-поддержке Go in Cloud Functions можно прочитать здесь. Объявление касается и других тем, которые могут быть интересны: использование кода библиотеки и фоновая разработка облачных функций на Go.

Я потратил время на изучение этой темы, помогая создавать функции для Zesty.io, системы управления контентом SaaS, работающей в Google Cloud. Спасибо за чтение, дайте мне подписаться, если вы хотите увидеть больше в будущем! Я пишу о различных технологиях, включая Node.js, Go, Python, Raspberry Pi и Amazon Alexa.