AWS Лямбда POST в DynamoDB с APIGateway в Python - PullRequest
0 голосов
/ 22 апреля 2020

Я работаю над API для отправки данных в DynamoDB, используя AWS шлюз API и AWS Lambada. Проблема в том, что когда я использую тестовый сценарий, он работает нормально, но не то же самое в Postman или любых других внешних AWS API-сервисах.

import boto3
import uuid

def lambda_handler(event, context):
    # this will create dynamodb resource object and
    # here dynamodb is resource name
    client = boto3.resource('dynamodb')

    title = event['title']
    #generte UUID 
    recordId = str(uuid.uuid4())

    # this will search for dynamoDB table 
    # your table name may be different
    table = client.Table("smsapi")
    print(table.table_status)

    #Creating an Item with a unique id and with the passed title
    table.put_item(
        Item={
            'id' : recordId,
            'title' : title
        }
    )

    return recordId

В Почтальоне я получаю 502 Bad Gateway

POSTMAN API - response

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Это сообщение довольно часто встречается, когда у вас есть проблемы с интеграцией, например, неудача разрешений, неправильный формат и т. Д. c. Поэтому я не буду объяснять вам причину, я покажу вам, как найти эту проблему. Вы можете проверить такую ​​интеграцию с помощью консоли AWS. Go к вашему API на странице API Gateway, выберите метод, который вы хотите протестировать, и нажмите кнопку Test слева: enter image description here Здесь вы можете отправить тестовый запрос со всеми необходимыми параметрами и посмотреть подробный журнал интеграционного потока. Обычно сообщение об ошибке будет где-то внизу журнала. Вы также можете найти много деталей здесь, например, что было запросом и ответом до преобразования и так далее. enter image description here

0 голосов
/ 22 апреля 2020

Вероятная причина заключается в том, что интеграция прокси-сервера API Gateway использует другой формат 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"
}

Независимо от того, какую полезную нагрузку вы отправляете через шлюз API, она будет находиться в:

  • "body": "A JSON строка полезной нагрузки запроса."

Так что в вашей лямбда-функции вам нужно проанализировать полезную нагрузку body.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...