Sự kiện trên mạng của chức năng lambda AWS là gì và làm cách nào để gửi nó qua API Gateway?


7

Hàm lambda AWS có "sự kiện" và "bối cảnh" như trong các tham số. "Sự kiện" là một đối tượng json.

Tôi cố gắng kết nối API (trình quản lý thông qua Cổng API AWS) với chức năng lambda của mình, gửi json của sự kiện dưới dạng nội dung của http POST. Điều này thất bại thảm hại, và tôi chỉ có một số dấu hiệu cho thấy có thể có một sự kiện trống được gửi đến hàm lambda.

Tôi nên gửi "sự kiện" thông qua API như thế nào?

Đây là mã của hàm lambda của tôi:

from __future__ import print_function

import boto3
import json
import time

print('Loading function')

def lambda_handler(event, context):
    print("Received event: ")
    print(type(event))
    print(""+json.dumps(event, indent=2))

    id = event['Id']
    dynamo = boto3.resource('dynamodb').Table('Table1')
    dynamo.put_item( 
        Item = {
        'Button' : int(id),
        'Time' : int(time.time()),
    })
    return {
        'statusCode' : '400',
        'body' : null,
        'headers' : { 'Content-Type': 'application/json', },
    }

Chạy thử nghiệm trên hàm lambda sẽ đưa ra nhật ký sau:

START RequestId: x Version: $LATEST
Received event: 
<type 'dict'>
{
  "Id": "1"
}
END RequestId: x

và câu trả lời

{
   "body": null,
   "headers": {
     "Content-Type": "application/json"
  },
  "statusCode": "400"
}

nhưng chạy nó thông qua chức năng kiểm tra API Gateway mang lại

Tue May 16 15:54:27 UTC 2017 : Endpoint response body before transformations: 
  {"stackTrace": [["/var/task/lambda_function.py", 12, "lambda_handler", 
   "id = event['Id']"]], "errorType": "KeyError", "errorMessage": "'Id'"}
Tue May 16 15:54:27 UTC 2017 : Endpoint response headers: 
  {x-amzn-Remapped-Content-Length=0, x-amzn-RequestId=x, 
   Connection=keep-alive, Content-Length=153,
   X-Amz-Function-Error=Unhandled, Date=Tue, 16 May 2017 15:54:27 GMT, 
   X-Amzn-Trace-Id=root=x;sampled=0, Content-Type=application/json}
Tue May 16 15:54:27 UTC 2017 : Execution failed due to configuration 
   error: Malformed Lambda proxy response
Tue May 16 15:54:27 UTC 2017 : Method completed with status: 502

2
Nơi tốt hơn để hỏi điều này sẽ là trang web stackoverflow.
bravokeyl

1
Làm thế nào bạn gọi hàm Lambda? Bật nhật ký đám mây cho API và kiểm tra, đồng thời kiểm tra nhật ký cho chức năng lambda, điều này sẽ cho bạn ý tưởng về những gì sai.
bravokeyl

Bạn nói rằng nỗ lực mã hóa của bạn không mang lại kết quả mong muốn. Xin vui lòng hiển thị mã.
mico

@Bex KeyError có nghĩa là khóa 'Id' bị thiếu trong tham số sự kiện. Ý bạn là gì khi "chạy nó qua API Gateway" chính xác? Bạn mắc lỗi về phần đó.
mico

Thể hiện nỗ lực của bạn về phần đó quá.
mico

Câu trả lời:


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.