{"id":18794124,"url":"https://github.com/yandex-cloud-examples/yc-serverless-servlet","last_synced_at":"2026-01-30T07:06:06.258Z","repository":{"id":242530931,"uuid":"809804502","full_name":"yandex-cloud-examples/yc-serverless-servlet","owner":"yandex-cloud-examples","description":"Cоздание веб-приложения для управления списком задач с помощью serverless-технологий и Java Servlet API.","archived":false,"fork":false,"pushed_at":"2024-06-09T21:48:00.000Z","size":12,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-02-12T20:12:17.107Z","etag":null,"topics":["cloud-functions","java-servlet-api","serverless","yandex-cloud","yandexcloud","ydb"],"latest_commit_sha":null,"homepage":"https://yandex.cloud/ru/docs/functions/tutorials/java-servlet-todo-list","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yandex-cloud-examples.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-03T13:34:51.000Z","updated_at":"2024-10-31T17:54:31.000Z","dependencies_parsed_at":"2024-06-03T16:04:21.080Z","dependency_job_id":"0c123c1f-3328-4b7d-b546-37c49050b0a4","html_url":"https://github.com/yandex-cloud-examples/yc-serverless-servlet","commit_stats":null,"previous_names":["yandex-cloud-examples/yc-serverless-servlet"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yandex-cloud-examples%2Fyc-serverless-servlet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yandex-cloud-examples%2Fyc-serverless-servlet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yandex-cloud-examples%2Fyc-serverless-servlet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yandex-cloud-examples%2Fyc-serverless-servlet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yandex-cloud-examples","download_url":"https://codeload.github.com/yandex-cloud-examples/yc-serverless-servlet/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247492520,"owners_count":20947544,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloud-functions","java-servlet-api","serverless","yandex-cloud","yandexcloud","ydb"],"created_at":"2024-11-07T21:28:15.573Z","updated_at":"2026-01-30T07:06:06.194Z","avatar_url":"https://github.com/yandex-cloud-examples.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Руководство по развертыванию небольшого ToDo-list'а на серверлесс стеке при помощи Java Servlet API\r\n\r\n1. Заводим `serverless` базу данных. \r\nДля этого в списке сервисов находим `Yandex Database`, нажимаем Создать базу данных, тип базы данных выбираем `serverless`, \r\nдалее переходим во вкладку Навигация и создаем таблицу Tasks. Это можно сделать либо из UI, либо простым SQL-запросом:\r\n\r\n    ```sql\r\n    create table Tasks (\r\n        TaskId Utf8,\r\n        Name Utf8,\r\n        Description Utf8,\r\n        CreatedAt Datetime,\r\n        primary key (TaskId)\r\n    );\r\n    ```\r\n\r\n2. Заводим в текущей директории сервисный аккаунт (для этого переходим в корень директории и слева в меню выбираем Сервисные аккаунты),\r\nпосле чего добавляем ему права `viewer` и `editor`\r\n\r\n3. Создаем три функции (по одной на каждый сервлет), заливаем в каждую из них данный проект, указываем среду исполнения `java11` и точку входа, в зависимости от текущего сервлета. \r\n**Обязательно** указываем сервисный аккаунт, созданный в предыдущем пункте. Каждой функции в переменные окружения добавляем:\r\n    * `DATABASE` - значение поля `База данных` вашей базы данных (например, /ru-centralx/yyyyyyyyyy/zzzzzzzzzz)\r\n    * `ENDPOINT` - значение поля `Эндпоинт` вашей базы данных (например, ydb.serverless.yandexcloud.net:2135)\r\n\r\n    Должны получиться функции с такими точками входа:\r\n    * yandex.cloud.examples.serverless.todo.AddTaskServlet\r\n    * yandex.cloud.examples.serverless.todo.ListTasksServlet\r\n    * yandex.cloud.examples.serverless.todo.DeleteTaskServlet\r\n\r\n    Чтобы задеплоить функцию, нужно:\r\n    * Заархивировать содержимое проекта (например, `zip target.zip -r src pom.xml`)\r\n    * Исполнить простую команду (должна быть установлена и настроена утилита `yc`, подробнее читать [здесь](https://cloud.yandex.ru/docs/cli/quickstart#install))\r\n    \r\n   ```bash\r\n    yc serverless function version create \\\r\n        --function-id=\u003cтекущий id функции\u003e \\\r\n        --runtime=java11 \\\r\n        --entrypoint=\u003cтекущая точка входа\u003e \\\r\n        --memory=128mb \\\r\n        --execution-timeout=3s \\\r\n        --source-path=target.zip \\\r\n        --environment=\"DATABASE=\u003cзначение поля База данных\u003e;ENDPOINT=\u003cзначение поля Эндпоинт\u003e\"\r\n    ```\r\n   \r\n    Команду необходимо выполнить 3 раза, каждый раз подставляя одну из точек входа,\r\n    id соответствующей ей функции и значения переменных окружения.\r\n    * ИЛИ создать версию через UI, для этого нужно зайти в функцию, \r\n    открыть вкладку Редактор, во вкладке Способ выбрать `ZIP`, залить туда архив с проектом.\r\n    Затем проставить параметры:\r\n      * Точка входа: текущая точка входа (например, `yandex.cloud.examples.serverless.todo.AddTaskServlet` для функции, которая отвечает за этот сервлет)\r\n      * Таймаут, c: 3\r\n      * Память: 128 МБ\r\n      * Сервисный аккаунт: выбрать сервисный аккаунт, созданный в пункте 2\r\n      * Переменные окружения:\r\n        * DATABASE: значение поля `База данных`\r\n        * ENDPOINT: значение поля `Эндпоинт`\r\n\r\n4. Создаем бакет в `s3`, заливаем туда `index.html` (находится в `src/main/resources/index.html`)\r\n\r\n5. Создаем `API Gateway`, в поле `paths` спецификации стираем все содержимое, пишем туда:\r\n\r\n    ```openapi\r\n      /:\r\n        get:\r\n          x-yc-apigateway-integration:\r\n            type: object-storage\r\n            bucket: \u003cbucket\u003e\r\n            object: index.html\r\n            presigned_redirect: false\r\n            service_account: \u003cservice_account\u003e\r\n          operationId: static\r\n      /add:\r\n        post:\r\n          x-yc-apigateway-integration:\r\n            type: cloud-functions\r\n            function_id: \u003cadd_servlet_function\u003e\r\n          operationId: addTask\r\n      /list:\r\n        get:\r\n          x-yc-apigateway-integration:\r\n            type: cloud-functions\r\n            function_id: \u003clist_servlet_function\u003e\r\n          operationId: listTasks\r\n      /delete:\r\n        delete:\r\n          x-yc-apigateway-integration:\r\n            type: cloud-functions\r\n            function_id: \u003cdelete_servlet_function\u003e\r\n          operationId: deleteTask\r\n    ```\r\n    \r\n    Здесь вместо `\u003cbucket\u003e` пишем имя бакета, в котором лежит файл `index.html`, вместо `\u003cservice_account\u003e` id сервисного аккаунта, созданного в пункте 2. А вместо остальных параметров id соответствующих функций\r\n\r\nГотово! Теперь при переходе по ссылке, указанной в `API Gateway` должен отобразиться ваш ToDo-list\r\n\r\nПолезные ссылки:\r\n* [Документация Cloud Functions](https://cloud.yandex.ru/docs/functions/)\r\n* [Документация YDB](https://cloud.yandex.ru/docs/ydb/)\r\n* [Документация API Gateway](https://cloud.yandex.ru/docs/api-gateway/)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyandex-cloud-examples%2Fyc-serverless-servlet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyandex-cloud-examples%2Fyc-serverless-servlet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyandex-cloud-examples%2Fyc-serverless-servlet/lists"}