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). Так что да - было бы здорово услышать о том, как другие строят подобную инфраструктуру!