AWS 无服务器架构 – 为啥要使用 API 网关?

Posted

技术标签:

【中文标题】AWS 无服务器架构 – 为啥要使用 API 网关?【英文标题】:AWS serverless architecture – Why should I use API gateway?AWS 无服务器架构 – 为什么要使用 API 网关? 【发布时间】:2018-06-05 07:36:45 【问题描述】:

这是我的用例:

托管在 s3 上的静态反应前端 关于 lambda 传导长期运行数据分析的 Python 后端 rds 上的 Postgres 数据库 后端和前端仅使用 JSON 进行通信 有时后端会在 s3 存储桶中创建和存储 powerpoint 文件,然后通过将 s3 链接发送到前端来提供这些文件

让我相信,设置 API 网关以连接前端和后端而不是直接从前端调用 lambda 是值得的!

特别是考虑到 29 秒的超时,这对于我的应用程序来说还不够长,这意味着我需要实现异步处理并添加一个完整的其他 aws 架构层(使用 SNS 和 SQS 进行消息传递、排队和轮询),这会增加成本、时间和潜力对于问题。我了解存在一些安全问题,是否无法安全地调用 lambda 函数?

【问题讨论】:

【参考方案1】:

您说的是直接从客户端机器上运行的 javascript 调用 lambda。

我认为唯一的方法是将适用于 JavaScript 的 AWS 开发工具包嵌入到您的 react 前端。看: https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/browser-invoke-lambda-function-example.html

这有几个安全问题,只有一些可以缓解。

首先,您需要将 AWS 凭证硬编码到您的前端以供全世界查看。这些凭据的访问范围可能会受到限制,但要非常小心地做到这一点,否则您将为某人的加密操作付费。

假设您只希望某些人将文件上传到您支付的存储服务,您将需要某种形式的身份验证和授权。 API Gateway 并不真正进行身份验证,但它可以进行授权,尽管通过连接到其他 AWS 服务,如 Cognito 或 Lambda(自定义授权方)。您必须自己将其构建到您的后端 Lambda 中。绝对可行,而且可能不会比使用 API 网关中的自定义授权器多多少努力。

直接连接到 Lambda 的主要问题是 Lambda 具有快速扩展的能力,如果有人试图通过拒绝服务攻击来攻击您,这可能是一个问题。 Lambda 很便宜,但一天 24 小时运行 1000 个并发实例会加起来。

API Gateway 允许您限制每秒/分钟/小时/等的速率,Lambda 仅允许您限制任何给定时间的并发实例数。因此,如果您将该限制设置为 1,攻击者可能会导致该 1 实例一天 24 小时运行。

【讨论】:

以上是关于AWS 无服务器架构 – 为啥要使用 API 网关?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Cloudformation 中获取区域 AWS API 网关的自定义域的目标域名?

通过 API 网关为无服务器架构模型代理端点设置 CORS

无服务器框架,API 网关 URL 何时更改?

AWS API 网关:为啥调用 url 返回 HTML 代码而不是实际网页?

AWS征文带你使用 AWS 无服务器架构一步步打造个性化 API 接口

AWS Lambda、API 网关和 Cognito:如何在 lambda 函数中获取身份对象?