Создание триггеров, которые вызывают функции Cloud Functions для остановки ВМ и отправки уведомлений в Telegram
- Подготовьте облако к работе
- Создайте бюджет
- Создайте очередь Message Queue
- Создайте функцию Cloud Functions, которую будет вызывать триггер для бюджетов
- Создайте триггер для бюджетов
- Зарегистрируйте Telegram-бота
- Создайте функцию Cloud Functions, которую будет вызывать триггер для Message Queue
- Создайте триггер для Message Queue
- Создайте виртуальные машины Compute Cloud
- Убедитесь, что по триггеру останавливаются ВМ и отправляются уведомления в Telegram
- Как удалить созданные ресурсы
В этом руководстве вы создадите serverless-инфраструктуру, которая при превышении пороговых значений бюджета будет останавливать запущенные виртуальные машины и отправлять пользователю уведомления в Telegram.
Триггер для бюджетов будет вызывать функцию Cloud Functions, а функция — останавливать виртуальные машины Compute Cloud и отправлять сообщение в очередь Yandex Message Queue.
Триггер для Message Queue будет передавать поступившие в очередь сообщения во вторую функцию Cloud Functions, которая будет отправлять уведомления в Telegram с помощью специально созданного бота.
Чтобы развернуть проект:
- Подготовьте облако к работе.
- Создайте бюджет.
- Создайте очередь Message Queue.
- Создайте функцию Cloud Functions, которую будет вызывать триггер для бюджетов.
- Создайте триггер для бюджетов.
- Зарегистрируйте Telegram-бота.
- Создайте функцию Cloud Functions, которую будет вызывать триггер для Message Queue.
- Создайте триггер для Message Queue.
- Создайте виртуальные машины Compute Cloud.
- Убедитесь, что по триггеру останавливаются ВМ и отправляются уведомления в Telegram.
Создавайте все указанные ресурсы Yandex Cloud в одном каталоге.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость ресурсов входят:
- Плата за вычислительные ресурсы ВМ (см. тарифы Compute Cloud).
- Плата за диски ВМ (см. тарифы Compute Cloud).
- Плата за использование динамического публичного IP-адреса (см. тарифы Yandex Virtual Private Cloud).
- Плата за количество вызовов функции, вычислительные ресурсы, выделенные для выполнения функции, и исходящий трафик (см. тарифы Cloud Functions).
- Плата за количество запросов к очередям и исходящий трафик (см. тарифы Message Queue).
- Плата за запись и хранение данных в лог-группе (см. тарифы Yandex Cloud Logging), если вы используете сервис Cloud Logging.
Скачайте проект
Склонируйте репозиторий c проектом:
git clone https://github.com/yandex-cloud-examples/yc-telegram-bot-with-trigger-for-budget
Создайте сервисный аккаунт и статический ключ доступа
-
Создайте сервисный аккаунт:
Консоль управленияCLIAPI- В консоли управления
выберите ваш каталог. - В списке сервисов выберите Identity and Access Management.
- Нажмите кнопку Создать сервисный аккаунт.
- В поле Имя укажите имя
service-account-for-budget
. - В поле Роли в каталоге нажмите кнопку
Добавить роль и выберите рольeditor
. - Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра
--folder-name
или--folder-id
.-
Создайте сервисный аккаунт
service-account-for-budget
:yc iam service-account create \ --name service-account-for-budget
Результат:
done (1s) id: ajed1o6dd581******** folder_id: b1g9d2k0itu4******** created_at: "2024-02-23T18:32:38.365175925Z" name: service-account-for-budget
Сохраните идентификатор (
id
) созданного сервисного аккаунта: он пригодится на следующем шаге.Подробнее о команде
yc iam service-account create
читайте в справочнике CLI. -
Назначьте сервисному аккаунту роль
editor
на ваш каталог:yc resource-manager folder add-access-binding <имя_каталога> \ --role editor \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>
Где:
<имя_каталога>
— имя вашего каталога в Yandex Cloud.<идентификатор_сервисного_аккаунта>
— идентификатор сервисного аккаунта, сохраненный ранее.
Результат:
done (2s) effective_deltas: - action: ADD access_binding: role_id: editor subject: id: ajed1o6dd581******** type: serviceAccount
Подробнее о команде
yc resource-manager folder add-access-binding
читайте в справочнике CLI.
Чтобы создать сервисный аккаунт, воспользуйтесь методом REST API create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create.
Чтобы назначить сервисному аккаунту роль на каталог, воспользуйтесь методом REST API updateAccessBindings для ресурса Folder или вызовом gRPC API FolderService/UpdateAccessBindings.
- В консоли управления
-
Создайте статический ключ доступа:
Консоль управленияCLIAPI-
В консоли управления
выберите ваш каталог. -
В списке сервисов выберите Identity and Access Management.
-
На панели слева выберите
Сервисные аккаунты. -
В открывшемся списке выберите сервисный аккаунт
service-account-for-budget
. -
На верхней панели нажмите кнопку
Создать новый ключ и выберите Создать статический ключ доступа. -
При необходимости задайте описание ключа и нажмите кнопку Создать.
-
Сохраните идентификатор и секретный ключ.
Внимание
После закрытия диалога значение ключа будет недоступно.
Выполните команду:
yc iam access-key create \ --service-account-name service-account-for-budget
Результат:
access_key: id: aje75gg0rp8k******** service_account_id: ajed1o6dd581******** created_at: "2024-02-23T18:36:41.061060561Z" key_id: YCAJEK_r3Z_EvxRAR******** secret: YCPQhHFMx6rnWXQC9ID425gk3V9YnUc********
Сохраните идентификатор
key_id
и секретный ключsecret
. Получить значение этого ключа снова будет невозможно.Подробнее о команде
yc iam access-key create
читайте в справочнике CLI.Чтобы создать ключ доступа, воспользуйтесь методом REST API create для ресурса AccessKey или вызовом gRPC API AccessKeyService/Create.
-
Создайте облачную сеть и подсеть
- В консоли управления
выберите ваш каталог. - В списке сервисов выберите Virtual Private Cloud.
- Справа сверху нажмите кнопку Создать сеть.
- В поле Имя укажите
my-sample-network
. - В поле Дополнительно отключите опцию Создать подсети.
- Нажмите кнопку Создать сеть.
- На панели слева выберите Подсети.
- Справа сверху нажмите кнопку Создать.
- В поле Имя укажите
sample-subnet-ru-central1-b
. - В поле Зона выберите зону доступности
ru-central1-b
. - В поле Сеть выберите облачную сеть
my-sample-network
. - В поле CIDR укажите
192.168.1.0/24
. - Нажмите кнопку Создать подсеть.
-
Создайте сеть
my-sample-network
:yc vpc network create my-sample-network
Результат:
id: enp2gjcvrd59******** folder_id: b1g9d2k0itu4******** created_at: "2024-02-23T18:39:17Z" name: my-sample-network default_security_group_id: enp9uobl2c33********
Подробнее о команде
yc vpc network create
читайте в справочнике CLI. -
Создайте подсеть
sample-subnet-ru-central1-b
в зоне доступностиru-central1-b
:yc vpc subnet create sample-subnet-ru-central1-b \ --zone ru-central1-b \ --network-name my-sample-network \ --range 192.168.1.0/24
Результат:
id: e2l1ejkvq4jv******** folder_id: b1g9d2k0itu4******** created_at: "2024-02-23T18:40:26Z" name: sample-subnet-ru-ru-central1-b network_id: enp2gjcvrd59******** zone_id: ru-central1-b v4_cidr_blocks: - 192.168.1.0/24
Подробнее о команде
yc vpc subnet create
читайте в справочнике CLI.
-
Чтобы создать сеть, воспользуйтесь методом REST API create для ресурса Network или вызовом gRPC API NetworkService/Create.
-
Чтобы создать подсеть, воспользуйтесь методом REST API create для ресурса Subnet или вызовом gRPC API SubnetService/Create.
Создайте бюджет
Чтобы создать бюджет, у пользователя должна быть роль editor
. Чтобы получать оповещения, достаточно роли viewer
.
-
Перейдите в сервис Yandex Cloud Billing
. -
Выберите платежный аккаунт.
-
В секции Общие сведения, в поле Идентификатор, скопируйте идентификатор платежного аккаунта. Он пригодится при создании триггера для бюджетов.
-
Перейдите на вкладку Бюджеты и нажмите кнопку Создать бюджет.
-
В блоке Общая информация укажите:
-
Имя —
vm-budget
. -
Тип —
К оплате
. -
Сумма — сумму расходов на потребление, например
10 ₽
. -
Период расчета —
Месячный
. -
Дата окончания — дату окончания действия бюджета.
Дата окончания устанавливает, когда бюджет перестанет считать потребление и отправлять уведомления. Дата окончания — последнее число месяца. Не может быть позже пяти лет от текущей даты.
-
Уведомить — выберите себя.
-
-
В блоке Область действия выберите каталог, в котором ведете работу, и сервис Compute Cloud.
-
В блоке Пороги укажите пороговые значения в процентах, при достижении которых:
- Указанным пользователям будут приходить уведомления.
- Будет срабатывать триггер для бюджетов.
Например, можно указать два порога —
50%
и100%
. -
Нажмите кнопку Создать.
-
В открывшемся окне появился новый бюджет
vm-budget
. В поле Идентификатор скопируйте идентификатор созданного бюджета. Он пригодится позднее при создании триггера.
Чтобы создать бюджет, воспользуйтесь методом create для ресурса Budget или вызовом gRPC API BudgetService/Create.
Создайте очередь Message Queue
-
В консоли управления
выберите ваш каталог. -
Выберите сервис Message Queue.
-
Нажмите кнопку Создать очередь.
-
В блоке Базовые параметры укажите:
- Имя —
budget-queue
. - Тип —
Стандартная
.
Остальные параметры оставьте без изменений.
- Имя —
-
Нажмите кнопку Создать.
-
Нажмите на имя созданной очереди
budget-queue
и в открывшемся окне скопируйте значения полей:- URL — URL очереди.
- ARN — идентификатор очереди.
Сохраните эти значения: они пригодятся на следующих шагах.
-
Установите и настройте AWS CLI. При настройке используйте созданный ранее статический ключ доступа.
-
Создайте очередь:
aws sqs create-queue \ --queue-name budget-queue \ --endpoint https://message-queue.api.cloud.yandex.net/
Результат:
{ "QueueUrl": "https://message-queue.api.cloud.yandex.net/b1glti4eser3********/dj600000001c********/budget-queue" }
Сохраните значение URL очереди
QueueUrl
, оно пригодится на следующих шагах. -
Получите идентификатор очереди, указав сохраненный ранее URL в параметре
--queue-url
:aws sqs get-queue-attributes \ --queue-url <URL_очереди> \ --attribute-names QueueArn \ --endpoint https://message-queue.api.cloud.yandex.net/
Результат:
{ "Attributes": { "QueueArn": "yrn:yc:ymq:ru-central1:b1g9d2k0itu4********:budget-queue" } }
Сохраните идентификатор очереди
QueueArn
, он пригодится на следующих шагах.
Создайте функцию Cloud Functions, которую будет вызывать триггер для бюджетов
-
Подготовьте ZIP-архив с кодом функции.
Перейдите в директорию
yc-telegram-bot-with-trigger-for-budget/steps/4-create-budget-trigger-handler
и добавьте файлы в ZIP-архивsrc_bgt.zip
:zip src_bgt.zip budget_trigger_handler.go go.mod
-
Создайте функцию:
Консоль управленияCLIAPI-
В консоли управления
выберите ваш каталог. -
Выберите сервис Cloud Functions.
-
Создайте функцию:
- Нажмите кнопку Создать функцию.
- Введите имя функции
budget-trigger-handler
. - Нажмите кнопку Создать.
-
Создайте версию функции:
-
Выберите среду выполнения
golang119
, выключите опцию Добавить файлы с примерами кода и нажмите кнопку Продолжить. -
Укажите способ загрузки ZIP-архив и прикрепите архив
src_bgt.zip
, который создали на предыдущем шаге. -
Укажите точку входа
budget_trigger_handler.Handler
. -
В блоке Параметры укажите:
- Таймаут, c —
5
; - Память —
512 МБ
; - Сервисный аккаунт —
service-account-for-budget
; - Переменные окружения:
FOLDER_ID
— идентификатор каталога, в котором вы хотите останавливать виртуальные машины.TAG
—target-for-stop
.AWS_ACCESS_KEY_ID
— значение идентификатора статического ключа доступа, сохраненное ранее.AWS_SECRET_ACCESS_KEY
— значение секретного ключа статического ключа доступа, сохраненное ранее.BUDGET_QUEUE_URL
— значение URL очередиbudget-queue
, сохраненное ранее.
- Таймаут, c —
-
Нажмите кнопку Сохранить изменения.
-
-
Создайте функцию
budget-trigger-handler
:yc serverless function create \ --name budget-trigger-handler
Результат:
id: d4e4aigfdm0b******** folder_id: b1g9d2k0itu4******** created_at: "2024-02-23T20:15:06.456Z" name: budget-trigger-handler http_invoke_url: https://functions.yandexcloud.net/d4e4aigfdm0b******** status: ACTIVE
Подробнее о команде
yc serverless function create
читайте в справочнике CLI. -
Создайте версию функции
budget-trigger-handler
:yc serverless function version create \ --function-name budget-trigger-handler \ --memory=512m \ --execution-timeout=5s \ --runtime=golang119 \ --entrypoint=budget_trigger_handler.Handler \ --service-account-id=<идентификатор_сервисного_аккаунта> \ --environment FOLDER_ID=<идентификатор_каталога> \ --environment TAG=target-for-stop \ --environment AWS_ACCESS_KEY_ID=<идентификатор_статического_ключа> \ --environment AWS_SECRET_ACCESS_KEY=<значение_секретного_ключа> \ --environment BUDGET_QUEUE_URL=<URL_очереди> \ --source-path="./src_bgt.zip"
Где:
-
--service-account-id
— идентификатор сервисного аккаунтаservice-account-for-budget
, сохраненный ранее. Сервисный аккаунт будет использоваться для вызова функции. -
--environment
— переменные окружения:FOLDER_ID
— идентификатор каталога, в котором вы хотите останавливать виртуальные машины.AWS_ACCESS_KEY_ID
— значение идентификатора статического ключа доступа, сохраненное ранее.AWS_SECRET_ACCESS_KEY
— значение секретного ключа статического ключа доступа, сохраненное ранее.BUDGET_QUEUE_URL
— значение URL очередиbudget-queue
, сохраненное ранее.
-
--source-path
— путь к ZIP-архивуsrc_bgt.zip
.
Результат:
done (2m32s) id: d4em5gaeev2b******** function_id: d4e4aigfdm0b******** created_at: "2024-02-23T20:31:18.458Z" runtime: golang119 entrypoint: budget_trigger_handler.Handler resources: memory: "536870912" execution_timeout: 5s service_account_id: ajed1o6dd581******** image_size: "23977984" status: ACTIVE tags: - $latest environment: AWS_ACCESS_KEY_ID: YCAJEK_r3Z_EvxRAR******** AWS_SECRET_ACCESS_KEY: YCPQhHFMx6rnWXQC9ID425gk3V9YnUc0******** BUDGET_QUEUE_URL: https://message-queue.api.cloud.yandex.net/b1glti4eser3********/dj600000001c********/budget-queue FOLDER_ID: b1g9d2k0itu4******** TAG: target-for-stop log_options: folder_id: b1g9d2k0itu4********
Подробнее о команде
yc serverless function version create
читайте в справочнике CLI. -
Чтобы создать функцию, воспользуйтесь методом create для ресурса Function или вызовом gRPC API FunctionService/Create.
Чтобы создать версию функцию, воспользуйтесь методом createVersion для ресурса Function или вызовом gRPC API FunctionService/CreateVersion.
-
Создайте триггер для бюджетов
-
В консоли управления
выберите ваш каталог. -
Выберите сервис Cloud Functions.
-
На панели слева выберите
Триггеры. -
Нажмите кнопку Создать триггер.
-
В блоке Базовые параметры:
- В поле Имя укажите имя триггера
trigger-for-budget-from-yc
. - В поле Тип выберите
Бюджет
. - В поле Запускаемый ресурс выберите
Функция
.
- В поле Имя укажите имя триггера
-
В блоке Настройки бюджета выберите ваш платежный аккаунт и бюджет
vm-budget
, который создали ранее. -
В блоке Настройки функции выберите функцию
budget-trigger-handler
и укажите сервисный аккаунтservice-account-for-budget
. От его имени будет вызываться функция. -
Нажмите кнопку Создать триггер.
Чтобы создать триггер для бюджетов, который вызывает функцию budget-trigger-handler
, выполните команду:
yc serverless trigger create billing-budget \
--name trigger-for-budget-from-yc \
--invoke-function-name budget-trigger-handler \
--invoke-function-service-account-id <идентификатор_сервисного_аккаунта> \
--billing-account-id <идентификатор_платежного_аккаунта> \
--budget-id <идентификатор_бюджета>
Где:
--invoke-function-service-account-id
— идентификатор сервисного аккаунтаservice-account-for-budget
, сохраненный ранее. Сервисный аккаунт будет использоваться для вызова функции.--billing-account-id
— идентификатор платежного аккаунта, сохраненный ранее при создании бюджета.--budget-id
— идентификатор бюджетаvm-budget
, сохраненный ранее.
Результат:
id: a1sjrukc64hs********
folder_id: b1g9d2k0itu4********
created_at: "2024-02-23T21:20:03.308963151Z"
name: trigger-for-budget-from-yc
rule:
billing_budget:
billing_account_id: dn276oa9slgm********
budget_id: dn2jr6qt0q9k********
invoke_function:
function_id: d4e4aigfdm0b********
function_tag: $latest
service_account_id: ajed1o6dd581********
status: ACTIVE
Подробнее о команде yc serverless trigger create billing-budget
читайте в справочнике CLI.
Чтобы создать триггер для бюджетов, воспользуйтесь методом create для ресурса Trigger или вызовом gRPC API TriggerService/Create.
Зарегистрируйте Telegram-бота
-
Зарегистрируйте бота в Telegram и получите токен:
-
Для регистрации нового бота запустите в Telegram бота BotFather
и отправьте команду:/newbot
Результат:
Alright, a new bot. How are we going to call it? Please choose a name for your bot.
-
В следующем сообщении укажите имя создаваемого бота, например
YC VM budget informer
. Это имя увидят пользователи при общении с ботом.Результат:
Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.
-
Укажите имя пользователя создаваемого бота, например
YCVMBudgetInformerBot
. По имени пользователя можно будет найти бота в Telegram. Имя пользователя должно оканчиваться на...Bot
или..._bot
. В результате вы получите токен для HTTP API.Результат:
Done! Congratulations on your new bot. You will find it at t.me/YCVMBudgetInformerBot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this. Use this token to access the HTTP API: 715063****:AAGuj****-0VrIm7j9i**************** Keep your token secure and store it safely, it can be used by anyone to control your bot. For a description of the Bot API, see this page: https://core.telegram.org/bots/api
-
-
Получите идентификатор
ChatID
пользователя, которому бот будет направлять уведомления:-
Сохраните полученный на предыдущем шаге API-токен в переменную окружения
TELEGRAM_BOT_API_TOKEN
:export TELEGRAM_BOT_API_TOKEN=<Telegram_API-токен>
-
Перейдите в директорию
yc-telegram-bot-with-trigger-for-budget/steps/6-register-telegram-bot
и выполните команду:go run .
При необходимости предварительно установите пакеты
Go
иtelegram_bot
.Команда запустит Telegram-бота, который на любое сообщение будет возвращать идентификатор
ChatID
текущего пользователя. -
В Telegram найдите созданного вами бота по имени пользователя (например,
YCVMBudgetInformerBot
) и отправьте ему любое сообщение.Результат:
59529*****
Сохраните полученный идентификатор
ChatID
. Он пригодится вам позднее. -
Вернитесь в терминал и завершите работу бота с помощью сочетания клавиш Ctrl + C.
-
Создайте функцию Cloud Functions, которую будет вызывать триггер для Message Queue
-
Подготовьте ZIP-архив с кодом функции.
Перейдите в директорию
yc-telegram-bot-with-trigger-for-budget/steps/7-create-budget-queue-handler
и добавьте файлы в ZIP-архивsrc_queue.zip
:zip src_queue.zip budget_queue_handler.go utils.go go.mod
-
Создайте функцию:
Консоль управленияCLIAPI-
В консоли управления
выберите ваш каталог. -
Выберите сервис Cloud Functions.
-
Создайте функцию:
- Нажмите кнопку Создать функцию.
- Введите имя функции
budget-queue-handler
. - Нажмите кнопку Создать.
-
Создайте версию функции:
-
Выберите среду выполнения
golang119
, выключите опцию Добавить файлы с примерами кода и нажмите кнопку Продолжить. -
Укажите способ загрузки ZIP-архив и прикрепите архив
src_queue.zip
, который создали на предыдущем шаге. -
Укажите точку входа
budget_queue_handler.HandleBudgetQueueMessage
. -
В блоке Параметры укажите:
- Таймаут, c —
5
; - Память —
512 МБ
; - Сервисный аккаунт —
service-account-for-budget
; - Переменные окружения:
TELEGRAM_BOT_API_TOKEN
— API-токен Telegram-бота, сохраненный ранее.TELEGRAM_BOT_CHAT_ID
— идентификаторChatID
пользователя Telegram, сохраненный ранее.
- Таймаут, c —
-
Нажмите кнопку Сохранить изменения.
-
-
Создайте функцию
budget-queue-handler
:yc serverless function create \ --name budget-queue-handler
Результат:
id: d4e6r2g9trt5******** folder_id: b1g9d2k0itu4******** created_at: "2024-02-24T07:36:04.092Z" name: budget-queue-handler http_invoke_url: https://functions.yandexcloud.net/d4e6r2g9trt5******** status: ACTIVE
-
Создайте версию функции
budget-queue-handler
:yc serverless function version create \ --function-name budget-queue-handler \ --memory 512m \ --execution-timeout 5s \ --runtime golang119 \ --entrypoint budget_queue_handler.HandleBudgetQueueMessage \ --service-account-id <идентификатор_сервисного_аккаунта> \ --environment TELEGRAM_BOT_API_TOKEN=<API-токен_Telegram-бота> \ --environment TELEGRAM_BOT_CHAT_ID=<ChatID_пользователя_Telegram> \ --source-path="./src_queue.zip"
Где:
-
--service-account-id
— идентификатор сервисного аккаунтаservice-account-for-budget
, сохраненный ранее. Сервисный аккаунт будет использоваться для вызова функции. -
--environment
— переменные окружения:TELEGRAM_BOT_API_TOKEN
— API-токен Telegram-бота, сохраненный ранее.TELEGRAM_BOT_CHAT_ID
— идентификаторChatID
пользователя Telegram, сохраненный ранее.
-
--source-path
— путь к ZIP-архивуsrc_queue.zip
.
Результат:
done (29s) id: d4e41l4gj7rk******** function_id: d4e6r2g9trt5******** created_at: "2024-02-24T07:43:32.464Z" runtime: golang119 entrypoint: budget_queue_handler.HandleBudgetQueueMessage resources: memory: "536870912" execution_timeout: 5s service_account_id: ajed1o6dd581******** image_size: "5464064" status: ACTIVE tags: - $latest environment: TELEGRAM_BOT_API_TOKEN: 7150638333:AAGujjyua-0VrIm7j9iG3mOxmz1******** TELEGRAM_BOT_CHAT_ID: "59529*****" log_options: folder_id: b1g9d2k0itu4********
-
Чтобы создать функцию, воспользуйтесь методом create для ресурса Function или вызовом gRPC API FunctionService/Create.
Чтобы создать версию функцию, воспользуйтесь методом createVersion для ресурса Function или вызовом gRPC API FunctionService/CreateVersion.
-
Создайте триггер для Message Queue
-
В консоли управления
выберите ваш каталог. -
Выберите сервис Cloud Functions.
-
На панели слева выберите
Триггеры. -
Нажмите кнопку Создать триггер.
-
В блоке Базовые параметры:
- В поле Имя укажите имя триггера
budget-queue-trigger
. - В поле Тип выберите
Message Queue
. - В поле Запускаемый ресурс выберите
Функция
.
- В поле Имя укажите имя триггера
-
В блоке Настройки сообщений Message Queue выберите созданные ранее ресурсы:
- В поле Очередь сообщений —
budget-queue
. - В поле Сервисный аккаунт —
service-account-for-budget
.
- В поле Очередь сообщений —
-
В блоке Настройки функции выберите функцию
budget-queue-handler
и укажите сервисный аккаунтservice-account-for-budget
. От его имени будет вызываться функция. -
Нажмите кнопку Создать триггер.
Чтобы создать триггер для Message Queue, который вызывает функцию budget-queue-handler
, выполните команду:
yc serverless trigger create message-queue \
--name budget-queue-trigger \
--queue <идентификатор_очереди> \
--queue-service-account-id <идентификатор_сервисного_аккаунта> \
--invoke-function-name budget-queue-handler \
--invoke-function-service-account-id <идентификатор_сервисного_аккаунта> \
--batch-size 1 \
--batch-cutoff 10s
Где:
--queue
— идентификатор очередиbudget-queue
, сохраненный при ее создании.--queue-service-account-id
— идентификатор сервисного аккаунтаservice-account-for-budget
, сохраненный ранее. Сервисный аккаунт будет использоваться для чтения сообщений из очереди.--invoke-function-service-account-id
— идентификатор сервисного аккаунтаservice-account-for-budget
, сохраненный ранее. Сервисный аккаунт будет использоваться для вызова функции.
Результат:
id: a1sqq6341kvh********
folder_id: b1g9d2k0itu4********
created_at: "2024-02-24T08:35:39.296084612Z"
name: budget-queue-trigger
rule:
message_queue:
queue_id: yrn:yc:ymq:ru-central1:b1g9d2k0itu4********:budget-queue
service_account_id: ajed1o6dd581********
batch_settings:
size: "1"
cutoff: 10s
invoke_function:
function_id: d4e6r2g9trt5********
function_tag: $latest
service_account_id: ajed1o6dd581********
status: ACTIVE
Подробнее о команде yc serverless trigger create message-queue
читайте в справочнике CLI.
Чтобы создать триггер для Message Queue, воспользуйтесь методом create для ресурса Trigger или вызовом gRPC API TriggerService/Create.
Создайте виртуальные машины Compute Cloud
-
В консоли управления
выберите каталог, в котором будет создана ВМ. -
В списке сервисов выберите Compute Cloud.
-
На панели слева выберите
Виртуальные машины. -
Нажмите кнопку Создать виртуальную машину.
-
В блоке Образ загрузочного диска выберите Ubuntu 22.04 LTS.
-
В блоке Расположение выберите зону доступности
ru-central1-b
. -
В блоке Сетевые настройки:
- В поле Подсеть выберите созданную ранее подсеть
sample-subnet-ru-central1-b
. - В поле Публичный адрес выберите
Автоматически
.
- В поле Подсеть выберите созданную ранее подсеть
-
В блоке Доступ выберите SSH-ключ и укажите данные для доступа к ВМ:
- В поле Логин введите имя пользователя, например,
yc-user
. -
В поле SSH-ключ выберите SSH-ключ, сохраненный в вашем профиле пользователя организации.
Если в вашем профиле нет сохраненных SSH-ключей или вы хотите добавить новый ключ:
- Нажмите кнопку Добавить ключ.
- Задайте имя SSH-ключа.
- Загрузите или вставьте содержимое открытого SSH-ключа. Пару SSH-ключей для подключения к ВМ по SSH необходимо создать самостоятельно.
- Нажмите кнопку Добавить.
SSH-ключ будет добавлен в ваш профиль пользователя организации.
Если в организации отключена возможность добавления пользователями SSH-ключей в свои профили, добавленный открытый SSH-ключ будет сохранен только в профиле пользователя создаваемой виртуальной машины.
- В поле Логин введите имя пользователя, например,
-
В блоке Общая информация:
- Укажите имя ВМ:
target-instance-1
. - В поле Метки нажмите кнопку Добавить метку и введите
target-for-stop:true
. Нажмите Enter, чтобы сохранить метку.
- Укажите имя ВМ:
-
Нажмите кнопку Создать ВМ.
Создайте виртуальную машину:
yc compute instance create \
--name target-instance-1 \
--labels target-for-stop=true \
--zone ru-central1-b \
--network-interface subnet-name=sample-subnet-ru-central1-b,nat-ip-version=ipv4 \
--create-boot-disk image-folder-id=standard-images,image-family=ubuntu-2204-lts \
--ssh-key ~/.ssh/<имя_ключа>.pub
Где --ssh-key
— путь к публичному SSH-ключу. Для этого ключа на виртуальной машине будет автоматически создан пользователь yc-user
.
Результат:
done (39s)
id: epdbhj4gssbp********
folder_id: b1g9d2k0itu4********
created_at: "2024-02-24T09:29:16Z"
name: target-instance-1
labels:
target-for-stop: "true"
zone_id: ru-central1-b
platform_id: standard-v2
resources:
memory: "2147483648"
cores: "2"
core_fraction: "100"
status: RUNNING
metadata_options:
gce_http_endpoint: ENABLED
aws_v1_http_endpoint: ENABLED
gce_http_token: ENABLED
aws_v1_http_token: DISABLED
boot_disk:
mode: READ_WRITE
device_name: epd4uuhf52oe********
auto_delete: true
disk_id: epd4uuhf52oe********
network_interfaces:
- index: "0"
mac_address: d0:0d:b8:**:**:**
subnet_id: e2l1ejkvq4jv********
primary_v4_address:
address: 192.168.1.9
one_to_one_nat:
address: 158.160.**.***
ip_version: IPV4
serial_port_settings:
ssh_authorization: INSTANCE_METADATA
gpu_settings: {}
fqdn: epdbhj4gssbp********.auto.internal
scheduling_policy: {}
network_settings:
type: STANDARD
placement_policy: {}
Подробнее о команде yc compute instance create
читайте в справочнике CLI.
Чтобы создать виртуальную машину, воспользуйтесь методом REST API create для ресурса Instance или вызовом gRPC API InstanceService/Create.
Аналогичным способом создайте еще две виртуальные машины — target-instance-2
и target-instance-3
. У последней ВМ для метки target-for-stop
укажите значение false
.
Убедитесь, что по триггеру останавливаются ВМ и отправляются уведомления в Telegram
Дождитесь, когда будут достигнуты пороговые значения, которые вы указали в бюджете. Убедитесь, что при достижении пороговых значений бюджета виртуальные машины target-instance-1
и target-instance-2
остановились, а Telegram-бот отправил вам уведомление о срабатывании триггера для бюджета:
Budget trigger was triggered!
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы: