AWS Lambda 関数と連携するように、Amazon API Gateway プロキシ統合を構成しました。API を呼び出すと、設定エラーまたは 50 2ステータスコードが表示されます。どのように解決すればよいですか?

多くの場合、Lambda 関数の応答の形式が、これらのエラーの原因です。形式が問題の場合は、ログに次のようなメッセージが表示されます。

Thu Dec 08 01:13:00 UTC 2016 : Execution failed due to configuration error: Malformed Lambda proxy response
Thu Dec 08 01:13:00 UTC 2016 : Method completed with status: 502

API ゲートウェイが Lambda 関数の応答を処理するには、応答が次の形式の JSON である必要があります。

{
    "isBase64Encoded": true|false,
    "statusCode": httpStatusCode,
    "headers": { "headerName": "headerValue", ... },
    "body": "..."
}

詳細については、「プロキシ統合のための Lambda 関数の出力形式」を参照してください。

  1. API ゲートウェイコンソールからのログ出力を確認するか、Amazon CloudWatch コンソールで API ゲートウェイログイベントを表示します
  2. ログで、Lambda 関数の API に対する応答の形式を確認してください。応答が正しい形式の JSON ではない場合は、形式を見直してください。

応答が正しい形式の Node.js 関数の例を、次に示します。

exports.handler = (event, context, callback) => {

    var responseBody = {
        "key3": "value3",
        "key2": "value2",
        "key1": "value1"
    };

    var response = {
        "statusCode": 200,
        "headers": {
            "my_header": "my_value"
        },
        "body": JSON.stringify(responseBody),
        "isBase64Encoded": false
    };
    callback(null, response);
};

注 : 関数が他のプログラミング言語で書かれている場合は、その言語のプログラミング解説を参照してください。関数が正しい形式で応答を返すことを確認してください。

この応答では、次の 4 つのフィールドがあります。statusCodeheadersbody、およびisBase64Encoded

  • statusCode は、API メソッドの呼び出し元に返される API ゲートウェイが解釈する整数です。
  • headers は、収集され、API ゲートウェイの応答とともに戻されます。
  • body フィールドは、もし JSON を返すのであれば、それ以上のレスポンスの問題を防ぐために文字列に変換されなければなりません。JSON.stringify を使用すると、Node.js 関数でこれを処理できます。他のランタイムでは異なる解決方法が必要ですが、概念は同じです。
  • バイナリデータを扱う場合、isBase64Encoded フィールドは重要です。このフィールドを使用しない場合は、偽のブール値に設定する必要があります。

このページは役に立ちましたか? はい | いいえ

AWS サポート ナレッジ センターに戻る

サポートが必要ですか? AWS サポートセンターをご覧ください

公開日 : 2017 年 10 月 16 日

更新 : 2019 年 01 月 21 日