Cname для пользовательского домена AWS API Gateway

Концепция проста.

Создайте переключатель Cname, который указывает на синие / зеленые каналы развертывания через AWS API Gateway. API имеет два этапа для сине-зеленого, отображаемого обратно в переменную окружения, которая, в свою очередь, отображается обратно в псевдоним Lambda, связанный с его собственной выделенной версией. Поэтому теперь есть два отдельных канала для развертывания в. Все это прекрасно работает.

Проблема возникает, когда в Route53 создается Cname для указания на синий или зеленый пользовательские домены шлюзов API. Сертификат SSL хранится в диспетчере сертификатов AWS.

Когда мы вызываем синюю конечную точку через Cname, мы получаем ошибку SSL

curl -Il -H "Host:blue-api.example.com" -H "x-api-key:xxxxxxxxx" 
-X GET https://cname-api.example.com/questions/health

curl: (35) Сбой SSL-рукопожатия, серверу, скорее всего, требуется клиентский сертификат для подключения

Принимая во внимание, что когда мы вызываем пользовательский домен напрямую, он работает

curl -Il -H "Host:blue-api.example.com" -H "x-api-key:xxxxxxxxx" 
-X GET https://blue-api.example.com/questions/health

HTTP/1.1 200 ОК

Любые указатели или предложения будут высоко оценены?

Ответ на первый комментарий

Спасибо, Майкл. Да, мы экспортировали SSL-сертификаты из eu-west-1 в AWS Cert Manager для us-east-1, так как мы работаем с оптимизированным по краям пользовательским доменным именем. Облачный интерфейс API, созданный в Cloudfront, размещается в us-east-1 вместе с доменом costom и cname, но корневой домен размещается в eu-west-1. Это может быть проблемой?

Мы пытаемся провести дальнейшие тесты, включив следующие заголовки, и сообщим -

ResponseParameters:
method.response.header.Access-Control-Allow-Headers: true
method.response.header.Access-Control-Allow-Methods: true
method.response.header.Access-Control-Allow-Origin: true

Я понимаю, что мы можем использовать один пользовательский домен и разделять каналы, используя вместо этого этапы, сопоставленные с путями, но вышеупомянутое является предпочтительным решением.

У нас также есть открытый билет с AWS, так как это также сбило их с толку и передало в их внутреннюю службу поддержки.

:)

1 ответ

Таким образом, после многих недель работы с Amazon Support мы получили работающее решение, но, возможно, не самое экономичное, как упоминалось в раннем решении.

Рабочий процесс -

1.Создайте API GW, где каждый этап имеет свой собственный домен.

EG blue-stage > blue-api.example.com и green-stage> green-api.example.com

2. Затем создайте Cname в том же регионе AWS, где было создано API GW. EG cname-api.example.com

3. Создайте экземпляр Web Edge Cloudfront с той же DNS-записью (дубликатом), которая использовалась для Cname (cname-api.example.com), и укажите этому экземпляру Cloudfront на произвольную корзину S3.

Теперь сделайте запрос

curl -Il -H "Host:blue-api.example.com" -H "x-api-key:xxxxxxxxx" 
-X GET https://cname-api.example.com/questions/health

HTTP/1.1 200 ОК

Да, это излишне для того, что нам нужно для достижения, а также не самое экономически эффективное, и мы не делаем KISS (Keep It Simple Stupid). Так что да - было бы здорово услышать о том, как другие строят подобную инфраструктуру!

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