Я нахожу эту странную проблему, когда AWS правильно передает параметры URL-строки в функцию Lambda, но в API-шлюзе происходит сбой, только когда Lambda запускает функцию-обработчик Python, которая вызывает
KeywordSearch(keyword,page,RPP)
который передает 3 переменные в keywordSearch.В лямбда-IDE-тесте он работает без проблем и выводит все 3 переменные, которые отображаются в журналах как
InsideKeywordSearch, Vars=:
keyword:
bombing
page:
1
RPP:
10
Но когда я запускаю тест API-шлюза, журнал показывает, что переменная не передается вФункция, как видно из журнала, не показывает переменную для RPP или Page.
Ключевое слово передается только.Я не правильно определяю функцию?это работает в лямбде, почему не API-шлюз, если это так?Вот фрагмент кода.
Вызов функции
def handler(event, context):
print('Inside Handler Funciton')
keyword = event.get('search_keyword', None)
id = event.get('id', None)
RPP = event.get('RPP', 10)
page = event.get('page', 1)
#get event variables, if passed and filter bad input
print("keyword")
print(keyword)
print("id")
print(id)
print('RPP')
print(RPP)
print('page')
print(page)
if keyword is not None:
return keywordSearch(keyword,page,RPP)
elif id is not None:
return idSearch(id)
else:
return ""
Функция
def keywordSearch (keyword, page, RPP):
print('InsideKeywordSearch, Vars=: ')
print("keyword: ")
print(keyword)
print(" page: ")
print(page)
print(" RPP: ")
print(RPP)
Показывает лямбда-журналы
Журналы функций:
6d Version: $LATEST
Inside Handler Funciton
keyword
bombing
id
None
RPP
10
page
1
InsideKeywordSearch, Vars=:
keyword:
bombing
page:
1
RPP:
10
[INFO] 2018-06-30T03:04:56.240Z 5dc7a2cc-7c12-11e8-8f39-f5112d2e976d SUCCESS: Connection to RDS mysql instance succeeded
Шлюз APIвызов показывает
{
"errorMessage": "unsupported operand type(s) for -: 'str' and 'int'",
"errorType": "TypeError",
"stackTrace": [
[
"/var/task/app.py",
144,
"handler",
"return keywordSearch(keyword,page,RPP)"
],
[
"/var/task/app.py",
93,
"keywordSearch",
"sql = f\"SELECT attackid, SUM(MATCH(attack_fulltext) AGAINST('%{keyword}%' IN BOOLEAN MODE)) as score FROM search_index WHERE MATCH(attack_fulltext) AGAINST('%{keyword}%' IN BOOLEAN MODE) GROUP BY attackid ORDER BY score DESC Limit { ((page-1)*RPP) },{(RPP)};\""
]
]
}
, который говорит мне, что он не передает переменные, потому что строка SQL становится недействительной.