Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Object Storage
    • Все руководства
    • Получение статистики запросов к объекту с использованием S3 Select
    • Получение статистики посещения сайта с использованием S3 Select
    • Получение статистики запросов к объектам с использованием Yandex Query
    • Анализ поресурсной детализации расходов
    • Шифрование на стороне сервера
    • Интеграция L7-балансировщика с CDN и Object Storage
    • Сине-зеленое и канареечное развертывание версий сервиса
    • Анализ логов с использованием DataLens
    • Монтирование бакетов к файловой системе хостов Yandex Data Processing
    • Использование Object Storage в Yandex Data Processing
    • Импорт данных из Object Storage, обработка и экспорт в Managed Service for ClickHouse®
    • Подключение бакета как диска в Windows
    • Миграция данных из Yandex Data Streams с помощью Yandex Data Transfer
    • Использование гибридного хранилища в Yandex Managed Service for ClickHouse®
    • Загрузка данных из Yandex Managed Service for OpenSearch в Yandex Object Storage с помощью Yandex Data Transfer
    • Автоматическое копирование объектов из бакета в бакет
    • Регулярное асинхронное распознавание аудиофайлов в бакете
    • Обучение модели в Yandex DataSphere на данных из Object Storage
    • Подключение к Object Storage из VPC
    • Перенос данных в Yandex Managed Service for PostgreSQL с использованием Yandex Data Transfer
    • Загрузка данных в Yandex Managed Service for Greenplum® с помощью Yandex Data Transfer
    • Загрузка данных в Yandex Managed Service for ClickHouse® с помощью Yandex Data Transfer
    • Загрузка данных в Yandex Managed Service for YDB с помощью Yandex Data Transfer
    • Обмен данными между Yandex Managed Service for ClickHouse® и Yandex Data Processing
    • Загрузка данных из Yandex Managed Service for YDB с помощью Yandex Data Transfer
    • Хостинг статического сайта на фреймворке Gatsby в Object Storage
    • Миграция базы данных из Managed Service for PostgreSQL в Object Storage
    • Обмен данными между Yandex Managed Service for ClickHouse® и Yandex Data Processing
    • Импорт данных из Yandex Managed Service for PostgreSQL в Yandex Data Processing с помощью Sqoop
    • Импорт данных из Yandex Managed Service for MySQL® в Yandex Data Processing с помощью Sqoop
    • Миграция данных из Yandex Object Storage в Yandex Managed Service for MySQL® с помощью Yandex Data Transfer
    • Миграция базы данных из Yandex Managed Service for MySQL® в Yandex Object Storage
    • Выгрузка данных Greenplum® в холодное хранилище Yandex Object Storage
    • Загрузка данных из Яндекс Директ в витрину Yandex Managed Service for ClickHouse® с использованием Yandex Cloud Functions, Yandex Object Storage и Yandex Data Transfer
    • Миграция данных из Elasticsearch в Yandex Managed Service for OpenSearch
    • Загрузка состояний Terraform в Object Storage
    • Блокировка состояний Terraform с помощью Managed Service for YDB
    • Визуализация данных Yandex Query
    • Публикация обновлений для игр
    • Резервное копирование ВМ с помощью Хайстекс Акура
    • Резервное копирование в Object Storage с помощью CloudBerry Desktop Backup
    • Резервное копирование в Object Storage через Duplicati
    • Резервное копирование в Object Storage с помощью Bacula
    • Резервное копирование в Object Storage с помощью Veeam Backup
    • Резервное копирование в Object Storage с помощью Veritas Backup Exec
    • Резервное копирование кластера Managed Service for Kubernetes в Object Storage
    • Разработка пользовательской интеграции в API Gateway
    • Сокращатель ссылок
    • Хранение журналов работы приложения
    • Разработка навыка Алисы и сайта с авторизацией
    • Создание интерактивного serverless-приложения с использованием WebSocket
    • Развертывание веб-приложения с использованием Java Servlet API
    • Разработка Telegram-бота
    • Репликация логов в Object Storage с помощью Fluent Bit
    • Репликация логов в Object Storage с помощью Data Streams
    • Загрузка аудитных логов в SIEM ArcSight
    • Загрузка аудитных логов в SIEM Splunk
    • Создание сервера MLFlow для логирования экспериментов и артефактов
    • Работа с данными с помощью Yandex Query
    • Федеративные запросы к данным с помощью Query
    • Распознавание архива изображений в Vision OCR
    • Конвертация видео в GIF на Python
    • Автоматизация задач с помощью Managed Service for Apache Airflow™
    • Обработка файлов детализации в сервисе Yandex Cloud Billing
    • Развертывание веб-приложения с JWT-авторизацией в API Gateway и аутентификацией в Firebase
    • Поиск событий Yandex Cloud в Yandex Query
    • Поиск событий Yandex Cloud в Object Storage
    • Создание внешней таблицы на базе таблицы из бакета с помощью конфигурационного файла
    • Миграция базы данных из Google BigQuery в Managed Service for ClickHouse®
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Логи бакета
  • История изменений
  • Вопросы и ответы
  • Обучающие курсы

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

  • Перед началом работы
  • Необходимые платные ресурсы
  • Подготовьте окружение
  • Создайте бакет 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-шлюз.

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

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