ПР. Запускаем функцию с помощью 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 в браузере и наслаждайтесь вызовом вашей функции.
На следующем уроке мы разберёмся, как в работе помогают триггеры, ведение журнала и мониторинг выполнения функций.