【问题标题】:DynamoDB to 'vanilla' JSONDynamoDB 到“香草”JSON
【发布时间】:2017-11-23 03:47:49
【问题描述】:

我开始使用 AWS 中的一些托管服务。一件看起来应该很简单的事情是使用 API 网关来保护和公开对 DynamoDB 的调用。

我有这个工作。但是,它似乎有点笨拙。 DynamoDB 返回如下内容:

{
  "id":{"N":"3"}
  // Lots of other fields
}

当我(和大多数其他消费者)真的想要这样的东西时:

{
  "id":"3"
  // Lots of other fields
}

在我看来,我有两个选择。

1) 在 AWS API UI 中逐个字段添加响应映射。这似乎很费力且容易出错:

#set($inputRoot = $input.path('$'))
{
   "Id": "$elem.Id.N"
    // Lots of other fields 
}

2) 在 API Gateway 和 Dynamo 之间编写一个特定的 lambda,以执行此映射。就像https://stackoverflow.com/a/42231827/2012130 这增加了另一个需要维护的东西。

有没有更好的方法?我错过了什么吗?似乎非常接近真棒。

【问题讨论】:

  • 你能分享一些代码吗?您使用什么语言?实现您所追求的一种方法是查看 DynamoDB DocumentClient,它应该按照您想要的方式执行。
  • 你好丹尼尔。感谢那。基本上我在这里重新创建教程aws.amazon.com/blogs/compute/…
  • DocumentClient 就是答案。
  • DocumentClient 似乎可以满足我的要求。但是我必须在 API 和 DynamoDB 之间有一个 lambda 才能调用它吗?
  • 是的,您当然需要一个 Lambda 函数才能使用 DocumentClient。您在问题中列出的两个选项(映射模板或 Lambda 函数)是您仅有的两个可能的解决方案。没有更容易/更简单的方法来完成您想要的。

标签: amazon-web-services amazon-dynamodb aws-api-gateway


【解决方案1】:
const AWS = require('aws-sdk');
var db = new AWS.DynamoDB.DocumentClient({
    region: 'us-east-1',
    apiVersion: '2012-08-10'
});

【讨论】:

  • 这将在 lambda 中工作。当我们使用 API 网关直接代理 DDB 时,这将不起作用。
【解决方案2】:

您可以像使用 dynogels 一样使用 ODM,

https://github.com/clarkie/dynogels

我们大量使用它而不处理 dynamodb 语法。 这将 lambda 和语言混合在一起,但是当对象变大以执行映射时,它更容易处理。

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    今天添加了另一个选项。它仍然会涉及一个 lambda 步骤,但是..

    “适用于 JavaScript 的 Amazon DynamoDB DataMapper 是一个高级客户端,用于在 DynamoDB 中写入和读取结构化数据,构建在适用于 JavaScript 的 AWS 开发工具包之上。”

    https://aws.amazon.com/blogs/developer/introducing-the-amazon-dynamodb-datamapper-for-javascript-developer-preview/

    【讨论】:

      猜你喜欢
      • 2012-09-23
      • 1970-01-01
      • 2021-10-28
      • 2018-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-07
      • 2019-02-20
      相关资源
      最近更新 更多