API Gateway - Lambda Proxy - Внутренняя ошибка сервера Python - PullRequest
0 голосов
/ 08 декабря 2018

У меня проблемы с анализом входных данных из события в Python 3.7.

def lambda_handler(event, context):
 image = event['image']
 siteid = int(event['siteid'])
 camid = int(event['camid'])

Ошибка:

Lambda execution failed with status 200 due to customer function error: 'image'.

Модель запроса метода:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "UploadModel",
  "type": "object",
  "properties": {
    "image": { "type": "string" },
    "siteid": { "type": "string" },
    "camid": { "type": "string" }
    }
}

ИспользованиеИнтеграция с лямбда-прокси: ON

Отлично работает прямо с лямбда-консоли с простым массивом ввода:

{
    "image": "xxxx"
    "siteid": 2,
    "camid": 1
}

Функция отклика:

def response(message, status_code):
    return {
        "statusCode": str(status_code),
        "body": json.dumps(message),
        "headers": {
            "Content-Type": "application/json",
            "Access-Control-Allow-Origin": '*'
            },
        }

1 Ответ

0 голосов
/ 08 декабря 2018

Вы принимаете неправильную форму для объекта event.

Когда вы используете Lambda Proxy Integration, event принимает следующую форму ...

{
    "resource": "Resource path",
    "path": "Path parameter",
    "httpMethod": "Incoming request's method name"
    "headers": {String containing incoming request headers}
    "multiValueHeaders": {List of strings containing incoming request headers}
    "queryStringParameters": {query string parameters }
    "multiValueQueryStringParameters": {List of query string parameters}
    "pathParameters":  {path parameters}
    "stageVariables": {Applicable stage variables}
    "requestContext": {Request context, including authorizer-returned key-value pairs}
    "body": "A JSON string of the request payload."
    "isBase64Encoded": "A boolean flag to indicate if the applicable request payload is Base64-encode"
}

Ссылка: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-input-format

Модель вашего запроса применима только к body из event.

Чтобы проиллюстрировать это, попробуйте использовать этот обработчик, который возвращает event в ответ:

def lambda_handler(event, context):
    return {
        "statusCode": str(status_code),
        "body": json.dumps(message),
        "headers": {
            "Content-Type": "application/json",
            "Access-Control-Allow-Origin": '*'
            },
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...