Создаём функцию

Команды перечислены тут: https://github.com/yandex-cloud-examples/yc-practicum-serverless-telegram-bot/blob/main/steps/03-first-bot-function/README.md

yc serverless function create --name first-bot-function

Загружаем код. В окрежении должны быть верно установлены переменные SERVICE_ACCOUNT_DEPLOY_ID, TELEGRAM_BOT_TOKEN.

yc serverless function version create \
--function-name first-bot-function \
--memory 128m \
--execution-timeout 5s \
--runtime python311 \
--entrypoint index.handler \
--service-account-id $SERVICE_ACCOUNT_DEPLOY_ID \
--environment TELEGRAM_BOT_TOKEN=$TELEGRAM_BOT_TOKEN \
--source-path index.py

После этого, функция появится в консоли. Также можно получить список функций:

yc serverless function list

Получить инфу о функции:

yc serverless function version list --function-name first-bot-function

В результате вызова последней команды в столбце FUNCTION ID вы узнаете идентификатор функции и сможете сделать вызов функции с помощью следующей команды:

yc serverless function invoke <идентификатор функции>

По умолчанию функция создается не публичной. Чтобы сделать функцию first-bot-function публичной, вызовете следующую команду:

yc serverless function allow-unauthenticated-invoke first-bot-function

Получить URL функции:

yc serverless function get first-bot-function

Создаём API Gateway

Настраиваем конфиг first-bot-apigw.yml:

openapi: 3.0.0
info:
  title: first-bot-apigw
  version: 1.0.0
paths:
  /forwebhook:
    post:
      x-yc-apigateway-integration:
        type: cloud-functions
        function_id: <идентификатор функции>
        service_account_id: <ID сервисного аккаунта>
      operationId: first-bot-function

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

После внесения изменений в спецификацию first-bot-apigw.yml, используем ее для инициализации:

yc serverless api-gateway create \
--name first-bot-apigw \
--spec=first-bot-apigw.yml \
--description "first-bot-apigw"

В консоли увидим, в том числе, имя служебного домена гейтвея.

yc serverless api-gateway list
yc serverless api-gateway get --name first-bot-apigw

Служебный домен нужен нам для того, чтобы соединить нашу функцию и телеграм, Согласно нашей спецификации, функция будет доступна по адресу если в конце domain дописать /forwebhook. Должно получиться следующее:

https://<ID API Gateway>.apigw.yandexcloud.net/forwebhook

Сохраним полученный URL в переменную TELEGRAM_BOT_URL.

echo "export TELEGRAM_BOT_URL=https://d5dvar0dnmvu6kt1uujs.apigw.yandexcloud.net/forwebhook" >> ~/.bashrc && . ~/.bashrc
echo $TELEGRAM_BOT_URL

Деплой новой версии функции

Взято отсюда: https://github.com/yandex-cloud-examples/yc-practicum-serverless-telegram-bot/blob/main/steps/06-update-function/README.md

Сначала создадим архив с нужным кодом: `zip src.zip index.py requirements.txt

Чтобы передеплоить функцию с новыми параметрами, находясь в директории с архивом, вызовем следующую команду, не забыв подставить свои значения id и version-id:

yc serverless function version create \
--function-name first-bot-function \
--memory 128m \
--execution-timeout 5s \
--runtime python311 \
--entrypoint index.handler \
--service-account-id $SERVICE_ACCOUNT_DEPLOY_ID \
--secret environment-variable=TELEGRAM_BOT_TOKEN,id=e6qbrqvn8jv0gtfhkr5q,version-id=e6qej8pukfhq94petq0t,key=TELEGRAM_BOT_TOKEN \
--secret environment-variable=YDB_ENDPOINT,id=e6qbrqvn8jv0gtfhkr5q,version-id=e6qej8pukfhq94petq0t,key=YDB_ENDPOINT \
--secret environment-variable=YDB_DATABASE,id=e6qbrqvn8jv0gtfhkr5q,version-id=e6qej8pukfhq94petq0t,key=YDB_DATABASE \
--source-path src.zip

📂 YandexCloud | Последнее изменение: 23.07.2024 20:29