Я следовал этим двум урокам и выполнил свою задачу в таблице DynamoDB.
Моя таблица имеет имя первичного ключа "pk". Обучающие программы: Видео & Блог
- Если я напишу свое тело запроса динамо, как ваше, оно не получит никакой записи
{
"TableName": "apiG",
"Key": {
"pk": {
"S": "key1"
}
}
}
Но если я сформирую свой запрос как
{
"TableName": "apiG",
"PrimaryKey": "pk",
"KeyConditionExpression": "pk = :v1",
"ExpressionAttributeValues": {
":v1": {
"S": "key1"
}
}
}
, я получу желаемый ответ от DynamoDB.
Ваша ошибка выглядит так, как будто вы перепутали ответ интеграции и ответ метода. В простейшей форме оставьте свой ответ метода по умолчанию, например «HTTP Status: 200 Models: application / json => Empty», и оставьте свой интеграционный ответ, поскольку консоль API Gateway создаст его для вас.
Это обеспечит отправку вывода DynamoDB без изменений в ваш браузер / вывод.
Я преобразовал свой вывод динамо с помощью следующего шаблона отображения в ответе интеграции.
#set($inputRoot = $input.path('$'))
{
"content": [
#foreach($elem in $inputRoot.Items) {
"key": "$elem.pk.S",
"value": "$elem.pv.S"
}#if($foreach.hasNext),#end
#end
]
}
, и он выдал следующий вывод.
{
"content": [
{
"key": "key1",
"value": "val1"
}
]
}
PS У меня была таблица динамо с именем 'apiG' с 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"
Ура!