AWS:使用 api 网关来代理 EC2 实例中服务的前端和后端 api 端点是否是一种好的做法?
AWS: Is it good practice to use api gateway to proxy both frontend and backend api endpoints served in EC2 instances?
我正在 AWS 中构建我的应用程序。
我已经在 EC2 实例中部署了我的 Reactjs 前端项目:172.0.0.1:80
。
我还在另一个 EC2 实例中部署了我的 Typescript/Express JS 后端服务 运行 许多 api 端点:172.0.0.2:3000
.
172.0.0.1
和 172.0.0.2
是 EC2 实例的 VPC 私有 IP 地址。
我正在尝试将 AWS API 网关用于反向代理目的,但我不确定这是否是一种好的做法,或者是一般使用 AWS 云工具的好方法。详情如下:
我已将我的自定义域配置到 api 网关,因此对 www.myapp.com
的任何访问都将定向到 api 网关。
如果用户在他的浏览器中输入 url www.myapp.com
,API 网关会将 http GET 请求代理到 172.0.0.1:80
当用户与前端交互时,GET/PUT/POST 请求被触发,目标 url 都有类似 www.myapp.com/api/[xxx]
的模式。例如
www.myapp.com/api/user
、www.myapp.com/api/photos
、....
API 网关会将这些请求代理到 172.0.0.2:3000
。
我还想将 AWS Cognito 服务与 API 网关集成以进行身份验证,以便用户可以登录/注销。
现在,以这种方式使用 api 网关是一种好习惯吗?
这是在 AWS 云上托管应用程序的正确方法吗?
这似乎是一种合理的方法。这是一个有点自以为是的问题,因为“良好做法”和“正确方式”是主观的。API 网关很灵活,允许许多使用模式,这些使用模式可能是“良好做法”并且可以以“正确方式”完成但仍然完全不同。
话虽如此,该方法似乎很合理,但您可以以不同方式托管前端项目以提高效率。考虑 Building server-side rendering for React in AWS Lambda 中显示的方法:
在该方法中,前端是静态的并呈现在客户端上,因此使用 S3 存储静态文件并使用 CloudFront 分发这些文件是一个很好的方法。它显示了一个由 Lambda 处理的动态后端,它具有无服务器优势,但它也可以是 EC2。如果您的前端代码不是静态的,或者您希望来自 EC2 实例,则可以改为使用 API 网关,如您所述。
与此图片相比,我喜欢您的方法的一件事是客户端有一个应用程序域,并且 API 网关将路由到正确的端点。这对最终用户隐藏了一些实施细节。
我正在 AWS 中构建我的应用程序。
我已经在 EC2 实例中部署了我的 Reactjs 前端项目:172.0.0.1:80
。
我还在另一个 EC2 实例中部署了我的 Typescript/Express JS 后端服务 运行 许多 api 端点:172.0.0.2:3000
.
172.0.0.1
和 172.0.0.2
是 EC2 实例的 VPC 私有 IP 地址。
我正在尝试将 AWS API 网关用于反向代理目的,但我不确定这是否是一种好的做法,或者是一般使用 AWS 云工具的好方法。详情如下:
我已将我的自定义域配置到 api 网关,因此对
www.myapp.com
的任何访问都将定向到 api 网关。如果用户在他的浏览器中输入 url
www.myapp.com
,API 网关会将 http GET 请求代理到172.0.0.1:80
当用户与前端交互时,GET/PUT/POST 请求被触发,目标 url 都有类似
www.myapp.com/api/[xxx]
的模式。例如www.myapp.com/api/user
、www.myapp.com/api/photos
、....API 网关会将这些请求代理到
172.0.0.2:3000
。我还想将 AWS Cognito 服务与 API 网关集成以进行身份验证,以便用户可以登录/注销。
现在,以这种方式使用 api 网关是一种好习惯吗?
这是在 AWS 云上托管应用程序的正确方法吗?
这似乎是一种合理的方法。这是一个有点自以为是的问题,因为“良好做法”和“正确方式”是主观的。API 网关很灵活,允许许多使用模式,这些使用模式可能是“良好做法”并且可以以“正确方式”完成但仍然完全不同。
话虽如此,该方法似乎很合理,但您可以以不同方式托管前端项目以提高效率。考虑 Building server-side rendering for React in AWS Lambda 中显示的方法:
在该方法中,前端是静态的并呈现在客户端上,因此使用 S3 存储静态文件并使用 CloudFront 分发这些文件是一个很好的方法。它显示了一个由 Lambda 处理的动态后端,它具有无服务器优势,但它也可以是 EC2。如果您的前端代码不是静态的,或者您希望来自 EC2 实例,则可以改为使用 API 网关,如您所述。
与此图片相比,我喜欢您的方法的一件事是客户端有一个应用程序域,并且 API 网关将路由到正确的端点。这对最终用户隐藏了一些实施细节。