问题标签 [aws-appsync]

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 投票
1 回答
1013 浏览

lambda - 从未在 Lambda 函数中调用与 Sequelize 的 RDS 连接

我将 AWS AppSync 与 Lambda 函数一起用作解析器。这些函数查询 RDS Postgres 数据库(使用 Sequelize)。

我的问题是,无论我做什么,我的查询都不会被触发。我的代码有什么问题?

我看过这篇文章,但没有成功。 Sequelize 代码不在 AWS Lambda 内部执行

0 投票
2 回答
1627 浏览

amazon-web-services - AWS AppSync 中订阅的自定义筛选

是否可以在 AWS AppSync 中对订阅进行自定义过滤逻辑?

据我所知,当前的行为是:例如我的架构如下

AppSync 的当前行为是,当我触发 createEvent 时,AppSync 承诺如果 userId 相等,订阅的订阅者会收到事件。即AppSync的过滤逻辑是这样的

但是如果我想要不同的过滤逻辑呢?例如,我想订阅除我触发的事件之外的所有其他事件?IE

那么,是否可以在 AppSync 中拥有自定义过滤逻辑?

0 投票
0 回答
683 浏览

ios - AWS Appsync - 无法使用 Cognito 用户池自动将 S3Object 上传到存储桶 - iOS

使用 Cognito 用户池作为我的身份验证方法,我能够通过应用程序登录经过验证的用户,然后这些经过身份验证的用户可以使用 AppSync 突变写入 DynamoDB。S3Object 信息也在 Dynamo 中作为 JSON 字符串填充,如下所示:

AppSync 中创建突变的请求映射模板为:

响应映射模板:

pdf(S3Object)请求映射模板(我已经尝试了版本和空有效负载{}无解析器和这个):

pdf的响应映射模板:

但是没有在存储桶中创建 S3 OBJECT。但是,如果我自己使用 S3TransferUtility.default() 来发送上传请求,它工作得非常好,所以我必须为 PutObject 设置正确的权限(还有 GetObject 和 ListObjects,因为我也可以从存储桶中列出/下载对象使用 s3TransferUtility)。

由于 AppSync 应该使用 S3TransferUtility.default(),有没有人知道为什么上传没有自动发生?之后我的视图控制器被解散,就像在教程中一样,但这应该不是问题,因为我使用的是乐观响应方法并且它没有抛出任何错误。我还尝试简单地使用没有乐观响应的执行突变功能。我也试过不关闭视图控制器并等待。仍然没有上传到 S3,但写入 Dynamo 永远不会失败!当我从飞行模式返回时,甚至乐观地更新到 Dynamo。PDF 文档的文件大小约为 250KB。

顺便说一句,在使用 graphql listAll 查询从 Dynamo 中提取我的项目之后,并且仅在手动上传到 S3 之后,以下内容也确实有效,因此它实际上在存储桶中(我缺少一些可选的链接我正在工作这部分来自记忆):

类似的东西。它确实下载了该对象,但这是因为我手动调用了它。公平地说,我实际上不确定从 graphql 查询中检索到的 S3Object 的预期功能是什么(是否应该自动下载它......?除了 AllPostsQuery.Data 之外,我是否可以访问该项目.ListPost.Item.Pdf 还是我们打算像我一样使用存储桶、密钥、区域下载自己?)我想这不是主题。

任何帮助将不胜感激,我真的在这个问题上撞到了墙上。

编辑:AWS 论坛上的更多/更新信息

编辑:GitHub 问题已引起 AWS 的回应,他们正在调查

0 投票
1 回答
1817 浏览

amazon-dynamodb - AppSync BatchResolver AssumeRole Error

I’m trying to use the new DynamoDB BatchResolvers to write to two DynamoDB table in an AppSync resolver (currently using a Lambda function to do this). However, I’m getting the following permission error when looking at the CloudWatch logs:

“User: arn:aws:sts::111111111111:assumed-role/appsync-datasource-ddb-xxxxxx-TABLE-ONE/APPSYNC_ASSUME_ROLE is not authorized to perform: dynamodb:BatchWriteItem on resource: arn:aws:dynamodb:us-east-1:111111111111:table/TABLE-TWO (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: AccessDeniedException;

I’m using TABLE-ONE as my data source in my resolver.

I added the "dynamodb:BatchWriteItem" and "dynamodb:BatchGetItem" to TABLE-ONE’s permission:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", "dynamodb:PutItem", "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:Scan", "dynamodb:Query", "dynamodb:UpdateItem" ], "Resource": [ "arn:aws:dynamodb:us-east-1:111111111111:table/TABLE-ONE", "arn:aws:dynamodb:us-east-1:111111111111:table/TABLE-ONE/*", "arn:aws:dynamodb:us-east-1:111111111111:table/TABLE-TWO", "arn:aws:dynamodb:us-east-1:111111111111:table/TABLE-TWO/*" ] } ] }

I have another resolver that uses the BatchGetItem operation and was getting null values in my response - changing the table’s policy access level fixed the null values: enter image description here

However, checking the box for BatchWriteItem doesn’t seem to solve the issue either adding the permissions to the data source table’s policy.

I also tested my resolver test feature in AppSync, the evaluated request and response are working as intended.

Where else could I set the permissions for a BatchWriteItem operation between two tables? It seems like it's invoking the user's assumed-role instead of the table's role - can I 'force' it to use the table's role?

0 投票
2 回答
8363 浏览

amazon-web-services - 迭代模板中的 AWS cloudformation 资源数组

从 yml(或 json)模板在 AWS CloudFormation 中创建资源时,是否可以迭代数组以保持模板简短易读。例如,我有一个 Appsync 项目,我必须在其中创建一堆几乎相同的 AWS 类型“AWS::AppSync::Resolver”的解析器。在我与 Cloud Formation 一起使用的 YML 模板中,1 个此类资源可能如下所示

我可能有十几个或更多这样的解析器,唯一的区别是我用<----. 有没有办法迭代一组值,比如说

0 投票
1 回答
3997 浏览

node.js - 将 AppSync 和 Amazon RDS 与 serverless-graphql 一起使用

有一个很棒的存储库,其中包含不同无服务器场景的示例实现。

现在我正在为 AppSync 和 Amazon RDS 的结合而苦苦挣扎。我尝试了独立 rds 的实现,以及存储库中提供的 appsync 示例。这些工作就像一个魅力。但显然,如果你想将这些技术结合起来,会有很多不同和困难。我使用了 rds 目录中的模式、解析器和处理程序函数,并将其与 appsync lambda 实现相结合。我调整了映射模板并更新了 serverless.yml 文件。

我可以成功部署整个 appsync 服务和所有资源,而不会出现任何错误。我可以从 graphiql 访问 graphql 端点并进行查询。但是当我从 appsync 控制台尝试它时,我得到 null 作为响应。我想这与映射模板有关,但我不太确定。

有没有人有任何建议或这种特定组合的工作示例?

0 投票
5 回答
9581 浏览

amazon-cloudformation - AppSync:使用 AWS_IAM 身份验证时在 $context 中获取用户信息

在 AppSync 中,当您使用 Cognito 用户池作为您的身份验证设置您的身份时

但是,当您使用 AWS_IAM 身份验证时,您会得到

文档说这是预期的,https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference.html。但是,如果您使用AWS_IAM连接到 Cognito(需要未经身份验证的访问),您应该如何获取用户的用户名、电子邮件、子等?AWS_IAM使用Auth 类型时,我需要访问用户的声明。

0 投票
0 回答
565 浏览

android - 在 Android 应用程序中使用 IAM 订阅 AWS AppSync

我在 Android 应用程序中使用新的 AWS AppSync 服务,使用 IAM 身份验证(访问密钥和密钥),以便用户可以通过 Google Map API 实时共享他们的位置。为此,我创建了一个在 AppSync 的查询控制台中运行良好的订阅。但是当我在我的应用程序中实现订阅时,它无法正常工作。

这是一个用例:

  1. 用户 A 访问地图,查看通过 GraphQL 订阅发送到 AppSync 服务的他的位置
  2. 用户 B 做同样的事情。
  3. 用户 A 发送他最后的位置
  4. 用户 B 收到,用户 A 出现在用户 B 地图上
  5. 用户 B 发送他的最后一个位置,但用户 A 从未收到它

如果用户 A 退出地图并重新打开它,GraphQL 订阅也会重新打开,他会收到用户 B 在订阅后发送的最后一个位置。

一开始,我有两个使用 API Key 认证的 GraphQL 订阅,但是实时的不行。仅删除订阅后,按照此答案https://stackoverflow.com/a/49242267/4862232,一切正常。

但是由于我更改了身份验证方法,所以我遇到了麻烦,这里是代码:

任何帮助,将不胜感激。

0 投票
0 回答
295 浏览

redux - GraphQL 查询一次成功运行,但使用 Apollo 和 AWS AppSync 再次运行失败

我正在使用https://github.com/awslabs/aws-mobile-appsync-sdk-js repo 第一页上示例中的基本客户端配置:

但是没有<Rehydrated>组件,并且有一个 Redux<Provider>组件。最高级别的父组件是这样包装的:

我试过交换 and 的顺序ProviderApolloProvider但这并没有改变结果。

问题是查询成功运行一次,但不再运行。AppSync 的 CloudWatch 日志显示初始成功查询,但未显示进一步的查询尝试。这使我相信问题出在客户端上。

我已将fetchPolicy查询设置为'network-only'没有结果:

通过在 Chrome 调试器中检查组件,我已经确认命名查询“ getAllStories”确实存在于组件上。查询道具NetworkStatusloading属性始终保持不变,1并且true从未收到任何响应。

我目前正在使用以下版本的相关库: aws-appsync: 1.0.17 Apollo-client: 2.2.8 react-Apollo: 2.1.3 redux: 3.6.0

编辑 附加信息。这发生在使用 Expo 创建的 react-native 程序中。通过摇动设备并选择“重新加载”重新加载程序会导致上述行为。但是,重新启动 Expo 并再次运行程序会导致根据需要重新获取查询。

0 投票
1 回答
1462 浏览

header - 使用 AWS Amplify 登录时将 JWT 添加到所有 GraphQL/AppSynce 请求

我有一个使用 IAM 身份验证的 AppSync 应用程序(连接到 Cognito 用户和身份池)。使用 IAM 身份验证时,$event.context.identity 是一个 Cognito 身份池对象,没有用户信息(没有用户名、子、电子邮件等)

我相信每当我发出 graphQL 请求时,我都需要将 UserPoolID JWT(可通过 Amplify 在客户端使用)传递给 AppSync。但我一直无法弄清楚如何将 JWT 添加到(大概)标题中。
-------------EDIT------------- AppSyncClient 是客户端(基于 apollo 构建)。App.js 看起来像