通过 AWS API Gateway 集成模板使用 DynamoDB 的 lastEvaluatedKey 进行扫描

2024-04-05

我使用 AWS APIGateway 集成模板直接扫描 dynamoDB,而不是编写单独的 lambda 来处理请求/响应。但是,扫描有 1MB 的限制,这导致扫描仅限于部分数据。

根据文档,我们应该重新扫描,直到找到匹配项或使用 lastEvaluatedKey 扫描完整的表。有什么方法可以使用 lastEvaluatedKey 并在网关配置本身中重新扫描而不是编写 lambda 吗?

Thanks.


诀窍在于请求和响应模板。此示例启用扫描page_size and last_key作为输入参数(GET):

请求模板(应用程序/json):

#set($last_key = $input.params('last_key'))
#set($page_size = $input.params('page_size'))
{
#if($last_key != '')
  "ExclusiveStartKey": {
    "id": {
      "S": "$last_key"
    }
  },
#end
#if($page_size != '')
  "Limit": $page_size,
#end
  "TableName": "<your_table>"
}

请求模板(应用程序/json):

#set($payload = $input.path('$'))
#set($last_key = $payload.LastEvaluatedKey.id.S)
{
  "page_size": $payload.Count,
#if($last_key != '')
  "last_key": "$last_key",
#end
  "Items": $payload.Items
}

如果您使用 CloudFormation,请使用此模板:

