我对AWS还是陌生的,目前正在尝试使用AWS Elastic Beanstalk部署我的应用程序。我的私有Dockerhub上有4个后端API,并且我有一个应该与这4个后端微服务通信的前端API。通过遵循here的指南,我可以将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到底是什么?我应该对值进行硬编码吗?还是将它通过links数组作为环境变量传递给我的前端应用程序?
此外,您对如何最好地实现我建议的体系结构有何建议?我读过很多文章,有人说我应该将Angular App托管为S3中的静态站点,并通过API网关路由我的请求。我见过其他站点说我应该为每种服务管理自己的ECS实例,并通过API网关路由请求。因此,总的来说,我对如何使用AWS感到有些困惑,希望有人可以就此事向我提供任何指导。
谢谢您!
这个问题似乎很广泛,但是在使用AWS中的容器时可以考虑。
当我这样做时,如何在我的角度应用程序中检索信息backend-svc-1的主机名应为什么?
您需要将应用程序负载平衡器放置在这些服务的顶部,并在从前端应用程序请求路由时根据主机名或后端服务的请求路径来路由请求。
使用现有s3角度应用程序的高级外观将类似于
或者它将通过链接传达到我的前端应用程序数组作为环境变量?
链接是用于通信服务的服务,例如backend-api要与Redis通信然后链接西装,但是当您的应用程序是Web时,您应该可以从互联网访问有角度的应用程序需要backend-api的链接,因此链接将无法工作在这种情况下,但是LBalancer可以正常工作。
[我曾经见过其他网站说我应该管理自己的ECS实例每个服务并通过API网关路由请求。
关于容器,我更喜欢ECS,现在ECS提供了fargate之类的不同风味,您无需管理或担心基础结构。
创建3个服务所需的全部
将LB放在这些服务的顶部。前端将使用LB端点与后端服务进行通信,并且服务到服务的通信可以使用lining或service discovery.
但是,如果backend-svc相同,则意味着共享相同的基本代码,则应该为每个任务运行两个服务,而不是运行两个单独的容器。
将是高级外观