Пренасочване на домейн с CloudFront функции

Тази статия разказва за това, че едно просто пренасочване на домейни от върхови (основни) домейни към други домейни или поддомейни може да се превърне в трудно, като се имат предвид предлаганите от официалните AWS решения по въпроса.

Ще представя редица добре установени, но тромави решения, заедно с много по-проста алтернатива, която вместо това използва функциите на CloudFront.



Проблемът"

Напоследък се натъкнах (отново) на очевидно прост проблем, с който вече се сблъсках преди много години:

Искам да пренасоча интернет трафика от моя основен (apex) домейн (например example.com) към друг домейн/поддомейн (например example.net, www.example.com). Как мога да направя това?

Все още го помня като много странно преживяване, предвид естеството на официалното решение. След много години, с голяма изненада, решенията все още включват:

  • Създаване на S3 контейнер за хостинг на уебсайт със заявка за пренасочване към друг контейнер или домейн — защо имам нужда от S3 контейнер, за да извърша пренасочване на домейн?





  • Използвайте Route53 записи за извършване на пренасочване — има повече смисъл, но все пак с някои предупреждения.


И двата подхода имат ограничения и създават объркване като:

  • Route53CNAME не са приложими за апекс домейни.

Изведнъж прост проблем става труден поради „принудителни“ решения (S3) или ограничения (apex CNAME).

Решението

Докато горното все още има идеален смисъл в повечето сценарии, третият подход е аутсайдер, който решава проблема елегантно. Функциите CloudFront позволяват на разработчиците да изпълняват JavaScript код глобално в края на облака. Разработчиците могат лесно да персонализират и манипулират съдържанието, докато то се доставя на крайните потребители, като например пренасочване на домейн.

Това гарантира много детайлно ниво на контрол и прозрачност, което се управлява и автоматизира на ръба, а не е част от приложение или някои неясни конфигурации, които вашият оперативен екип управлява.

Тази страница има чудесен преглед на жизнения цикъл на такива функции:



За да създадете функция, отидете на CloudFront и изберете елемент от менюто Функции, потребителският интерфейс е много ясен и интуитивен:

Кодът може да бъде поставен директно в потребителския интерфейс или лесно да се управлява по-добре чрез IaC (CDK, Terraform и т.н.).

Може да се тества чрез потребителски интерфейс, където можете да имитирате HTTP заявка, като попълвате данни като заглавки, бисквитки и много други:

След като сте готови, можете да публикувате функцията и ще бъде налична на ръба в рамките на минути, ако не и секунди.

За този случай на употреба функциите имат достъп до информация за заглавката, като например хост. Ако хостът е APEX, тогава пренасочваме заявките (301 HTTP статус) към неговия целеви поддомейн:

Това е! Няма нужда от тромави конфигурации, удряне на стени с ограничения. Разбира се, „ценообразуването“ трябва да се има предвид в случай на масивен трафик, но като цяло CloudFront поддържа планове за спестяване.