API Gatewayのレスポンスボディを非同期Lambdaから返却する

AWS Lambdaで Node.js v8.10(LTS)が使用できるようになっており、Lambdaを新規作成すると、exports.handler が async関数になっています。

API Gatewayからこの最新のAsync な Lambda を呼んでいる場合、returnでobjectを返してやれば、HTTPレスポンスボディとなるようですね。

Node.js v8.10 でのAPI Gateway Lambda スケルトン:

exports.handler = async (event) => {
    var response = {
     param: event, err: null, data: null, };
    try {
        response.data = await foo(event);
    } catch (err) {
        response.err = err;
    }
    return response;//これがレスポンスボディ
};

v6.10の時は、ハンドラーに渡されるcallbackを呼び出していたのですが、もしかしてPromiseを解決した値がレスポンスボディになっていたのか?今更だけど。

exports.handler = (event, context, callback) => {
    var response = {
     param: event, err: null, data: null, };
    foo(event).then( data => {
     response.data = data;
        callback(null, response);
    }).catch( err => {
     response.err = err;
        callback(null, response);
    });
};

0 件のコメント: