Канареечный релиз функции Cloud Functions
Важно
Часть ресурсов, необходимых для прохождения практического руководства, доступны только в регионе Россия.
Создайте канареечный релиз функции Cloud Functions с помощью API Gateway.
Чтобы создать канареечный релиз:
- Подготовьте облако к работе.
- Создайте сервисный аккаунт.
- Создайте функцию Cloud Functions.
- Добавьте теги.
- Создайте API-шлюз.
- Протестируйте приложение.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость ресурсов поддержки веб-приложения входят:
- Плата за количество запросов к API-шлюзу и исходящий трафик (см. тарифы Yandex API Gateway).
- Плата за количество вызовов функции, вычислительные ресурсы, выделенные для выполнения функции, и исходящий трафик (см. тарифы Yandex Cloud Functions).
Создайте сервисный аккаунт
- В консоли управления
выберите каталог, в котором хотите создать сервисный аккаунт. - В списке сервисов выберите Identity and Access Management.
- Нажмите кнопку Создать сервисный аккаунт.
- Введите имя сервисного аккаунта:
canary-sa. - Нажмите Добавить роль и выберите роль
editor. - Нажмите кнопку Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Создайте сервисный аккаунт
canary-sa:yc iam service-account create --name canary-saРезультат:
id: nfersamh4sjq******** folder_id: b1gc1t4cb638******** created_at: "2023-09-21T10:36:29.726397755Z" name: canary-saСохраните идентификатор сервисного аккаунта
canary-sa(id) и каталога, в котором его создали (folder_id). -
Назначьте сервисному аккаунту роль
editorна каталог:yc resource-manager folder add-access-binding <идентификатор_каталога> \ --role editor \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>Результат:
done (1s)
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Опишите в конфигурационном файле параметры сервисного аккаунта:
resource "yandex_iam_service_account" "canary-sa" { name = "canary-sa" folder_id = "<идентификатор_каталога>" } resource "yandex_resourcemanager_folder_iam_member" "editor" { folder_id = "<идентификатор_каталога>" role = "editor" member = "serviceAccount:${yandex_iam_service_account.canary-sa id}" }Где:
name— имя сервисного аккаунта. Обязательный параметр.folder_id— идентификатор каталога. Необязательный параметр. По умолчанию будет использовано значение, указанное в настройках провайдера.role— назначаемая роль.
Более подробную информацию о параметрах ресурса
yandex_iam_service_accountв Terraform, см. в документации провайдера. -
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится информация о сервисном аккаунте. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply -
Подтвердите создание сервисного аккаунта: введите в терминал слово
yesи нажмите Enter.После этого будет создан сервисный аккаунт. Проверить появление сервисного аккаунта можно в консоли управления
или с помощью команды CLI:yc iam service-account list
-
Чтобы создать сервисный аккаунт, воспользуйтесь методом create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create.
Чтобы назначить сервисному аккаунту роль editor на каталог, воспользуйтесь методом setAccessBindings для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/SetAccessBindings.
Создайте функцию Cloud Functions
- версию для текущего релиза;
- версию для канареечного релиза, которая будет тестироваться на некоторой доле запросов.
Вы можете использовать собственную функцию или создать любую функцию из списка.
Добавьте теги
Первой версии функции добавьте тег stable, второй — canary.
Чтобы добавить тег версии, выполните команду:
yc serverless function version set-tag --id <идентификатор_версии> --tag <тег>
Результат:
id: b09ch6pmpohf********
function_id: b097d9ous3ge********
created_at: "2023-08-22T09:12:38.464Z"
runtime: python311
entrypoint: test.handler
resources:
memory: "134217728"
execution_timeout: 5s
image_size: "4096"
status: ACTIVE
tags:
- $latest
- stable
Чтобы добавить тег версии:
-
В конфигурационном файле добавьте блок
tagsдля ресурсаyandex_functionи укажите список тегов форматеtags = ["<имя_тега>"].Пример описания функции в конфигурации Terraform:
resource "yandex_function" "test-function" { name = "canary-function" user_hash = "canary-function" runtime = "python311" entrypoint = "main" memory = "128" execution_timeout = "10" service_account_id = "<идентификатор_сервисного_аккаунта>" tags = ["my_tag"] content { zip_filename = "<путь_к_ZIP-архиву>" } }Более подробную информацию о параметрах ресурса
yandex_functionсм. в документации провайдера. -
Проверьте конфигурацию командой:
terraform validateЕсли конфигурация является корректной, появится сообщение:
Success! The configuration is valid. -
Выполните команду:
terraform planВ терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply -
Подтвердите изменения: введите в терминал слово
yesи нажмите Enter.
Проверить, что теги появились, можно в консоли управления
yc serverless function version list --function-name <имя_функции>
Чтобы добавить тег версии функции, воспользуйтесь методом REST API setTag для ресурса Function или вызовом gRPC API FunctionService/SetTag.
Создайте API-шлюз
-
В консоли управления
выберите каталог, в котором хотите создать API-шлюз. -
В списке сервисов выберите API Gateway.
-
Нажмите кнопку Создать API-шлюз.
-
В поле Имя введите
canary. -
В блок Спецификация добавьте спецификацию:
openapi: 3.0.0 info: title: Sample API version: 1.0.0 x-yc-apigateway: variables: function.tag: default: "stable" enum: - "stable" - "canary" paths: /: get: x-yc-apigateway-integration: type: cloud_functions function_id: <идентификатор_функции> tag: "${var.function.tag}" service_account_id: <идентификатор_сервисного_аккаунта> -
В разделе Управление переменными активируйте переключатель Канареечный релиз.
-
В поле Доля запросов в канареечном релизе укажите
50. -
В поле Переменные для канареечного релиза укажите
function.tag=canary. -
Нажмите кнопку Создать.
-
Сохраните следующую спецификацию в файл
spec.yaml:openapi: 3.0.0 info: title: Sample API version: 1.0.0 x-yc-apigateway: variables: function.tag: default: "stable" enum: - "stable" - "canary" paths: /: get: x-yc-apigateway-integration: type: cloud_functions function_id: <идентификатор_функции> tag: "${var.function.tag}" service_account_id: <идентификатор_сервисного_аккаунта> -
Выполните команду:
yc serverless api-gateway create --name canary --spec=spec.yaml --canary-weight=50 --canary-variables function.tag=canaryГде:
--name— имя API-шлюза.--spec— файл со спецификацией.--canary-weight— доля запросов в канареечном релизе.--canary-variables— переменные для канареечного релиза.
Результат:
done (5s) id: d5d1ud9bli1e******** folder_id: b1gc1t4cb638******** created_at: "2023-09-25T16:01:48.926Z" name: canary status: ACTIVE domain: d5dm1lba80md********.i9******.apigw.yandexcloud.net log_group_id: ckgefpleo5eg******** connectivity: {} log_options: folder_id: b1gc1t4cb638******** canary: weight: "50" variables: function.tag: string_value: canary
Чтобы создать API-шлюз:
-
Опишите в конфигурационном файле параметры ресурса
yandex_api_gateway:resource "yandex_api_gateway" "canary-api-gateway" { name = "canary" canary { weight = 50 variables = { function.tag = "canary" } } spec = <<-EOT openapi: 3.0.0 info: title: Sample API version: 1.0.0 x-yc-apigateway: variables: function.tag: default: "stable" enum: - "stable" - "canary" paths: /: get: x-yc-apigateway-integration: type: cloud_functions function_id: <идентификатор_функции> tag: "${var.function.tag}" service_account_id: <идентификатор_сервисного_аккаунта> EOT }Где:
-
name— имя API-шлюза. Формат имени:- длина — от 2 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
canary.0.weight— доля запросов в канареечном релизе. -
canary.0.variables— переменные для канареечного релиза. -
spec— спецификация API-шлюза.
Более подробную информацию о параметрах ресурсов в Terraform см. в документации провайдера.
-
-
Проверьте корректность конфигурационных файлов.
-
В командной строке перейдите в папку, где вы создали конфигурационный файл.
-
Выполните проверку с помощью команды:
terraform plan
Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет.
-
-
Разверните облачные ресурсы.
-
Если в конфигурации нет ошибок, выполните команду:
terraform apply -
Подтвердите создание ресурсов: введите в терминал слово
yesи нажмите Enter.После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
или с помощью команд CLI:yc serverless api-gateway get <имя_API-шлюза>
-
Чтобы создать API-шлюз, воспользуйтесь методом REST API create для ресурса ApiGateway или вызовом gRPC API ApiGatewayService/Create.
Проверьте работу приложения
Сделайте несколько запросов к созданному API-шлюзу. Около половины запросов должны быть обработаны версией функции с тегом canary.
Как удалить созданные ресурсы
Чтобы перестать платить за созданные ресурсы: