AWS Lambda: невозможно получить доступ к событию ['param'] через URL, но оно работает на API GW Test - PullRequest
0 голосов
/ 06 ноября 2019
import json

def lambda_handler(event, context):
    return {
        "statusCode": 200,
        "headers": {"Content-Type": "application/json"},
        "body": json.dumps(event['param'])
    }

Я не уверен, что делаю не так. Я успешно настроил API-шлюз, лямбда-функцию Python, правильный DNS через Route53 и действительный сертификат TLS ...

Я могу получить доступ к своей лямбде через вызов mydomain.com/lambda, но я не получаю никаких параметров дляпройти, только эта ошибка. Уже пять часов пытаюсь.

При вызове через mydomain.com/lambda

 errorMessage   "'param'"
    errorType   "KeyError"
    stackTrace  
    0   "  File \"/var/task/lambda_function.py\", line 7, in lambda_handler\n    \"body\": json.dumps(event['param'])\n"

При вызове через "Тест" API шлюза (все здесь хорошо)

    Execution log for request 
    Tue Nov 05 22:42:47 UTC 2019 : Starting execution for request:
    Tue Nov 05 22:42:47 UTC 2019 : HTTP Method: GET, Resource Path: /
    Tue Nov 05 22:42:47 UTC 2019 : Method request path: {}
    Tue Nov 05 22:42:47 UTC 2019 : Method request query string: {}
    Tue Nov 05 22:42:47 UTC 2019 : Method request headers: {}
    Tue Nov 05 22:42:47 UTC 2019 : Method request body before transformations: 
    Tue Nov 05 22:42:47 UTC 2019 : Endpoint request URI: 
    Tue Nov 05 22:42:47 UTC 2019 : Endpoint request headers: {x-amzn-lambda-integration-tag=Authorization=...[TRUNCATED]
    Tue Nov 05 22:42:47 UTC 2019 : Endpoint request body after transformations: 
    {
      "param" : "foo"
    }
    Tue Nov 05 22:42:47 UTC 2019 : Sending request to 
    Tue Nov 05 22:42:47 UTC 2019 : Received response. Status: 200, Integration latency: 36 ms
    Tue Nov 05 22:42:47 UTC 2019 : Endpoint response headers: [...]
    Tue Nov 05 22:42:47 UTC 2019 : Successfully completed execution
    Tue Nov 05 22:42:47 UTC 2019 : Method completed with status: 200

И, наконец, успех (через «Тест» API Gateway)

{
  "statusCode": 200,
  "headers": {
    "Content-Type": "application/json"
  },
  "body": "\"foo\""
}

Как заставить его работать через URL? Я пытаюсь получить некоторые параметры заголовка от клиента (браузера), но пошагово учиться. Кажется, я даже не могу получить что-либо, чтобы пройти от API Gateway к Lambda при вызове через URL, но почему? Что я не получаю здесь концептуально? (

1 Ответ

0 голосов
/ 06 ноября 2019

Я настроил все правильно, но не знал, что мне пришлось заново развернуть API, чтобы изменения произошли публично.

Это был ответ: снова разверните API.

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