【问题标题】:AWS API Gateway store JSON to DynamoDBAWS API Gateway 将 JSON 存储到 DynamoDB
【发布时间】:2016-05-04 03:31:02
【问题描述】:

我在尝试使用 API Gateway 作为 DynamoDB 的代理时遇到问题。

如果我知道我想要存储的数据的结构,基本上它会很好用,但无论负载结构如何,我都无法使其动态化。

有许多网站解释了如何使用 API Gateway 作为 DynamoDB 的代理。 不过,我发现没有一个解释如何存储 JSON 对象。

基本上我将此 JSON 发送到我的 API 端点:

{
    "entryId":"abc",
    "data":{
        "key1":"123",
        "key2":123
    }
}

如果我使用以下模板进行映射,则数据会正确放入我的数据库中

{ 
    "TableName": "Events",
    "Item": {
        "entryId": {
            "S": "abc"
        },
        "data": {
            "M": {
              "key1": {
                "S": "123"
              },
              "key2": {
                "N": "123"
              }
            }
        }
    }
}

但是,我不知道“数据”的结构,因此为什么我希望映射是动态的,甚至更好的是,我想完全避免任何映射。

我设法让它变得动态,但我现在所有的条目都是字符串类型:

      "data": { "M" : {
      #foreach($key in $input.path('$.data').keySet())
      "$key" : {"S": "$input.path('$.data').get($key)"}#if($foreach.hasNext),#end
      #end }
              }

是否可以动态获取类型? 我还不太确定 API Gateway 映射是如何工作的。

感谢您的帮助。

赛博

【问题讨论】:

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


【解决方案1】:

在插入 Dynamodb 时,您不会避免某种映射。我建议使用 Lambda 函数而不是服务代理,以便在将数据映射到 Dynamodb 架构时为您提供更多控制和灵活性。

【讨论】:

  • 确实使用 Lambda 如果我没记错的话,我能够放置项目而不使用 put 而不是 putitem 映射它。但是我真的很想避免 lambda 只是因为映射问题,特别是因为我们想要处理大量条目并且我们希望避免触发尽可能多的 lambda 进程来运行
  • @Seb 你有没有设法解决这个问题?我有类似的情况,我们只是尝试使用 DynamoDB 作为原始数据的存储区域,然后再在其他地方进行处理。我试图在第一步中避免使用 lambda。
【解决方案2】:

您可以启用 CloudWatch 日志来验证预期转换后的负载。您还可以使用 AWS API Gateway 控制台中的测试调用功能来了解您的映射是如何工作的。

这是使用 Amazon API Gateway 作为 DynamoDB 代理的博客。 https://aws.amazon.com/blogs/compute/using-amazon-api-gateway-as-a-proxy-for-dynamodb/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多