1. Введение
Обзор
Функции Cloud Run позволяют указать, какие версии должны получать трафик, а также указать проценты трафика, получаемого ревизией. Ревизии позволяют выполнять откат к предыдущей версии, постепенно развертывать версию и распределять трафик между несколькими версиями.
В этих лабораторных работах показано, как использовать версии для управления трафиком функций Cloud Run. Подробнее о редакциях можно узнать в документации Cloud Run .
Что вы узнаете
- Как разделить трафик между двумя или более версиями для функции Cloud Run
- Как постепенно выкатывать новую ревизию
- Как откатиться на предыдущую ревизию
2. Настройка и требования
Предварительные условия
- Вы вошли в облачную консоль.
- Ранее вы развернули функцию Cloud Run. Например, вы можете выполнить развертывание функции Cloud Run , чтобы начать работу.
Активировать Cloud Shell
- В Cloud Console нажмите «Активировать Cloud Shell».
.
Если вы запускаете Cloud Shell впервые, вы увидите промежуточный экран с описанием того, что это такое. Если вам был представлен промежуточный экран, нажмите «Продолжить» .
Подготовка и подключение к Cloud Shell займет всего несколько минут.
Эта виртуальная машина загружена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Большую часть, если не всю, работу в этой лаборатории кода можно выполнить с помощью браузера.
После подключения к Cloud Shell вы увидите, что вы прошли аутентификацию и что для проекта установлен идентификатор вашего проекта.
- Выполните следующую команду в Cloud Shell, чтобы подтвердить, что вы прошли аутентификацию:
gcloud auth list
Вывод команды
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте:
gcloud config list project
Вывод команды
[core] project = <PROJECT_ID>
Если это не так, вы можете установить это с помощью этой команды:
gcloud config set project <PROJECT_ID>
Вывод команды
Updated property [core/project].
3. Разделение трафика
В этом примере показано, как создать функцию, которая считывает переменную среды цвета и возвращает имя редакции, используя этот цвет фона.
Хотя в этой лаборатории кода используется node.js, вы можете использовать любую среду выполнения.
Установите переменные среды
Вы можете установить переменные среды, которые будут использоваться в этой лаборатории кода.
REGION=<YOUR_REGION> PROJECT_ID=<YOUR-PROJECT-ID> BG_COLOR=darkseagreen
Создайте функцию
Сначала создайте каталог для исходного кода и перейдите в этот каталог.
mkdir revisions-gcf-codelab && cd $_
Затем создайте файл package.json
со следующим содержимым:
{ "dependencies": { "@google-cloud/functions-framework": "^3.0.0" } }
Затем создайте исходный файл index.js
со следующим содержимым:
const functions = require('@google-cloud/functions-framework'); const BG_COLOR = process.env.BG_COLOR; const K_REVISION = process.env.K_REVISION; functions.http('helloWorld', (req, res) => { res.writeHead(200, { 'Content-Type': 'text/html' }); res.end('<html><body style="background-color:' + BG_COLOR + ';"' + '><div><p>' + 'Hello from ' + K_REVISION + ' using color ' + BG_COLOR + '</p></div></body>' + '</html>'); });
Чтобы развернуть функцию Cloud Run непосредственно в Cloud Run, выполните следующую команду:
gcloud beta run deploy traffic-splitting-gcf \ --source . \ --function helloWorld \ --region $REGION \ --no-allow-unauthenticated \ --set-env-vars BG_COLOR=$BG_COLOR
Если вы предпочитаете развертывать облачные функции 2-го поколения, используйте следующую команду:
gcloud functions deploy traffic-splitting-gcf \ --gen2 \ --runtime=nodejs20 \ --region=$REGION \ --source=. \ --entry-point=helloWorld \ --trigger-http \ --no-allow-unauthenticated \ --set-env-vars BG_COLOR=$BG_COLOR
Чтобы протестировать функцию, вы можете либо свернуть существующую конечную точку, чтобы увидеть темно-зеленый цвет в HTML, либо использовать браузер, чтобы напрямую перейти к конечной точке и увидеть цвет фона.
SERVICE_URL=$(gcloud run services describe traffic-splitting-gcf --platform managed --region $REGION --format 'value(status.url)') curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
Теперь разверните вторую ревизию с коричневым цветом фона.
Чтобы развернуть функцию Cloud Run непосредственно в Cloud Run, выполните следующую команду:
# update the env var BG_COLOR=tan gcloud beta run deploy traffic-splitting-gcf \ --source . \ --function helloWorld \ --region $REGION \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
Если вы предпочитаете развертывать облачные функции 2-го поколения, используйте следующую команду:
# update the env var BG_COLOR=tan gcloud functions deploy traffic-splitting-gcf \ --gen2 \ --runtime nodejs20 \ --entry-point helloHttp \ --source . \ --region $REGION \ --trigger-http \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
Теперь, когда вы скрутите конечную точку, вы увидите коричневый цвет фона.
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
Разделите трафик 50-50
Чтобы разделить трафик между редакциями темно-зеленого и коричневого цветов, вам необходимо найти идентификаторы редакций базовых сервисов Cloud Run. Вы можете увидеть идентификаторы ревизий, выполнив эту команду:
gcloud run revisions list --service traffic-splitting-gcf \ --region $REGION --format 'value(REVISION)'
Вы должны увидеть результаты, аналогичные приведенным ниже.
traffic-splitting-gcf-00003-qoq traffic-splitting-gcf-00002-zag
Вы можете разделить трафик 50/50 между двумя ревизиями, выполнив следующую команду:
gcloud run services update-traffic traffic-splitting-gcf \ --region $REGION \ --to-revisions <REVISION1>=50,<REVISION2>=50
Тестирование разделения трафика
Вы можете протестировать функцию, посетив ее общедоступный URL-адрес (с помощью Curl или непосредственно в браузере).
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" $SERVICE_URL
В половине случаев вы должны видеть темно-зеленую версию, а в другой половине — коричневую. Вы также увидите имя версии, указанное в выводе, например
<html><body style="background-color:tan;"><div><p>Hello traffic-splitting-gcf-00006-qoq</p></div></body></html>
4. Постепенное внедрение
В этом разделе вы узнаете, как постепенно внедрять изменения в новую версию Cloud Function. Подробнее о постепенном развертывании можно узнать в документации .
Вы будете использовать тот же код, что и в предыдущем разделе, но развернете его как новую облачную функцию.
Сначала установите beige
цвет фона и разверните функцию с именем gradual-rollouts-gcf
.
Чтобы развернуть функцию Cloud Run непосредственно в Cloud Run, выполните следующую команду:
# update the env var BG_COLOR=beige gcloud beta run deploy gradual-rollouts-gcf \ --source . \ --function helloWorld \ --region $REGION \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
Если вы предпочитаете развертывать облачные функции 2-го поколения, используйте следующую команду:
# update the env var BG_COLOR=beige # deploy the function gcloud functions deploy gradual-rollouts-gcf \ --gen2 \ --runtime nodejs20 \ --entry-point helloHttp \ --source . \ --region $REGION \ --trigger-http \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
Теперь предположим, что мы хотим постепенно выпустить новую версию с лавандовым цветом фона.
Во-первых, давайте установим текущую версию бежевого цвета, чтобы получать 100% трафика. Это гарантирует, что ваши будущие развертывания облачных функций не будут получать трафик. По умолчанию Cloud Functions устанавливает 100 % трафика для версии с latest
флагом. Если вручную указать, что текущая версия бежевого цвета должна получать весь трафик, версия с latest
флагом больше не будет получать 100% трафика. См. документацию .
# get the revision name BEIGE_REVISION=$(gcloud run revisions list --service gradual-rollouts-gcf \ --region $REGION --format 'value(REVISION)') # now set 100% traffic to that revision gcloud run services update-traffic gradual-rollouts-gcf --to-revisions=$BEIGE_REVISION=100 --region $REGION
Вы увидите вывод, аналогичный Traffic: 100% gradual-rollouts-gcf2-00001-yox
Теперь вы можете развернуть новую ревизию, которая не будет получать никакого трафика. Вместо внесения каких-либо изменений в код вы можете обновить переменную среды BG_COLOR для этой версии.
Чтобы развернуть функцию Cloud Run непосредственно в Cloud Run, выполните следующую команду:
# update color BG_COLOR=lavender # deploy the function that will not receive any traffic gcloud beta run deploy gradual-rollouts-gcf \ --source . \ --function helloWorld \ --region $REGION \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR
Если вы предпочитаете развертывать облачные функции 2-го поколения, используйте следующую команду:
# update color BG_COLOR=lavender # deploy the function that will not receive any traffic gcloud functions deploy gradual-rollouts-gcf \ --gen2 \ --runtime nodejs20 \ --entry-point helloHttp \ --source . \ --region $REGION \ --trigger-http \ --no-allow-unauthenticated \ --update-env-vars BG_COLOR=$BG_COLOR \ --tag $BG_COLOR
Теперь обновите переменную среды SERVICE_URL, чтобы использовать функцию постепенного развертывания-gcf.
SERVICE_URL=$(gcloud run services describe gradual-rollouts-gcf --platform managed --region $REGION --format 'value(status.url)')
и теперь, когда вы скручиваете службу
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
вы увидите бежевый цвет, хотя лавандовый цвет был последней развернутой версией.
<html><body style="background-color:beige;"><div><p>Hello from gradual-rollouts-gcf-24jan16-staging-2-00001-kop using color beige</p></div></body></html>
Протестируйте версию, обслуживающую 0 % трафика.
Предположим, вы убедились, что ваша ревизия успешно развернута и обслуживает 0 % трафика. Несмотря на то, что она прошла проверку работоспособности, вы все равно хотите убедиться, что в этой версии используется лавандовый цвет фона.
Чтобы протестировать лавандовую версию, вы можете применить к этой версии тег . Тегирование позволяет напрямую тестировать новую версию по определенному URL-адресу без обслуживания трафика.
Сначала получите URL-адрес изображения для этой версии.
IMAGE_URL=$(gcloud run services describe gradual-rollouts-gcf --region $REGION --format 'value(IMAGE)')
А теперь пометьте это изображение соответствующим цветом.
gcloud run deploy gradual-rollouts-gcf --image $IMAGE_URL --no-traffic --tag $BG_COLOR --region $REGION --no-allow-unauthenticated
Вы увидите вывод, аналогичный следующему:
The revision can be reached directly at https://lavender---gradual-rollouts-gcf-k6msmyp47q-lz.a.run.app
Теперь вы можете свернуть эту ревизию напрямую.
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET <DIRECT_REVISION_URL>
и посмотрите на лавандовый цвет в результатах:
<html><body style="background-color:lavender;"><div><p>Hello from gradual-rollouts-gcf-24jan16-00003-xik using color lavender</p></div></body></html>
Постепенно увеличивающийся трафик
Теперь вы можете начать отправлять трафик на лавандовую версию. В примере ниже показано, как отправить 1% трафика на лаванду.
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=1
Чтобы отправить 50% трафика в лаванду, вы можете использовать ту же команду, но вместо этого указать 50%.
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=50
Вы должны увидеть список того, сколько трафика получает каждая ревизия.
Traffic: 50% gradual-rollouts-gcf-00001-hos 50% gradual-rollouts-gcf-00004-mum lavender: https://lavender---gradual-rollouts-gcf-k6msmyp47q-uc.a.run.app
Когда вы будете готовы полностью использовать лавандовый цвет, вы можете установить лавандовый на 100 %, чтобы заменить бежевый.
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-tags lavender=100
и теперь, когда вы посещаете или сворачиваете URL-адрес службы функции постепенного развертывания-gcf,
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
вы увидите только лаванду.
<html><body style="background-color:lavender;"><div><p>Hello gradual-rollouts-gcf-00004-mum</p></div></body></html>
5. Откаты
Предположим, поступила ранняя обратная связь по UX, указывающая, что клиенты предпочитают бежевый цвет лавандовому, и вам нужно вернуться к бежевому цвету.
Вы можете вернуться к предыдущей версии (бежевой), выполнив эту команду.
gcloud run services update-traffic gradual-rollouts-gcf --region $REGION --to-revisions $BEIGE_REVISION=100
и теперь, когда ваш завиток или посетите конечную точку URL-адреса функции,
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
вы увидите возвращение бежевого цвета.
<html><body style="background-color:beige;"><div><p>Hello gradual-rollouts-gcf-00001-hos</p></div></body></html>
Подробнее об откатах можно узнать в документации .
6. Поздравляем!
Поздравляем с завершением работы над кодом!
Рекомендуем просмотреть документацию по развертываниям, откатам и миграции трафика.
Что мы рассмотрели
- Как разделить трафик между двумя или более версиями для функции Cloud Run
- Как постепенно выкатывать новую ревизию
- Как откатиться на предыдущую ревизию
7. Очистка
Чтобы избежать непреднамеренных расходов (например, если эта функция Cloud Run случайно вызывается больше раз, чем ежемесячно выделено для вызовов функции Cloud на уровне бесплатного пользования ), вы можете либо удалить функцию Cloud Run, либо удалить проект, созданный на шаге 2.
Чтобы удалить функцию Cloud Run, развернутую в Cloud Run, перейдите в Cloud Run в Cloud Console по адресу https://console.cloud.google.com/functions/ и удалите функции, созданные в этой лаборатории кода.
Чтобы удалить функции Cloud Run, развернутые как функции второго поколения, перейдите в раздел «Облачные функции» в облачной консоли по адресу https://console.cloud.google.com/functions/ и удалите функции, созданные вами в этой лаборатории кода.
Если вы решите удалить весь проект, вы можете перейти на https://console.cloud.google.com/cloud-resource-manager , выбрать проект, созданный на шаге 2, и нажать «Удалить». Если вы удалите проект, вам придется изменить проекты в Cloud SDK. Вы можете просмотреть список всех доступных проектов, запустив gcloud projects list
.