Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
    • Сокращатель ссылок
    • Ввод данных в системы хранения
    • Хранение журналов работы приложения
    • Развертывание веб-приложения с использованием Java Servlet API
    • Разработка Slack-бота
    • Разработка Telegram-бота
    • Разработка пользовательской интеграции в API Gateway
    • Разработка CRUD API для сервиса фильмов
    • Построение пайплайна CI/CD в GitLab
    • Работа с API-шлюзом по протоколу WebSocket
    • Создание интерактивного serverless-приложения с использованием WebSocket
    • Автоматическое копирование объектов из одного бакета Object Storage в другой
    • Визуализация логов в Grafana с помощью плагина Cloud Logging
    • Канареечный релиз функции Cloud Functions
    • Интерактивная отладка функций Cloud Functions
    • Создание функции Node.js с помощью TypeScript
    • Запуск контейнерного приложения в Serverless Containers
    • Передача событий Yandex Cloud Postbox в Data Streams и их анализ с помощью DataLens
    • Использование API Gateway для настройки синтеза речи в SpeechKit
    • Подключение к YDB из функции Cloud Functions на Python
    • Подключение к базе данных YDB из функции Cloud Functions на Node.js
    • Защита API Gateway при помощи Smart Web Security
    • Развертывание веб-приложения с JWT-авторизацией в API Gateway и аутентификацией в Firebase
    • Автоматическая загрузка данных в Yandex SpeechSense с помощью Yandex Workflows
    • Настройка реагирования в Cloud Logging и Yandex Cloud Functions
    • Настройка интеграций Workflows с Tracker, YandexGPT и Yandex Cloud Postbox
    • Разработка функций в Functions Framework и их развертывание в Yandex Serverless Containers

В этой статье:

  • Перед началом работы
  • Необходимые платные ресурсы
  • Подготовьте окружение
  • Создайте бакет Object Storage
  • Создайте базу данных Managed Service for YDB
  • Создайте функции Cloud Functions
  • Создайте API-шлюз
  • Проверьте работу приложения
  • Как удалить созданные ресурсы
  1. Бессерверные технологии
  2. Развертывание веб-приложения с использованием Java Servlet API

Развертывание веб-приложения с использованием Java Servlet API

Статья создана
Yandex Cloud
Улучшена
Обновлена 6 февраля 2025 г.
  • Перед началом работы
    • Необходимые платные ресурсы
  • Подготовьте окружение
  • Создайте бакет Object Storage
  • Создайте базу данных Managed Service for YDB
  • Создайте функции Cloud Functions
  • Создайте API-шлюз
  • Проверьте работу приложения
  • Как удалить созданные ресурсы

Узнайте, как с помощью serverless-технологий и Java Servlet API создать небольшое веб-приложение для управления списком задач.

Чтобы создать веб-приложение:

  1. Подготовьте облако к работе.
  2. Подготовьте окружение.
  3. Создайте бакет Yandex Object Storage.
  4. Создайте базу данных YDB.
  5. Создайте функции Yandex Cloud Functions.
  6. Создайте API-шлюз.
  7. Протестируйте приложение.

Если созданные ресурсы вам больше не нужны, удалите их.

Перед началом работыПеред началом работы

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость ресурсов поддержки веб-приложения входят:

  • Плата за количество запросов к API-шлюзу и исходящий трафик (см. тарифы Yandex API Gateway).
  • Плата за операции с YDB и хранение данных (см. тарифы Yandex Managed Service for YDB).
  • Плата за количество вызовов функции, вычислительные ресурсы, выделенные для выполнения функции, и исходящий трафик (см. тарифы Cloud Functions).

Подготовьте окружениеПодготовьте окружение

  1. Создайте сервисный аккаунт и назначьте ему роль editor на ваш каталог.

  2. Склонируйте репозиторий c проектом:

    git clone https://github.com/yandex-cloud-examples/yc-serverless-servlet
    
  3. Добавьте содержимое склонированного локального репозитория yc-serverless-servlet в ZIP-архив servlet.zip. Архив потребуется позднее для создания функций Yandex Cloud Functions.

