Укажите идентификатор шлюза API вместо использования «случайного» идентификатора - PullRequest
1 голос
/ 01 октября 2019

С помощью развертывания лямбда-функции AWS (через Serverless Framework) и предоставления ее через конечную точку HTTPS в AWS API Gateway ... возможно создать и установить идентификатор шлюза API и, таким образом, определитьпервая часть конечной точки HTTP для этой лямбда-функции?

При развертывании лямбда-функции AWS и добавлении события HTTP я теперь получаю случайный идентификатор как (первое имя хоста) в https://klv5e3c8z5.execute -api.eu-запад 1.amazonaws.com / v1 / FizzBuzz . Новые / свежие развертывания получают новую случайную строку с этим 10-значным идентификатором.

Вместо того, чтобы использовать это, я хотел бы определить и установить этот идентификатор. (Я сам позабочусь о том, чтобы он был достаточно уникальным, или сам разбираюсь с коллизиями имен конечных точек.)

Причина этого в том, что в отдельном проекте без сервера мне нужно использовать эту конечную точку (и, следовательно, знать, чтоЯ бы). Вместо того, чтобы определять его в проекте 1, а затем читать / извлекать его в проекте 2, я хочу построить и установить конечную точку в проекте 1, чтобы я мог использовать также известную конечную точку в проекте 2.

(Было предложено использовать настраиваемый домен в качестве альтернативы / псевдонима для этой конечной точки ... но, если возможно, я не хочу вводить новый компонент в смесь и решение, которое не включает Cloud-Это может занять 30 минут, чтобы создать фронт домена лучше :-))

Если это невозможно, мне, возможно, придется использовать подход, как описанона http://www.goingserverless.com/blog/api-gateway-url, упоминание того, что конечная точка предоставляется из одного проекта через стек CloudFormation , для чтения и использования в другом проекте, но это вводит (небольшую задержку и) зависимостьпри развертывании второго проекта.

Ответы [ 2 ]

1 голос
/ 02 октября 2019

«Первое имя хоста», которое вы хотите установить, называется «REST API id» и генерируется API Gateway при создании API. API , используемый для создания API в API Gateway, не дает возможности указать идентификатор REST API, поэтому нет способа указать идентификатор.

Причина этогоВероятно, эти идентификаторы используются как часть публичного имени домена. Поскольку это доменное имя не содержит идентификатора учетной записи AWS, которой оно принадлежит, идентификаторы должны быть глобально уникальными, поэтому AWS генерирует их, чтобы избежать коллизий. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *id} - это значение API id , сгенерированное API Gateway . Вы можете назначить пользовательское имя домена (например, apis.example.com) в качестве имени хоста API и вызвать API с базовым URL-адресом формата https://apis.example.com/myApi.

Чтобы создать собственное доменное имя, вы должны учитывать, что с ним связано еще больше сложностей, поскольку вы также должны предоставить соответствующий SSL-сертификат для домена. Хотя для этого вы можете использовать ACM , в настоящее время существует ограничение на то, что SSL-сертификаты для дистрибутивов CloudFront (которые используют API-интерфейсы API Gateway с оптимизацией границ) * должны быть выпущены на востоке США. -1 .

Опция, которую вы уже упомянули для экспорта конечной точки API в стеке CloudFormation в качестве выходного значения и использования этого экспортированного значения в вашем другом стеке, будет работать хорошо. Как вы заметили, это создаст зависимость между двумя стеками, поэтому после развертывания проекта 2, который использует выходное значение из проекта 1, вы можете удалить стек CloudFormation для проекта 1 только после того, как стек проекта 2 будет удален или обновлен. больше не использовать экспортируемое значение. Это может быть особенностью, но из вашего описания это звучит так, как будто это не подходит для вашего случая использования.

Что-то похожее на экспортированные выходные значения стека будет заключаться в использовании некоторого общего хранилища вместо использования экспортированного вывода CloudFormation. ценит особенности. Здесь на ум приходит SSM Parameter Store , который предлагает некоторую интеграцию в CloudFormation . Интеграция упрощает чтение параметра из хранилища параметров SSM в стеке проекта 2. Для записи значения в хранилище параметров в проекте 1 вам потребуется использовать пользовательский ресурс в CloudFormation. шаблон. Для Github существует как минимум один пример реализации .

Как видите, для решения вашей проблемы доступно несколько вариантов. Какой из них выбрать, зависит от потребностей ваших проектов.

0 голосов
/ 08 октября 2019

Вопрос: «Можно ли построить и установить идентификатор шлюза API?»

Ответ: Нет (см. Другой ответ на этот вопрос).

Мне удалось получитьконечная точка службы проекта 1 в файл serverless.yml проекта 2, чтобы окончательно создать полный URL-адрес нужной мне службы. Я делюсь этим, потому что это альтернативное решение, которое также работает в моем случае.

В serverless.yml проекта 2 вы можете обратиться к конечной точке службы проекта 1 через service_url: "${cf:<service-name>-<stage>.ServiceEndpoint}". Пример: "${cf:my-first-service-dev.ServiceEndpoint}".

CloudFront предоставляет ServiceEndpoint, содержащий полный URL-адрес, включая идентификатор API REST шлюза AWS.

Дополнительная информация в документации по Serverless Framework: https://serverless.com/framework/docs/providers/aws/guide/variables/#reference-cloudformation-outputs.

Похоже, что Serverless Framework добавляет это ServiceEndpoint в качестве вывода стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...