/er/tickets/scan:
  get:
    responses:
      "200": {}
    x-amazon-apigateway-integration:
      passthroughBehavior: WHEN_NO_TEMPLATES
      httpMethod: POST # must be POST even for GET
      type: AWS
      credentials:  !GetAtt ApiGatewayRole.Arn
      uri: !Sub "arn:aws:apigateway:${AWS::Region}:dynamodb:action/Scan"
      requestTemplates:
        application/json: !Sub |
          #set($last_key = $input.params('last_key'))
          #set($page_size = $input.params('page_size'))
          {
          #if($last_key != '')
            "ExclusiveStartKey": {
              "id": {
                "S": "$last_key"
              }
            },
          #end
          #if($page_size != '')
            "Limit": $page_size,
          #end
            "TableName": "${TicketsTable}"
          }
      responses:
        default:
          statusCode: 200
          responseTemplates:
            application/json: |
              #set($payload = $input.path('$'))
              #set($last_key = $payload.LastEvaluatedKey.id.S)
              {
                "page_size": $payload.Count,
              #if($last_key != '')
                "last_key": "$last_key",
              #end
                "Items": $payload.Items
              }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 AWS API Gateway 集成模板使用 DynamoDB 的 lastEvaluatedKey 进行扫描 的相关文章

  • 输出和导出之间的区别

    在 CloudFormation 中 我们能够从模板输出一些值 以便其他进程 堆栈等可以检索它们 这通常是某个名称 可能是 URL 或在堆栈创建 部署 过程中生成的名称等 我们还能够从模板 导出 返回值作为 输出 与 导出 之间有什么区别
  • 具有服务器端加密 s3 存储桶的 AWS Cloudfront

    这是对这个问题 https stackoverflow com questions 50166557 how can a cloudfront distribution an aws kms key to get an s3 image e
  • 如何在 PuTTY 中保存并运行 Java 文件?

    我是 AWS 亚马逊网络服务 的新手 所以这可能是一个基本问题 我在 AWS 上创建了一个 EC2 实例 我有一台 Windows 计算机 因此我使用 PUTTY 来连接 Linux 实例 连接到我的 EC2 实例后 我使用以下命令编写 J
  • 每次在我的 AWS SQS 目标上推送通知时如何触发事件?

    我正在将 AWS SQS 用于 Amazon MWS 订单 API 每当有人从已将我添加为其开发人员的卖家帐户订购时 亚马逊都会将通知发送到我的 AWS SQS 应用程序 我可以从那里提取通知 但为此 我必须创建一个调度程序来提取通知 我是
  • AWS EC2 应用程序负载均衡器 + 双向 SSL?

    是否可以使用 AWS Application Load Balancer 并使用双向 ssl 客户端证书 我当前的设置使用经典的 ELB 通过 tcp 转发到 Web 服务器端点来支持此操作 我现在需要使用 URL 路由流量 并希望在可能的
  • 如何更改 SAM 模板中 API 阶段的名称?

    我正在使用 SAM 部署 Lambda 函数 并使其可通过 API Gateway 通过 HTTP 进行调用 大致使用以下模板片段 MyFunction Type AWS Serverless Function Properties Eve
  • 在全局二级索引上使用“withExclusiveStartKey”进行分页

    我有一个名为 product 的 DynamoDB 表 其全局二级索引位于 userId 上 主键位于 id 上 我正在尝试使用 userID GSI 上的 withExclusiveStartKey 来实现分页查询 但是 当我传递有效的
  • 在 Serverless Framework 1.0 中使用路径参数

    我想使用路径参数 customer customerId of a GET请求以使用 AWS Lambda 查询客户 functions createCustomer handler handler createCustomer event
  • 使用 Elastic Beanstalk 进行 Logback

    我在使用 Elastic Beanstalk 记录应用程序日志时遇到问题 我正在 AWS Elastic Beanstalk 上的 Tomcat 8 5 with Corretto 11 running on 64bit Amazon Li
  • AWS Elastic Beanstalk 一次也不会部署我的 Rails 应用程序

    我目前正在使用 Ruby 2 6 running on 64bit Amazon Linux 2 3 0 2 图像 并通过查看EC2实例内部的 var logs eb engine log eb logs 命令不会 t 告诉我这个 反复出现
  • 从 Amazon S3 存储桶下载文件的脚本

    尝试编写脚本以从 Amazon S3 存储桶下载文件 cURL 网站上的示例遇到问题 下面的脚本产生 我们计算的请求签名与您的签名不匹配 假如 检查您的密钥和签名方法 感谢任何帮助 bin sh file filename php buck
  • 如何在AWS策略中提供多个StringNotEquals条件?

    我正在尝试编写 AWS S3 存储桶策略 拒绝所有流量 除非来自两个 VPC 的流量 我正在尝试编写的策略如下所示 两者之间有逻辑与StringNotEquals 除非这是无效的政策 Version 2012 10 17 Id Policy
  • 将消息从 AWS Lambda 发布到 AWS IoT

    我正在尝试使用 Nodejs 将消息从 AWS Lamba 发布到 AWS IoT 我已压缩该项目并上传到 AWS IoT 下面是代码片段 var awsIot require aws iot device sdk var device a
  • AWS S3 公共对象与私有对象?

    回到 S3 我的存储桶中有图像的 URL 我将在我的应用程序中呈现这些图像 但它们被设置为私有 当我尝试单击该链接时 它显示 访问被拒绝 当我将链接的设置更改为公共时 它会通过 但是我读到公共访问并不是最安全的事情 所以这本质上是一个由两部
  • AWS DynamoDB 写后读一致性 - 理论上它是如何工作的?

    大多数nosql解决方案仅使用最终一致性 并且考虑到DynamoDB将数据复制到三个数据中心 如何保持写后读一致性 解决此类问题的通用方法是什么 我认为这很有趣 因为即使在 MySQL 复制中 数据也是异步复制的 我将详细告诉您 Dynam
  • 如何使用 jq 从多个嵌套数组中提取键

    SETUP 我试图弄清楚 jq 过滤器是如何工作的 但在找出嵌套数组时遇到了困难 使用下面的数据我无法做出平的 5 键输出 我可以得到 1 个键和 4 个空值 或者 4 个键和 1 个空值 但不能得到所有 5 个键 1 个键 4 个空值 R
  • ElasticBeanstalk Java,Spring 活动配置文件

    我正在尝试通过 AWS ElasticBeanstalk 启动 spring boot jar 一切正常 配置文件为 默认 有谁知道如何为 java ElasticBeanstalk 应用程序 不是 tomcat 设置活动配置文件 spri
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • 使用 CognitoIdentityServiceProvider 的 adminCreateUser 方法的 AWS Lambda 函数突然失败

    在过去的几天里 我一直在使用 AWS Lambda 函数测试特定流程 并且在 Cognito 用户池中预注册后触发的 lambda 函数工作正常并很好地返回回调函数 但从昨天开始我就看到了以下错误 ntime node modules aw
  • IOPS 与吞吐量。选择 AWS EBS 时使用哪一种

    在选择合适的 EBS 卷类型时 我需要决定IOPS 或吞吐量是否是更好的性能衡量标准 https docs aws amazon com en us AWSEC2 latest UserGuide EBSVolumeTypes html问题

随机推荐