Canary Release и Blue Green Deployment на AWS

В настоящее время я использую Canary Release и Blue Green Deployment на своем статическом веб-сайте на AWS S3. По сути, я создал два сегмента S3 (v1 и v2) и два фронта облака (я не добавил CNAME). Затем я создаю 2 записи псевдонима A в маршруте 53 с 50% каждой политикой маршрутизации веса. Однако меня перенаправили на v1, используя только ноутбук и мобильный телефон для доступа к своему домену. Я даже прошу коллегу открыть мой домен, и они также перенаправляются на v1.

Меня действительно озадачило, почему ни одного пользователя не направляют на v2?

AWS Static Web в S3

2 ответа

Назначенный dyyyexample.cloudfront.net а также dzzzexample.cloudfront.net Имена хостов, которые направляют трафик в ваши дистрибутивы CloudFront, отправляются в одно и то же место. CloudFront не может видеть ваши записи псевдонимов DNS, поэтому он не знает, какой псевдоним использовался.

Вместо этого он смотрит на TLS SNI и HTTP Host заголовок браузер отправляет. Он использует эту информацию для сопоставления с альтернативным доменным именем вашего дистрибутива - без изменений в DNS.

Имя хоста вашего сайта, example.com, настраивается в качестве альтернативного имени домена только в одном из ваших дистрибутивов, поскольку CloudFront не позволяет предоставлять одно и то же значение более чем в одном дистрибутиве.

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

Короче говоря, CloudFront не поддерживает напрямую Blue-Green или Canary.

Обходной путь - использовать триггер Lambda@Edge и файл cookie, чтобы привязать каждого зрителя к тому или иному источнику. Триггер запроса источника Lambda@Edge позволяет изменить источник, пока запрос находится в полете.

В документации есть пример A/B-тестирования, но этот пример меняет путь. См. Примеры выбора динамического источника, чтобы узнать, как поменять источник. Комбинация логики этих двух позволяет A/B-тестирование через два сегмента (или любые два альтернативных серверных конца).

То, что вы объясняете, должно работать, если вы используете «перекрывающиеся псевдонимы» в Cloudfront. Вы настраиваете один дистрибутив на прослушивание app.example.com, а другой - на * .example.com и используете взвешенную маршрутизацию Route53 для app.example.com.

Однако взвешенная маршрутизация может быть не идеальным решением для канареечных релизов. Это связано с распространением / кешированием DNS и тем, что он не липкий.

Как и предлагает Майкл, вы можете захотеть иметь 1 облачный фронт и маршрутизацию в сегмент A / B с помощью функций Lambda @ Edge или Cloudfront. Вот пример.

Другие вопросы по тегам