Как связать интерфейсные приложения Frontend Angular и API нескольких бэкэндов в AWS? - PullRequest
0 голосов
/ 17 октября 2019

Я все еще новичок в AWS и в настоящее время пытаюсь развернуть свое приложение, используя AWS Elastic Beanstalk. У меня есть 4 бэкэнд-API, которые доступны на моем частном Dockerhub, и у меня есть один веб-интерфейс, который должен взаимодействовать с этими 4-мя бэкэнд-микросервисами. Я могу развернуть 4 базовых сервиса на AWS Elastic Beanstalk, следуя инструкциям, расположенным здесь . Моя главная проблема или часть, которую я не понимаю, - как заставить мое приложение-интерфейс взаимодействовать с этими 4 другими службами?

Текущая опция, которую я изучаю, - это добавление моего углового приложения в Dockerrun.aws.json, чтобы мой файл json выглядел примерно так, как показано ниже:

{
  "AWSEBDockerrunVersion": 2,
  "volumes": [
    {
      "name": "backend-svc-1",
      "host": {
        "sourcePath": "/var/app/current/backend-svc-1"
      }
    },
        {
      "name": "backend-svc-2",
      "host": {
        "sourcePath": "/var/app/current/backend-svc-2"
      }
    },
    {
      "name": "angular-frontend-app",
      "host": {
        "sourcePath": "/var/app/current/angular-frontend-app"
      }
    }
  ],
  "containerDefinitions": [
    {
      "name": "angular-frontend-app",
      "image": "angular-frontend-app",
      "environment": [
        {
          "name": "Container",
          "value": "angular-frontend-app"
        }
      ],
      "essential": true,
      "memory": 128,
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 4200
        }
      ],
      "links": [
        "backend-svc-1",
        "backend-svc-2"
      ]
    },
    {
      "name": "backend-svc-1",
      "image": "backend-svc-1",
      "environment": [
        {
          "name": "Container",
          "value": "backend-svc-1"
        }
      ],
      "essential": true,
      "memory": 128,
    }
    {
      "name": "backend-svc-2",
      "image": "backend-svc-2",
      "environment": [
        {
          "name": "Container",
          "value": "backend-svc-2"
        }
      ],
      "essential": true,
      "memory": 128
    }
  ]
}

КогдаЯ делаю это, как мне получить информацию в моем угловом приложении о том, какое имя хоста будет для backend-svc-1? Например, если в моем угловом приложении я звоню на http://backend -svc-1 / endpoint , что это за URL-адрес получается при развертывании? Должен ли я жестко закодировать значение? Или он будет передан моему внешнему приложению через массив ссылок в качестве переменной среды?

Кроме того, что вы предлагаете, как наилучшим образом реализовать мою предложенную архитектуру? Я прочитал много статей, где некоторые говорят, что я должен разместить свое Angular App в качестве статического сайта на S3 и направлять свои запросы через API Gateway. Я видел, как другие сайты говорили, что я должен управлять своими собственными экземплярами ECS для каждой службы и направлять запросы через API-шлюз. В общем, я немного запутался в том, как использовать AWS, и я надеюсь, что кто-нибудь может дать мне какие-либо рекомендации по этому вопросу.

Заранее спасибо!

1 Ответ

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

Вопрос кажется широким, но его можно рассмотреть при работе с контейнерами в AWS.

Когда я делаю это, как мне получить в своем угловом приложении информацию о том, каким будет имя хостадля backend-svc-1?

Необходимо разместить балансировщик нагрузки приложения поверх этих служб и направлять запрос на основе имени хоста или пути запроса к внутренним службам при запросе маршрута из приложения Frontend.

Внешний вид высокого уровня с существующим угловым приложением s3 будет выглядеть примерно так:

enter image description here

Или он будет передан моемувеб-приложение через массив ссылок в качестве переменной среды?

Связывание - это использование службы для связи, например, backend-api хочет связаться с Redis, а затем связать костюм, но пока ваше приложение - это сеть, выугловое приложение должно быть доступно через бэкэнд-api из интернета, поэтому соединение не будет работать, но LBalancerЯ работаю нормально.

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

Я предпочитаю ECS когда дело доходит до контейнера, теперь ECS предлагает другой вкус, например fargate , вам не нужно управлять инфраструктурой или беспокоиться о ней.

Все, что вам нужно для создания 3услуги

  • Фронтенд
  • Backend-svc-1
  • Backend-svc-2

Поместите LB поверх этих сервисовэто оно. Интерфейс будет использовать конечную точку LB для связи с бэкэнд-сервисом, а сервис-сервис для связи может использовать подкладку или обнаружение сервиса.

Но если backend-svc - это то же самое, значит, использовать один и тот же базовый код, вы можетеследует запускать две службы для каждой задачи вместо запуска двух отдельных контейнеров.

Высокоуровневый просмотр будет

enter image description here

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