AWS Lambdaメモ -ハンドラの引数eventの中身-
今回はLambda関数として実行されるハンドラの引数 event についてのメモ。
※Node.jsでLambda関数を作成する場合を想定しています。
間違っている場合はご指摘いただけると幸いです。
event が何者なのか分からない
Lambda関数の作成はNode.jsに落ち着いたのですが、 NodeでLambda関数を作成する場合には以下のような引数を3つ受け取るハンドラを定義する必要があります。
exports.myHandler = (event, context, callback) => { // 処理 }
これら3つの引数について、公式では以下のように説明されています。
- event — AWS Lambda はこのパラメーターを使用してイベントデータをハンドラーに渡します。
- context — AWS Lambda はこのパラメーターを使用して、実行中の Lambda 関数のランタイム情報をハンドラーに提供します。詳細については、「Context オブジェクト (Node.js)」を参照してください。
- callback – コールバックオプションは呼び出し元に情報を返すために使用できます。使用しない場合戻り値は null です。詳細については、「コールバックパラメーターを使用する」を参照してください。
Lambda 関数ハンドラー (Node.js) - より引用
「何言ってる分からねぇ...。結局 event って何者。」
静的型付け言語大好きマンなので、正体不明の値が来るのがモヤっとするといいますか...。
結論
先に結論を述べてしまうと、Lambda関数の呼び出し元によって異なる です。
※型としては object 型になるようです。(要は何でも型)
呼び出し元によって異なる、とは
Lambda関数は何かをキッカケにして呼び出されるので、必ず呼び出し元が存在します。
呼び出し元の例で言えば API Gateway であったり、DynamoDB であったり。
(Lambdaでは、これらの呼び出し元を イベントソース と呼んでいるようです)
- event — AWS Lambda はこのパラメーターを使用してイベントデータをハンドラーに渡します。
イベントソースのから渡されるデータ、なので イベントデータ という解釈をしています。
今回はイベントソースとして API Gateway を例に挙げます。
※ API Gateway は、RESTful APIを作成するサービスです。
API Gateway の場合に設定される event の中身
イベントソースを API Gateway にした場合、ハンドラの引数 event に設定されるのは
API Gateway で定義した「本体マッピングテンプレート」になるようです。

{ "method": "$context.httpMethod", "pathParams": "$input.params('userId')", "body": $input.json('$') }
と定義しており、
- 1行目はHTTPメソッド名
- 2行目はパス・クエリ文字・ヘッダーからパラメータが
userIdの値を取得 - 3行目はボディ部のJSONを取得
となっています。
仮にこのAPIを /app/{userId} という形式でアクセス可能にし、以下のLambda関数を実行させるとします。
exports.handler = (event, context, callback) => { console.log("event type:", typeof event); console.log("event JSON:", JSON.stringify(event, null, 2)); callback(null, 'Hello from Lambda'); };
- POSTメソッド。
- URLは
/app/0とする。 - 以下のJSONをボディ部に含める。
{ "name": "Jane", "age": 20 }
呼び出した結果のログは以下の通り。
2018-01-11T15:21:14.555Z xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx event type: object
2018-01-11T15:21:14.559Z xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx event JSON:
{
"method": "POST",
"pathParams": "0",
"body": {
"name": "Jane",
"age": 20
}
}
ちゃんとテンプレートに定義した形式で event にマッピングされています。
イベントソースによって設定値を調べる必要がある
他にも DynamoDB や SNS 、S3、Kinesis などからLambda関数を呼び出すことが可能ですが、
呼び出し元のイベントソースによって event に設定される中身は異なります。
そのため、event にどのような値が設定されるかは都度調べる必要があります。
まとめ
eventは、イベントソースから渡されるデータが設定される。eventは、object型(何でも型)である。API Gatewayの場合には「本体マッピングテンプレート」で定義した内容が設定される。- イベントソースが異なれば、
eventの中身も異なる。(ので都度調べる必要がある)
- イベントソースが異なれば、