Запуск бессерверного JS-проекта с GitLab
Возможно, вы слышали о таких бессерверных FaaS-решениях, как AWS Lambda. Рассказываем, как это работает на примере запуска JavaScript-проекта с GitLab.
Идея сводится к написанию кода как набора дискретных функций, которые могут вызываться различными событиями. Заботы о подготовке сервера, масштабирование, управление внутренним стеком и другие операционные задачи абстрагируются. Это приводит к значительной экономии средств, поскольку вычислительные ресурсы предоставляются по требованию.
Хотите узнать секрет бессерверности, не выполнив ни одной команды в терминале? Всё что нужно – учётные записи GitLab и AWS.
Создание проекта
Для начала создадим
проект с помощью бессерверного шаблона. Открываем страницу нового
проекта и выбираем вкладку Create
from template
. Прокручиваем вниз и выбираем шаблон Serverless
Framework/JS
.
Называем проект, создаём с помощью Create project
.
Настройка учётной записи AWS
Проект создан, передаём доступ в AWS, чтобы его развернуть. Открываем консоль AWS, переходим в раздел IAM.
Здесь выбираем в левой колонке Users
и создаём нового пользователя
с помощью кнопки Add user
в верхней части списка.
Даём пользователю имя, например, gitlab-serverless
. Прежде чем нажать Next
, убедитесь, что включен флажок Programmatic access
.
Теперь нужно
предоставить пользователю соответствующие права для развёртывания бессерверных
функций. На странице Permissions
выбираем Attach existing policies directly
и нажимаем Create policy
– откроется новое окно.
Здесь нужно выбрать вкладку "JSON" и вставить следующее:
Эта политика является
примером, охватывающим практически всё, что может понадобиться бессерверной
платформе на AWS. Но большая её часть даже не будет использована. Можно ограничить платформу в соответствии с вашими нуждами и требованиями безопасности. Как минимум
понадобится доступ: cloudformation
, iam
, lambda
, logs
и функции s3
.
Нажимаем Review Policy
, придумываем имя, например, GitLabServerlessPolicy
. Кликаем Create
policy
.
После этого возвращаемся во вкладку Add user
и находим недавно созданную политику (возможно,
потребуется нажать значок Refresh
). Устанавливаем флажок рядом
с этой политикой и нажимаем Next
.
Жмём на Next: Tags
или переходим к обзору. Последняя страница должна выглядеть следующим образом:
После нажатия кнопки Create user
будет показана страницу с учётными данными для доступа к
новой учётной записи AWS. Выбираем Show
рядом с secret
access key
и копируем его вместе с ID в укромное место.
Ввод учётных данных AWS
Вернёмся к GitLab. Нам
нужно ввести данные в настройки CI/CD нашего проекта. Выберите Settings
-> CI/CD
в левом меню.
На этой странице необходимо развернуть раздел с переменными и ввести учётные данные AWS:
Используйте
AWS_ACCESS_KEY_ID
и AWS_SECRET_ACCESS_KEY
в качестве ключей для двух значений,
скопированных из AWS на предыдущем шаге. Не забудьте нажать кнопку Save
variables
.
Развёртывание первой функции AWS Lambda
Теперь пришло время развернуть проект. Если вы делаете это на gitlab.com, у вас уже есть доступ к GitLab раннеру на 2000 бесплатных минут CI пайплайна. Если нет, то нужно настроить раннер.
Перейдите в меню CI/CD
-> Pipelines
слева и нажмите Run Pipeline
. Для
развлечения давайте введём переменную окружения с ключом A_VARIABLE
и дадим ей
любое значение. Это будет использоваться нашей функцией.
Нажимаем Run
Pipeline
, видим, как наши задания начинают выполняться. Этот
шаблон проекта содержит тесты, которые будут автоматически стартовать при
каждом запуске пайплайна. После их завершения задание "production"
задеплоит код в AWS Lambda и создаст страницу на GitLab Pages. Через несколько
минут процесс должен завершиться, и мы сможем посетить Settings ->
Pages
, чтобы увидеть ссылку, куда все развернулось.
В результате видим там следующее:
Введите значение и нажмите Run function
. Этот инпут отправится в бессерверную функцию, результат будет выведен в поле Function Output
. Обратите внимание, что здесь также присутствует значение среды, которое мы предоставили с помощью ключа A_VARIABLE
.
Внесение изменений
Как насчёт простого калькулятора? Откройте Web IDE и внесите следующие изменения.
Внутри src/handler.js
добавьте следующую
функцию:
Откройте public/index.html
и замените его на
следующее:
Наконец, в serverless.yml
добавьте функцию "add" под "hello":
Выполните коммит в
главную ветку. Это автоматически приведёт к запуску нового пайплайна. Можно посетить CI/CD -> Pipelines
и посмотреть, как это работает.
После завершения развёртывания страница проекта должна выглядеть следующим образом:
Вуаля, мы только что создали вашу собственную бессерверную функцию и развернули её без единой команды в терминале.