Привет, мне нужно получить элемент из Dynamodb через API-шлюз, и я настроил ресурсы следующим образом:
Я настраиваю метод интеграции, как показано на следующем рисунке:
И шаблон сопоставления выглядит следующим образом:
Но когда я тестирую 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
1 ответ
Я следовал этим двум руководствам и выполнил get на моей таблице DynamoDB.
Моя таблица имеет имя первичного ключа "pk". Учебники: видео и Блог
- Если я напишу свое тело запроса динамо, как ваше, оно не получит никакой записи.
{
"TableName": "apiG",
"Key": {
"pk": {
"S": "key1"
}
}
}
Но если я сформирую свой запрос как
{
"TableName": "apiG",
"PrimaryKey": "pk",
"KeyConditionExpression": "pk = :v1",
"ExpressionAttributeValues": {
":v1": {
"S": "key1"
}
}
}
Я получаю желаемый ответ от DynamoDB.
- Ваша ошибка выглядит так, будто у вас есть некоторая путаница в ответе интеграции и ответе метода. В простейшей форме оставьте ответ вашего метода по умолчанию, т. е. «Статус HTTP: 200 моделей: application/json => Empty», и оставьте свой ответ интеграции, так как консоль шлюза API создаст его для вас.
Это гарантирует, что ваши выходные данные 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"
}
]
}
P.S. у меня была таблица динамо с именем «apiG» с основным ключом «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"
Ура!
Похожие вопросы
Новые вопросы
amazon-dynamodb
Amazon DynamoDB - это закрытая база данных ключей и значений с закрытым исходным кодом, оптимизированная для горизонтального масштабирования. Это полностью управляемая, многорегиональная, многопользовательская база данных со встроенной защитой, резервным копированием и восстановлением, а также кэшированием в памяти для интернет-приложений. DynamoDB размещается на AWS, но также имеет возможность локального развертывания только для разработки и функционального тестирования. Используется на amazon.com.