标签: aws-appsync

aws appsync auth 指令未按预期限制访问

在我正在使用的 appsync api 的 graphQl 模式中,我想根据用户所属的组来限制他们的操作。

根据文档,添加该行aws_auth(cognito_groups: ["Admins"])应该将访问权限限制为仅属于“管理员”组的用户。当我从 appsync 控制台或应用程序本身运行突变时,不会发生这种情况。

我的突变如下:

type Mutation @aws_iam
@aws_cognito_user_pools {
    createItem(input: CreateItemInput!): Item
    updateItem(input: UpdateItemInput!): Item
    @aws_auth(cognito_groups: ["Admins"])
}
Run Code Online (Sandbox Code Playgroud)

@aws_iam 和 @aws_cognito_user_pools 指令似乎工作正常。但任何已通过身份验证或具有 iam 角色的人仍然可以执行更新,即使他们不属于“管理员”组。

这里发生了什么?是否需要进行额外的配置才能使其正常工作?

aws-appsync

4
推荐指数
1
解决办法
1763
查看次数

如何为单表设计设置 Amplify 数据存储架构

对于我的项目,我需要能够离线查询和更改数据,并在连接恢复时同步更改。因此,具有 Amplify Appsync 和数据存储的 DynamoDB 似乎是最佳选择,但我们正在努力解决一些相互矛盾的建议。

我们的数据是围绕项目构建的,这些项目具有应该实时更改和同步的位置。由于一个位置可以包含多个项目,而一个项目可以有多个位置,因此我们处理多对多关系。我们应该能够查询所有项目、所有位置、单个项目的所有位置、一个位置的所有项目。这是数据结构的基本要求,但我们应该能够添加对上次修改项目等内容的查询。接下来,我们有一个多租户设置,因此应该有一种方法来授权用户访问部分内容数据。我们可能会使用用户组来过滤数据。

大多数在线资源都指出,为了充分利用 DynamoDB,单一表设计方法是最佳选择。这意味着我们可以使用本文档中所示的结构,添加排序键来进行其他查询。

数据存储文档表示,应该使用 @model 指令来设置所有突变、查询和订阅。为了建立 Items 和 Locations 之间的关系,我们应该使用 @manyToMany 指令,如此处所述。总而言之,这将产生以下模式:

type Item 
    @model
    @auth(rules: [{ allow: groups, groupsField: "groups" }])
    {
        ID: ID!
        groups: String!
        locations: [Location] @manyToMany(relationName: "ItemLocation")
        ...
    }

type Location 
    @model
    @auth(rules: [{ allow: groups, groupsField: "groups" }])
    {
        ID: ID!
        groups: String!
        items: [Item] @manyToMany(relationName: "ItemLocation")
        ...
    }
Run Code Online (Sandbox Code Playgroud)

当我们使用 Amplify CLI 部署此架构时,所有资源都会毫无问题地生成。但是,如果我们查看 DynamoDB 表,我们会发现生成了多个表:Item、Location 和 ItemLocation。@model 指令会自动部署表,@manyToMany 指令也是如此。Dynamodb 文档不使用这些指令,因此应该可以根据给定的要求创建单个表。我无法找到如何从数据存储/放大端执行此操作,或如何将数据存储连接到现有的 DynamoDB,因为数据存储依赖 @model 指令在本地存储数据(或者这就是我怀疑的)。这不符合 DynamoDB 标准,我们希望将此设置更改为单表设计。 …

amazon-web-services amazon-dynamodb graphql aws-appsync aws-amplify

4
推荐指数
1
解决办法
1026
查看次数

AppSync S3Object检索

根据提供的教程,我的文件当前正在上传到s3存储桶。

我有一个Post类型,其文件字段指向S3Object。S3Object具有存储桶,键和区域的值。

我想允许我的用户下载他们上传的文件,但是我无法通过查询访问“帖子>文件”。这意味着我无法获得下载URL。

现在,DynamoDB在上传后将以下文件存储起来(我在这里更改了值): {"s3":{"key":"id.pdf","bucket":"my-bucket","region":"my-region"}}

我的Post>文件解析器如下所示: { "version": "2017-02-28", "operation": "GetItem", "key": { "id": $util.dynamodb.toDynamoDBJson($ctx.source.id), } }

响应模板: $util.dynamodb.fromS3ObjectJson($ctx.result.file)

运行查询时,出现以下错误: Error: GraphQL error: Unable to convert {bucket=my-bucket, region=my-region, key=id.pdf} to class java.lang.Object.

amazon-s3 amazon-web-services aws-appsync

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

将AppSync和Amazon RDS与无服务器-graphql一起使用

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