Создайте бакет Object StorageСоздайте бакет Object Storage

Создайте бакет и загрузите в него файл index.html:

Консоль управления
  1. В консоли управления выберите каталог, в котором хотите создать бакет.
  2. Выберите сервис Object Storage.
  3. Нажмите кнопку Создать бакет.
  4. На странице создания бакета:
    1. Введите имя бакета в соответствии с правилами именования.
    2. При необходимости ограничьте максимальный размер бакета.
    3. В полях Доступ на чтение объектов, Доступ к списку объектов и Доступ на чтение настроек выберите Ограниченный.
    4. Выберите класс хранилища по умолчанию.
    5. Нажмите кнопку Создать бакет для завершения операции.
  5. Выберите созданный бакет.
  6. Нажмите кнопку Загрузить и выберите в папке с проектом файл src/main/resources/index.html.
  7. Выберите класс хранилища для файла и нажмите кнопку Загрузить.

Создайте базу данных Managed Service for YDBСоздайте базу данных Managed Service for YDB

  1. Создайте базу данных в режиме Serverless:

    Консоль управления
    1. В консоли управления выберите каталог, в котором создали бакет.

    2. Выберите сервис Managed Service for YDB.

    3. Нажмите кнопку Создать базу данных.

    4. Введите Имя базы. Требования к имени:

      • длина — от 2 до 63 символов;
      • может содержать строчные буквы латинского алфавита, цифры и дефисы;
      • первый символ — буква, последний — не дефис.
    5. В блоке Тип базы данных выберите Serverless.

    6. Нажмите кнопку Создать базу данных.

    7. Дождитесь запуска базы данных. В процессе создания база будет иметь статус Provisioning, а когда станет готова к использованию, статус изменится на Running.

    8. Выберите созданную БД.

    9. В блоке Соединение найдите поле Эндпоинт и сохраните его значение. Оно понадобится при создании функций.

  2. Создайте таблицу с именем Tasks:

    Консоль управления
    CLI
    1. В консоли управления выберите каталог, в котором создали базу данных.

    2. Выберите сервис Managed Service for YDB.

    3. На странице Базы данных выберите базу.

    4. Чтобы открыть корневую директорию базы, перейдите на вкладку Навигация.

    5. Для создания запроса к базе в правом верхнем углу нажмите кнопку Новый SQL-запрос. Откроется страница Запрос.

    6. В поле Запрос введите:

      CREATE TABLE Tasks (
        TaskId Utf8,
        Name Utf8,
        Description Utf8,
        CreatedAt Datetime,
        PRIMARY KEY (TaskId)
      );
      
    7. Нажмите кнопку Выполнить.

    Выполните запрос:

    ydb -e grpcs://<YDB_эндпоинт> -d <имя_БД> \
    scripting yql -s \
    "CREATE TABLE Tasks
    (
      TaskId Utf8,
      Name Utf8,
      Description Utf8,
      CreatedAt Datetime,
      PRIMARY KEY (TaskId)
    );"
    

Создайте функции Cloud FunctionsСоздайте функции Cloud Functions

Создайте функцию для каждого сервлета:

