AWS API-шлюз - сопоставление VTL между входом и выходом в службу лямбда-интеграции - PullRequest
0 голосов
/ 19 марта 2020

Я передаю строку json шлюзу API, который затем требуется изменить и передать нескольким другим лямбдам. Требуется скрыть некоторую информацию от пользователя и упростить ввод, поэтому мне нужно использовать VTL для ее преобразования.

Вход Json:

{
    "name": "black_hole", 
    "file_type": "text", 
    "file_name": "lecture_slides"
}

Требуемый вывод JSON в лямбды:

{
    "product": "strategy",
    "sub_product": "experts",
    "content": {
        "method": "POST",
        "org_name": "physoc",
        "topic": "physics",
        "category": "training",
        "name": "black_hole",
        "file_type": "text",
        "file_name": "lecture_notes"
    }
}

Вот мои VTL-попытки выполнить преобразование, приведенное ниже .

#set($data = $input.json('$'))

{
    "product": "strategy",
    "sub_product": "experts",
    "content": {
        "method": "$util.urlEncode($context.httpMethod)",
        "expert": "$util.urlEncode($method.request.path.org_name)",
        "topic": "$util.urlEncode($method.request.path.topic)",
        "category": "training",
        "name": "$util.urlEncode($input.json('$.name'))",
        "file_type": "$util.urlEncode($method.request.body.file_type)",
        "file_name": "$util.urlEncode($data.name)"
    }
}

VTL, который я написал для полей name, file_type, file_name, но все они отображаются пустыми:

{
    'method': 'POST', 
    'expert': 'expert_name', 
    'topic': 'topic', 
    'category': 'training', 
    'name': '', 
    'file_type': '', 
    'file_name': ''
}

Я могу получить весь ввод, но не могу извлечь переменные из $input.json('$') строка:

'%22%7B%5C%22name%5C%22%3A+%5C%22black_hole%5C%22%2C+%5C%22file_type%5C%22%3A+%5C%22text%5C%22%2C+%5C%22file_name%5C%22%3A+%5C%22lecture_notes%5C%22%7D%22'

Что я делаю не так?

...