Веб-приложение на SourceCraft Sites и Yandex Cloud Functions
В этом практическом руководстве вы развернете веб-приложение из репозитория
- Фронтенд — статический сайт на SourceCraft Sites
с полем для ввода имени и кнопкой Hello. - Бэкенд — функция Yandex Cloud Functions на Python, которая возвращает приветствие
Hello, <имя>!. - шлюз Yandex API Gateway, который принимает запросы от фронтенда и вызывает функцию.
Код приложения и конфигурация CI/CD хранятся в репозитории
Этот сценарий подходит для прототипов и небольших проектов: вам не нужно управлять серверами, а SourceCraft Sites предоставляет бесплатный хостинг с доступом по HTTPS без загрузки собственного TLS-сертификата.
Чтобы создать веб-приложение:
- Подготовьтесь к работе.
- Создайте сервисный аккаунт.
- Создайте ответвление репозитория.
- Создайте сервисное подключение.
- Подготовьте конфигурацию и код приложения.
- Разверните приложение.
- Проверьте работу приложения.
Если созданные ресурсы вам больше не нужны, удалите их и снимите сайт с публикации.
Подготовьтесь к работе
-
Войдите в консоль управления
Yandex Cloud или зарегистрируйтесь. -
Убедитесь, что у вас есть платежный аккаунт в статусе
ACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако. -
Выберите или создайте каталог, в котором будут размещены функция и API-шлюз.
-
Аутентифицируйтесь в SourceCraft на главной странице
сервиса или зарегистрируйтесь . -
Выберите или создайте публичную организацию
в SourceCraft.Для создания сервисного подключения на уровне организации нужна роль Администратор организации
(organization-manager.admin) или Владелец организации (organization-manager.organizations.owner).
Важно
Публикация сайта возможна только из публичного репозитория в публичной организации SourceCraft. Файлы репозитория будут доступны всем пользователям интернета. Не сохраняйте в них токены, ключи доступа и другие секреты. Сервисное подключение позволяет обращаться к Yandex Cloud без хранения долгоживущих ключей в коде.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входят:
- Плата за вызовы функции, вычислительные ресурсы и исходящий трафик (тарифы Yandex Cloud Functions).
- Плата за запросы к шлюзу и исходящий трафик (тарифы Yandex API Gateway).
Примечание
Для Cloud Functions и API Gateway доступен нетарифицируемый объем услуг. Использование сверх этого объема оплачивается по тарифам сервисов.
Хостинг сайта на SourceCraft Sites бесплатный. Условия использования CI/CD приведены в правилах тарификации SourceCraft
Создайте сервисный аккаунт
От имени сервисного аккаунта рабочие процессы CI/CD будут создавать и удалять ресурсы, а API-шлюз — вызывать функцию.
-
В консоли управления
Yandex Cloud выберите подготовленный каталог. -
Перейдите
в сервис Identity and Access Management. -
Нажмите Создать сервисный аккаунт.
-
В поле Имя укажите
sites-web-app-sa. -
Нажмите
Добавить роль и выберите роли на каталог:- functions.editor — для создания, обновления, вызова и удаления функции.
- api-gateway.editor — для создания и удаления API-шлюза.
- iam.serviceAccounts.user — для указания сервисного аккаунта в версии функции и спецификации API-шлюза.
-
Нажмите Создать.
Создайте ответвление репозитория
Ответвление
- Откройте репозиторий примера
. - В правом верхнем углу нажмите
Ответвить. - Выберите подготовленную публичную организацию и укажите название репозитория, например
sourcecraft-sites-web-app. - Выберите для ответвления основную ветку
masterи нажмите Создать ответвление.
В репозитории находятся:
.sourcecraft/ci.yaml— конфигурация CI/CD с рабочими процессамиcreate-resourcesиdelete-resources..sourcecraft/sites.yaml— конфигурация публикации сайта из директорииsitesв веткеrelease.sites/— HTML и JavaScript фронтенда. Файлsites/config.jsсодержит адрес API-шлюза, который рабочий процесс подставляет при развертывании.src/index.py— код функции на Python.yc-scripts/— скрипты для получения IAM-токена, создания и удаления ресурсов Yandex Cloud.
Примечание
Клонирование примера на локальный компьютер не создает репозиторий в вашей организации. Для выполнения руководства используйте созданное ответвление в SourceCraft.
Создайте сервисное подключение
Создайте подключение на уровне организации. Имя default-service-connection должно совпадать с указанным в .sourcecraft/ci.yaml.
-
В SourceCraft откройте организацию, в которой вы создали ответвление репозитория.
-
В разделе
Настройки перейдите в секцию Сервисные подключения. -
В правом верхнем углу нажмите
Новое сервисное подключение. -
В блоке Базовая информация укажите название
default-service-connection. -
В блоке Область применения разрешите использование для всех репозиториев.
-
В блоке Настройки Yandex Cloud выберите подготовленный каталог и сервисный аккаунт
sites-web-app-sa.Совет
Чтобы повторно запросить список облаков, каталогов и сервисных аккаунтов из Yandex Cloud, нажмите
Синхронизировать. Это может быть полезно, если параллельно с созданием сервисного подключения вы создали каталог или сервисный аккаунт. -
Нажмите Создать сервисное подключение и дождитесь окончания операции.
Подробнее в инструкции по настройке сервисного подключения
Подготовьте конфигурацию и код приложения
Чтобы отредактировать файл в интерфейсе SourceCraft, откройте его и нажмите master.
-
Откройте файл
.sourcecraft/ci.yaml. -
Убедитесь, что в блоке
tokens:SERVICE_CONNECTION_WITH_TOKEN:service_connectionуказано название сервисного подключения, созданного ранее. -
В блоке
envпроверьте имена функции (YC_FUNCTION_NAME) и API-шлюза (YC_API_GATEWAY_NAME).Важно
Убедитесь, что в выбранном каталоге облака нет функции и API-шлюза с такими именами. Если они уже существуют, задайте другие имена: рабочий процесс обновляет существующую функцию, а при удалении ресурсов использует имена из этой конфигурации.
Разверните приложение
- В своем репозитории в разделе
Автоматизации перейдите в секцию CI/CD. - Нажмите
Новый запуск. - Выберите ветку
masterдля конфигурации и запуска, рабочий процессcreate-resourcesи нажмите Запустить. - Дождитесь, пока рабочий процесс завершится со статусом Успех. Если процесс завершился с ошибкой, откройте его и проверьте логи кубика, который не удалось выполнить.
Рабочий процесс получает IAM-токен через сервисное подключение, создает функцию и ее версию, затем создает API-шлюз с маршрутом GET /hello/{name}. После этого он записывает адрес шлюза в файл sites/config.js и публикует файлы в ветке release.
Файл .sourcecraft/sites.yaml в основной ветке уже настроен на публикацию из ветки release:
site:
root: sites
ref: release
После появления этой ветки сайт публикуется автоматически в течение нескольких минут.
Проверьте работу приложения
- Откройте в браузере
https://<слаг_организации>.sourcecraft.site/<название_репозитория>/. - В поле Name введите имя, например
Alice, и нажмите Hello. - Убедитесь, что под кнопкой появилось приветствие
Hello, Alice!.
Удалите ресурсы Yandex Cloud
- В своем репозитории вручную запустите
рабочий процессdelete-resourcesиз веткиmaster. - Дождитесь его успешного завершения. Рабочий процесс удалит API-шлюз и функцию с именами из
.sourcecraft/ci.yaml.
Вы также можете удалить API-шлюз и функцию в консоли Yandex Cloud.
Если сервисный аккаунт sites-web-app-sa больше не используется, удалите его после удаления функции и API-шлюза.
Снимите сайт с публикации
Удаление функции и API-шлюза не снимает статический сайт с публикации. После удаления облачных ресурсов, удалите файл .sourcecraft/sites.yaml из основной ветки master.