Консоль управления
CLI
API
Yandex Cloud Toolkit
  1. В консоли управления перейдите в каталог, в котором создали бакет и базу данных.
  2. Выберите сервис Cloud Functions.
  3. Нажмите кнопку Создать функцию.
  4. Введите имя add-task и описание функции.
  5. Нажмите кнопку Создать.
  6. В блоке Редактор выберите среду выполнения java21, выключите опцию Добавить файлы с примерами кода и нажмите кнопку Продолжить.
  7. Подготовьте код функции. Для этого в поле Способ выберите ZIP-архив.
  8. В поле Файл нажмите кнопку Прикрепить файл и выберите созданный ранее архив servlet.zip.
  9. В поле Точка входа введите yandex.cloud.examples.serverless.todo.AddTaskServlet.
  10. В поле Таймаут установите значение 10.
  11. В поле Сервисный аккаунт укажите аккаунт, созданный при подготовке окружения.
  12. Добавьте переменные окружения:
    • ENDPOINT — введите первую часть сохраненного при создании базы данных YDB значения поля Эндпоинт (часть между вхождениями grpcs:// и /?database=). Например, ydb.serverless.yandexcloud.net:2135.
    • DATABASE — введите вторую часть сохраненного при создании базы данных YDB значения поля Эндпоинт (часть после вхождения /?database=). Например, /ru-central1/r1gra875baom********/g5n22e7ejfr1********.
  13. Нажмите кнопку Сохранить изменения.
  14. На странице Обзор включите опцию Публичная функция.
  15. Повторите шаги 3-14 и создайте функцию с именем list-tasks и точкой входа yandex.cloud.examples.serverless.todo.ListTasksServlet.
  16. Повторите шаги 3-14 и создайте функцию с именем delete-task и точкой входа yandex.cloud.examples.serverless.todo.DeleteTaskServlet.
  1. Создайте функцию с именем add-task:

    yc serverless function create --name=add-task
    

    Результат:

    id: d4ejb1799eko********
    folder_id: aoek49ghmknn********
    created_at: "2021-03-08T14:07:32.134Z"
    name: add-task
    log_group_id: eolm8aoq9vcp********
    http_invoke_url: https://functions.yandexcloud.net/d4ejb1799eko********
    status: ACTIVE
    
  2. Создайте версию функции add-task:

    yc serverless function version create \
      --function-name=add-task \
      --runtime java21 \
      --entrypoint yandex.cloud.examples.serverless.todo.AddTaskServlet \
      --memory 128m \
      --execution-timeout 10s \
      --source-path ./servlet.zip \
      --environment DATABASE=<имя_БД>,ENDPOINT=<YDB_эндпоинт>
    

    Где:

    • --function-name — имя функции, версию которой вы хотите создать.
    • --runtime — среда выполнения.
    • --entrypoint — точка входа, указывается в формате <имя_файла_с_функцией>.<имя_обработчика>.
    • --memory — объем RAM.
    • --execution-timeout — максимальное время выполнения функции до таймаута.
    • --source-path — путь к созданному ранее ZIP-архиву servlet.zip с кодом функции и необходимыми зависимостями.
    • --environment — переменные окружения в формате key=value.

    Результат:

    done (1s)
    id: d4evvn8obisa********
    function_id: d4ejb1799eko********
    ...
    tags:
    - $latest
    log_group_id: ckg3qh8h363p********
    
  3. Сделайте функцию публичной:

    yc serverless function allow-unauthenticated-invoke add-task
    

    Результат:

    done (1s)
    
  4. Повторите шаги 1-3 и создайте функцию с именем list-tasks и точкой входа yandex.cloud.examples.serverless.todo.ListTasksServlet.

  5. Повторите шаги 1-3 и создайте функцию с именем delete-task и точкой входа yandex.cloud.examples.serverless.todo.DeleteTaskServlet.

Воспользуйтесь API методами create, createVersion и setAccessBindings для ресурса Function.

Создать функцию и ее версию можно с помощью плагина Yandex Cloud Toolkit для семейства IDE на платформе IntelliJ от JetBrains.

Создайте API-шлюзСоздайте API-шлюз

Для обеспечения взаимодействия между сервисами создайте API-шлюз:

Консоль управления
CLI
Yandex Cloud Toolkit
  1. В консоли управления выберите каталог, в котором создали бакет, базу данных и функции.

  2. Выберите сервис API Gateway.

  3. Нажмите кнопку Создать API-шлюз.

  4. Введите имя шлюза и описание.

  5. В поле Спецификация добавьте спецификацию:

    openapi: 3.0.0
    info:
      title: ToDo list
      version: 1.0.0
    paths:
      /:
        get:
          x-yc-apigateway-integration:
            type: object-storage
            bucket: <бакет>
            object: index.html
            presigned_redirect: false
            service_account: <сервисный_аккаунт>
          operationId: static
      /add:
         post:
           x-yc-apigateway-integration:
             type: cloud-functions
             function_id: <идентификатор_add-task>
           operationId: addTask
      /list:
        get:
          x-yc-apigateway-integration:
            type: cloud-functions
            function_id: <идентификатор_list-tasks>
          operationId: listTasks
      /delete:
        delete:
          x-yc-apigateway-integration:
            type: cloud-functions
            function_id: <идентификатор_delete-task>
          operationId: deleteTask
    

    Где:

    • bucket — имя бакета, в котором лежит файл index.html.
    • service_account — идентификатор сервисного аккаунта, созданного при подготовке окружения.
    • Блок /add, параметр function_id — идентификатор функции add-task.
    • Блок /list, параметр function_id — идентификатор функции list-tasks.
    • Блок /delete, параметр function_id — идентификатор функции delete-task.
  6. Нажмите кнопку Создать.

  1. Сохраните следующую спецификацию в файл todo.yaml:

    openapi: 3.0.0
    info:
      title: ToDo list
      version: 1.0.0
    paths:
      /:
        get:
          x-yc-apigateway-integration:
            type: object-storage
            bucket: <бакет>
            object: index.html
            presigned_redirect: false
            service_account: <сервисный_аккаунт>
          operationId: static
      /add:
        post:
          x-yc-apigateway-integration:
            type: cloud-functions
            function_id: <идентификатор_add-task>
          operationId: addTask
      /list:
        get:
          x-yc-apigateway-integration:
            type: cloud-functions
            function_id: <идентификатор_list-tasks>
          operationId: listTasks
      /delete:
        delete:
          x-yc-apigateway-integration:
            type: cloud-functions
            function_id: <идентификатор_delete-task>
          operationId: deleteTask
    

    Где:

    • bucket — имя бакета, в котором лежит файл index.html.
    • service_account — идентификатор сервисного аккаунта, созданного при подготовке окружения.
    • Блок /add, параметр function_id — идентификатор функции add-task.
    • Блок /list, параметр function_id — идентификатор функции list-tasks.
    • Блок /delete, параметр function_id — идентификатор функции delete-task.
  2. Создайте API-шлюз:

    yc serverless api-gateway create \
      --name todo-list \
      --spec=todo.yaml \
      --description "simple todo list"
    

    Результат:

    done (41s)
    id: d5delqeel34q********
    folder_id: b1g86q4m5vej********
    created_at: "2021-03-08T14:07:32.134Z"
    name: todo-list
    description: simple todo list
    status: ACTIVE
    domain: d5dm1lba80md********.i9******.apigw.yandexcloud.net
    log_group_id: ckg2hdmevnvc********
    

Создать API-шлюз можно с помощью плагина Yandex Cloud Toolkit для семейства IDE на платформе IntelliJ от JetBrains.

Проверьте работу приложенияПроверьте работу приложения

Чтобы открыть приложение, перейдите по ссылке, указанной в поле Служебный домен созданного API-шлюза.

Как удалить созданные ресурсыКак удалить созданные ресурсы

Чтобы перестать платить за созданные ресурсы:

  • Удалите бакет.
  • Удалите базу данных.
  • Удалите функции.
  • Удалите API-шлюз.

Была ли статья полезна?

Предыдущая
Хранение журналов работы приложения
Следующая
Разработка Slack-бота
Проект Яндекса
© 2025 ООО «Яндекс.Облако»