问题标签 [aws-appsync-resolver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
21 浏览

amazon-web-services - AWS Appsync 不同的突变方法

我们使用基于事件的架构,因此突变数据存储在 Dynamodb 中并将其传递给 kinesis、lambda 和 Neptune。

在变异解析器中,它允许我们只添加一个解析器,即添加/更新/删除。根据架构,必须从 Neptune 查询返回。

如何实施?有没有办法添加不同的返回方法。

0 投票
0 回答
233 浏览

amazon-web-services - 用于删除 AWS ElasticSearch 中的记录的 AWS AppSync 解析程序引发 Elasticsearch:UserIllegalArgumentException

我有一个简单的 AWS AppSync GraphQL API,它有一个 AWS ElasticSearch 域作为其数据源。API 完美地执行创建、检索和更新操作,但对于删除操作,我得到以下响应:

但是,关联的记录id确实被删除了,响应始终是上面的 JSON。突变定义如下:

突变的请求映射模板是:

响应映射模板很简单:

我想返回一个简单的 JSON,以确认删除记录。上述解析器有什么问题?

0 投票
0 回答
23 浏览

amazon-web-services - AWS App Sync 与 HttpEndpoint 响应转换失败

我正在尝试在 AWS App Sync 中学习 graphql,作为其中的一部分,我们编写了架构并附加了 Http Endpoint Resolver,我在其中从 rest 获取数据,这是一个 GET 调用,但在将响应从 rest 端点映射到 graphql 时遇到问题无法在“查询”选项卡的响应中查看它

我尝试了多种方法,但无法将响应正文转换为用户。我也尝试使用 $util.parseJson(String)

0 投票
0 回答
16 浏览

amazon-web-services - 有没有办法将现有 AppSync API 从源代码控制推送到具有新端点的全新 API?

我将 Amplify 与 AppSync 一起使用,以将我的 API 保持在源代码控制中。

我有一个配置为在沙盒帐户中部署沙盒 Amplify 应用程序和沙盒 AppSync API 的开发分支。我想使用另一个分支在具有单独端点的单独生产帐户中部署带有 prod AppSync API 的 prod Amplify 应用程序。

对于 AppSync 部分,有没有办法将源代码控制中的现有 AppSync API 推送到全新的 API,以便有一个新的生产端点?

这个问题有效地询问是否可以复制 AppSync API。

0 投票
0 回答
165 浏览

amazon-dynamodb - 使用租户的 Cognito 身份在 AppSync 中选择租户的 DynamoDB 表

我正在构建一个多租户应用程序,租户共享一个由 AppSync 支持的 GraphQL API。租户的所有元数据都存储在单个 DynamoDB 表中,AppSync 使用该表上的 DynamoDB 数据源来解决查询和突变。我想根据请求解析器中的 Cognito 身份选择要在哪个表上执行操作。

在 AppSync 中,每个数据源都必须指定一个表来解析 DynamoDB 操作,并且这不能在 AppSync 解析器中被覆盖(某些批处理操作允许在一个解析器中执行多个表操作)。似乎没有办法在管道解析器中动态选择数据源。由于每个租户的元数据都位于单独的 DynamoDB 表中,因此在仅使用 DynamoDB 数据源时,似乎无法定义在租户之间共享的单个 API。

我尝试使用 HTTPS 解析器并在其中重新创建 DynamoDB 请求,但不幸的是,似乎没有$util.dynamodb.fromDynamoDB将类型化的 DynamoDB 响应转换为 DynamoDB 解析器自动执行的非类型化 JSON 响应。

这是我理解的选项:

  1. 将所有租户元数据放入一个表中,然后使用租户 ID 作为每个项目的分区键
  2. 使用发出后续 DynamoDB 请求的 Lambda 解析程序
  3. 为每个租户创建一个不同的 AppSync API,对所有内容都具有相同的定义(但每个人都有不同的 Cognito 池配置)

选项 1 对我不起作用,因为我已经以多种不同的方式使用分区键,尤其是在表上生成几个稀疏全局索引。我还想为每个租户提供表吞吐量,而不是一次在所有租户之间共享。

选项 2 可能是最直接的答案,但是当我只是想在 DynamoDB 上执行简单的操作时,我宁愿不必为大多数解析器设置 Lambda。

选项 3 最终解决了这个问题,但现在我必须维护与租户一样多的 API(及其端点),这违背了这个问题的目的。

是否有任何其他选项可以支持在 AppSync 中为每个租户使用不同表的多租户设置,最好在解析器模板中执行路由逻辑?

0 投票
1 回答
220 浏览

graphql - 在 AppSync/GraphQL 中,您如何处理需要来自多个数据源的连接数据的列表?

这是一个虚构的模式来说明我的问题。我有两个单独的数据源,它们返回需要连接以填充响应的列表。第一个数据源“employee list api”是一个 http API,我可以查询以获取可用于填充idname列的权威员工列表。例如,我得到这样的响应:

我有第二个 http API“员工观察日志”,我可以查询以获取状态列表以及相关的 ID。id 允许我将号码与员工记录中的条目相关联,并且我有一个记录日期。可能有不止一个状态记录,但在 GraphQL 中我只想选择最近的一个。示例响应:

现在,我希望 graphQL 响应返回如下内容:

由于“员工列表 api”是有关员工存在的权威来源,因此对“员工”字段的所有查询都应始终触发对该 api 的查询,但“员工观察日志”api 仅应在“lastObservedStatus”字段时触发在查询中被选中。

对于这样的模式,解析器应该在哪里注册?我读过最好的做法是始终在叶节点上附加解析器,但我不确定在这种情况下如何做到这一点。我什至不确定如果您在列表的子字段上附加解析器会发生什么。

我觉得处理这个问题的正确方法是将 lambda 解析器附加到该employees字段,并在 lambda 解析器中检查查询的 selectionSetList 以检查是否选择了“lastObservedStatus”字段。如果不是,则 lambda 仅查询“员工列表 api”,否则 lambda 还会查询“员工观察日志”并在返回结果之前执行类似于 SQL 连接的操作。但这是处理这个问题的正确方法吗?

0 投票
1 回答
116 浏览

amazon-web-services - appsync rds 解析器 - 插入多边形

我正在尝试将包含多边形的对象插入到安装了扩展aws appsync resolversaws aurora rds postgres实例中POSTGis

psql当 ssh'ed 到 rds 实例时,我已经设法在通过命令行运行 sql 语句时创建插入新行,但解析器失败。

我有以下突变解析器:

检查日志时,该语句似乎是正确创建的,但出现错误:

rds有没有人尝试使用 appsync 解析器将 geo_json 对象插入到实例中?知道为什么这不起作用,以及将 geojson 对象传递给语句以便 appsync 接受它的正确方法是什么?

0 投票
2 回答
56 浏览

amazon-web-services - 在 Terraform 中,如何在另一个资源中引用一个资源的 ID?

下面是我陷入捕获function_idaws_appsync_function.appsync_functions引用创建的代码aws_appsync_resolver

上面的代码捕获了我放在 pipeline_config 下的所有 function_id 和条件不起作用!我可以获得语法方面的帮助来完成这项工作吗?

谢谢你。

0 投票
2 回答
450 浏览

amazon-web-services - AppSync HTTP 解析器映射模板不适用于方法 PATCH

我正在使用此 AppSync 解析器映射模板来更新用户:

后端的服务接受PATCH更新用户的请求。

当我运行突变时,出现此错误:An internal failure occurred while resolving this field.

这是请求映射和响应映射的 CloudWatch 日志:

请求不会转发到后端服务(我正在监视传入的请求),但是如果我将映射中的方法更改为POST或者PUT我可以看到请求到达服务。

我有其他需要PATCH方法的请求,他们也有同样的问题。我是否在PATCH请求的解析器​​中遗漏了某些内容,或者这是 AppSync 错误?

0 投票
0 回答
45 浏览

amazon-web-services - 我可以在免费套餐中从 AWS AppSync 控制台对 HTTP 终端节点进行后调用吗?

我已经创建了一个模式并在其中测试了查询(通过向 HTTP 端点发出 GET 请求作为数据源),它工作正常。但是,对 HTTP 端点的任何突变(包含 POST/PUT/PATCH/DELETE 请求)都不会将请求负载中的值发送到服务器。

这是我从 AppSync 控制台运行的 GraphQL 突变 -

以下是上述突变的反应 -

这里值得注意的一点是,这些值被保存在数据库中,这就是“id”的生成方式。

非常感谢任何帮助。谢谢!