#python #amazon-web-services #aws-lambda #graphql #aws-appsync
#python #amazon-веб-сервисы #aws-lambda #graphql #aws-appsync
Вопрос:
Я новичок в AWS и нуждаюсь в совете. У меня есть GraphQL
схема, описанная в AppSync
. Схема проста, у нее есть только один Query
вызов getEmployees
. В качестве средства разрешения этого запроса я использую AWS Lambda
функцию на Python. Эта функция AWS Lambda работает без каких-либо проблем. В журналах нет ошибок. Когда я делаю запрос, я всегда получаю пустые нули. В чем может быть проблема? Что я пропустил?
Схема GraphQL в AppSync:
type Employees {
employeeId: String!
employeeFirstName: String
employeeLastName: String
}
type EmployeesPayload {
pagingState: String
employees: [Employees]
}
type Query {
getEmployees(organizationId: String!, fetchSize: Int!, pagingState: String): EmployeesPayload
}
schema {
query: Query
}
Функция AWS Lambda в Python:
def lambda_handler(event, context):
organization_id = event['arguments']['organizationId']
fetch_size = event['arguments']['fetchSize']
paging_state = event['arguments']['pagingState']
# Business logic
response = json.dumps(
{
"pagingState": "c76f05f9-337d-44dc-b131-c1dfee3ceefb",
"employees": [
{
"employeeId": "bd811630-0d42-49cd-8d63-7679d9eb96bb",
"employeeFirstName": "James",
"employeeLastName": "Bond"
}
]
},
indent=4,
sort_keys=True,
ensure_ascii=False,
default=utils.json_serializer
)
return response
Я делаю такой запрос:
query MyQuery {
getEmployees(organizationId: "5d354323-8b47-447e-8bc7-67dae57248b0", fetchSize: 5, pagingState: null) {
pagingState
employees {
employeeId
employeeFirstName
employeeLastName
}
}
}
Ответ:
{
"data": {
"getEmployees": {
"pagingState": null,
"employees": null
}
}
}
PS В настройках AppSync я отключил шаблон сопоставления запросов и ответов.
Ответ №1:
Ну, наконец-то я нашел ответ. С помощью проб и ошибок я понял, что AWS Lambda-функциям не нужно сериализовать данные в JSON. Стерилизация обрабатывается самим AppSync.
def lambda_handler(event, context):
organization_id = event['arguments']['organizationId']
fetch_size = event['arguments']['fetchSize']
paging_state = event['arguments']['pagingState']
# Business logic
response = {
"pagingState": "c76f05f9-337d-44dc-b131-c1dfee3ceefb",
"employees": [
{
"employeeId": "bd811630-0d42-49cd-8d63-7679d9eb96bb",
"employeeFirstName": "James",
"employeeLastName": "Bond"
}
]
}
return response