AmazonWebService - 我应该使用AWS API Gateway还是AWS SDK

时间:2017-02-20 11:15:32

标签: node.js amazon-web-services aws-lambda aws-api-gateway

我正在尝试从NodeJS调用lambda函数。经过研究,我知道有两种方法可以做到:

  1. 将Lambda函数分配到AWS API Gateway并调用该API。
  2. 通过AWS SDK调用Lambda函数
  3. API Gateway和AWS SDK的优缺点是什么?什么时候使用以上各种方式?

2 个答案:

答案 0 :(得分:3)

这取决于。 API网关主要用于在不安全的环境(即浏览器,桌面应用程序,非服务器)中临时访问Lambda函数。

如果您的环境是安全的,例如在具有IAM角色的EC2实例或具有安全存储凭据的其他服务器上运行,则可以随意使用SDK并正确调用Lambda函数。

如果您需要将Lambda功能暴露给整个互联网,或者网络上的授权用户,或者任何有可能在传输过程中获取访问密钥和密钥的用户,那么您将需要坚持使用API​​网关在前面。

使用API​​网关,您可以使用API​​密钥或通过其他授权人(如Amazon Cognito)保护您的Lambda函数,以便用户在使用API​​端点之前需要登录。通过这种方式,他们只获得临时凭证,而不是任何人都无法获得的永久凭证。

答案 1 :(得分:1)

对于直接通过客户端调用lambda的安全性问题,我不同意_DF的意见。在过去的四年中,我以无服务器方式实现了Client + AWS SDK。直接打击我们拥有的所有微服务,例如Lambda,DynamoDB,S3,SQS等。

要使用此方法,我们必须深入了解IAM角色策略,包括其语句概念,身份验证令牌,AWS凭证和令牌-凭证交换。

对我来说,使用SDK更好地实现无服务器而不是API网关。为什么我更喜欢在无服务器基础设施上实现SDK而不是API?

  • API网关非常昂贵
  • 无网络跳
  • 实际上,SDK通常包含与其他应用程序类基础和简单调用进行通信的API,例如dynamodb.put(params).promise(),lambda.invoke(params).promise(),s3.putObject( params).promise()等。我们可以看到一个示例API调用,例如fetch(URL).promise(),该术语并没有什么不同
  • API更为复杂,某些情况无法或不应使用
  • SDK是否不可扩展?不,我不这么认为。因为它是基于类的,所以它具有很高的可伸缩性。
  • 简化基础结构和代码编写,即与s3一起使用无需部署API + Lambda
  • 加快流程,即通过API + lambda将数据存储到dynamodb无需业务逻辑
  • 易于维护,我们仅维护客户代码
  • 角色策略更具可扩展性;等等