问题标签 [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.
lambda - 从未在 Lambda 函数中调用与 Sequelize 的 RDS 连接
我将 AWS AppSync 与 Lambda 函数一起用作解析器。这些函数查询 RDS Postgres 数据库(使用 Sequelize)。
我的问题是,无论我做什么,我的查询都不会被触发。我的代码有什么问题?
我看过这篇文章,但没有成功。 Sequelize 代码不在 AWS Lambda 内部执行
amazon-web-services - AWS AppSync 中订阅的自定义筛选
是否可以在 AWS AppSync 中对订阅进行自定义过滤逻辑?
据我所知,当前的行为是:例如我的架构如下
AppSync 的当前行为是,当我触发 createEvent 时,AppSync 承诺如果 userId 相等,订阅的订阅者会收到事件。即AppSync的过滤逻辑是这样的
但是如果我想要不同的过滤逻辑呢?例如,我想订阅除我触发的事件之外的所有其他事件?IE
那么,是否可以在 AppSync 中拥有自定义过滤逻辑?
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 还是我们打算像我一样使用存储桶、密钥、区域下载自己?)我想这不是主题。
任何帮助将不胜感激,我真的在这个问题上撞到了墙上。
编辑:GitHub 问题已引起 AWS 的回应,他们正在调查
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:
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?
amazon-web-services - 迭代模板中的 AWS cloudformation 资源数组
从 yml(或 json)模板在 AWS CloudFormation 中创建资源时,是否可以迭代数组以保持模板简短易读。例如,我有一个 Appsync 项目,我必须在其中创建一堆几乎相同的 AWS 类型“AWS::AppSync::Resolver”的解析器。在我与 Cloud Formation 一起使用的 YML 模板中,1 个此类资源可能如下所示
我可能有十几个或更多这样的解析器,唯一的区别是我用<----
. 有没有办法迭代一组值,比如说
node.js - 将 AppSync 和 Amazon RDS 与 serverless-graphql 一起使用
有一个很棒的存储库,其中包含不同无服务器场景的示例实现。
现在我正在为 AppSync 和 Amazon RDS 的结合而苦苦挣扎。我尝试了独立 rds 的实现,以及存储库中提供的 appsync 示例。这些工作就像一个魅力。但显然,如果你想将这些技术结合起来,会有很多不同和困难。我使用了 rds 目录中的模式、解析器和处理程序函数,并将其与 appsync lambda 实现相结合。我调整了映射模板并更新了 serverless.yml 文件。
我可以成功部署整个 appsync 服务和所有资源,而不会出现任何错误。我可以从 graphiql 访问 graphql 端点并进行查询。但是当我从 appsync 控制台尝试它时,我得到 null 作为响应。我想这与映射模板有关,但我不太确定。
有没有人有任何建议或这种特定组合的工作示例?
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 类型时,我需要访问用户的声明。
android - 在 Android 应用程序中使用 IAM 订阅 AWS AppSync
我在 Android 应用程序中使用新的 AWS AppSync 服务,使用 IAM 身份验证(访问密钥和密钥),以便用户可以通过 Google Map API 实时共享他们的位置。为此,我创建了一个在 AppSync 的查询控制台中运行良好的订阅。但是当我在我的应用程序中实现订阅时,它无法正常工作。
这是一个用例:
- 用户 A 访问地图,查看通过 GraphQL 订阅发送到 AppSync 服务的他的位置
- 用户 B 做同样的事情。
- 用户 A 发送他最后的位置
- 用户 B 收到,用户 A 出现在用户 B 地图上
- 用户 B 发送他的最后一个位置,但用户 A 从未收到它
如果用户 A 退出地图并重新打开它,GraphQL 订阅也会重新打开,他会收到用户 B 在订阅后发送的最后一个位置。
一开始,我有两个使用 API Key 认证的 GraphQL 订阅,但是实时的不行。仅删除订阅后,按照此答案https://stackoverflow.com/a/49242267/4862232,一切正常。
但是由于我更改了身份验证方法,所以我遇到了麻烦,这里是代码:
任何帮助,将不胜感激。
redux - GraphQL 查询一次成功运行,但使用 Apollo 和 AWS AppSync 再次运行失败
我正在使用https://github.com/awslabs/aws-mobile-appsync-sdk-js repo 第一页上示例中的基本客户端配置:
但是没有<Rehydrated>
组件,并且有一个 Redux<Provider>
组件。最高级别的父组件是这样包装的:
我试过交换 and 的顺序Provider
,ApolloProvider
但这并没有改变结果。
问题是查询成功运行一次,但不再运行。AppSync 的 CloudWatch 日志显示初始成功查询,但未显示进一步的查询尝试。这使我相信问题出在客户端上。
我已将fetchPolicy
查询设置为'network-only'
没有结果:
通过在 Chrome 调试器中检查组件,我已经确认命名查询“ getAllStories
”确实存在于组件上。查询道具NetworkStatus
和loading
属性始终保持不变,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 并再次运行程序会导致根据需要重新获取查询。
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 看起来像