标签: aws-appsync

使用 AppSync 的 GraphQL 类型描述

有没有办法将 GraphQL 类型描述添加到 AppSync 使用的 GraphQL 架构?

ApolloServer 和 graphql-js 通过模式文件中的注释支持这一点(请参阅此处)。AppSync 是否有类似的东西,所以我可以使用 GraphQL 类型自省来查看字段描述?

aws-appsync

3
推荐指数
1
解决办法
506
查看次数

如何使用 GraphQL 放置/更新嵌套数据?

我正在尝试使用 AWS AppSync 构建我的第一个 GraphQL 后端。我只是想弄清楚如何使用一对多关联。我希望收到许多相关对象作为子对象列表,并且能够在创建新用户时写入其中一些子对象。

type User {
    id: ID!
    name: String!
    records: [Records!]!
}
type Records {
    id: ID!
    userId: ID!
    title: String!
    ... etc ...
}
Run Code Online (Sandbox Code Playgroud)

使用 AppSync 界面,我单击Create Resources一次创建记录表,然后再次单击创建用户表,这两个表都在 DynamoDB 中。这还会自动将突变、订阅、输入类型和更多类型添加到我的架构中,并为我创建解析器。

创建与我的 User 对象关联的 Record 对象的突变语法是什么?创建用户时如何放置记录数据?

如果需要,我可以包含 AppSync 自动生成的更多架构。

graphql aws-appsync

3
推荐指数
1
解决办法
2881
查看次数

Amplify 缺少 Cognito 自定义声明,但 Appsync 控制台没有

我有以下解析器,允许我检索有关当前用户公司的信息(companyId 作为自定义字段添加到 cognito 用户池中)。cognito 上的字段设置为可变的。

{ "version" : "2017-02-28", "operation" : "GetItem", "key": { "id" : $util.dynamodb.toDynamoDBJson($context.identity.claims.get("custom:companyId")) } }

——

这在使用 AWS AppSync 界面(登录后)时工作正常,如日志所示:

{ "errors": [], "mappingTemplateType": "Request Mapping", "path": "[getMyClientCompany]", "resolverArn": "arn:aws:appsync:eu-west-1:261378271140:apis/rue25cac6jc6vfbhvu32sjafqy/types/Query/fields/getMyClientCompany", "transformedTemplate": "{\n \"version\" : \"2017-02-28\",\n \"operation\" : \"GetItem\",\n \"key\": {\n \"id\" : {\"S\":\"0c1c81db-a771-4856-9a30-d11bf8e3cab1\"}\n }\n}", "context": { "arguments": {}, "source": null, "result": null, "error": null, "outErrors": [] }, "fieldInError": false }

——

但是当代码来自 Amplify-js 时不起作用:

{ "errors": [], "mappingTemplateType": "Request Mapping", "path": "[getMyClientCompany]", "resolverArn": "arn:aws:appsync:eu-west-1:261378271140:apis/rue25cac6jc6vfbhvu32sjafqy/types/Query/fields/getMyClientCompany", "transformedTemplate": "{\n …

claims-based-identity custom-attribute amazon-cognito aws-appsync aws-amplify

3
推荐指数
1
解决办法
1742
查看次数

AWS AppSync - 未经授权的异常

我已开始使用 AWS AppSync,但遇到了权限问题。

我使用 AppSync 为我的数据创建了一个 DynamoDB 表,并设置了与我已经创建的 Cognito 用户池一起使用的授权。

我设置了默认操作ALLOW,根据 AWS 文档 - https://docs.aws.amazon.com/appsync/latest/devguide/security.html#amazon-cognito-user-pools-authorization - 应该允许公共访问默认情况下运行在我的架构中定义的任何查询/变异/订阅。

上面的文档还说限制访问是通过@aws_auth在我的类型定义中添加一个来完成的。我还没有添加。

这就是我想要的:我希望我的查询是公开的 - 不需要添加@aws_auth指令 - 并且我的更改仅限于我的 Cognito 用户池中的 Admins 组。因此,在测试查询时,我应该能够将数据返回给我,而无需在任何地方登录。

但是,当尝试在 AppSync 控制台内运行任何测试查询时,我收到以下错误消息:

{
  "errors": [
    {
      "errorType": "UnauthorizedException",
      "message": "Unable to parse JWT token."
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

显然,这与未使用 Cognito 登录有关。

我之前在没有使用 Cognito 授权的情况下测试过这些查询,它们都运行良好。由于我的默认操作设置ALLOW为我的 Cognito 授权方,我的查询现在应该运行相同,因为我没有修改它们。

查看我的查询、类型和解析器的代码,我无法发现它们的编写方式有什么不同。允许访问我的 DynamoDB 表的 IAM 角色也保持不变,没有附加任何限制。

到底是怎么回事?AppSync 是否存在错误,或者我在这里遗漏了什么?

请告诉我。谢谢

authorization amazon-web-services amazon-cognito graphql aws-appsync

3
推荐指数
2
解决办法
5820
查看次数

使用 AWS AppSync 进行输入验证

是否可以在不添加另一个交互“层”的情况下使用 AWS AppSync 进行输入验证?

我觉得添加一个 lambda 函数会破坏它的目的。

我想要完成的是至少对字符串进行一些正则表达式验证。

如果没有,那么使用 AppSync 或类似解决方案 (firebase) 的人是如何做到的?

amazon-web-services graphql aws-appsync

3
推荐指数
1
解决办法
2040
查看次数

如何将项目添加到列表中?

我想listOfVideosRated[]在我的用户表中的列表中添加一个字符串单词。

javascript database amazon-dynamodb graphql aws-appsync

3
推荐指数
1
解决办法
3241
查看次数

如何按查询过滤 AWS AppSync 中的嵌套字段

问题和预期结果

我正在使用概念证明模式和 DynamoDB 表设置来过滤嵌套字段值。我在这里非常普遍地遵循了这些想法以及$utils.transform.toDynamoDBFilterExpression(这里)的文档。

基本思想是这样的:使用相同的原则,我想通过任何任意深度的嵌套字段(低于 DynamoDB 中的 32 个文档路径长度限制)进行过滤。相关设置如下所示:

AppSync 架构(对命名约定表示歉意;应该是一个快速而肮脏的 PoC):

query {
    listActiveListingsBySubAndFilter(
        filter: TableTestMasterDataTable_ImportV1FilterInput!,
        limit: Int,
        nextToken: String
    ): TestMasterDataTable_ImportV1Connection
}

input TableBooleanFilterInput {
    ne: Boolean
    eq: Boolean
}

input TableDataObjectFilterInput {
    beds: TableFloatFilterInput
    baths: TableFloatFilterInput
}

input TableFloatFilterInput {
    ne: Float
    eq: Float
    le: Float
    lt: Float
    ge: Float
    gt: Float
    contains: Float
    notContains: Float
    between: [Float]
}

input TableIDFilterInput {
    ne: ID
    eq: ID
    le: ID
    lt: ID
    ge: …
Run Code Online (Sandbox Code Playgroud)

nested filter amazon-dynamodb graphql aws-appsync

3
推荐指数
1
解决办法
1967
查看次数

AWS GraphQL Appsync - 无法承担角色

我正在运行一个技术堆栈 react -> graphQL -> appsync -> lambda -> go

当我从客户端运行我的 graphQL 查询时,我收到了这个错误:

Unable to assume role arn:aws:iam::<SOMENUMBER>:role/service-role/MyRoleForMyLambda.

事实上,这一切都运行良好,直到我不小心将数据源上的功能 ARN 和角色更改为其他功能。我把它们改回来了,但现在 Appsync 似乎无法找到角色和功能 ARN。我尝试创建一个全新的数据源,但我遇到了同样的问题。通常,函数 ARN 和/或角色不会出现在下拉列表中,我手动输入它们。有时它可以让我保存而没有错误 - 其他时候尝试保存数据源时我会收到有用的错误消息“错误”。有时在保存后,当我再次查看它们时,函数 ARN 字段是空白的,除非我单击“不在下拉列表中”链接。

我认为问题不在于我的角色本身,因为似乎 appsync 甚至无法承担该角色。我已经阅读了有关信任策略作为解决方案的内容,但我不知道将它们放在哪里。

非常感谢任何帮助。

amazon-web-services aws-lambda graphql aws-appsync

3
推荐指数
1
解决办法
1150
查看次数

GraphQL DynamoDB 架构中的默认主键?

我正在 AWS Amplify 中使用 graphql 为新的 DynamoDB 创建我的第一个架构。我注意到许多示例中没有 @key 指令来定义主键,例如下面的“产品”:

type Inventory @model
  @key(name: "byWarehouseID", fields: ["warehouseID"], queryField: "itemsByWarehouseID")
  @key(fields: ["productID", "warehouseID"]) {
  productID: ID!
  warehouseID: ID!
  inventoryAmount: Int!
}

type Product @model {
  id: ID!
  name: String!
  orders: [Order] @connection(keyName: "byProduct", fields: ["id"])
  inventories: [Inventory] @connection(fields: ["id"])
}
Run Code Online (Sandbox Code Playgroud)

第一个字段是否自动用作主键(分区键)?

amazon-dynamodb graphql react-native aws-appsync aws-amplify

3
推荐指数
1
解决办法
919
查看次数

如何删除和重新创建由模拟 api 创建的本地 dynamodb/appsync/amplify 数据库?

我正在使用 AWS Amplify 构建 Web 应用程序。我正在使用 Appsync 和 DynamoDb,并且已经定义了我的 GraphQL 架构。现在,Amplify 提供了通过从命令行运行“amplify mock api”来测试本地 GraphQL 端点的能力。我这样做了,它成功地为我创建了一些本地 GraphQL 端点,我能够插入一些数据并进行一些本地查询。(当我第一次运行“amplify mock api”时,我在控制台上收到了一些关于我的表已创建的消息。)

从那以后,我对我的 GraphQL 架构进行了相当大的更改,包括键、排序键等。我认为我的所有更改都没有成功应用于我的本地 api 和数据库表。所以我基本上只想完全删除我的本地“数据库”,以便“放大模拟 api”可以根据我的新模式为我重新生成一个新的本地数据库。我该怎么做呢?我不知道这个放大本地数据库所在的位置或它使用的底层技术。(否则我会直接连接到数据库并删除所有表以强制重新创建。)我尝试过“放大删除api”,它删除了本地端点。我什至将它推送到 AWS(我目前处于开发模式,所以我不介意破坏我的 AWS 环境。)然后我做了“放大添加 api” 再次从头开始,我再次输入我的模式。但是,如果我运行“放大模拟 api”,则它不会重新创建表。端点启动,如果我执行 GraphQL 查询,我会取回我最初添加的数据。这意味着这些表仍然存在。

如何完全删除本地“模拟”Amplify Appsync GraphQL 端点和数据库以强制重新创建?(如果相关,我正在使用 Mac)。

aws-appsync aws-amplify

3
推荐指数
1
解决办法
1227
查看次数