【发布时间】:2020-02-13 20:52:50
【问题描述】:
我还是 AWS 新手,目前正在尝试使用 AWS Elastic Beanstalk 部署我的应用程序。我的私有 Dockerhub 上有 4 个后端 API 可用,并且我有一个应该与这 4 个后端微服务通信的前端 API。我可以按照位于here 的指南将 4 个后端服务部署到 AWS Elastic Beanstalk。我的主要问题或我无法理解的部分是如何让我的前端应用程序与这 4 个其他服务进行通信?
我正在研究的当前选项是将我的前端 Angular 应用程序添加到 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
}
]
}
当我这样做时,如何在我的 Angular 应用程序中检索有关 backend-svc-1 的主机名的信息?例如,如果在我的 Angular 应用程序中我调用 http://backend-svc-1/endpoint,那么这个 url 在部署时会变成什么?我应该对值进行硬编码吗?或者它会通过链接数组作为环境变量传递给我的前端应用程序?
您对如何最好地实施我提议的架构有何建议?我读过很多文章,有人说我应该将我的 Angular 应用程序作为静态站点托管在 S3 中,并通过 API Gateway 路由我的请求。我看到其他网站说我应该为每个服务管理自己的 ECS 实例并通过 API 网关路由请求。所以总的来说,我对如何使用 AWS 有点困惑,我希望有人能在这件事上为我提供任何指导。
提前谢谢你!
【问题讨论】:
标签: angular amazon-web-services docker aws-api-gateway amazon-elastic-beanstalk