

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在直接数据来源访问和通过 Lambda 数据来源代理之间进行选择
<a name="choosing-data-source"></a>

使用 AWS AppSync 和`APPSYNC_JS`运行时，您可以编写自己的代码，通过使用 AWS AppSync 函数访问数据源来实现自定义业务逻辑。这使您可以轻松地直接与 Amazon DynamoDB、Aurora 无服务器、 OpenSearch 服务、HTTP API 和其他 AWS 服务等数据源进行交互，而无需部署额外的计算服务或基础设施。 AWS AppSync 还可以通过配置 Lambda 数据源轻松与 AWS Lambda 函数进行交互。Lambda 数据源允许您使用全套功能运行复杂 AWS Lambda的业务逻辑来解决 GraphQL 请求。在大多数情况下，直接连接到其目标数据源的 AWS AppSync 函数将提供您需要的所有功能。在您需要实施 `APPSYNC_JS` 运行时系统不支持的复杂业务逻辑时，您可以将 Lambda 数据来源作为代理以与目标数据来源进行交互。


|  |  |  | 
| --- |--- |--- |
|  | 直接数据源集成  | Lambda 数据源作为代理  | 
| 使用案例 | AWS AppSync 函数直接与 API 数据源交互。 | AWS AppSync 函数调用与 API 数据源交互的 Lambda。 | 
| 运行时 | APPSYNC\_JS (JavaScript) | 任何支持的 Lambda 运行时  | 
| 代码的最大大小 | 每个函数 32,000 个 AWS AppSync字符  | 每个 Lambda 50 MB（压缩，用于直接上传） | 
| 外部模块 | 有限-仅支持 APPSYNC\_JS 的功能  | 是 | 
| 拨打任何 AWS 服务电话 | 是-使用 AWS AppSync HTTP 数据源  | 是-使用 AWS SDK  | 
| 访问请求标头 | 是 | 是 | 
| 网络访问 | 否 | 是 | 
| 文件系统访问 | 否 | 是 | 
| 日志记录和指标 | 是 | 是 | 
| 完全在内部构建和测试 AppSync | 是 | 否 | 
| 冷启动 | 否 | 否-使用预置的并发性  | 
| Auto-scaling | 是的——透明地说 AWS AppSync  | 是-按照 Lambda 中的配置  | 
| 定价 | 不收取额外费用  | 按使用 Lambda 收费  | 

AWS AppSync 直接与目标数据源集成的函数非常适合以下用例：
+  与亚马逊 DynamoDB、Aurora 无服务器和服务进行交互 OpenSearch 
+  与 HTTP API 交互并传递传入标头 
+  使用 HTTP 数据源与 AWS 服务进行交互（使用提供的数据源角色 AWS AppSync 自动签署请求） 
+  在访问数据来源之前实施访问控制 
+  在完成请求之前对检索的数据实施筛选 
+  通过在解析器管道中顺序执行 AWS AppSync 函数，实现简单的编排 
+  控制查询和变更中的缓存和订阅连接。

AWS AppSync 使用 Lambda 数据源作为代理的函数非常适合以下用例：
+  使用 Velocity 模板语言 (VTL) 以外的 JavaScript 语言 
+  调整和控制 CPU 或内存以优化性能 
+  导入第三方库或要求使用 `APPSYNC_JS` 中不支持的功能 
+  发出多个网络请求 and/or 获取文件系统访问权限以完成查询 
+  使用[批处理配置](https://docs.aws.amazon.com/appsync/latest/devguide/resolver-reference-lambda-js.html)对请求进行批处理。