Перекрестная ссылка в AWS для шлюза SPA & API - PullRequest
0 голосов
/ 14 февраля 2019

Ниже я упомянул две службы AWS

  • Стек 1: Api Gateway + Lambda (без сервера)
  • Стек 2: SPA (одностраничное приложение) с использованием AWS S3.

Я хочу предоставить Stack 1 по одному 'или' , развернуть оба Stack 1 & Stack 2, чтобы оба стека могли общаться друг с другом

Мое текущее решение:
Я думаю использовать Cross Stack reference (Использование экспорта / импорта), чтобы Stack 1 выводил свои URL так, чтобы он могбыть направленным в будущем (Если я хочу развернуть Stack 2 в будущем).

Мой вопрос:

  1. Как связать API и SPA вместе?
  2. Хотя я знаю, как ссылаться на значение Cross Stack Exported URL в SPA (AWS S3), но я не уверен, как сделать мой код (index.html) в AWS S3 динамическим, чтобы онзвоните Stack 1 API.

ОБНОВЛЕНИЕ:
Хотите знать, достаточно ли ясен мой вопрос.Другой способ задать мой вопрос: «Как я могу использовать URL, выделенный из Stack 1 внутри Javascript / Ruby и т. Д. ... кода?».Я знаю, как ссылаться на URL внутри другого шаблона облачной информации, но не внутри кода.

1 Ответ

0 голосов
/ 14 февраля 2019

Две идеи:

  1. Как вы упомянули, если вы можете экспортировать базовую конечную точку API или лучше, если вы можете экспортировать переменные api-id, region и stage, тогдаВы можете динамически построить URL в коде SPA.

Базовая конечная точка будет

https://{api-id}.execute-api.{region}.amazonaws.com/{stage}

и будет выполнять HTTP-запросы с использованием библиотеки AJAX.

Самым важным в этом методе являетсяперестраивать и развертывать stack-2 каждый раз, когда вы удаляете и развертываете stack-1

Если вы не хотите развертывать stack-2 при каждом изменении stack-1, сопоставьте службу API с настраиваемым доменом.т. е. ваша конечная точка API может быть сопоставлена ​​с пользовательским URL-адресом, таким как https://api.example.com, и каждый раз при перестроении стека новая конечная точка будет сопоставляться с существующим пользовательским URL-адресом, защищая ваш stack-2 от сбоя.Конечно, в вашем стеке-2 вы будете выполнять HTTP-запросы к https://api.example.com или https://api.example.com/myservice и т. Д.

Ref: https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html

Если вы используете serverless-framework Вы можете обратиться к этому ответу о том, как достичь этого решения: https://github.com/serverless/serverless/issues/2074#issuecomment-323370777

...