Api网关获取item dynamodb配置

ale*_*rea 3 amazon-dynamodb aws-api-gateway

您好,我需要通过 api 网关从 dynamodb 获取一个项目,并且我配置如下资源:

资源截图

我配置集成方法如下图所示:

在此输入图像描述

映射模板是这样的: 在此输入图像描述

但是当我测试 apigateway 启动时出现此错误

Execution failed due to configuration error:
No match for output mapping and no default output mapping configured.
Endpoint Response Status Code: 200
Gateway response type: API_CONFIGURATION_ERROR with status code: 500
Run Code Online (Sandbox Code Playgroud)

小智 7

我按照这两个教程对我的 dynamoDB 表执行了 get 操作。

我的表有主键名称“pk”。教程:视频博客

  1. 如果我像你一样编写我的发电机请求正文,它不会获取任何记录
{
    "TableName": "apiG",
    "Key": {
    "pk": {
    "S": "key1"
    }
    }
}
Run Code Online (Sandbox Code Playgroud)

但如果我提出我的要求

{
    "TableName": "apiG",
    "PrimaryKey": "pk",
    "KeyConditionExpression": "pk = :v1",
    "ExpressionAttributeValues": {
        ":v1": {
            "S": "key1"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我从 dynamoDB 得到了所需的响应。

  1. 您的错误看起来像是您的集成响应和方法响应中存在一些混淆。在最简单的形式中,将您的方法响应保留为默认值,即“HTTP Status: 200 Models: application/json => Empty”,并保留您的集成响应,因为 API Gateway 控制台会为您创建它。

这将确保您的 DynamoDB 输出在不修改的情况下发送到您的浏览器/输出。

  1. 我在集成响应中使用以下映射模板转换了发电机输出。
#set($inputRoot = $input.path('$'))
{
    "content": [
        #foreach($elem in $inputRoot.Items) {
            "key": "$elem.pk.S",
            "value": "$elem.pv.S"
        }#if($foreach.hasNext),#end
    #end
    ]
}
Run Code Online (Sandbox Code Playgroud)

它产生了以下输出。

{
  "content": [
    {
      "key": "key1",
      "value": "val1"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

PS 我有一个名为“apiG”的发电机表,其主键为“pk”,并遵循我的实验中导出的 swagger。希望能帮助到你。

openapi: "3.0.1"
info:
  title: "dynamoProxy"
  version: "2020-05-01T06:45:38Z"
servers:
- url: "https://aaaaaaaaaa.execute-api.us-east-2.amazonaws.com/{basePath}"
  variables:
    basePath:
      default: "/test"
paths:
  /db:
    get:
      responses:
        200:
          description: "200 response"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Empty"
      x-amazon-apigateway-integration:
        credentials: "arn:aws:iam::111111111111:role/apiGddbRole"
        uri: "arn:aws:apigateway:us-east-2:dynamodb:action/Query"
        responses:
          default:
            statusCode: "200"
            responseTemplates:
              application/json: "#set($inputRoot = $input.path('$'))\n{\n    \"content\"\
                : [\n        #foreach($elem in $inputRoot.Items) {\n            \"\
                key\": \"$elem.pk.S\",\n            \"value\": \"$elem.pv.S\"\n  \
                \      }#if($foreach.hasNext),#end\n\t#end\n    ]\n}"
        passthroughBehavior: "when_no_templates"
        httpMethod: "POST"
        requestTemplates:
          application/json: "{\n    \"TableName\": \"apiG\",\n    \"PrimaryKey\":\
            \ \"pk\",\n    \"KeyConditionExpression\": \"pk = :v1\",\n    \"ExpressionAttributeValues\"\
            : {\n        \":v1\": {\n            \"S\": \"key1\"\n        }\n    }\n\
            }"
        type: "aws"
components:
  schemas:
    Empty:
      title: "Empty Schema"
      type: "object"
Run Code Online (Sandbox Code Playgroud)

干杯!