首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法使用aws api-gateway通过REST API获取全局二级索引中的所有项目?我只能弄到一些

有没有办法使用aws api-gateway通过REST API获取全局二级索引中的所有项目?我只能弄到一些
EN

Stack Overflow用户
提问于 2021-01-17 09:53:39
回答 1查看 142关注 0票数 2

我使用aws api-gateway和dynamodb创建了REST api,但没有在GET API方法、POST http方法和扫描操作设置上使用aws-lambda (我为集成请求和集成响应编写了映射模板,而不是lambda)。我从dynamodb中的全局二级索引中获取数据,以使我的扫描比原始表更小。

它工作得很好,除了我只能扫描我需要扫描的7500个项目中的大约1000个。我查看了s3存储桶中的json分页,但如果可能的话,我真的希望只使用aws api-gateway和dynamodb来保持简单。

有没有办法在对集成请求和/或响应映射进行一些修改的情况下,获得我有效负载中的所有7,500个项目?如果没有,你有什么建议?

下面是我使用的映射代码,它适用于1000个项目的json有效负载,而不是我想要的7500个项目:

集成请求:

代码语言:javascript
复制
{ 
  "TableName": "TrailData",
  "IndexName": "trail-index"
}

集成响应:

代码语言:javascript
复制
  #set($inputRoot = $input.path('$'))
  [
   #foreach($elem in $inputRoot.Items)
      { 
       "id":$elem.id.N,
       "trail_name":"$elem.trail_name.S",
       "challenge_rank":$elem.challenge_rank.N,
       "challenge_description":"$elem.challenge_description.S",
       "reliability_description":"$elem.reliability_description.S"
       }
       #if($foreach.hasNext),#end
       #end
  ]

下面是我的接口的GET方法设置的屏幕截图:API Screenshot

我已经看过这个:与stackoverflow question相关的话题,但我不知道如何将它应用于我的情况。我在这上面花了很多时间。

我知道dynamodb的查询限制是1MB,但我返回的有限数据只有142KB。

感谢您的帮助和建议。我对此还不熟悉。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-17 12:03:15

这个限制与Dynamo扫描无关,但是Response Template中的VTL #foreach被限制为1000次迭代,Here才是问题所在。

我们也可以确认这一点,通过简单地删除#foreach(或整个响应模板),我们应该看到所有(1MB)的记录回来(但格式不好)。

最简单的解决方案是传递请求参数,以便仅限制Dynamo表中的必要属性

代码语言:javascript
复制
{
    "TableName":"ana-qa-linkshare",
    "Limit":2000,
    "ProjectionExpression":"challenge_rank,reliability_description,trail_name"
}

然而,我们可以避免使用多个foreach循环进行超过1000次的单个循环,但是在模板中会变得有点复杂,相反,我们可以使用lambda。但这是它可能看起来的样子。

代码语言:javascript
复制
#set($inputRoot = $input.path('$'))
#set($maxRec = 500)
#set($totalLoops = $inputRoot.Count / $maxRec )
#set($outerArray = [0..$totalLoops])
 #set($innerArray = [0..$maxRec])
 {
  [
  #foreach($outer in $outerArray)
  #foreach($inner in $innerArray)
      { 
    grab the element with $inputRoot.Items.get(..index)
      and Build JSON here.
       }
    #end   
    #end   
  ]
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65756589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档