现在,我正在努力将AppSync和Amazon RDS结合使用。我尝试了独立rds的实现,以及存储库中提供的appsync示例。这些工作就像一种魅力。但是,如果您想组合使用这些技术,显然存在许多差异和困难。我使用了rds目录中的架构,解析器和处理程序函数,并将其与appsync lambda实现结合在一起。我调整了映射模板并更新了serverless.yml文件。

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

是否有人对此特定组合有任何建议或可行的示例?

amazon-rds node.js graphql serverless-framework aws-appsync

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

通过带有Dynamodb的AWS Appsync解析器自动添加时间戳

创建帖子后,我尝试自动添加时间戳。但是,它不适用于appsync解析器-上下文引用的示例。

https://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference.html#time-helpers-in-util-time

{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key": {
        "id" : $util.dynamodb.toDynamoDBJson($util.autoId())
    },

    #set( $myfoo = $util.dynamodb.toMapValues($ctx.args) )
    #set( $myFoo.version = $util.dynamodb.toNumber(1) )
    #set( $myFoo.timestamp = $util.time.nowISO8601() )

    "attributeValues" : $util.toJson($myFoo)
}
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-dynamodb aws-appsync

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

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

全局二级索引上的AppSync查询

我正在尝试从GSI获取记录,但遇到了麻烦。

API架构:

type DriverInfos {
    id: String!
    status: Int
    lastLat: Float
    lastLng: Float
    idDriver: String # GSI
}

type Query {
    getDriverInfosByDriver(idDriver: String): DriverInfos
}
Run Code Online (Sandbox Code Playgroud)

解析器:

{
    "version" : "2017-02-28",
    "operation" : "Query",
    "index" : "idDriver-index",
    "query" : {
        ## Provide a query expression. **
        "expression": "#idDriver = :idDriver",
        "expressionNames" : {
            "#idDriver" : "idDriver"
        },
        "expressionValues" : {
            ":idDriver" : {
                "S" : "${ctx.args.idDriver}"        
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

查询:

query getDriverInfosByDriver{
  getDriverInfosByDriver(idDriver: "1") 
    {    
      idDriver
      status
      lastLat
      lastLng 
    } …
Run Code Online (Sandbox Code Playgroud)

resolver amazon-web-services graphql react-native aws-appsync

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

具有业务逻辑的AWS Appsync + DynamoDB

当数据源是dynamoDB时,是否有可能在我的AppSync突变上有业务逻辑?

我是GraphQL和Appsync的新手.我的理解是,当您使用普通的GraphQL时,您可以在解析器中拥有业务逻辑,以便在更新之前进行验证.当您使用DynamoDB作为数据源传递GraphQL架构时,您将如何使用AWS AppSync实现相同的功能?

amazon-web-services graphql aws-appsync

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

如何使用AppSync解析器和Aurora将可选字段插入为null?

我有一个可选的String字段notes,有时为空。如果为空,我想插入null,否则我想插入字符串。

这是我的解析器-

{
    "version" : "2017-02-28",
    "operation": "Invoke",
        #set($id = $util.autoId())
        #set($notes = $util.defaultIfNullOrEmpty($context.arguments.notes, 'null'))

        "payload": {
          "sql":"INSERT INTO things VALUES ('$id', :NOTES)",
          "variableMapping": {
            ":NOTES" : $notes
          },
          "responseSQL": "SELECT * FROM things WHERE id = '$id'"
        }
Run Code Online (Sandbox Code Playgroud)

}

有了这个graphql

mutation CreateThing{
  createThing() {
    id
    notes
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到-

{
  "data": {
    "createRoll": {
      "id": "6af68989-0bdc-44e2-8558-aeb4c8418e93",
     "notes": "null"
   }
 }
Run Code Online (Sandbox Code Playgroud)

}

当我真的想要没有引号的null时

有了这个graphql-

mutation CreateThing{
  createThing(notes: "Here are some notes") {
    id
    notes …
Run Code Online (Sandbox Code Playgroud)

resolver amazon-web-services graphql aws-appsync aws-aurora

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

AppSync-查询在日期范围内创建的所有项目?

我正在尝试查询特定日期范围内所有项目的项(其中具有AWS DateTime的CreatedAt和UpdatedAt字段)。例如,过去48小时。

例如,使用以下架构:

type Note @model @searchable @auth(rules: [{ allow: owner }]) {
  id: ID!
  note: String
  createdAt: AWSDateTime
Run Code Online (Sandbox Code Playgroud)

我可以使用以下方式搜索日期:

query {
  searchNotes(filter:{createdAt: { matchPhrasePrefix: "2018-12-27"}}) {
    items{
      id
        title
      createdAt
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

它返回所有带有该字符串前缀的与UTC时间匹配的音符。

从那里,我必须使用moment.diff()或其他方法对自己进行排序。

我不确定是否有使用AppSync和GraphQl按日期和时间进行搜索/筛选的更好/更有效的方法?

谢谢。

elasticsearch amplifyjs graphql aws-appsync aws-amplify

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