amazon-web-services - AWS AppSync 解析器 Lambda 函数与速度模板语言 (VTL)
问题描述
我一直在研究 AWS AppSync 以创建一个以 DynamoDB 作为数据存储的托管 GraphQL API。我知道 AppSync 可以使用 Apache Velocity 模板语言作为解析器从 dynamoDB 获取数据。然而,这意味着我必须在编程堆栈中引入一种额外的语言,所以我更愿意用 Javascript/Node.js 编写解析器
使用 lambda 函数从 DynamoDB 获取数据有什么缺点吗?有什么理由为解析器使用 VTL 而不是 lambda?
解决方案
使用 lambda 函数作为 AppsSync 解析器有利有弊(尽管请注意,您仍然需要从 VTL 调用 lambda):
优点
- 更容易编写和维护
- 更强大的编组和验证请求和响应
- 通用功能可能比 VTL 更干燥(不支持宏)
- 更灵活的调试和日志记录
- 更容易测试
- 提供更好的工具和棉绒
- 如果您需要
long
在 DynamoDB 表中支持整数(DynamoDB 数字类型确实支持long
,但 AppSync 解析器仅支持 32 位整数。如果您使用 lambda,例如通过在通过AppSync 解析器层)- 请参阅(当前)打开功能请求:https ://github.com/aws/aws-appsync-community/issues/21
缺点
- 每次调用的额外延迟
- 冷启动 = 更多延迟(尽管如果这对您的用例来说是个问题,通常可以通过保持 lambda 温暖来最小化)
- 额外费用
- 每个 lambda 的额外资源,消耗固定的 200 限制
如果您正在执行简单的普通 DynamoDB 操作,那么值得尝试使用 VTL。AWS 的文档对此非常有用:https ://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html
如果您正在做一些稍微复杂的事情,例如编组字段、循环或通常 hacky 的非 DRY 代码,那么如果您对额外的延迟和成本感到满意,那么 lambdas 绝对值得考虑以提高编写和维护代码的速度.
推荐阅读
- reactjs - 如何在反应自动建议中仅呈现 5 个项目?
- javascript - 快速服务器 POST 方法和登录时获取未定义值的问题
- java - java.sql.SQLException:Spring 中用户“@'localhost”(使用密码:NO)的访问被拒绝
- c# - 如何在列表框中显示多个字典项
- react-native - 选择器不能有边框
- jquery - 通过每列突出显示具有不同颜色的重复行观察
- php - Laravel Cashier paymentMethods() 总是返回空对象结果
- arrays - 切片numpy数组的最后两列
- javascript - 我们如何在nodejs中动态生成内存中的csv文件?
- c# - 找不到问题所在。错误:并非所有代码路径都返回值