Amazon dynamodb Api网关获取项dynamodb配置

Amazon dynamodb Api网关获取项dynamodb配置,amazon-dynamodb,aws-api-gateway,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

您好,我需要通过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

我遵循这两个教程,在dynamoDB表上执行了get

我的表有主键名“pk”。 教程:&

  • 如果我像你一样写我的迪纳摩请求体,它不会得到任何记录
  • 但是如果我像这样提出我的要求

    {
        "TableName": "apiG",
        "PrimaryKey": "pk",
        "KeyConditionExpression": "pk = :v1",
        "ExpressionAttributeValues": {
            ":v1": {
                "S": "key1"
            }
        }
    }
    
    我从dynamoDB得到了期望的响应

  • 您的错误看起来好像在集成响应和方法响应中有一些混淆。以最简单的形式,将方法响应保留为默认值,即“HTTP状态:200个模型:application/json=>为空”,并在API网关控制台为您创建集成响应时保留集成响应
  • 这将确保在不修改浏览器/输出的情况下发送DynamoDB输出

  • 我在集成响应中使用以下映射模板转换了dynamo输出
  • 它产生了如下输出

    {
      "content": [
        {
          "key": "key1",
          "value": "val1"
        }
      ]
    }
    
    另外,我有一个名为“apiG”的dynamo表,上面有primaryKey“pk”,并遵循我实验中导出的招摇。希望能有帮助

    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"
    

    干杯

    我遵循这两个教程,在dynamoDB表上执行了get

    我的表有主键名“pk”。 教程:&

  • 如果我像你一样写我的迪纳摩请求体,它不会得到任何记录
  • 但是如果我像这样提出我的要求

    {
        "TableName": "apiG",
        "PrimaryKey": "pk",
        "KeyConditionExpression": "pk = :v1",
        "ExpressionAttributeValues": {
            ":v1": {
                "S": "key1"
            }
        }
    }
    
    我从dynamoDB得到了期望的响应

  • 您的错误看起来好像在集成响应和方法响应中有一些混淆。以最简单的形式,将方法响应保留为默认值,即“HTTP状态:200个模型:application/json=>为空”,并在API网关控制台为您创建集成响应时保留集成响应
  • 这将确保在不修改浏览器/输出的情况下发送DynamoDB输出

  • 我在集成响应中使用以下映射模板转换了dynamo输出
  • 它产生了如下输出

    {
      "content": [
        {
          "key": "key1",
          "value": "val1"
        }
      ]
    }
    
    另外,我有一个名为“apiG”的dynamo表,上面有primaryKey“pk”,并遵循我实验中导出的招摇。希望能有帮助

    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"
    
    干杯