AWSラムダ関数には、パラメーターのように「イベント」と「コンテキスト」があります。「イベント」はjsonオブジェクトです。
API(AWS API Gatewayを介したマネージャー)をラムダ関数に接続して、イベントのjsonをhttp POSTの本文として送信します。これは惨めに失敗し、ラムダ関数に送信された空のイベントがあるかもしれないという兆候があります。
APIを介して「イベント」を送信するにはどうすればよいですか?
これは私のラムダ関数のコードです:
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', },
}
ラムダ関数でテストを実行すると、次のログが得られます。
START RequestId: x Version: $LATEST
Received event:
<type 'dict'>
{
"Id": "1"
}
END RequestId: x
と答え
{
"body": null,
"headers": {
"Content-Type": "application/json"
},
"statusCode": "400"
}
しかし、API Gatewayテスト関数を介して実行すると、
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
これを尋ねるのにより良い場所はstackoverflowサイトでしょう。
—
bravokeyl
Lambda関数をどのように呼び出しますか?APIのCloudwatchログを有効にして、ラムダ関数のログも確認します。これにより、何が問題なのかがわかります。
—
bravokeyl
あなたのコーディングの努力は望ましい結果を与えないと言います。コードを表示してください。
—
mico
@Bex KeyErrorは、イベントパラメータにキー 'Id'がないことを意味します。「API Gatewayを介して実行する」とはどういう意味ですか?あなたはその部分で間違いを犯します。
—
mico
その部分にもあなたの努力を示してください。
—
mico