ПР. Запускаем функцию с помощью CLI
Кратко:
- Создание сервисного аккаунта: создание сервисного аккаунта с именем service-account-for-cf.
- Создание функции: создание функции с именем my-first-function с помощью команды yc serverless function create.
- Загрузка кода функции: создание файла index.py с кодом функции и загрузка его в облако с помощью команды yc serverless function version create.
- Вызов функции: вызов функции с помощью команды yc serverless function invoke и настройка публичного доступа с помощью команды yc serverless function allow-unauthenticated-invoke.
- На следующем уроке рассматриваются триггеры, ведение журнала и мониторинг выполнения функций.
Практическая работа. Запускаем функцию с помощью CLI
В предыдущей практической работе вы познакомились с созданием функции через консоль управления. На этом уроке вы научитесь создавать функцию с помощью интерфейса командной строки (утилиты
yc
).Пользоваться консолью управления бывает очень удобно, но вести большой проект всё же лучше локально, с помощью среды разработки. Артефакты локальной разработки можно с лёгкостью переносить в облако с помощью консольных утилит. Выполняя последовательно шаги, вы изучите основные команды для создания функций в облаке.
Шаг 1. Создание сервисного аккаунта
Создание аккаунта
Для начала убедитесь, что у вас установлена и инициализирована утилита
yc
.У вас уже есть сервисные аккаунты, созданные на предыдущих занятиях. Однако гораздо лучше, когда для каждой конкретной задачи (или блока задач) вы заводите отдельный сервисный аккаунт. Это обеспечивает прозрачность в управлении доступом и контроле за ролями в сервисах.
Предварительно установите утилиту
jq
, она потребуется для выполнения задания:
sudo apt install jq
Создайте сервисный аккаунт с именем
service-account-for-cf
:
export SERVICE_ACCOUNT=$(yc iam service-account create \
--name service-account-for-cf \
--description "service account for cloud functions" \
--format json | jq -r .)
Проверьте текущий список сервисных аккаунтов:
yc iam service-account list
echo $SERVICE_ACCOUNT
После проверки запишите идентификатор (
ID
) созданного сервисного аккаунта в переменную SERVICE_ACCOUNT_ID
:
echo "export SERVICE_ACCOUNT_ID=<идентификатор_сервисного_аккаунта>" >> ~/.bashrc && . ~/.bashrc
echo $SERVICE_ACCOUNT_ID
Назначение роли сервисному аккаунту
Добавьте вновь созданному сервисному аккаунту роль
editor
:
echo "export FOLDER_ID=$(yc config get folder-id)" >> ~/.bashrc && . ~/.bashrc
echo $FOLDER_ID
yc resource-manager folder add-access-binding $FOLDER_ID \
--subject serviceAccount:$SERVICE_ACCOUNT_ID \
--role editor
Не удаляйте файл
~/.bashrc
после прохождения практической работы, он понадобится нам в дальнейшем.Шаг 2. Создание и настройка функции
Создание функции
Создайте функцию с именем
my-first-function
:
yc serverless function create --name my-first-function
Вы получите URL, по которому можно будет сделать вызов функции
http_invoke_url
. По умолчанию функция будет непубличной.Загрузка кода функции
👉 Рассматривайте практические работы этого курса как разные проекты и создавайте файлы для каждой из них в отдельной папке.
Создайте файл
index.py
:
sudo nano index.py
Добавьте в
index.py
следующее содержимое:
def handler(event, context):
return {
'statusCode': 200,
'body': 'Hello World!',
}
Успешное выполнение этой функции вернёт небольшую веб-страницу.
Загрузите код функции в облако и создайте её версию. Для этого перейдите в папку с файлом
index.py
и выполните команду:
yc serverless function version create \
--function-name my-first-function \
--memory 256m \
--execution-timeout 5s \
--runtime python37 \
--entrypoint index.handler \
--service-account-id $SERVICE_ACCOUNT_ID \
--source-path index.py
Успешное выполнение команды приведёт к созданию версии функции. С помощью консоли управления убедитесь, что версия создана.
Вызов функции
Получите список функций, а затем — информацию о функции
my-first-function
:
yc serverless function list
yc serverless function version list --function-name my-first-function
В результате вызова последней команды из столбца
FUNCTION ID
вы узнаете идентификатор функции и сможете сделать вызов функции с помощью следующей команды:
yc serverless function invoke <идентификатор_функции>
По умолчанию функция создаётся непубличной. Чтобы сделать функцию
my-first-function
публичной, выполните следующую команду:
yc serverless function allow-unauthenticated-invoke my-first-function
После этого вы сможете вызвать её в браузере. Получите параметр
http_invoke_url
для функции my-first-function
:
yc serverless function get my-first-function
Введите значение параметра
http_invoke_url
в браузере и наслаждайтесь вызовом вашей функции.На следующем уроке мы разберёмся, как в работе помогают триггеры, ведение журнала и мониторинг выполнения функций.