AWS无服务器架构 - 我为什么要使用API​​网关?

时间:2018-06-05 07:36:45

标签: amazon-web-services amazon-s3 aws-lambda aws-api-gateway

这是我的用例:

  • 在s3上托管的静态反应前端
  • 关于lambda传导长期运行数据分析的Python后端
  • 关于rds的Postgres数据库
  • 后端和前端专门与JSON沟通
  • 偶尔后端会在s3存储桶中创建并存储powerpoint文件,然后通过向前端发送s3链接来提供服务

说服我,有必要经历设置API网关连接前端和后端的所有麻烦,而不是直接从前端调用lambda!

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

1 个答案:

答案 0 :(得分:3)

您正在谈论直接从客户端计算机上运行的JavaScript调用lambda。

我认为唯一的方法是在您的反应前端嵌入AWS SDK for JavaScript。看到: https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/browser-invoke-lambda-function-example.html

这有几个安全问题,只有一部分可以减轻。

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

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

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

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