Angular 如何在AWS中通信前端应用程序和多个后端API?

Angular 如何在AWS中通信前端应用程序和多个后端API?,angular,amazon-web-services,docker,aws-api-gateway,amazon-elastic-beanstalk,Angular,Amazon Web Services,Docker,Aws Api Gateway,Amazon Elastic Beanstalk,我还是AWS新手,目前正在尝试使用AWS Elastic Beanstalk部署我的应用程序。我的私人Dockerhub上有4个后端API,我有一个前端API,应该与这4个后端微服务通信。我能够按照下面的指南将4个后端服务部署到AWS Elastic Beanstalk。我的主要问题或我不理解的部分是如何让我的前端应用程序与这4个其他服务通信 我正在研究的当前选项是将我的前端angular应用程序添加到dockrun.aws.json中,以便我的json文件看起来与下面的类似: { "AWS

我还是AWS新手,目前正在尝试使用AWS Elastic Beanstalk部署我的应用程序。我的私人Dockerhub上有4个后端API,我有一个前端API,应该与这4个后端微服务通信。我能够按照下面的指南将4个后端服务部署到AWS Elastic Beanstalk。我的主要问题或我不理解的部分是如何让我的前端应用程序与这4个其他服务通信

我正在研究的当前选项是将我的前端angular应用程序添加到dockrun.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
    }
  ]
}
当我这样做时,我如何在angular应用程序中检索关于backend-svc-1的主机名的信息?例如,如果在我的angular应用程序中调用,那么部署时这个url是什么?我应该硬编码值吗?或者它将作为一个环境变量通过链接数组与我的前端应用程序通信

另外,您对如何最好地实现我提出的体系结构有什么建议?我读过很多文章,有人说我应该在S3中作为静态站点托管Angular应用程序,并通过API网关路由请求。我看到其他网站说我应该为每个服务管理自己的ECS实例,并通过API网关路由请求。所以总的来说,我对如何使用AWS有点困惑,我希望有人能在这方面为我提供指导


提前谢谢你

这个问题似乎很广泛,但在AWS中使用容器时可以考虑这个问题

当我这样做时,我如何在angular应用程序中检索信息 后端-svc-1的主机名是多少

当请求从前端应用程序路由时,您需要将应用程序负载平衡器放在这些服务的顶部,并根据主机名或请求路径将请求路由到后端服务

现有s3 angular应用程序的高级外观将类似于

或者通过链接将其传送到我的前端应用程序 数组作为环境变量

链接是使用服务进行服务到通信,例如后端api希望与Redis通信,然后链接适合,但当您的应用程序是web时,您需要从internet访问后端api,因此链接在此情况下不起作用,但LBalancer可以正常工作

我看到其他网站说我应该管理自己的ECS实例 每个服务和路由请求通过API网关

我更喜欢容器,现在ECS提供了不同的风格,比如,你不需要管理或担心基础设施

创建3个服务所需的一切

  • 前端
  • 后端-svc-1
  • 后端-svc-2
将LB放在这些服务的顶部,就这样。前端将使用LB端点与后端服务进行通信,服务对服务通信可以使用lining或

但是,如果后端svc相同,意味着共享相同的基本代码,那么应该为每个任务运行两个服务,而不是运行两个单独的容器

高级外观将是


你认为答案对你没有帮助吗?至少有人会有评论或进一步的建议。嗨,阿迪,对不起,我当时正在上班,刚刚下班。但这个答案非常有用。今晚我将看一下它的实现。在同样的情况下,如果我们在ALB中有身份验证-OIDC,那么我的angular应用程序不会被重定向到OIDC登录页面。但是,如果我删除ALB身份验证,那么它可以正常工作。